From: He Kuang <hekuang@huawei.com>
To: <peterz@infradead.org>, <mingo@redhat.com>, <acme@kernel.org>,
<alexander.shishkin@linux.intel.com>, <jolsa@redhat.com>,
<wangnan0@huawei.com>, <hekuang@huawei.com>,
<jpoimboe@redhat.com>, <ak@linux.intel.com>, <eranian@google.com>,
<namhyung@kernel.org>, <adrian.hunter@intel.com>,
<sukadev@linux.vnet.ibm.com>, <masami.hiramatsu.pt@hitachi.com>,
<tumanova@linux.vnet.ibm.com>, <kan.liang@intel.com>,
<penberg@kernel.org>, <dsahern@gmail.com>
Cc: <linux-kernel@vger.kernel.org>
Subject: [PATCH v3 4/7] perf tools: Promote proper messages for cross-platform unwind
Date: Thu, 12 May 2016 08:43:13 +0000 [thread overview]
Message-ID: <1463042596-61703-5-git-send-email-hekuang@huawei.com> (raw)
In-Reply-To: <1463042596-61703-1-git-send-email-hekuang@huawei.com>
Currently, perf script uses host unwind methods to parse perf.data
callchain info regardless of the target architecture. So we get wrong
result and no promotion when unwinding callchains of x86(32-bit) on
x86(64-bit) machine.
This patch shows proper error messages when we do remote unwind
x86(32-bit) on other machines.
Same thing for other platforms will be added in next patches.
Signed-off-by: He Kuang <hekuang@huawei.com>
---
tools/perf/config/Makefile | 6 ++++++
tools/perf/util/thread.c | 2 ++
tools/perf/util/unwind-libunwind.c | 33 +++++++++++++++++++++++++++++++++
tools/perf/util/unwind.h | 5 +++++
4 files changed, 46 insertions(+)
diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
index 1e46277..a86b864 100644
--- a/tools/perf/config/Makefile
+++ b/tools/perf/config/Makefile
@@ -345,6 +345,12 @@ ifeq ($(ARCH),powerpc)
endif
ifndef NO_LIBUNWIND
+ ifeq ($(feature-libunwind-x86), 1)
+ LIBUNWIND_LIBS += -lunwind-x86
+ $(call detected,CONFIG_LIBUNWIND_X86)
+ CFLAGS += -DHAVE_LIBUNWIND_X86_SUPPORT
+ endif
+
ifneq ($(feature-libunwind), 1)
msg := $(warning No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR);
NO_LIBUNWIND := 1
diff --git a/tools/perf/util/thread.c b/tools/perf/util/thread.c
index dfd00c6..244c4f6 100644
--- a/tools/perf/util/thread.c
+++ b/tools/perf/util/thread.c
@@ -186,6 +186,8 @@ void thread__insert_map(struct thread *thread, struct map *map)
{
map_groups__fixup_overlappings(thread->mg, map, stderr);
map_groups__insert(thread->mg, map);
+
+ unwind__get_arch(thread, map);
}
static int thread__clone_map_groups(struct thread *thread,
diff --git a/tools/perf/util/unwind-libunwind.c b/tools/perf/util/unwind-libunwind.c
index 63687d3..d464c35 100644
--- a/tools/perf/util/unwind-libunwind.c
+++ b/tools/perf/util/unwind-libunwind.c
@@ -680,3 +680,36 @@ int unwind__get_entries(unwind_entry_cb_t cb, void *arg,
return get_entries(&ui, cb, arg, max_stack);
}
+
+void unwind__get_arch(struct thread *thread, struct map *map)
+{
+ char *arch;
+ enum dso_type dso_type;
+
+ if (!thread->mg->machine->env)
+ return;
+
+ dso_type = dso__type(map->dso, thread->mg->machine);
+ if (dso_type == DSO__TYPE_UNKNOWN)
+ return;
+
+ if (thread->addr_space)
+ pr_debug("Thread map already set, 64bit is %d, dso=%s\n",
+ dso_type == DSO__TYPE_64BIT, map->dso->name);
+
+ arch = thread->mg->machine->env->arch;
+
+ if (!strcmp(arch, "x86_64")
+ || !strcmp(arch, "x86")
+ || !strcmp(arch, "i686")) {
+ pr_debug("Thread map is X86, 64bit is %d\n",
+ dso_type == DSO__TYPE_64BIT);
+ if (dso_type != DSO__TYPE_64BIT)
+#ifdef HAVE_LIBUNWIND_X86_SUPPORT
+ pr_err("target platform=%s is not implemented!\n",
+ arch);
+#else
+ pr_err("target platform=%s is not supported!\n", arch);
+#endif
+ }
+}
diff --git a/tools/perf/util/unwind.h b/tools/perf/util/unwind.h
index 12790cf..889d630 100644
--- a/tools/perf/util/unwind.h
+++ b/tools/perf/util/unwind.h
@@ -24,6 +24,7 @@ int libunwind__arch_reg_id(int regnum);
int unwind__prepare_access(struct thread *thread);
void unwind__flush_access(struct thread *thread);
void unwind__finish_access(struct thread *thread);
+void unwind__get_arch(struct thread *thread, struct map *map);
#else
static inline int unwind__prepare_access(struct thread *thread __maybe_unused)
{
@@ -32,6 +33,8 @@ static inline int unwind__prepare_access(struct thread *thread __maybe_unused)
static inline void unwind__flush_access(struct thread *thread __maybe_unused) {}
static inline void unwind__finish_access(struct thread *thread __maybe_unused) {}
+static inline void unwind__get_arch(struct thread *thread __maybe_unused,
+ struct map *map __maybe_unused) {}
#endif
#else
static inline int
@@ -51,5 +54,7 @@ static inline int unwind__prepare_access(struct thread *thread __maybe_unused)
static inline void unwind__flush_access(struct thread *thread __maybe_unused) {}
static inline void unwind__finish_access(struct thread *thread __maybe_unused) {}
+static inline void unwind__get_arch(struct thread *thread __maybe_unused,
+ struct map *map __maybe_unused) {}
#endif /* HAVE_DWARF_UNWIND_SUPPORT */
#endif /* __UNWIND_H */
--
1.8.5.2
next prev parent reply other threads:[~2016-05-12 8:46 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-12 8:43 [PATCH v3 0/7] Add support for remote unwind He Kuang
2016-05-12 8:43 ` [PATCH v3 1/7] perf tools: Set vdso name to vdso[64,32] depending on platform He Kuang
2016-05-12 10:06 ` Adrian Hunter
2016-05-13 8:51 ` [PATCH v3 1/7 UPDATE] perf tools: Find vdso with the consider of cross-platform He Kuang
2016-05-16 13:32 ` Arnaldo Carvalho de Melo
2016-05-17 7:34 ` Adrian Hunter
2016-05-17 7:33 ` Adrian Hunter
2016-05-17 9:04 ` [PATCH v3 1/7 UPDATE2] " He Kuang
2016-05-17 9:17 ` Adrian Hunter
2016-05-17 12:46 ` Arnaldo Carvalho de Melo
2016-06-15 13:34 ` Arnaldo Carvalho de Melo
2016-06-16 0:22 ` Hekuang
2016-06-16 13:00 ` Adrian Hunter
2016-06-16 16:33 ` Arnaldo Carvalho de Melo
2016-05-17 9:05 ` [PATCH v3 1/7 UPDATE] " Hekuang
2016-05-13 8:53 ` [PATCH v3 1/7] perf tools: Set vdso name to vdso[64,32] depending on platform Hekuang
2016-05-12 8:43 ` [PATCH v3 2/7] perf tools: Store vdso buildid unconditionally He Kuang
2016-05-12 13:09 ` Arnaldo Carvalho de Melo
2016-05-20 6:43 ` [tip:perf/urgent] perf symbols: " tip-bot for He Kuang
2016-05-12 8:43 ` [PATCH v3 3/7] perf tools: Remove the logical that skip buildid cache if symfs is given He Kuang
2016-05-12 13:09 ` Arnaldo Carvalho de Melo
2016-05-12 20:23 ` David Ahern
2016-05-12 20:33 ` Arnaldo Carvalho de Melo
2016-05-13 7:19 ` Hekuang
2016-05-13 14:27 ` David Ahern
2016-05-13 18:01 ` Arnaldo Carvalho de Melo
2016-05-14 8:19 ` [PATCH v3 3/7 UPDATE] perf tools: Add option for the path of buildid dsos under symfs He Kuang
2016-05-14 14:43 ` David Ahern
2016-05-16 1:30 ` Hekuang
2016-05-16 2:50 ` David Ahern
2016-05-16 6:40 ` Hekuang
2016-05-18 1:47 ` Hekuang
2016-05-18 1:51 ` David Ahern
2016-05-18 2:48 ` Hekuang
2016-05-18 3:04 ` David Ahern
2016-05-12 8:43 ` He Kuang [this message]
2016-05-12 8:43 ` [PATCH v3 5/7] perf callchain: Add support for cross-platform unwind He Kuang
2016-05-12 8:43 ` [PATCH v3 6/7] perf callchain: Support x86 target platform He Kuang
2016-05-12 8:43 ` [PATCH v3 7/7] perf callchain: Support aarch64 cross-platform He Kuang
2016-06-22 6:57 [PATCH 0/5] Fixes on perf unwind He Kuang
2016-06-22 6:57 ` [PATCH 1/5] perf unwind: Change macro names of perf register He Kuang
2016-06-26 10:56 ` [tip:perf/core] " tip-bot for He Kuang
2016-06-22 6:57 ` [PATCH 2/5] perf unwind: Fix wrongly used regs for x86_32 unwind He Kuang
2016-06-26 10:56 ` [tip:perf/core] " tip-bot for He Kuang
2016-06-22 6:57 ` [PATCH 3/5] perf unwind: Fix wrongly used regs for aarch64 unwind He Kuang
2016-06-26 10:57 ` [tip:perf/core] " tip-bot for He Kuang
2016-06-22 6:57 ` [PATCH 4/5] perf tools: Let python use correct gcc for build_ext He Kuang
2016-06-26 10:54 ` [tip:perf/core] " tip-bot for He Kuang
2016-06-22 6:57 ` [PATCH 5/5] perf tools: Fix NULL pointer deference when vdso not found He Kuang
2016-06-23 2:02 ` Wangnan (F)
2016-06-23 3:03 ` Hekuang
2016-06-23 12:07 ` Arnaldo Carvalho de Melo
2016-06-23 13:28 ` Arnaldo Carvalho de Melo
2016-06-26 10:55 ` [tip:perf/core] perf tools: Find right DSO taking into account if binary is 32 or 64-bit tip-bot for He Kuang
2016-06-23 13:30 ` [PATCH 0/5] Fixes on perf unwind Arnaldo Carvalho de Melo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1463042596-61703-5-git-send-email-hekuang@huawei.com \
--to=hekuang@huawei.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=ak@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=dsahern@gmail.com \
--cc=eranian@google.com \
--cc=jolsa@redhat.com \
--cc=jpoimboe@redhat.com \
--cc=kan.liang@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=masami.hiramatsu.pt@hitachi.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=penberg@kernel.org \
--cc=peterz@infradead.org \
--cc=sukadev@linux.vnet.ibm.com \
--cc=tumanova@linux.vnet.ibm.com \
--cc=wangnan0@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®