linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] Fixes on remote unwind
@ 2016-06-08 10:15 He Kuang
  2016-06-08 10:15 ` [PATCH 1/3] perf unwind: Change macro names of perf register He Kuang
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: He Kuang @ 2016-06-08 10:15 UTC (permalink / raw)
  To: peterz, mingo, acme, alexander.shishkin, jolsa, wangnan0,
	hekuang, jpoimboe, ak, eranian, namhyung, adrian.hunter, sukadev,
	masami.hiramatsu.pt, tumanova, kan.liang, penberg, dsahern
  Cc: linux-kernel

The remote unwind can supported scenario where we collect on a x86_64
machine and want to do analysis on a ARM64 or x86-32 machine. Though
this is not tested, after Arnaldo questioned the above issue, I tested
and found a bug.

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.

To Arnaldo, I noticed that this patch
"perf tools: Find vdso supporting cross-platform analysis"
is not on "origin/perf/unwind" branch, this patch was applied, please
check if it was missed, the above test needs this patch.

Thank you.

He Kuang (3):
  perf unwind: Change macro names of perf register
  perf unwind: Fix wrongly used regs for x86_32 unwind
  perf unwind: Fix wrongly used regs for aarch64 unwind

 tools/perf/util/libunwind/arm64.c        | 5 +++++
 tools/perf/util/libunwind/x86_32.c       | 6 ++++++
 tools/perf/util/unwind-libunwind-local.c | 6 ++++--
 tools/perf/util/unwind.h                 | 9 +++++++++
 4 files changed, 24 insertions(+), 2 deletions(-)

-- 
1.8.5.2

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/3] perf unwind: Change macro names of perf register
  2016-06-08 10:15 [PATCH 0/3] Fixes on remote unwind He Kuang
@ 2016-06-08 10:15 ` He Kuang
  2016-06-08 10:15 ` [PATCH 2/3] perf unwind: Fix wrongly used regs for x86_32 unwind He Kuang
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: He Kuang @ 2016-06-08 10:15 UTC (permalink / raw)
  To: peterz, mingo, acme, alexander.shishkin, jolsa, wangnan0,
	hekuang, jpoimboe, ak, eranian, namhyung, adrian.hunter, sukadev,
	masami.hiramatsu.pt, tumanova, kan.liang, penberg, dsahern
  Cc: linux-kernel

Use macro name prefixed with "LIBUNWIND_ARCH" for better understanding
that the regs used by callbacks of libunwind are arch specific. The
real regs used should be defined in the wrapper file of
"unwind-libunwind-local.c" for each supported arch.

Signed-off-by: He Kuang <hekuang@huawei.com>
---
 tools/perf/util/unwind-libunwind-local.c | 6 ++++--
 tools/perf/util/unwind.h                 | 9 +++++++++
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/unwind-libunwind-local.c b/tools/perf/util/unwind-libunwind-local.c
index 01c2e86..97c0f8f 100644
--- a/tools/perf/util/unwind-libunwind-local.c
+++ b/tools/perf/util/unwind-libunwind-local.c
@@ -462,7 +462,8 @@ static int access_mem(unw_addr_space_t __maybe_unused as,
 		return 0;
 	}
 
-	ret = perf_reg_value(&start, &ui->sample->user_regs, PERF_REG_SP);
+	ret = perf_reg_value(&start, &ui->sample->user_regs,
+			     LIBUNWIND__ARCH_REG_SP);
 	if (ret)
 		return ret;
 
@@ -621,7 +622,8 @@ static int get_entries(struct unwind_info *ui, unwind_entry_cb_t cb,
 	unw_cursor_t c;
 	int ret, i = 0;
 
-	ret = perf_reg_value(&val, &ui->sample->user_regs, PERF_REG_IP);
+	ret = perf_reg_value(&val, &ui->sample->user_regs,
+			     LIBUNWIND__ARCH_REG_IP);
 	if (ret)
 		return ret;
 
diff --git a/tools/perf/util/unwind.h b/tools/perf/util/unwind.h
index b074662..84c6d44 100644
--- a/tools/perf/util/unwind.h
+++ b/tools/perf/util/unwind.h
@@ -32,6 +32,15 @@ int unwind__get_entries(unwind_entry_cb_t cb, void *arg,
 #ifndef LIBUNWIND__ARCH_REG_ID
 #define LIBUNWIND__ARCH_REG_ID(regnum) libunwind__arch_reg_id(regnum)
 #endif
+
+#ifndef LIBUNWIND__ARCH_REG_SP
+#define LIBUNWIND__ARCH_REG_SP PERF_REG_SP
+#endif
+
+#ifndef LIBUNWIND__ARCH_REG_IP
+#define LIBUNWIND__ARCH_REG_IP PERF_REG_IP
+#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);
-- 
1.8.5.2

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/3] perf unwind: Fix wrongly used regs for x86_32 unwind
  2016-06-08 10:15 [PATCH 0/3] Fixes on remote unwind He Kuang
  2016-06-08 10:15 ` [PATCH 1/3] perf unwind: Change macro names of perf register He Kuang
