Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1412751 > unrolled thread
| Started by | He Kuang <hekuang@huawei.com> |
|---|---|
| First post | 2016-06-03 05:40 +0200 |
| Last post | 2016-06-08 09:40 +0200 |
| Articles | 20 — 5 participants |
Back to article view | Back to linux.kernel
[PATCH v9 00/14] Add support for remote unwind He Kuang <hekuang@huawei.com> - 2016-06-03 05:40 +0200
[PATCH v9 14/14] perf callchain: Support aarch64 cross-platform He Kuang <hekuang@huawei.com> - 2016-06-03 05:40 +0200
[tip:perf/core] perf callchain: Support aarch64 cross-platform tip-bot for He Kuang <tipbot@zytor.com> - 2016-06-08 11:00 +0200
[PATCH v9 06/14] perf tools: Separate local/remote libunwind config He Kuang <hekuang@huawei.com> - 2016-06-03 05:40 +0200
[tip:perf/core] perf unwind: Separate local/remote libunwind config tip-bot for He Kuang <tipbot@zytor.com> - 2016-06-08 10:50 +0200
[PATCH v9 11/14] perf tools: Change fixed name of libunwind__arch_reg_id to macro He Kuang <hekuang@huawei.com> - 2016-06-03 05:40 +0200
[tip:perf/core] perf unwind: Change fixed name of libunwind__arch_reg_id to macro tip-bot for He Kuang <tipbot@zytor.com> - 2016-06-08 11:00 +0200
[PATCH v9 09/14] perf tools: Export normalize_arch() function He Kuang <hekuang@huawei.com> - 2016-06-03 05:40 +0200
[tip:perf/core] perf tools: Export normalize_arch() function tip-bot for He Kuang <tipbot@zytor.com> - 2016-06-08 11:00 +0200
[PATCH v9 02/14] perf tools: Decouple thread->address_space on libunwind He Kuang <hekuang@huawei.com> - 2016-06-03 05:40 +0200
[tip:perf/core] perf unwind: Decouple thread->address_space on libunwind tip-bot for He Kuang <tipbot@zytor.com> - 2016-06-08 10:50 +0200
Re: [PATCH v9 00/14] Add support for remote unwind Jiri Olsa <jolsa@redhat.com> - 2016-06-03 09:10 +0200
Re: [PATCH v9 00/14] Add support for remote unwind Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-06-03 21:50 +0200
Re: [PATCH v9 00/14] Add support for remote unwind Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-06-03 23:10 +0200
Re: [PATCH v9 00/14] Add support for remote unwind Hekuang <hekuang@huawei.com> - 2016-06-04 07:50 +0200
Re: [PATCH v9 00/14] Add support for remote unwind Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-06-07 17:20 +0200
Re: [PATCH v9 00/14] Add support for remote unwind Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-06-07 17:20 +0200
Re: [PATCH v9 00/14] Add support for remote unwind Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-06-03 23:10 +0200
Re: [PATCH v9 00/14] Add support for remote unwind Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-06-07 21:50 +0200
Re: [PATCH v9 00/14] Add support for remote unwind Hekuang <hekuang@huawei.com> - 2016-06-08 09:40 +0200
| From | He Kuang <hekuang@huawei.com> |
|---|---|
| Date | 2016-06-03 05:40 +0200 |
| Subject | [PATCH v9 00/14] Add support for remote unwind |
| Message-ID | <rFO7L-6nc-9@gated-at.bofh.it> |
v8 url:
http://thread.gmane.org/gmane.linux.kernel/2233232
Currently, perf script uses host unwind methods(local unwind) to parse
perf.data callchain info regardless of the target architecture. So we
get wrong result and no promotion when do remote unwind on other
platforms/machines.
This patchset checks whether a dso is 32-bit or 64-bit according to
elf class info for each thread to let perf use the correct remote
unwind methods instead.
Only x86 and aarch64 is added in this patchset to show the work flow,
other platforms can be added easily.
We can see the right result for unwind info on different machines, for
example: perf.data recorded on i686 qemu with '-g' option and parsed
on x86_64 machine.
before this patchset:
hello 1219 [001] 72190.667975: probe:sys_close: (c1169d60)
c1169d61 sys_close ([kernel.kallsyms])
c189c0d7 sysenter_past_esp ([kernel.kallsyms])
b777aba9 [unknown] ([vdso32])
after:
(Add vdso into buildid-cache first by 'perf buildid-cache -a' and
libraries are provided in symfs dir)
hello 1219 [001] 72190.667975: probe:sys_close: (c1169d60)
c1169d61 sys_close ([kernel.kallsyms])
c189c0d7 sysenter_past_esp ([kernel.kallsyms])
b777aba9 __kernel_vsyscall ([vdso32])
b76971cc close (/lib/libc-2.22.so)
804842e fib (/tmp/hello)
804849d main (/tmp/hello)
b75d746e __libc_start_main (/lib/libc-2.22.so)
8048341 _start (/tmp/hello)
For using remote libunwind libraries, reference this:
http://thread.gmane.org/gmane.linux.kernel/2224430
and now we can use LIBUNWIND_DIR to specific custom dirctories
containing libunwind libs.
Acked-by: Jiri Olsa <jolsa@kernel.org> for most patches except:
v9:
- Change function unwind__register_ops() to static.
- Move up unwind__prepare_access() in thread__insert_map() and save
map_groups__remove() call.
- Enclose multiple line if/else into braces.
- Fix miss modified function declaration for unwind__prepare_access()
in patch 10.
Thanks.
He Kuang (14):
perf tools: Use LIBUNWIND_DIR for remote libunwind feature check
perf tools: Decouple thread->address_space on libunwind
perf tools: Introducing struct unwind_libunwind_ops for local unwind
perf tools: Move unwind__prepare_access from thread_new into
thread__insert_map
perf tools: Don't mix LIBUNWIND_LIBS into LIBUNWIND_LDFLAGS
perf tools: Separate local/remote libunwind config
perf tools: Rename unwind-libunwind.c to unwind-libunwind-local.c
perf tools: Extract common API out of unwind-libunwind-local.c
perf tools: Export normalize_arch() function
perf tools: Check the target platform before assigning unwind methods
perf tools: Change fixed name of libunwind__arch_reg_id to macro
perf tools: Introduce flag to separate local/remote unwind compilation
perf callchain: Support x86 target platform
perf callchain: Support aarch64 cross-platform
tools/perf/arch/arm/util/Build | 2 +-
tools/perf/arch/arm64/util/Build | 2 +-
tools/perf/arch/arm64/util/unwind-libunwind.c | 4 +-
tools/perf/arch/common.c | 2 +-
tools/perf/arch/common.h | 1 +
tools/perf/arch/x86/util/Build | 2 +-
tools/perf/arch/x86/util/unwind-libunwind.c | 6 +-
tools/perf/config/Makefile | 52 +-
tools/perf/util/Build | 3 +
tools/perf/util/libunwind/arm64.c | 35 ++
tools/perf/util/libunwind/x86_32.c | 37 ++
tools/perf/util/machine.c | 14 +-
tools/perf/util/thread.c | 13 +-
tools/perf/util/thread.h | 9 +-
tools/perf/util/unwind-libunwind-local.c | 697 ++++++++++++++++++++++++++
tools/perf/util/unwind-libunwind.c | 692 ++-----------------------
tools/perf/util/unwind.h | 22 +-
17 files changed, 919 insertions(+), 674 deletions(-)
create mode 100644 tools/perf/util/libunwind/arm64.c
create mode 100644 tools/perf/util/libunwind/x86_32.c
create mode 100644 tools/perf/util/unwind-libunwind-local.c
--
1.8.5.2
[toc] | [next] | [standalone]
| From | He Kuang <hekuang@huawei.com> |
|---|---|
| Date | 2016-06-03 05:40 +0200 |
| Subject | [PATCH v9 14/14] perf callchain: Support aarch64 cross-platform |
| Message-ID | <rFO7M-6nc-29@gated-at.bofh.it> |
| In reply to | #1412751 |
Support aarch64 cross platform callchain unwind.
Signed-off-by: He Kuang <hekuang@huawei.com>
---
tools/perf/arch/arm64/util/unwind-libunwind.c | 4 ++-
tools/perf/config/Makefile | 12 +++++++++
tools/perf/util/Build | 1 +
tools/perf/util/libunwind/arm64.c | 35 +++++++++++++++++++++++++++
tools/perf/util/unwind-libunwind.c | 4 +++
5 files changed, 55 insertions(+), 1 deletion(-)
create mode 100644 tools/perf/util/libunwind/arm64.c
diff --git a/tools/perf/arch/arm64/util/unwind-libunwind.c b/tools/perf/arch/arm64/util/unwind-libunwind.c
index a87afa9..c116b71 100644
--- a/tools/perf/arch/arm64/util/unwind-libunwind.c
+++ b/tools/perf/arch/arm64/util/unwind-libunwind.c
@@ -1,11 +1,13 @@
+#ifndef REMOTE_UNWIND_LIBUNWIND
#include <errno.h>
#include <libunwind.h>
#include "perf_regs.h"
#include "../../util/unwind.h"
#include "../../util/debug.h"
+#endif
-int libunwind__arch_reg_id(int regnum)
+int LIBUNWIND__ARCH_REG_ID(int regnum)
{
switch (regnum) {
case UNW_AARCH64_X0:
diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
index 34999fb..47e8f58 100644
--- a/tools/perf/config/Makefile
+++ b/tools/perf/config/Makefile
@@ -362,6 +362,18 @@ ifndef NO_LIBUNWIND
have_libunwind = 1
endif
+ ifeq ($(feature-libunwind-aarch64), 1)
+ $(call detected,CONFIG_LIBUNWIND_AARCH64)
+ CFLAGS += -DHAVE_LIBUNWIND_AARCH64_SUPPORT
+ LDFLAGS += -lunwind-aarch64
+ have_libunwind = 1
+ $(call feature_check,libunwind-debug-frame-aarch64)
+ ifneq ($(feature-libunwind-debug-frame-aarch64), 1)
+ msg := $(warning No debug_frame support found in libunwind-aarch64);
+ CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME_AARCH64
+ endif
+ endif
+
ifneq ($(feature-libunwind), 1)
msg := $(warning No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR);
NO_LOCAL_LIBUNWIND := 1
diff --git a/tools/perf/util/Build b/tools/perf/util/Build
index 7746e09..fced833 100644
--- a/tools/perf/util/Build
+++ b/tools/perf/util/Build
@@ -102,6 +102,7 @@ libperf-$(CONFIG_LIBDW_DWARF_UNWIND) += unwind-libdw.o
libperf-$(CONFIG_LOCAL_LIBUNWIND) += unwind-libunwind-local.o
libperf-$(CONFIG_LIBUNWIND) += unwind-libunwind.o
libperf-$(CONFIG_LIBUNWIND_X86) += libunwind/x86_32.o
+libperf-$(CONFIG_LIBUNWIND_AARCH64) += libunwind/arm64.o
libperf-$(CONFIG_LIBBABELTRACE) += data-convert-bt.o
diff --git a/tools/perf/util/libunwind/arm64.c b/tools/perf/util/libunwind/arm64.c
new file mode 100644
index 0000000..4fb5395
--- /dev/null
+++ b/tools/perf/util/libunwind/arm64.c
@@ -0,0 +1,35 @@
+/*
+ * This file setups defines to compile arch specific binary from the
+ * generic one.
+ *
+ * The function 'LIBUNWIND__ARCH_REG_ID' name is set according to arch
+ * name and the defination of this function is included directly from
+ * 'arch/arm64/util/unwind-libunwind.c', to make sure that this function
+ * is defined no matter what arch the host is.
+ *
+ * Finally, the arch specific unwind methods are exported which will
+ * be assigned to each arm64 thread.
+ */
+
+#define REMOTE_UNWIND_LIBUNWIND
+
+#define LIBUNWIND__ARCH_REG_ID(regnum) libunwind__arm64_reg_id(regnum)
+
+#include "unwind.h"
+#include "debug.h"
+#include "libunwind-aarch64.h"
+#include <../../../../arch/arm64/include/uapi/asm/perf_regs.h>
+#include "../../arch/arm64/util/unwind-libunwind.c"
+
+/* NO_LIBUNWIND_DEBUG_FRAME is a feature flag for local libunwind,
+ * assign NO_LIBUNWIND_DEBUG_FRAME_AARCH64 to it for compiling arm64
+ * unwind methods.
+ */
+#undef NO_LIBUNWIND_DEBUG_FRAME
+#ifdef NO_LIBUNWIND_DEBUG_FRAME_AARCH64
+#define NO_LIBUNWIND_DEBUG_FRAME
+#endif
+#include "util/unwind-libunwind-local.c"
+
+struct unwind_libunwind_ops *
+arm64_unwind_libunwind_ops = &_unwind_libunwind_ops;
diff --git a/tools/perf/util/unwind-libunwind.c b/tools/perf/util/unwind-libunwind.c
index c4d6388..2c3ec8c 100644
--- a/tools/perf/util/unwind-libunwind.c
+++ b/tools/perf/util/unwind-libunwind.c
@@ -6,6 +6,7 @@
struct unwind_libunwind_ops __weak *local_unwind_libunwind_ops;
struct unwind_libunwind_ops __weak *x86_32_unwind_libunwind_ops;
+struct unwind_libunwind_ops __weak *arm64_unwind_libunwind_ops;
static void unwind__register_ops(struct thread *thread,
struct unwind_libunwind_ops *ops)
@@ -37,6 +38,9 @@ int unwind__prepare_access(struct thread *thread, struct map *map)
if (!strcmp(arch, "x86")) {
if (dso_type != DSO__TYPE_64BIT)
ops = x86_32_unwind_libunwind_ops;
+ } else if (!strcmp(arch, "arm64") || !strcmp(arch, "arm")) {
+ if (dso_type == DSO__TYPE_64BIT)
+ ops = arm64_unwind_libunwind_ops;
}
if (!ops) {
--
1.8.5.2
[toc] | [prev] | [next] | [standalone]
| From | tip-bot for He Kuang <tipbot@zytor.com> |
|---|---|
| Date | 2016-06-08 11:00 +0200 |
| Subject | [tip:perf/core] perf callchain: Support aarch64 cross-platform |
| Message-ID | <rHHvc-6mU-21@gated-at.bofh.it> |
| In reply to | #1412752 |
Commit-ID: 057fbfb25cde4a368418f3f720cdc31d48800c4d
Gitweb: http://git.kernel.org/tip/057fbfb25cde4a368418f3f720cdc31d48800c4d
Author: He Kuang <hekuang@huawei.com>
AuthorDate: Fri, 3 Jun 2016 03:33:23 +0000
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 7 Jun 2016 15:13:35 -0300
perf callchain: Support aarch64 cross-platform
Support aarch64 cross platform callchain unwind.
Signed-off-by: He Kuang <hekuang@huawei.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ekaterina Tumanova <tumanova@linux.vnet.ibm.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Kan Liang <kan.liang@intel.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Pekka Enberg <penberg@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1464924803-22214-15-git-send-email-hekuang@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/arch/arm64/util/unwind-libunwind.c | 4 ++-
tools/perf/config/Makefile | 12 +++++++++
tools/perf/util/Build | 1 +
tools/perf/util/libunwind/arm64.c | 35 +++++++++++++++++++++++++++
tools/perf/util/unwind-libunwind.c | 4 +++
5 files changed, 55 insertions(+), 1 deletion(-)
diff --git a/tools/perf/arch/arm64/util/unwind-libunwind.c b/tools/perf/arch/arm64/util/unwind-libunwind.c
index a87afa9..c116b71 100644
--- a/tools/perf/arch/arm64/util/unwind-libunwind.c
+++ b/tools/perf/arch/arm64/util/unwind-libunwind.c
@@ -1,11 +1,13 @@
+#ifndef REMOTE_UNWIND_LIBUNWIND
#include <errno.h>
#include <libunwind.h>
#include "perf_regs.h"
#include "../../util/unwind.h"
#include "../../util/debug.h"
+#endif
-int libunwind__arch_reg_id(int regnum)
+int LIBUNWIND__ARCH_REG_ID(int regnum)
{
switch (regnum) {
case UNW_AARCH64_X0:
diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
index 34999fb..47e8f58 100644
--- a/tools/perf/config/Makefile
+++ b/tools/perf/config/Makefile
@@ -362,6 +362,18 @@ ifndef NO_LIBUNWIND
have_libunwind = 1
endif
+ ifeq ($(feature-libunwind-aarch64), 1)
+ $(call detected,CONFIG_LIBUNWIND_AARCH64)
+ CFLAGS += -DHAVE_LIBUNWIND_AARCH64_SUPPORT
+ LDFLAGS += -lunwind-aarch64
+ have_libunwind = 1
+ $(call feature_check,libunwind-debug-frame-aarch64)
+ ifneq ($(feature-libunwind-debug-frame-aarch64), 1)
+ msg := $(warning No debug_frame support found in libunwind-aarch64);
+ CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME_AARCH64
+ endif
+ endif
+
ifneq ($(feature-libunwind), 1)
msg := $(warning No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR);
NO_LOCAL_LIBUNWIND := 1
diff --git a/tools/perf/util/Build b/tools/perf/util/Build
index 7746e09..fced833 100644
--- a/tools/perf/util/Build
+++ b/tools/perf/util/Build
@@ -102,6 +102,7 @@ libperf-$(CONFIG_LIBDW_DWARF_UNWIND) += unwind-libdw.o
libperf-$(CONFIG_LOCAL_LIBUNWIND) += unwind-libunwind-local.o
libperf-$(CONFIG_LIBUNWIND) += unwind-libunwind.o
libperf-$(CONFIG_LIBUNWIND_X86) += libunwind/x86_32.o
+libperf-$(CONFIG_LIBUNWIND_AARCH64) += libunwind/arm64.o
libperf-$(CONFIG_LIBBABELTRACE) += data-convert-bt.o
diff --git a/tools/perf/util/libunwind/arm64.c b/tools/perf/util/libunwind/arm64.c
new file mode 100644
index 0000000..4fb5395
--- /dev/null
+++ b/tools/perf/util/libunwind/arm64.c
@@ -0,0 +1,35 @@
+/*
+ * This file setups defines to compile arch specific binary from the
+ * generic one.
+ *
+ * The function 'LIBUNWIND__ARCH_REG_ID' name is set according to arch
+ * name and the defination of this function is included directly from
+ * 'arch/arm64/util/unwind-libunwind.c', to make sure that this function
+ * is defined no matter what arch the host is.
+ *
+ * Finally, the arch specific unwind methods are exported which will
+ * be assigned to each arm64 thread.
+ */
+
+#define REMOTE_UNWIND_LIBUNWIND
+
+#define LIBUNWIND__ARCH_REG_ID(regnum) libunwind__arm64_reg_id(regnum)
+
+#include "unwind.h"
+#include "debug.h"
+#include "libunwind-aarch64.h"
+#include <../../../../arch/arm64/include/uapi/asm/perf_regs.h>
+#include "../../arch/arm64/util/unwind-libunwind.c"
+
+/* NO_LIBUNWIND_DEBUG_FRAME is a feature flag for local libunwind,
+ * assign NO_LIBUNWIND_DEBUG_FRAME_AARCH64 to it for compiling arm64
+ * unwind methods.
+ */
+#undef NO_LIBUNWIND_DEBUG_FRAME
+#ifdef NO_LIBUNWIND_DEBUG_FRAME_AARCH64
+#define NO_LIBUNWIND_DEBUG_FRAME
+#endif
+#include "util/unwind-libunwind-local.c"
+
+struct unwind_libunwind_ops *
+arm64_unwind_libunwind_ops = &_unwind_libunwind_ops;
diff --git a/tools/perf/util/unwind-libunwind.c b/tools/perf/util/unwind-libunwind.c
index e65515a..8547119 100644
--- a/tools/perf/util/unwind-libunwind.c
+++ b/tools/perf/util/unwind-libunwind.c
@@ -6,6 +6,7 @@
struct unwind_libunwind_ops __weak *local_unwind_libunwind_ops;
struct unwind_libunwind_ops __weak *x86_32_unwind_libunwind_ops;
+struct unwind_libunwind_ops __weak *arm64_unwind_libunwind_ops;
static void unwind__register_ops(struct thread *thread,
struct unwind_libunwind_ops *ops)
@@ -38,6 +39,9 @@ int unwind__prepare_access(struct thread *thread, struct map *map)
if (!strcmp(arch, "x86")) {
if (dso_type != DSO__TYPE_64BIT)
ops = x86_32_unwind_libunwind_ops;
+ } else if (!strcmp(arch, "arm64") || !strcmp(arch, "arm")) {
+ if (dso_type == DSO__TYPE_64BIT)
+ ops = arm64_unwind_libunwind_ops;
}
if (!ops) {
[toc] | [prev] | [next] | [standalone]
| From | He Kuang <hekuang@huawei.com> |
|---|---|
| Date | 2016-06-03 05:40 +0200 |
| Subject | [PATCH v9 06/14] perf tools: Separate local/remote libunwind config |
| Message-ID | <rFO7M-6nc-35@gated-at.bofh.it> |
| In reply to | #1412751 |
CONFIG_LIBUNWIND/NO_LIBUNWIND are changed to
CONFIG_LOCAL_LIBUNWIND/NO_LOCAL_LIBUNWIND for retaining local unwind
features. The new CONFIG_LIBUNWIND stands for either local or remote
or both unwind are supported, and NO_LIBUNWIND means that neither
local nor remote unwind is supported.
LIBUNWIND_LIBS is eliminated in LDFLAGS if local libunwind is not
supported.
Signed-off-by: He Kuang <hekuang@huawei.com>
---
tools/perf/arch/arm/util/Build | 2 +-
tools/perf/arch/arm64/util/Build | 2 +-
tools/perf/arch/x86/util/Build | 2 +-
tools/perf/config/Makefile | 20 +++++++++++++++++---
4 files changed, 20 insertions(+), 6 deletions(-)
diff --git a/tools/perf/arch/arm/util/Build b/tools/perf/arch/arm/util/Build
index d22e3d0..f98da17 100644
--- a/tools/perf/arch/arm/util/Build
+++ b/tools/perf/arch/arm/util/Build
@@ -1,4 +1,4 @@
libperf-$(CONFIG_DWARF) += dwarf-regs.o
-libperf-$(CONFIG_LIBUNWIND) += unwind-libunwind.o
+libperf-$(CONFIG_LOCAL_LIBUNWIND) += unwind-libunwind.o
libperf-$(CONFIG_LIBDW_DWARF_UNWIND) += unwind-libdw.o
diff --git a/tools/perf/arch/arm64/util/Build b/tools/perf/arch/arm64/util/Build
index e58123a8..02f41db 100644
--- a/tools/perf/arch/arm64/util/Build
+++ b/tools/perf/arch/arm64/util/Build
@@ -1,2 +1,2 @@
libperf-$(CONFIG_DWARF) += dwarf-regs.o
-libperf-$(CONFIG_LIBUNWIND) += unwind-libunwind.o
+libperf-$(CONFIG_LOCAL_LIBUNWIND) += unwind-libunwind.o
diff --git a/tools/perf/arch/x86/util/Build b/tools/perf/arch/x86/util/Build
index 4659703..bc24b75 100644
--- a/tools/perf/arch/x86/util/Build
+++ b/tools/perf/arch/x86/util/Build
@@ -7,7 +7,7 @@ libperf-y += perf_regs.o
libperf-$(CONFIG_DWARF) += dwarf-regs.o
libperf-$(CONFIG_BPF_PROLOGUE) += dwarf-regs.o
-libperf-$(CONFIG_LIBUNWIND) += unwind-libunwind.o
+libperf-$(CONFIG_LOCAL_LIBUNWIND) += unwind-libunwind.o
libperf-$(CONFIG_LIBDW_DWARF_UNWIND) += unwind-libdw.o
libperf-$(CONFIG_AUXTRACE) += auxtrace.o
diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
index 118df2d..3918687 100644
--- a/tools/perf/config/Makefile
+++ b/tools/perf/config/Makefile
@@ -353,10 +353,20 @@ ifeq ($(ARCH),powerpc)
endif
ifndef NO_LIBUNWIND
+ have_libunwind :=
ifneq ($(feature-libunwind), 1)
msg := $(warning No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR);
+ NO_LOCAL_LIBUNWIND := 1
+ else
+ have_libunwind := 1
+ $(call detected,CONFIG_LOCAL_LIBUNWIND)
+ endif
+
+ ifneq ($(have_libunwind), 1)
NO_LIBUNWIND := 1
endif
+else
+ NO_LOCAL_LIBUNWIND := 1
endif
ifndef NO_LIBBPF
@@ -394,7 +404,7 @@ else
NO_DWARF_UNWIND := 1
endif
-ifndef NO_LIBUNWIND
+ifndef NO_LOCAL_LIBUNWIND
ifeq ($(ARCH),$(filter $(ARCH),arm arm64))
$(call feature_check,libunwind-debug-frame)
ifneq ($(feature-libunwind-debug-frame), 1)
@@ -405,10 +415,14 @@ ifndef NO_LIBUNWIND
# non-ARM has no dwarf_find_debug_frame() function:
CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
endif
- CFLAGS += -DHAVE_LIBUNWIND_SUPPORT
EXTLIBS += $(LIBUNWIND_LIBS)
+ LDFLAGS += $(LIBUNWIND_LIBS)
+endif
+
+ifndef NO_LIBUNWIND
+ CFLAGS += -DHAVE_LIBUNWIND_SUPPORT
CFLAGS += $(LIBUNWIND_CFLAGS)
- LDFLAGS += $(LIBUNWIND_LDFLAGS) $(LIBUNWIND_LIBS)
+ LDFLAGS += $(LIBUNWIND_LDFLAGS)
endif
ifndef NO_LIBAUDIT
--
1.8.5.2
[toc] | [prev] | [next] | [standalone]
| From | tip-bot for He Kuang <tipbot@zytor.com> |
|---|---|
| Date | 2016-06-08 10:50 +0200 |
| Subject | [tip:perf/core] perf unwind: Separate local/remote libunwind config |
| Message-ID | <rHHlw-6ig-51@gated-at.bofh.it> |
| In reply to | #1412753 |
Commit-ID: 9d8e14d306ef2f5daf2fd099ef07c39dd83e2c0d
Gitweb: http://git.kernel.org/tip/9d8e14d306ef2f5daf2fd099ef07c39dd83e2c0d
Author: He Kuang <hekuang@huawei.com>
AuthorDate: Fri, 3 Jun 2016 03:33:15 +0000
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 7 Jun 2016 12:08:52 -0300
perf unwind: Separate local/remote libunwind config
CONFIG_LIBUNWIND/NO_LIBUNWIND are changed to CONFIG_LOCAL_LIBUNWIND/
NO_LOCAL_LIBUNWIND for retaining local unwind features. The new
CONFIG_LIBUNWIND stands for either local or remote or both unwind are
supported, and NO_LIBUNWIND means that neither local nor remote unwind
is supported.
LIBUNWIND_LIBS is eliminated in LDFLAGS if local libunwind is not
supported.
Signed-off-by: He Kuang <hekuang@huawei.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ekaterina Tumanova <tumanova@linux.vnet.ibm.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Kan Liang <kan.liang@intel.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Pekka Enberg <penberg@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1464924803-22214-7-git-send-email-hekuang@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/arch/arm/util/Build | 2 +-
tools/perf/arch/arm64/util/Build | 2 +-
tools/perf/arch/x86/util/Build | 2 +-
tools/perf/config/Makefile | 20 +++++++++++++++++---
4 files changed, 20 insertions(+), 6 deletions(-)
diff --git a/tools/perf/arch/arm/util/Build b/tools/perf/arch/arm/util/Build
index d22e3d0..f98da17 100644
--- a/tools/perf/arch/arm/util/Build
+++ b/tools/perf/arch/arm/util/Build
@@ -1,4 +1,4 @@
libperf-$(CONFIG_DWARF) += dwarf-regs.o
-libperf-$(CONFIG_LIBUNWIND) += unwind-libunwind.o
+libperf-$(CONFIG_LOCAL_LIBUNWIND) += unwind-libunwind.o
libperf-$(CONFIG_LIBDW_DWARF_UNWIND) += unwind-libdw.o
diff --git a/tools/perf/arch/arm64/util/Build b/tools/perf/arch/arm64/util/Build
index e58123a8..02f41db 100644
--- a/tools/perf/arch/arm64/util/Build
+++ b/tools/perf/arch/arm64/util/Build
@@ -1,2 +1,2 @@
libperf-$(CONFIG_DWARF) += dwarf-regs.o
-libperf-$(CONFIG_LIBUNWIND) += unwind-libunwind.o
+libperf-$(CONFIG_LOCAL_LIBUNWIND) += unwind-libunwind.o
diff --git a/tools/perf/arch/x86/util/Build b/tools/perf/arch/x86/util/Build
index 4cd8a16..f95e6f4 100644
--- a/tools/perf/arch/x86/util/Build
+++ b/tools/perf/arch/x86/util/Build
@@ -8,7 +8,7 @@ libperf-y += group.o
libperf-$(CONFIG_DWARF) += dwarf-regs.o
libperf-$(CONFIG_BPF_PROLOGUE) += dwarf-regs.o
-libperf-$(CONFIG_LIBUNWIND) += unwind-libunwind.o
+libperf-$(CONFIG_LOCAL_LIBUNWIND) += unwind-libunwind.o
libperf-$(CONFIG_LIBDW_DWARF_UNWIND) += unwind-libdw.o
libperf-$(CONFIG_AUXTRACE) += auxtrace.o
diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
index 118df2d..3918687 100644
--- a/tools/perf/config/Makefile
+++ b/tools/perf/config/Makefile
@@ -353,10 +353,20 @@ ifeq ($(ARCH),powerpc)
endif
ifndef NO_LIBUNWIND
+ have_libunwind :=
ifneq ($(feature-libunwind), 1)
msg := $(warning No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR);
+ NO_LOCAL_LIBUNWIND := 1
+ else
+ have_libunwind := 1
+ $(call detected,CONFIG_LOCAL_LIBUNWIND)
+ endif
+
+ ifneq ($(have_libunwind), 1)
NO_LIBUNWIND := 1
endif
+else
+ NO_LOCAL_LIBUNWIND := 1
endif
ifndef NO_LIBBPF
@@ -394,7 +404,7 @@ else
NO_DWARF_UNWIND := 1
endif
-ifndef NO_LIBUNWIND
+ifndef NO_LOCAL_LIBUNWIND
ifeq ($(ARCH),$(filter $(ARCH),arm arm64))
$(call feature_check,libunwind-debug-frame)
ifneq ($(feature-libunwind-debug-frame), 1)
@@ -405,10 +415,14 @@ ifndef NO_LIBUNWIND
# non-ARM has no dwarf_find_debug_frame() function:
CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
endif
- CFLAGS += -DHAVE_LIBUNWIND_SUPPORT
EXTLIBS += $(LIBUNWIND_LIBS)
+ LDFLAGS += $(LIBUNWIND_LIBS)
+endif
+
+ifndef NO_LIBUNWIND
+ CFLAGS += -DHAVE_LIBUNWIND_SUPPORT
CFLAGS += $(LIBUNWIND_CFLAGS)
- LDFLAGS += $(LIBUNWIND_LDFLAGS) $(LIBUNWIND_LIBS)
+ LDFLAGS += $(LIBUNWIND_LDFLAGS)
endif
ifndef NO_LIBAUDIT
[toc] | [prev] | [next] | [standalone]
| From | He Kuang <hekuang@huawei.com> |
|---|---|
| Date | 2016-06-03 05:40 +0200 |
| Subject | [PATCH v9 11/14] perf tools: Change fixed name of libunwind__arch_reg_id to macro |
| Message-ID | <rFO7M-6nc-37@gated-at.bofh.it> |
| In reply to | #1412751 |
For local libunwind, it uses the fixed methods to convert register id according to the host platform, but in remote libunwind, this convert function should be the one for remote architecture. This patch changes the fixed name to macro and code for each remote platform can be compiled indivadually. Signed-off-by: He Kuang <hekuang@huawei.com> --- tools/perf/util/unwind-libunwind-local.c | 2 +- tools/perf/util/unwind.h | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/unwind-libunwind-local.c b/tools/perf/util/unwind-libunwind-local.c index 9c70486..631b40d 100644 --- a/tools/perf/util/unwind-libunwind-local.c +++ b/tools/perf/util/unwind-libunwind-local.c @@ -508,7 +508,7 @@ static int access_reg(unw_addr_space_t __maybe_unused as, return 0; } - id = libunwind__arch_reg_id(regnum); + id = LIBUNWIND__ARCH_REG_ID(regnum); if (id < 0) return -EINVAL; diff --git a/tools/perf/util/unwind.h b/tools/perf/util/unwind.h index bf9f593..b074662 100644 --- a/tools/perf/util/unwind.h +++ b/tools/perf/util/unwind.h @@ -29,7 +29,10 @@ int unwind__get_entries(unwind_entry_cb_t cb, void *arg, struct perf_sample *data, int max_stack); /* libunwind specific */ #ifdef HAVE_LIBUNWIND_SUPPORT -int libunwind__arch_reg_id(int regnum); +#ifndef LIBUNWIND__ARCH_REG_ID +#define LIBUNWIND__ARCH_REG_ID(regnum) libunwind__arch_reg_id(regnum) +#endif +int LIBUNWIND__ARCH_REG_ID(int regnum); int unwind__prepare_access(struct thread *thread, struct map *map); void unwind__flush_access(struct thread *thread); void unwind__finish_access(struct thread *thread); -- 1.8.5.2
[toc] | [prev] | [next] | [standalone]
| From | tip-bot for He Kuang <tipbot@zytor.com> |
|---|---|
| Date | 2016-06-08 11:00 +0200 |
| Subject | [tip:perf/core] perf unwind: Change fixed name of libunwind__arch_reg_id to macro |
| Message-ID | <rHHvc-6mU-23@gated-at.bofh.it> |
| In reply to | #1412754 |
Commit-ID: eeb118c5d77878948e09308afe4fd9d0efe68ef7 Gitweb: http://git.kernel.org/tip/eeb118c5d77878948e09308afe4fd9d0efe68ef7 Author: He Kuang <hekuang@huawei.com> AuthorDate: Fri, 3 Jun 2016 03:33:20 +0000 Committer: Arnaldo Carvalho de Melo <acme@redhat.com> CommitDate: Tue, 7 Jun 2016 15:11:46 -0300 perf unwind: Change fixed name of libunwind__arch_reg_id to macro For local libunwind, it uses the fixed methods to convert register id according to the host platform, but in remote libunwind, this convert function should be the one for remote architecture. This patch changes the fixed name to macro and code for each remote platform can be compiled indivadually. Signed-off-by: He Kuang <hekuang@huawei.com> Acked-by: Jiri Olsa <jolsa@kernel.org> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Ekaterina Tumanova <tumanova@linux.vnet.ibm.com> Cc: Josh Poimboeuf <jpoimboe@redhat.com> Cc: Kan Liang <kan.liang@intel.com> Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Pekka Enberg <penberg@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Cc: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com> Cc: Wang Nan <wangnan0@huawei.com> Link: http://lkml.kernel.org/r/1464924803-22214-12-git-send-email-hekuang@huawei.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/util/unwind-libunwind-local.c | 2 +- tools/perf/util/unwind.h | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/unwind-libunwind-local.c b/tools/perf/util/unwind-libunwind-local.c index 9c70486..631b40d 100644 --- a/tools/perf/util/unwind-libunwind-local.c +++ b/tools/perf/util/unwind-libunwind-local.c @@ -508,7 +508,7 @@ static int access_reg(unw_addr_space_t __maybe_unused as, return 0; } - id = libunwind__arch_reg_id(regnum); + id = LIBUNWIND__ARCH_REG_ID(regnum); if (id < 0) return -EINVAL; diff --git a/tools/perf/util/unwind.h b/tools/perf/util/unwind.h index bf9f593..b074662 100644 --- a/tools/perf/util/unwind.h +++ b/tools/perf/util/unwind.h @@ -29,7 +29,10 @@ int unwind__get_entries(unwind_entry_cb_t cb, void *arg, struct perf_sample *data, int max_stack); /* libunwind specific */ #ifdef HAVE_LIBUNWIND_SUPPORT -int libunwind__arch_reg_id(int regnum); +#ifndef LIBUNWIND__ARCH_REG_ID +#define LIBUNWIND__ARCH_REG_ID(regnum) libunwind__arch_reg_id(regnum) +#endif +int LIBUNWIND__ARCH_REG_ID(int regnum); int unwind__prepare_access(struct thread *thread, struct map *map); void unwind__flush_access(struct thread *thread); void unwind__finish_access(struct thread *thread);
[toc] | [prev] | [next] | [standalone]
| From | He Kuang <hekuang@huawei.com> |
|---|---|
| Date | 2016-06-03 05:40 +0200 |
| Subject | [PATCH v9 09/14] perf tools: Export normalize_arch() function |
| Message-ID | <rFO7M-6nc-41@gated-at.bofh.it> |
| In reply to | #1412751 |
Export normalize_arch() function, so other part of perf can get
normalized form of arch string.
Signed-off-by: He Kuang <hekuang@huawei.com>
---
tools/perf/arch/common.c | 2 +-
tools/perf/arch/common.h | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/tools/perf/arch/common.c b/tools/perf/arch/common.c
index e83c8ce..fa090a9 100644
--- a/tools/perf/arch/common.c
+++ b/tools/perf/arch/common.c
@@ -102,7 +102,7 @@ static int lookup_triplets(const char *const *triplets, const char *name)
* Return architecture name in a normalized form.
* The conversion logic comes from the Makefile.
*/
-static const char *normalize_arch(char *arch)
+const char *normalize_arch(char *arch)
{
if (!strcmp(arch, "x86_64"))
return "x86";
diff --git a/tools/perf/arch/common.h b/tools/perf/arch/common.h
index 7529cfb..6b01c73 100644
--- a/tools/perf/arch/common.h
+++ b/tools/perf/arch/common.h
@@ -6,5 +6,6 @@
extern const char *objdump_path;
int perf_env__lookup_objdump(struct perf_env *env);
+const char *normalize_arch(char *arch);
#endif /* ARCH_PERF_COMMON_H */
--
1.8.5.2
[toc] | [prev] | [next] | [standalone]
| From | tip-bot for He Kuang <tipbot@zytor.com> |
|---|---|
| Date | 2016-06-08 11:00 +0200 |
| Subject | [tip:perf/core] perf tools: Export normalize_arch() function |
| Message-ID | <rHHvc-6mU-29@gated-at.bofh.it> |
| In reply to | #1412757 |
Commit-ID: 940e6987fcfb6092cda8f2f87f2937c55fa038c4
Gitweb: http://git.kernel.org/tip/940e6987fcfb6092cda8f2f87f2937c55fa038c4
Author: He Kuang <hekuang@huawei.com>
AuthorDate: Fri, 3 Jun 2016 03:33:18 +0000
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 7 Jun 2016 12:08:53 -0300
perf tools: Export normalize_arch() function
Export normalize_arch() function, so other part of perf can get
normalized form of arch string.
Signed-off-by: He Kuang <hekuang@huawei.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ekaterina Tumanova <tumanova@linux.vnet.ibm.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Kan Liang <kan.liang@intel.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Pekka Enberg <penberg@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1464924803-22214-10-git-send-email-hekuang@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/arch/common.c | 2 +-
tools/perf/arch/common.h | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/tools/perf/arch/common.c b/tools/perf/arch/common.c
index e83c8ce..fa090a9 100644
--- a/tools/perf/arch/common.c
+++ b/tools/perf/arch/common.c
@@ -102,7 +102,7 @@ static int lookup_triplets(const char *const *triplets, const char *name)
* Return architecture name in a normalized form.
* The conversion logic comes from the Makefile.
*/
-static const char *normalize_arch(char *arch)
+const char *normalize_arch(char *arch)
{
if (!strcmp(arch, "x86_64"))
return "x86";
diff --git a/tools/perf/arch/common.h b/tools/perf/arch/common.h
index 7529cfb..6b01c73 100644
--- a/tools/perf/arch/common.h
+++ b/tools/perf/arch/common.h
@@ -6,5 +6,6 @@
extern const char *objdump_path;
int perf_env__lookup_objdump(struct perf_env *env);
+const char *normalize_arch(char *arch);
#endif /* ARCH_PERF_COMMON_H */
[toc] | [prev] | [next] | [standalone]
| From | He Kuang <hekuang@huawei.com> |
|---|---|
| Date | 2016-06-03 05:40 +0200 |
| Subject | [PATCH v9 02/14] perf tools: Decouple thread->address_space on libunwind |
| Message-ID | <rFO7M-6nc-43@gated-at.bofh.it> |
| In reply to | #1412751 |
Currently, the type of thread->addr_space is unw_addr_space_t, which
is a pointer defined in libunwind headers. For local libunwind, we can
simple include "libunwind.h", but for remote libunwind, the header
file is depends on the target libunwind platform. This patch uses
'void *' instead to decouple the dependence on libunwind.
Signed-off-by: He Kuang <hekuang@huawei.com>
---
tools/perf/util/thread.h | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/tools/perf/util/thread.h b/tools/perf/util/thread.h
index 45fba13..aa3a8ff 100644
--- a/tools/perf/util/thread.h
+++ b/tools/perf/util/thread.h
@@ -9,9 +9,6 @@
#include "symbol.h"
#include <strlist.h>
#include <intlist.h>
-#ifdef HAVE_LIBUNWIND_SUPPORT
-#include <libunwind.h>
-#endif
struct thread_stack;
@@ -36,7 +33,7 @@ struct thread {
void *priv;
struct thread_stack *ts;
#ifdef HAVE_LIBUNWIND_SUPPORT
- unw_addr_space_t addr_space;
+ void *addr_space;
#endif
};
--
1.8.5.2
[toc] | [prev] | [next] | [standalone]
| From | tip-bot for He Kuang <tipbot@zytor.com> |
|---|---|
| Date | 2016-06-08 10:50 +0200 |
| Subject | [tip:perf/core] perf unwind: Decouple thread->address_space on libunwind |
| Message-ID | <rHHlw-6ig-29@gated-at.bofh.it> |
| In reply to | #1412758 |
Commit-ID: c1d1d0d9b302cb5f0365f4de78dd7fcbf7983c05
Gitweb: http://git.kernel.org/tip/c1d1d0d9b302cb5f0365f4de78dd7fcbf7983c05
Author: He Kuang <hekuang@huawei.com>
AuthorDate: Fri, 3 Jun 2016 03:33:11 +0000
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 7 Jun 2016 12:08:51 -0300
perf unwind: Decouple thread->address_space on libunwind
Currently, the type of thread->addr_space is unw_addr_space_t, which is
a pointer defined in libunwind headers. For local libunwind, we can
simple include "libunwind.h", but for remote libunwind, the header file
is depends on the target libunwind platform. This patch uses 'void *'
instead to decouple the dependence on libunwind.
Signed-off-by: He Kuang <hekuang@huawei.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ekaterina Tumanova <tumanova@linux.vnet.ibm.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Kan Liang <kan.liang@intel.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Pekka Enberg <penberg@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1464924803-22214-3-git-send-email-hekuang@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/thread.h | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/tools/perf/util/thread.h b/tools/perf/util/thread.h
index 08fcb14..4c9f0aa 100644
--- a/tools/perf/util/thread.h
+++ b/tools/perf/util/thread.h
@@ -9,9 +9,6 @@
#include "symbol.h"
#include <strlist.h>
#include <intlist.h>
-#ifdef HAVE_LIBUNWIND_SUPPORT
-#include <libunwind.h>
-#endif
struct thread_stack;
@@ -36,7 +33,7 @@ struct thread {
void *priv;
struct thread_stack *ts;
#ifdef HAVE_LIBUNWIND_SUPPORT
- unw_addr_space_t addr_space;
+ void *addr_space;
#endif
};
[toc] | [prev] | [next] | [standalone]
| From | Jiri Olsa <jolsa@redhat.com> |
|---|---|
| Date | 2016-06-03 09:10 +0200 |
| Message-ID | <rFRoZ-69-1@gated-at.bofh.it> |
| In reply to | #1412751 |
On Fri, Jun 03, 2016 at 03:33:09AM +0000, He Kuang wrote: SNIP > For using remote libunwind libraries, reference this: > http://thread.gmane.org/gmane.linux.kernel/2224430 > > and now we can use LIBUNWIND_DIR to specific custom dirctories > containing libunwind libs. > > Acked-by: Jiri Olsa <jolsa@kernel.org> for most patches except: > > v9: > - Change function unwind__register_ops() to static. > - Move up unwind__prepare_access() in thread__insert_map() and save > map_groups__remove() call. > - Enclose multiple line if/else into braces. > - Fix miss modified function declaration for unwind__prepare_access() > in patch 10. for patchset: Acked-by: Jiri Olsa <jolsa@kernel.org> thanks, jirka
[toc] | [prev] | [next] | [standalone]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2016-06-03 21:50 +0200 |
| Message-ID | <rG3gu-7rr-13@gated-at.bofh.it> |
| In reply to | #1412851 |
Em Fri, Jun 03, 2016 at 09:06:29AM +0200, Jiri Olsa escreveu: > On Fri, Jun 03, 2016 at 03:33:09AM +0000, He Kuang wrote: > > v9: > > - Change function unwind__register_ops() to static. > > - Move up unwind__prepare_access() in thread__insert_map() and save > > map_groups__remove() call. > > - Enclose multiple line if/else into braces. > > - Fix miss modified function declaration for unwind__prepare_access() > > in patch 10. > for patchset: > Acked-by: Jiri Olsa <jolsa@kernel.org> Thanks, applied, build testing. - Arnaldo
[toc] | [prev] | [next] | [standalone]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2016-06-03 23:10 +0200 |
| Message-ID | <rG4vT-8lx-21@gated-at.bofh.it> |
| In reply to | #1413423 |
Em Fri, Jun 03, 2016 at 06:06:02PM -0300, Arnaldo Carvalho de Melo escreveu: > Em Fri, Jun 03, 2016 at 04:42:05PM -0300, Arnaldo Carvalho de Melo escreveu: > > Em Fri, Jun 03, 2016 at 09:06:29AM +0200, Jiri Olsa escreveu: > > > On Fri, Jun 03, 2016 at 03:33:09AM +0000, He Kuang wrote: > > > > v9: > > > > - Change function unwind__register_ops() to static. > > > > - Move up unwind__prepare_access() in thread__insert_map() and save > > > > map_groups__remove() call. > > > > - Enclose multiple line if/else into braces. > > > > - Fix miss modified function declaration for unwind__prepare_access() > > > > in patch 10. > > > > > for patchset: > > > > > Acked-by: Jiri Olsa <jolsa@kernel.org> > > > > Thanks, applied, build testing. > > Build tested went ok, but then 'perf top' crashes: > > [root@jouet ~]# perf top > perf: Segmentation fault > -------- backtrace -------- > perf[0x55591b] > /lib64/libc.so.6(+0x34ab0)[0x7f38ad9c1ab0] > perf(normalize_arch+0x27)[0x534797] > perf(unwind__prepare_access+0xbb)[0x52b15b] > perf(thread__insert_map+0x27)[0x4d4837] > perf(machine__process_mmap2_event+0xd7)[0x4ca187] > perf(perf_event__synthesize_mmap_events+0x3e2)[0x491b32] > perf(perf_event__synthesize_threads+0x445)[0x492635] > perf(cmd_top+0xee0)[0x442f50] > perf[0x486a91] > perf(main+0x6ee)[0x42485e] > /lib64/libc.so.6(__libc_start_main+0xf0)[0x7f38ad9ad580] > perf(_start+0x29)[0x424949] > [0x0] > [root@jouet ~]# > > And I bet that 'perf trace' will too, lemme see, well, it crashes even > more spetacularly, but that is the topic of another bug report, will > send soon. > > Anyway, please try your patchkit with 'perf top' and 'perf trace', as > both don't use perf.data files, i.e. they work 'live', so probably > things that you touch in normalize_arch() are not initialized and need > to be setup. Ah, no need to resend the whole patchkit, just find out what is the bug and send me a patch and I'll insert it at the right point to avoid introducing a bisect breaking point. Your patchkit is in my perf/unwind branch at my tree, I already added Jiri's Acked-by in all the patches. git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git Thanks, - Arnaldo -
[toc] | [prev] | [next] | [standalone]
| From | Hekuang <hekuang@huawei.com> |
|---|---|
| Date | 2016-06-04 07:50 +0200 |
| Message-ID | <rGcD7-4Nz-3@gated-at.bofh.it> |
| In reply to | #1413483 |
在 2016/6/4 5:09, Arnaldo Carvalho de Melo 写道: > Em Fri, Jun 03, 2016 at 06:06:02PM -0300, Arnaldo Carvalho de Melo escreveu: >> Em Fri, Jun 03, 2016 at 04:42:05PM -0300, Arnaldo Carvalho de Melo escreveu: >>> Em Fri, Jun 03, 2016 at 09:06:29AM +0200, Jiri Olsa escreveu: >>>> On Fri, Jun 03, 2016 at 03:33:09AM +0000, He Kuang wrote: >>>>> v9: >>>>> - Change function unwind__register_ops() to static. >>>>> - Move up unwind__prepare_access() in thread__insert_map() and save >>>>> map_groups__remove() call. >>>>> - Enclose multiple line if/else into braces. >>>>> - Fix miss modified function declaration for unwind__prepare_access() >>>>> in patch 10. >>> >>>> for patchset: >>> >>>> Acked-by: Jiri Olsa <jolsa@kernel.org> >>> Thanks, applied, build testing. >> Build tested went ok, but then 'perf top' crashes: >> >> [root@jouet ~]# perf top >> perf: Segmentation fault >> -------- backtrace -------- >> perf[0x55591b] >> /lib64/libc.so.6(+0x34ab0)[0x7f38ad9c1ab0] >> perf(normalize_arch+0x27)[0x534797] >> perf(unwind__prepare_access+0xbb)[0x52b15b] >> perf(thread__insert_map+0x27)[0x4d4837] >> perf(machine__process_mmap2_event+0xd7)[0x4ca187] >> perf(perf_event__synthesize_mmap_events+0x3e2)[0x491b32] >> perf(perf_event__synthesize_threads+0x445)[0x492635] >> perf(cmd_top+0xee0)[0x442f50] >> perf[0x486a91] >> perf(main+0x6ee)[0x42485e] >> /lib64/libc.so.6(__libc_start_main+0xf0)[0x7f38ad9ad580] >> perf(_start+0x29)[0x424949] >> [0x0] >> [root@jouet ~]# >> >> And I bet that 'perf trace' will too, lemme see, well, it crashes even >> more spetacularly, but that is the topic of another bug report, will >> send soon. >> >> Anyway, please try your patchkit with 'perf top' and 'perf trace', as >> both don't use perf.data files, i.e. they work 'live', so probably >> things that you touch in normalize_arch() are not initialized and need >> to be setup. > Ah, no need to resend the whole patchkit, just find out what is the bug > and send me a patch and I'll insert it at the right point to avoid > introducing a bisect breaking point. > > Your patchkit is in my perf/unwind branch at my tree, I already added > Jiri's Acked-by in all the patches. > > git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git > > Thanks, > > - Arnaldo > - I send the updated one after PATCH 10/14, env->arch is null in live mode, comments are added and "perf top/trace" works now. Thanks.
[toc] | [prev] | [next] | [standalone]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2016-06-07 17:20 +0200 |
| Message-ID | <rHqXn-4lt-3@gated-at.bofh.it> |
| In reply to | #1413657 |
Em Tue, Jun 07, 2016 at 12:12:15PM -0300, Arnaldo Carvalho de Melo escreveu: > Em Sat, Jun 04, 2016 at 01:39:04PM +0800, Hekuang escreveu: > > 在 2016/6/4 5:09, Arnaldo Carvalho de Melo 写道: > > > Em Fri, Jun 03, 2016 at 06:06:02PM -0300, Arnaldo Carvalho de Melo escreveu: > > > > Anyway, please try your patchkit with 'perf top' and 'perf trace', as > > > > both don't use perf.data files, i.e. they work 'live', so probably > > > > things that you touch in normalize_arch() are not initialized and need > > > > to be setup. > > > Ah, no need to resend the whole patchkit, just find out what is the bug > > > and send me a patch and I'll insert it at the right point to avoid > > > introducing a bisect breaking point. > > > > Your patchkit is in my perf/unwind branch at my tree, I already added > > > Jiri's Acked-by in all the patches. > > > > git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git > > > I send the updated one after PATCH 10/14, env->arch is null in live mode, > > comments are added and "perf top/trace" works now. > > Ok, now it fails 'perf test unwind' and I bisected it to: Further info: [root@jouet ~]# perf test -v unwind 48: Test dwarf unwind : --- start --- test child forked, pid 25078 got wrong number of stack entries 0 != 8 test child finished with -1 ---- end ---- Test dwarf unwind: FAILED! [root@jouet ~]# > [acme@jouet linux]$ git bisect good > e2b6ce1ca32cedeb2cef08f49aa812f0eadcc3c5 is the first bad commit > commit e2b6ce1ca32cedeb2cef08f49aa812f0eadcc3c5 > Author: He Kuang <hekuang@huawei.com> > Date: Fri Jun 3 03:33:19 2016 +0000 > > perf unwind: Check the target platform before assigning unwind methods > > Currently, 'perf script' uses host unwind methods to parse perf.data > callchain info without taking the target architecture into account, i.e. > assuming the perf.data file was generated on the same machine where the > analysis is being performed. So we get wrong result without any warnings > when unwinding callchains of x86(32-bit) on x86(64-bit) machine. > > This patch adds an extra step that checks the target platform before > assigning unwind methods. In later patches in this series, we can use > this info to assign the right unwind methods for supported platforms. >
[toc] | [prev] | [next] | [standalone]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2016-06-07 17:20 +0200 |
| Message-ID | <rHqXn-4lt-5@gated-at.bofh.it> |
| In reply to | #1413657 |
Em Sat, Jun 04, 2016 at 01:39:04PM +0800, Hekuang escreveu:
> 在 2016/6/4 5:09, Arnaldo Carvalho de Melo 写道:
> > Em Fri, Jun 03, 2016 at 06:06:02PM -0300, Arnaldo Carvalho de Melo escreveu:
> > > Anyway, please try your patchkit with 'perf top' and 'perf trace', as
> > > both don't use perf.data files, i.e. they work 'live', so probably
> > > things that you touch in normalize_arch() are not initialized and need
> > > to be setup.
> > Ah, no need to resend the whole patchkit, just find out what is the bug
> > and send me a patch and I'll insert it at the right point to avoid
> > introducing a bisect breaking point.
> > Your patchkit is in my perf/unwind branch at my tree, I already added
> > Jiri's Acked-by in all the patches.
> > git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git
> I send the updated one after PATCH 10/14, env->arch is null in live mode,
> comments are added and "perf top/trace" works now.
Ok, now it fails 'perf test unwind' and I bisected it to:
[acme@jouet linux]$ git bisect good
e2b6ce1ca32cedeb2cef08f49aa812f0eadcc3c5 is the first bad commit
commit e2b6ce1ca32cedeb2cef08f49aa812f0eadcc3c5
Author: He Kuang <hekuang@huawei.com>
Date: Fri Jun 3 03:33:19 2016 +0000
perf unwind: Check the target platform before assigning unwind methods
Currently, 'perf script' uses host unwind methods to parse perf.data
callchain info without taking the target architecture into account, i.e.
assuming the perf.data file was generated on the same machine where the
analysis is being performed. So we get wrong result without any warnings
when unwinding callchains of x86(32-bit) on x86(64-bit) machine.
This patch adds an extra step that checks the target platform before
assigning unwind methods. In later patches in this series, we can use
this info to assign the right unwind methods for supported platforms.
[toc] | [prev] | [next] | [standalone]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2016-06-03 23:10 +0200 |
| Message-ID | <rG4vT-8lx-13@gated-at.bofh.it> |
| In reply to | #1413423 |
Em Fri, Jun 03, 2016 at 04:42:05PM -0300, Arnaldo Carvalho de Melo escreveu: > Em Fri, Jun 03, 2016 at 09:06:29AM +0200, Jiri Olsa escreveu: > > On Fri, Jun 03, 2016 at 03:33:09AM +0000, He Kuang wrote: > > > v9: > > > - Change function unwind__register_ops() to static. > > > - Move up unwind__prepare_access() in thread__insert_map() and save > > > map_groups__remove() call. > > > - Enclose multiple line if/else into braces. > > > - Fix miss modified function declaration for unwind__prepare_access() > > > in patch 10. > > > for patchset: > > > Acked-by: Jiri Olsa <jolsa@kernel.org> > > Thanks, applied, build testing. Build tested went ok, but then 'perf top' crashes: [root@jouet ~]# perf top perf: Segmentation fault -------- backtrace -------- perf[0x55591b] /lib64/libc.so.6(+0x34ab0)[0x7f38ad9c1ab0] perf(normalize_arch+0x27)[0x534797] perf(unwind__prepare_access+0xbb)[0x52b15b] perf(thread__insert_map+0x27)[0x4d4837] perf(machine__process_mmap2_event+0xd7)[0x4ca187] perf(perf_event__synthesize_mmap_events+0x3e2)[0x491b32] perf(perf_event__synthesize_threads+0x445)[0x492635] perf(cmd_top+0xee0)[0x442f50] perf[0x486a91] perf(main+0x6ee)[0x42485e] /lib64/libc.so.6(__libc_start_main+0xf0)[0x7f38ad9ad580] perf(_start+0x29)[0x424949] [0x0] [root@jouet ~]# And I bet that 'perf trace' will too, lemme see, well, it crashes even more spetacularly, but that is the topic of another bug report, will send soon. Anyway, please try your patchkit with 'perf top' and 'perf trace', as both don't use perf.data files, i.e. they work 'live', so probably things that you touch in normalize_arch() are not initialized and need to be setup. - Arnaldo
[toc] | [prev] | [next] | [standalone]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2016-06-07 21:50 +0200 |
| Message-ID | <rHvaG-6PS-25@gated-at.bofh.it> |
| In reply to | #1412851 |
Em Fri, Jun 03, 2016 at 09:06:29AM +0200, Jiri Olsa escreveu: > On Fri, Jun 03, 2016 at 03:33:09AM +0000, He Kuang wrote: > > SNIP > > > For using remote libunwind libraries, reference this: > > http://thread.gmane.org/gmane.linux.kernel/2224430 > > > > and now we can use LIBUNWIND_DIR to specific custom dirctories > > containing libunwind libs. > > > > Acked-by: Jiri Olsa <jolsa@kernel.org> for most patches except: > > > > v9: > > - Change function unwind__register_ops() to static. > > - Move up unwind__prepare_access() in thread__insert_map() and save > > map_groups__remove() call. > > - Enclose multiple line if/else into braces. > > - Fix miss modified function declaration for unwind__prepare_access() > > in patch 10. > > for patchset: > > Acked-by: Jiri Olsa <jolsa@kernel.org> Ok, I'm applying it, after fixing 'perf test unwind', 'perf top --call-graph dwarf' and 'perf trace --call-graph dwarf', but I have one question, is the scenario where we collect on a x86_64 machine and want to do analysis on a ARM64 or x86-32 machine supported? This should be the odd case now, but from a quick look I couldn't see this as being supported, is that true or I was just lazy not to have tried this? - Arnaldo
[toc] | [prev] | [next] | [standalone]
| From | Hekuang <hekuang@huawei.com> |
|---|---|
| Date | 2016-06-08 09:40 +0200 |
| Message-ID | <rHGfL-5Ap-11@gated-at.bofh.it> |
| In reply to | #1416536 |
hi 在 2016/6/8 3:44, Arnaldo Carvalho de Melo 写道: > Em Fri, Jun 03, 2016 at 09:06:29AM +0200, Jiri Olsa escreveu: >> On Fri, Jun 03, 2016 at 03:33:09AM +0000, He Kuang wrote: >> >> SNIP >> >>> For using remote libunwind libraries, reference this: >>> http://thread.gmane.org/gmane.linux.kernel/2224430 >>> >>> and now we can use LIBUNWIND_DIR to specific custom dirctories >>> containing libunwind libs. >>> >>> Acked-by: Jiri Olsa <jolsa@kernel.org> for most patches except: >>> >>> v9: >>> - Change function unwind__register_ops() to static. >>> - Move up unwind__prepare_access() in thread__insert_map() and save >>> map_groups__remove() call. >>> - Enclose multiple line if/else into braces. >>> - Fix miss modified function declaration for unwind__prepare_access() >>> in patch 10. >> for patchset: >> >> Acked-by: Jiri Olsa <jolsa@kernel.org> > Ok, I'm applying it, after fixing 'perf test unwind', 'perf top --call-graph dwarf' > and 'perf trace --call-graph dwarf', but I have one question, is the > scenario where we collect on a x86_64 machine and want to do analysis on > a ARM64 or x86-32 machine supported? This should be the odd case now, Yes, it's supported. But I never tested this before, so I just compiled libunwind for aarch64, and tested unwinding i686 perf.data on aarch64. Then I found another issue I've considered but missed at some version of this patch series. In util/unwind-libunwind-local.c, PERF_REG_SP/IP is used, but those macros are assigned to the host platform, we should redefine them in the wrapper file, for example in "util/libunwind/x86_32.c". After fixing this problem, i686 perf.data can be parsed on aarch64 machine. Since you've already applied the v9 patches, should I send patches based on the lastest tree as bug fixes or just update v9 patches? Thank you. Here is the modified part: diff --git a/tools/perf/util/libunwind/arm64.c b/tools/perf/util/libunwind/arm64.c index 4fb5395..8a5c2fc 100644 --- a/tools/perf/util/libunwind/arm64.c +++ b/tools/perf/util/libunwind/arm64.c @@ -29,6 +29,11 @@ #ifdef NO_LIBUNWIND_DEBUG_FRAME_AARCH64 #define NO_LIBUNWIND_DEBUG_FRAME #endif + +#undef PERF_REG_IP +#undef PERF_REG_SP +#define PERF_REG_IP PERF_REG_ARM64_PC +#define PERF_REG_SP PERF_REG_ARM64_SP #include "util/unwind-libunwind-local.c" struct unwind_libunwind_ops * diff --git a/tools/perf/util/libunwind/x86_32.c b/tools/perf/util/libunwind/x86_32.c index d98c17e..de21a39 100644 --- a/tools/perf/util/libunwind/x86_32.c +++ b/tools/perf/util/libunwind/x86_32.c @@ -31,6 +31,11 @@ #ifndef NO_LIBUNWIND_DEBUG_FRAME #define NO_LIBUNWIND_DEBUG_FRAME #endif + +#undef PERF_REG_IP +#undef PERF_REG_SP +#define PERF_REG_IP PERF_REG_X86_IP +#define PERF_REG_SP PERF_REG_X86_SP #include "util/unwind-libunwind-local.c" struct unwind_libunwind_ops * > but from a quick look I couldn't see this as being supported, is that > true or I was just lazy not to have tried this? > > - Arnaldo
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web