* [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).