@ 2016-06-08 10:15 ` He Kuang
  2016-06-08 10:15 ` [PATCH 3/3] perf unwind: Fix wrongly used regs for aarch64 unwind He Kuang
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: He Kuang @ 2016-06-08 10:15 UTC (permalink / raw)
  To: peterz, mingo, acme, alexander.shishkin, jolsa, wangnan0,
	hekuang, jpoimboe, ak, eranian, namhyung, adrian.hunter, sukadev,
	masami.hiramatsu.pt, tumanova, kan.liang, penberg, dsahern
  Cc: linux-kernel

By default, "unwind-libunwind-local.c" gets SP/IP register number
according to the host platform, for remote unwind, we should use
register number for target platform. Fix this by define
LIBUNWIND_ARCH_REG_SP/IP in the wrapper file of x86_32 platform.

Signed-off-by: He Kuang <hekuang@huawei.com>
---
 tools/perf/util/libunwind/x86_32.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/tools/perf/util/libunwind/x86_32.c b/tools/perf/util/libunwind/x86_32.c
index d98c17e..957ffff 100644
--- a/tools/perf/util/libunwind/x86_32.c
+++ b/tools/perf/util/libunwind/x86_32.c
@@ -12,7 +12,13 @@
  */
 
 #define REMOTE_UNWIND_LIBUNWIND
+
+/* Define arch specific functions & regs for libunwind, should be
+ * defined before including "unwind.h"
+ */
 #define LIBUNWIND__ARCH_REG_ID(regnum) libunwind__x86_reg_id(regnum)
+#define LIBUNWIND__ARCH_REG_IP PERF_REG_X86_IP
+#define LIBUNWIND__ARCH_REG_SP PERF_REG_X86_SP
 
 #include "unwind.h"
 #include "debug.h"
-- 
1.8.5.2

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/3] perf unwind: Fix wrongly used regs for aarch64 unwind
  2016-06-08 10:15 [PATCH 0/3] Fixes on remote unwind He Kuang
  2016-06-08 10:15 ` [PATCH 1/3] perf unwind: Change macro names of perf register He Kuang
  2016-06-08 10:15 ` [PATCH 2/3] perf unwind: Fix wrongly used regs for x86_32 unwind He Kuang
@ 2016-06-08 10:15 ` He Kuang
  2016-06-12 10:03 ` [PATCH 0/3] Fixes on remote unwind Hekuang
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: He Kuang @ 2016-06-08 10:15 UTC (permalink / raw)
  To: peterz, mingo, acme, alexander.shishkin, jolsa, wangnan0,
	hekuang, jpoimboe, ak, eranian, namhyung, adrian.hunter, sukadev,
	masami.hiramatsu.pt, tumanova, kan.liang, penberg, dsahern
  Cc: linux-kernel

By default, "unwind-libunwind-local.c" gets SP/IP register number
according to the host platform, for remote unwind, we should use
register number for target platform. Fix this by define
LIBUNWIND_ARCH_REG_SP/IP in the wrapper file of aarch64 platform.

Signed-off-by: He Kuang <hekuang@huawei.com>
---
 tools/perf/util/libunwind/arm64.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/tools/perf/util/libunwind/arm64.c b/tools/perf/util/libunwind/arm64.c
index 4fb5395..6559bc5 100644
--- a/tools/perf/util/libunwind/arm64.c
+++ b/tools/perf/util/libunwind/arm64.c
@@ -13,7 +13,12 @@
 
 #define REMOTE_UNWIND_LIBUNWIND
 
+/* Define arch specific functions & regs for libunwind, should be
+ * defined before including "unwind.h"
+ */
 #define LIBUNWIND__ARCH_REG_ID(regnum) libunwind__arm64_reg_id(regnum)
+#define LIBUNWIND__ARCH_REG_IP PERF_REG_ARM64_PC
+#define LIBUNWIND__ARCH_REG_SP PERF_REG_ARM64_SP
 
 #include "unwind.h"
 #include "debug.h"
-- 
1.8.5.2

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/3] Fixes on remote unwind
  2016-06-08 10:15 [PATCH 0/3] Fixes on remote unwind He Kuang
                   ` (2 preceding siblings ...)
  2016-06-08 10:15 ` [PATCH 3/3] perf unwind: Fix wrongly used regs for aarch64 unwind He Kuang
@ 2016-06-12 10:03 ` Hekuang
  2016-06-21  1:59 ` Hekuang
  2016-06-21  7:33 ` Jiri Olsa
  5 siblings, 0 replies; 7+ messages in thread
From: Hekuang @ 2016-06-12 10:03 UTC (permalink / raw)
  To: acme, mingo, Peter Zijlstra, alexander.shishkin, jolsa, wangnan0,
	jpoimboe, ak, eranian, namhyung, adrian.hunter, sukadev,
	masami.hiramatsu.pt, tumanova, kan.liang, penberg, dsahern
  Cc: linux-kernel



在 2016/6/8 18:15, He Kuang 写道:
> The remote unwind can supported scenario where we collect on a x86_64
> machine and want to do analysis on a ARM64 or x86-32 machine. Though
> this is not tested, after Arnaldo questioned the above issue, I tested
> and found a bug.
>
> 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.
>
> To Arnaldo, I noticed that this patch
> "perf tools: Find vdso supporting cross-platform analysis"
> is not on "origin/perf/unwind" branch, this patch was applied, please
> check if it was missed, the above test needs this patch.
  I also checked tip.git, this patch is not there either, is this patch 
missed?
This is the previous git pull request mail:

https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1148601.html

Thank you.
>
> Thank you.
>
> He Kuang (3):
>    perf unwind: Change macro names of perf register
>    perf unwind: Fix wrongly used regs for x86_32 unwind
>    perf unwind: Fix wrongly used regs for aarch64 unwind
>
>   tools/perf/util/libunwind/arm64.c        | 5 +++++
>   tools/perf/util/libunwind/x86_32.c       | 6 ++++++
>   tools/perf/util/unwind-libunwind-local.c | 6 ++++--
>   tools/perf/util/unwind.h                 | 9 +++++++++
>   4 files changed, 24 insertions(+), 2 deletions(-)
>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/3] Fixes on remote unwind
  2016-06-08 10:15 [PATCH 0/3] Fixes on remote unwind He Kuang
                   ` (3 preceding siblings ...)
  2016-06-12 10:03 ` [PATCH 0/3] Fixes on remote unwind Hekuang
@ 2016-06-21  1:59 ` Hekuang
  2016-06-21  7:33 ` Jiri Olsa
  5 siblings, 0 replies; 7+ messages in thread
From: Hekuang @ 2016-06-21  1:59 UTC (permalink / raw)
  To: peterz, mingo, acme, alexander.shishkin, jolsa, wangnan0,
	jpoimboe, ak, eranian, namhyung, adrian.hunter, sukadev,
	masami.hiramatsu.pt, tumanova, kan.liang, penberg, dsahern
  Cc: linux-kernel



在 2016/6/8 18:15, He Kuang 写道:
> The remote unwind can supported scenario where we collect on a x86_64
> machine and want to do analysis on a ARM64 or x86-32 machine. Though
> this is not tested, after Arnaldo questioned the above issue, I tested
> and found a bug.
>
> 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.
>
> To Arnaldo, I noticed that this patch
> "perf tools: Find vdso supporting cross-platform analysis"
> is not on "origin/perf/unwind" branch, this patch was applied, please
> check if it was missed, the above test needs this patch.
Thanks for solving this, and please have a look at the patches in
this thread.
>
> He Kuang (3):
>    perf unwind: Change macro names of perf register
>    perf unwind: Fix wrongly used regs for x86_32 unwind
>    perf unwind: Fix wrongly used regs for aarch64 unwind
>
>   tools/perf/util/libunwind/arm64.c        | 5 +++++
>   tools/perf/util/libunwind/x86_32.c       | 6 ++++++
>   tools/perf/util/unwind-libunwind-local.c | 6 ++++--
>   tools/perf/util/unwind.h                 | 9 +++++++++
>   4 files changed, 24 insertions(+), 2 deletions(-)
>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/3] Fixes on remote unwind
  2016-06-08 10:15 [PATCH 0/3] Fixes on remote unwind He Kuang
                   ` (4 preceding siblings ...)
  2016-06-21  1:59 ` Hekuang
@ 2016-06-21  7:33 ` Jiri Olsa
  5 siblings, 0 replies; 7+ messages in thread
From: Jiri Olsa @ 2016-06-21  7:33 UTC (permalink / raw)
  To: He Kuang
  Cc: peterz, mingo, acme, alexander.shishkin, wangnan0, jpoimboe, ak,
	eranian, namhyung, adrian.hunter, sukadev, masami.hiramatsu.pt,
	tumanova, kan.liang, penberg, dsahern, linux-kernel

On Wed, Jun 08, 2016 at 10:15:35AM +0000, He Kuang wrote:
> The remote unwind can supported scenario where we collect on a x86_64
> machine and want to do analysis on a ARM64 or x86-32 machine. Though
> this is not tested, after Arnaldo questioned the above issue, I tested
> and found a bug.
> 
> 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.
> 
> To Arnaldo, I noticed that this patch
> "perf tools: Find vdso supporting cross-platform analysis"
> is not on "origin/perf/unwind" branch, this patch was applied, please
> check if it was missed, the above test needs this patch.
> 
> Thank you.
> 
> He Kuang (3):
>   perf unwind: Change macro names of perf register
>   perf unwind: Fix wrongly used regs for x86_32 unwind
>   perf unwind: Fix wrongly used regs for aarch64 unwind

for the patchset:

Acked-by: Jiri Olsa <jolsa@kernel.org>

thanks,
jirka

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2016-06-21  7:33 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-08 10:15 [PATCH 0/3] Fixes on remote unwind He Kuang
2016-06-08 10:15 ` [PATCH 1/3] perf unwind: Change macro names of perf register He Kuang
2016-06-08 10:15 ` [PATCH 2/3] perf unwind: Fix wrongly used regs for x86_32 unwind He Kuang
2016-06-08 10:15 ` [PATCH 3/3] perf unwind: Fix wrongly used regs for aarch64 unwind He Kuang
2016-06-12 10:03 ` [PATCH 0/3] Fixes on remote unwind Hekuang
2016-06-21  1:59 ` Hekuang
2016-06-21  7:33 ` Jiri Olsa

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).