linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] perf tools arm64: Add libdw DWARF post unwind support for ARM64
       [not found]     ` <9B701F46-6AEA-48D8-9103-71D35C83776D@cisco.com>
@ 2018-03-09  3:10       ` Kim Phillips
  2018-03-09 15:06         ` Arnaldo Carvalho de Melo
  2018-03-20  6:20         ` [tip:perf/core] " tip-bot for Kim Phillips
  0 siblings, 2 replies; 11+ messages in thread
From: Kim Phillips @ 2018-03-09  3:10 UTC (permalink / raw)
  To: Christian Hansen (chansen3), Arnaldo Carvalho de Melo
  Cc: linux-perf-users, Peter Zijlstra, Ingo Molnar,
	Alexander Shishkin, Jiri Olsa, Namhyung Kim, linux-kernel

Based on prior work:

https://lkml.org/lkml/2014/5/6/395

and how other arches add libdw unwind support.  Includes support for
running the unwind test, e.g., on a system with only elfutils' libdw
0.170, the test now runs, and successfully:

$ ./perf test unwind
56: Test dwarf unwind                                     : Ok

Reported-by: Christian Hansen <chansen3@cisco.com>
Originally-by: Jean Pihet <jean.pihet@linaro.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: linux-kernel@vger.kernel.org
Cc: linux-perf-users@vger.kernel.org
Signed-off-by: Kim Phillips <kim.phillips@arm.com>
---
 tools/perf/Makefile.config                 |  2 +-
 tools/perf/arch/arm64/include/arch-tests.h | 12 ++++++
 tools/perf/arch/arm64/tests/Build          |  3 ++
 tools/perf/arch/arm64/tests/arch-tests.c   | 16 ++++++++
 tools/perf/arch/arm64/util/Build           |  1 +
 tools/perf/arch/arm64/util/unwind-libdw.c  | 60 ++++++++++++++++++++++++++++++
 6 files changed, 93 insertions(+), 1 deletion(-)
 create mode 100644 tools/perf/arch/arm64/include/arch-tests.h
 create mode 100644 tools/perf/arch/arm64/tests/arch-tests.c
 create mode 100644 tools/perf/arch/arm64/util/unwind-libdw.c

diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
index 89cb2a36b8ff..98ff73648b51 100644
--- a/tools/perf/Makefile.config
+++ b/tools/perf/Makefile.config
@@ -75,7 +75,7 @@ endif
 # Disable it on all other architectures in case libdw unwind
 # support is detected in system. Add supported architectures
 # to the check.
-ifneq ($(SRCARCH),$(filter $(SRCARCH),x86 arm powerpc s390))
+ifneq ($(SRCARCH),$(filter $(SRCARCH),x86 arm arm64 powerpc s390))
   NO_LIBDW_DWARF_UNWIND := 1
 endif
 
diff --git a/tools/perf/arch/arm64/include/arch-tests.h b/tools/perf/arch/arm64/include/arch-tests.h
new file mode 100644
index 000000000000..90ec4c8cb880
--- /dev/null
+++ b/tools/perf/arch/arm64/include/arch-tests.h
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef ARCH_TESTS_H
+#define ARCH_TESTS_H
+
+#ifdef HAVE_DWARF_UNWIND_SUPPORT
+struct thread;
+struct perf_sample;
+#endif
+
+extern struct test arch_tests[];
+
+#endif
diff --git a/tools/perf/arch/arm64/tests/Build b/tools/perf/arch/arm64/tests/Build
index b30eff9bcc83..ca5630e73474 100644
--- a/tools/perf/arch/arm64/tests/Build
+++ b/tools/perf/arch/arm64/tests/Build
@@ -1,2 +1,5 @@
 libperf-y += regs_load.o
 libperf-y += dwarf-unwind.o
+
+libperf-y += arch-tests.o
+
diff --git a/tools/perf/arch/arm64/tests/arch-tests.c b/tools/perf/arch/arm64/tests/arch-tests.c
new file mode 100644
index 000000000000..5b1543c98022
--- /dev/null
+++ b/tools/perf/arch/arm64/tests/arch-tests.c
@@ -0,0 +1,16 @@
+// SPDX-License-Identifier: GPL-2.0
+#include <string.h>
+#include "tests/tests.h"
+#include "arch-tests.h"
+
+struct test arch_tests[] = {
+#ifdef HAVE_DWARF_UNWIND_SUPPORT
+	{
+		.desc = "DWARF unwind",
+		.func = test__dwarf_unwind,
+	},
+#endif
+	{
+		.func = NULL,
+	},
+};
diff --git a/tools/perf/arch/arm64/util/Build b/tools/perf/arch/arm64/util/Build
index c0b8dfef98ba..68f8a8eb3ad0 100644
--- a/tools/perf/arch/arm64/util/Build
+++ b/tools/perf/arch/arm64/util/Build
@@ -2,6 +2,7 @@ libperf-y += header.o
 libperf-y += sym-handling.o
 libperf-$(CONFIG_DWARF)     += dwarf-regs.o
 libperf-$(CONFIG_LOCAL_LIBUNWIND) += unwind-libunwind.o
+libperf-$(CONFIG_LIBDW_DWARF_UNWIND) += unwind-libdw.o
 
 libperf-$(CONFIG_AUXTRACE) += ../../arm/util/pmu.o \
 			      ../../arm/util/auxtrace.o \
diff --git a/tools/perf/arch/arm64/util/unwind-libdw.c b/tools/perf/arch/arm64/util/unwind-libdw.c
new file mode 100644
index 000000000000..7623d85e77f3
--- /dev/null
+++ b/tools/perf/arch/arm64/util/unwind-libdw.c
@@ -0,0 +1,60 @@
+// SPDX-License-Identifier: GPL-2.0
+#include <elfutils/libdwfl.h>
+#include "../../util/unwind-libdw.h"
+#include "../../util/perf_regs.h"
+#include "../../util/event.h"
+
+bool libdw__arch_set_initial_registers(Dwfl_Thread *thread, void *arg)
+{
+	struct unwind_info *ui = arg;
+	struct regs_dump *user_regs = &ui->sample->user_regs;
+	Dwarf_Word dwarf_regs[PERF_REG_ARM64_MAX], dwarf_pc;
+
+#define REG(r) ({						\
+	Dwarf_Word val = 0;					\
+	perf_reg_value(&val, user_regs, PERF_REG_ARM64_##r);	\
+	val;							\
+})
+
+	dwarf_regs[0]  = REG(X0);
+	dwarf_regs[1]  = REG(X1);
+	dwarf_regs[2]  = REG(X2);
+	dwarf_regs[3]  = REG(X3);
+	dwarf_regs[4]  = REG(X4);
+	dwarf_regs[5]  = REG(X5);
+	dwarf_regs[6]  = REG(X6);
+	dwarf_regs[7]  = REG(X7);
+	dwarf_regs[8]  = REG(X8);
+	dwarf_regs[9]  = REG(X9);
+	dwarf_regs[10] = REG(X10);
+	dwarf_regs[11] = REG(X11);
+	dwarf_regs[12] = REG(X12);
+	dwarf_regs[13] = REG(X13);
+	dwarf_regs[14] = REG(X14);
+	dwarf_regs[15] = REG(X15);
+	dwarf_regs[16] = REG(X16);
+	dwarf_regs[17] = REG(X17);
+	dwarf_regs[18] = REG(X18);
+	dwarf_regs[19] = REG(X19);
+	dwarf_regs[20] = REG(X20);
+	dwarf_regs[21] = REG(X21);
+	dwarf_regs[22] = REG(X22);
+	dwarf_regs[23] = REG(X23);
+	dwarf_regs[24] = REG(X24);
+	dwarf_regs[25] = REG(X25);
+	dwarf_regs[26] = REG(X26);
+	dwarf_regs[27] = REG(X27);
+	dwarf_regs[28] = REG(X28);
+	dwarf_regs[29] = REG(X29);
+	dwarf_regs[30] = REG(LR);
+	dwarf_regs[31] = REG(SP);
+
+	if (!dwfl_thread_state_registers(thread, 0, PERF_REG_ARM64_MAX,
+					 dwarf_regs))
+		return false;
+
+	dwarf_pc = REG(PC);
+	dwfl_thread_state_register_pc(thread, dwarf_pc);
+
+	return true;
+}
-- 
2.16.2

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

* Re: [PATCH] perf tools arm64: Add libdw DWARF post unwind support for ARM64
  2018-03-09  3:10       ` [PATCH] perf tools arm64: Add libdw DWARF post unwind support for ARM64 Kim Phillips
@ 2018-03-09 15:06         ` Arnaldo Carvalho de Melo
  2018-03-09 18:07           ` Kim Phillips
  2018-03-20  6:20         ` [tip:perf/core] " tip-bot for Kim Phillips
  1 sibling, 1 reply; 11+ messages in thread
From: Arnaldo Carvalho de Melo @ 2018-03-09 15:06 UTC (permalink / raw)
  To: Kim Phillips, Jean Pihet
  Cc: Christian Hansen (chansen3),
	linux-perf-users, Peter Zijlstra, Ingo Molnar,
	Alexander Shishkin, Jiri Olsa, Namhyung Kim, linux-kernel

Em Thu, Mar 08, 2018 at 09:10:30PM -0600, Kim Phillips escreveu:
> Based on prior work:
> 
> https://lkml.org/lkml/2014/5/6/395

Thanks, looks good, applying.

Jean, is everything ok with you on this?

- Arnaldo
 
> and how other arches add libdw unwind support.  Includes support for
> running the unwind test, e.g., on a system with only elfutils' libdw
> 0.170, the test now runs, and successfully:
> 
> $ ./perf test unwind
> 56: Test dwarf unwind                                     : Ok
> 
> Reported-by: Christian Hansen <chansen3@cisco.com>
> Originally-by: Jean Pihet <jean.pihet@linaro.org>
> Cc: Peter Zijlstra <peterz@infradead.org>
> Cc: Ingo Molnar <mingo@redhat.com>
> Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
> Cc: Jiri Olsa <jolsa@redhat.com>
> Cc: Namhyung Kim <namhyung@kernel.org>
> Cc: linux-kernel@vger.kernel.org
> Cc: linux-perf-users@vger.kernel.org
> Signed-off-by: Kim Phillips <kim.phillips@arm.com>
> ---
>  tools/perf/Makefile.config                 |  2 +-
>  tools/perf/arch/arm64/include/arch-tests.h | 12 ++++++
>  tools/perf/arch/arm64/tests/Build          |  3 ++
>  tools/perf/arch/arm64/tests/arch-tests.c   | 16 ++++++++
>  tools/perf/arch/arm64/util/Build           |  1 +
>  tools/perf/arch/arm64/util/unwind-libdw.c  | 60 ++++++++++++++++++++++++++++++
>  6 files changed, 93 insertions(+), 1 deletion(-)
>  create mode 100644 tools/perf/arch/arm64/include/arch-tests.h
>  create mode 100644 tools/perf/arch/arm64/tests/arch-tests.c
>  create mode 100644 tools/perf/arch/arm64/util/unwind-libdw.c
> 
> diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
> index 89cb2a36b8ff..98ff73648b51 100644
> --- a/tools/perf/Makefile.config
> +++ b/tools/perf/Makefile.config
> @@ -75,7 +75,7 @@ endif
>  # Disable it on all other architectures in case libdw unwind
>  # support is detected in system. Add supported architectures
>  # to the check.
> -ifneq ($(SRCARCH),$(filter $(SRCARCH),x86 arm powerpc s390))
> +ifneq ($(SRCARCH),$(filter $(SRCARCH),x86 arm arm64 powerpc s390))
>    NO_LIBDW_DWARF_UNWIND := 1
>  endif
>  
> diff --git a/tools/perf/arch/arm64/include/arch-tests.h b/tools/perf/arch/arm64/include/arch-tests.h
> new file mode 100644
> index 000000000000..90ec4c8cb880
> --- /dev/null
> +++ b/tools/perf/arch/arm64/include/arch-tests.h
> @@ -0,0 +1,12 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +#ifndef ARCH_TESTS_H
> +#define ARCH_TESTS_H
> +
> +#ifdef HAVE_DWARF_UNWIND_SUPPORT
> +struct thread;
> +struct perf_sample;
> +#endif
> +
> +extern struct test arch_tests[];
> +
> +#endif
> diff --git a/tools/perf/arch/arm64/tests/Build b/tools/perf/arch/arm64/tests/Build
> index b30eff9bcc83..ca5630e73474 100644
> --- a/tools/perf/arch/arm64/tests/Build
> +++ b/tools/perf/arch/arm64/tests/Build
> @@ -1,2 +1,5 @@
>  libperf-y += regs_load.o
>  libperf-y += dwarf-unwind.o
> +
> +libperf-y += arch-tests.o
> +
> diff --git a/tools/perf/arch/arm64/tests/arch-tests.c b/tools/perf/arch/arm64/tests/arch-tests.c
> new file mode 100644
> index 000000000000..5b1543c98022
> --- /dev/null
> +++ b/tools/perf/arch/arm64/tests/arch-tests.c
> @@ -0,0 +1,16 @@
> +// SPDX-License-Identifier: GPL-2.0
> +#include <string.h>
> +#include "tests/tests.h"
> +#include "arch-tests.h"
> +
> +struct test arch_tests[] = {
> +#ifdef HAVE_DWARF_UNWIND_SUPPORT
> +	{
> +		.desc = "DWARF unwind",
> +		.func = test__dwarf_unwind,
> +	},
> +#endif
> +	{
> +		.func = NULL,
> +	},
> +};
> diff --git a/tools/perf/arch/arm64/util/Build b/tools/perf/arch/arm64/util/Build
> index c0b8dfef98ba..68f8a8eb3ad0 100644
> --- a/tools/perf/arch/arm64/util/Build
> +++ b/tools/perf/arch/arm64/util/Build
> @@ -2,6 +2,7 @@ libperf-y += header.o
>  libperf-y += sym-handling.o
>  libperf-$(CONFIG_DWARF)     += dwarf-regs.o
>  libperf-$(CONFIG_LOCAL_LIBUNWIND) += unwind-libunwind.o
> +libperf-$(CONFIG_LIBDW_DWARF_UNWIND) += unwind-libdw.o
>  
>  libperf-$(CONFIG_AUXTRACE) += ../../arm/util/pmu.o \
>  			      ../../arm/util/auxtrace.o \
> diff --git a/tools/perf/arch/arm64/util/unwind-libdw.c b/tools/perf/arch/arm64/util/unwind-libdw.c
> new file mode 100644
> index 000000000000..7623d85e77f3
> --- /dev/null
> +++ b/tools/perf/arch/arm64/util/unwind-libdw.c
> @@ -0,0 +1,60 @@
> +// SPDX-License-Identifier: GPL-2.0
> +#include <elfutils/libdwfl.h>
> +#include "../../util/unwind-libdw.h"
> +#include "../../util/perf_regs.h"
> +#include "../../util/event.h"
> +
> +bool libdw__arch_set_initial_registers(Dwfl_Thread *thread, void *arg)
> +{
> +	struct unwind_info *ui = arg;
> +	struct regs_dump *user_regs = &ui->sample->user_regs;
> +	Dwarf_Word dwarf_regs[PERF_REG_ARM64_MAX], dwarf_pc;
> +
> +#define REG(r) ({						\
> +	Dwarf_Word val = 0;					\
> +	perf_reg_value(&val, user_regs, PERF_REG_ARM64_##r);	\
> +	val;							\
> +})
> +
> +	dwarf_regs[0]  = REG(X0);
> +	dwarf_regs[1]  = REG(X1);
> +	dwarf_regs[2]  = REG(X2);
> +	dwarf_regs[3]  = REG(X3);
> +	dwarf_regs[4]  = REG(X4);
> +	dwarf_regs[5]  = REG(X5);
> +	dwarf_regs[6]  = REG(X6);
> +	dwarf_regs[7]  = REG(X7);
> +	dwarf_regs[8]  = REG(X8);
> +	dwarf_regs[9]  = REG(X9);
> +	dwarf_regs[10] = REG(X10);
> +	dwarf_regs[11] = REG(X11);
> +	dwarf_regs[12] = REG(X12);
> +	dwarf_regs[13] = REG(X13);
> +	dwarf_regs[14] = REG(X14);
> +	dwarf_regs[15] = REG(X15);
> +	dwarf_regs[16] = REG(X16);
> +	dwarf_regs[17] = REG(X17);
> +	dwarf_regs[18] = REG(X18);
> +	dwarf_regs[19] = REG(X19);
> +	dwarf_regs[20] = REG(X20);
> +	dwarf_regs[21] = REG(X21);
> +	dwarf_regs[22] = REG(X22);
> +	dwarf_regs[23] = REG(X23);
> +	dwarf_regs[24] = REG(X24);
> +	dwarf_regs[25] = REG(X25);
> +	dwarf_regs[26] = REG(X26);
> +	dwarf_regs[27] = REG(X27);
> +	dwarf_regs[28] = REG(X28);
> +	dwarf_regs[29] = REG(X29);
> +	dwarf_regs[30] = REG(LR);
> +	dwarf_regs[31] = REG(SP);
> +
> +	if (!dwfl_thread_state_registers(thread, 0, PERF_REG_ARM64_MAX,
> +					 dwarf_regs))
> +		return false;
> +
> +	dwarf_pc = REG(PC);
> +	dwfl_thread_state_register_pc(thread, dwarf_pc);
> +
> +	return true;
> +}
> -- 
> 2.16.2

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

* Re: [PATCH] perf tools arm64: Add libdw DWARF post unwind support for ARM64
  2018-03-09 15:06         ` Arnaldo Carvalho de Melo
@ 2018-03-09 18:07           ` Kim Phillips
  2018-03-09 18:24             ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 11+ messages in thread
From: Kim Phillips @ 2018-03-09 18:07 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Christian Hansen (chansen3),
	linux-perf-users, Peter Zijlstra, Ingo Molnar,
	Alexander Shishkin, Jiri Olsa, Namhyung Kim, linux-kernel,
	Mathieu Poirier, Vuille, Martin (Martin),
	Martin Vuille

On Fri, 9 Mar 2018 12:06:27 -0300
Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

Hi Arnaldo,

> Em Thu, Mar 08, 2018 at 09:10:30PM -0600, Kim Phillips escreveu:
> > Based on prior work:
> > 
> > https://lkml.org/lkml/2014/5/6/395
> 
> Thanks, looks good, applying.
> 
> Jean, is everything ok with you on this?

By now your email to Jean should have bounced with "The email account
that you tried to reach does not exist."  Removing Jean from Cc.

It seems like you're applying patches.  There are a couple that have
slipped through the cracks: Can you please take a look at applying them?

- "perf tools: Fixing uninitialised variable"
  https://patchwork.kernel.org/patch/10179381/

- "perf unwind: Report error from dwfl_attach_state"
  https://patchwork.kernel.org/patch/10211483/
  [Martin, I guess it would help if you replied-all that patch and
   added your signed-off-by.]

- "perf unwind: Unwind with libdw doesn't take symfs into account"
  https://patchwork.kernel.org/patch/10211599/

Thanks,

Kim

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

* Re: [PATCH] perf tools arm64: Add libdw DWARF post unwind support for ARM64
  2018-03-09 18:07           ` Kim Phillips
@ 2018-03-09 18:24             ` Arnaldo Carvalho de Melo
  2018-03-09 18:49               ` Martin Vuille
  2018-03-13 15:23               ` Martin Vuille
  0 siblings, 2 replies; 11+ messages in thread
From: Arnaldo Carvalho de Melo @ 2018-03-09 18:24 UTC (permalink / raw)
  To: Kim Phillips, Jiri Olsa
  Cc: Christian Hansen (chansen3),
	linux-perf-users, Peter Zijlstra, Ingo Molnar,
	Alexander Shishkin, Jiri Olsa, Namhyung Kim, linux-kernel,
	Mathieu Poirier, Vuille, Martin (Martin),
	Martin Vuille

Em Fri, Mar 09, 2018 at 12:07:20PM -0600, Kim Phillips escreveu:
> On Fri, 9 Mar 2018 12:06:27 -0300
> Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
> 
> Hi Arnaldo,
> 
> > Em Thu, Mar 08, 2018 at 09:10:30PM -0600, Kim Phillips escreveu:
> > > Based on prior work:
> > > 
> > > https://lkml.org/lkml/2014/5/6/395
> > 
> > Thanks, looks good, applying.
> > 
> > Jean, is everything ok with you on this?
> 
> By now your email to Jean should have bounced with "The email account
> that you tried to reach does not exist."  Removing Jean from Cc.
> 
> It seems like you're applying patches.  There are a couple that have
> slipped through the cracks: Can you please take a look at applying them?
> 
> - "perf tools: Fixing uninitialised variable"
>   https://patchwork.kernel.org/patch/10179381/

[acme@jouet perf]$ git tag --contains d2785de15f1bd42d613d56bbac5a007e7293b874
perf-core-for-mingo-4.17-20180216

commit d2785de15f1bd42d613d56bbac5a007e7293b874
Author:     Mathieu Poirier <mathieu.poirier@linaro.org>
AuthorDate: Mon Feb 12 13:32:37 2018 -0700
Commit:     Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Fri Feb 16 14:55:40 2018 -0300

    perf auxtrace arm: Fixing uninitialised variable
    
    When working natively on arm64 the compiler gets pesky and complains
    that variable 'i' is uninitialised, something that breaks the
    compilation.  Here no further checks are needed since variable
    'found_spe' can only be true if variable 'i' has been initialised as
    part of the for loop.
    
    Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Jin Yao <yao.jin@linux.intel.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: linux-arm-kernel@lists.infradead.org
    Link: http://lkml.kernel.org/r/1518467557-18505-4-git-send-email-mathieu.poirier@linaro.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

diff --git a/tools/perf/arch/arm/util/auxtrace.c b/tools/perf/arch/arm/util/auxtrace.c
index 2323581b157d..fa639e3e52ac 100644
--- a/tools/perf/arch/arm/util/auxtrace.c
+++ b/tools/perf/arch/arm/util/auxtrace.c
@@ -68,7 +68,7 @@ struct auxtrace_record
        bool found_spe = false;
        static struct perf_pmu **arm_spe_pmus = NULL;
        static int nr_spes = 0;
-       int i;
+       int i = 0;
 
> - "perf unwind: Report error from dwfl_attach_state"
>   https://patchwork.kernel.org/patch/10211483/
>   [Martin, I guess it would help if you replied-all that patch and
>    added your signed-off-by.]

Right, the S-o-B is needed
 
> - "perf unwind: Unwind with libdw doesn't take symfs into account"
>   https://patchwork.kernel.org/patch/10211599/

This one has the S-o-B, applying, Jiri, holler if you disagree,

- Arnaldo
 
> Thanks,
> 
> Kim

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

* Re: [PATCH] perf tools arm64: Add libdw DWARF post unwind support for ARM64
  2018-03-09 18:24             ` Arnaldo Carvalho de Melo
@ 2018-03-09 18:49               ` Martin Vuille
  2018-03-09 19:15                 ` Kim Phillips
  2018-03-09 19:29                 ` Arnaldo Carvalho de Melo
  2018-03-13 15:23               ` Martin Vuille
  1 sibling, 2 replies; 11+ messages in thread
From: Martin Vuille @ 2018-03-09 18:49 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Kim Phillips, Jiri Olsa
  Cc: Christian Hansen (chansen3),
	linux-perf-users, Peter Zijlstra, Ingo Molnar,
	Alexander Shishkin, Jiri Olsa, Namhyung Kim, linux-kernel,
	Mathieu Poirier, Vuille, Martin (Martin)

Hi,

I made two other submissions that may also have been overlooked:

https://patchwork.kernel.org/patch/10211401/ -- This one has the S-o-B

https://patchwork.kernel.org/patch/10211473/ -- RFC, was looking for comments, has the S-o-B


For https://patchwork.kernel.org/patch/10211483/, I'm not sure how to go about doing a reply to all.

I had some email problems and was cut-off from the list for a while.

MV


On 03/09/18 13:24, Arnaldo Carvalho de Melo wrote:
> Em Fri, Mar 09, 2018 at 12:07:20PM -0600, Kim Phillips escreveu:
>> On Fri, 9 Mar 2018 12:06:27 -0300
>> Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
>>
>> Hi Arnaldo,
>>
>>> Em Thu, Mar 08, 2018 at 09:10:30PM -0600, Kim Phillips escreveu:
>>>> Based on prior work:
>>>>
>>>> https://lkml.org/lkml/2014/5/6/395
>>> Thanks, looks good, applying.
>>>
>>> Jean, is everything ok with you on this?
>> By now your email to Jean should have bounced with "The email account
>> that you tried to reach does not exist."  Removing Jean from Cc.
>>
>> It seems like you're applying patches.  There are a couple that have
>> slipped through the cracks: Can you please take a look at applying them?
>>
>> - "perf tools: Fixing uninitialised variable"
>>    https://patchwork.kernel.org/patch/10179381/
> [acme@jouet perf]$ git tag --contains d2785de15f1bd42d613d56bbac5a007e7293b874
> perf-core-for-mingo-4.17-20180216
>
> commit d2785de15f1bd42d613d56bbac5a007e7293b874
> Author:     Mathieu Poirier <mathieu.poirier@linaro.org>
> AuthorDate: Mon Feb 12 13:32:37 2018 -0700
> Commit:     Arnaldo Carvalho de Melo <acme@redhat.com>
> CommitDate: Fri Feb 16 14:55:40 2018 -0300
>
>      perf auxtrace arm: Fixing uninitialised variable
>      
>      When working natively on arm64 the compiler gets pesky and complains
>      that variable 'i' is uninitialised, something that breaks the
>      compilation.  Here no further checks are needed since variable
>      'found_spe' can only be true if variable 'i' has been initialised as
>      part of the for loop.
>      
>      Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
>      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
>      Cc: Jin Yao <yao.jin@linux.intel.com>
>      Cc: Namhyung Kim <namhyung@kernel.org>
>      Cc: Peter Zijlstra <peterz@infradead.org>
>      Cc: linux-arm-kernel@lists.infradead.org
>      Link: http://lkml.kernel.org/r/1518467557-18505-4-git-send-email-mathieu.poirier@linaro.org
>      Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
>
> diff --git a/tools/perf/arch/arm/util/auxtrace.c b/tools/perf/arch/arm/util/auxtrace.c
> index 2323581b157d..fa639e3e52ac 100644
> --- a/tools/perf/arch/arm/util/auxtrace.c
> +++ b/tools/perf/arch/arm/util/auxtrace.c
> @@ -68,7 +68,7 @@ struct auxtrace_record
>          bool found_spe = false;
>          static struct perf_pmu **arm_spe_pmus = NULL;
>          static int nr_spes = 0;
> -       int i;
> +       int i = 0;
>   
>> - "perf unwind: Report error from dwfl_attach_state"
>>    https://patchwork.kernel.org/patch/10211483/
>>    [Martin, I guess it would help if you replied-all that patch and
>>     added your signed-off-by.]
> Right, the S-o-B is needed
>   
>> - "perf unwind: Unwind with libdw doesn't take symfs into account"
>>    https://patchwork.kernel.org/patch/10211599/
> This one has the S-o-B, applying, Jiri, holler if you disagree,
>
> - Arnaldo
>   
>> Thanks,
>>
>> Kim
> --
> To unsubscribe from this list: send the line "unsubscribe linux-perf-users" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: [PATCH] perf tools arm64: Add libdw DWARF post unwind support for ARM64
  2018-03-09 18:49               ` Martin Vuille
@ 2018-03-09 19:15                 ` Kim Phillips
  2018-03-09 19:17                   ` Martin Vuille
  2018-03-09 19:29                 ` Arnaldo Carvalho de Melo
  1 sibling, 1 reply; 11+ messages in thread
From: Kim Phillips @ 2018-03-09 19:15 UTC (permalink / raw)
  To: Martin Vuille
  Cc: Arnaldo Carvalho de Melo, Jiri Olsa, Christian Hansen (chansen3),
	linux-perf-users, Peter Zijlstra, Ingo Molnar,
	Alexander Shishkin, Jiri Olsa, Namhyung Kim, linux-kernel,
	Mathieu Poirier, Vuille, Martin (Martin)

On Fri, 9 Mar 2018 13:49:50 -0500
Martin Vuille <jpmv27@aim.com> wrote:

> For https://patchwork.kernel.org/patch/10211483/, I'm not sure how to go about doing a reply to all.

Hit reply-all from the copy in your Sent folder.

Kim

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

* Re: [PATCH] perf tools arm64: Add libdw DWARF post unwind support for ARM64
  2018-03-09 19:15                 ` Kim Phillips
@ 2018-03-09 19:17                   ` Martin Vuille
  0 siblings, 0 replies; 11+ messages in thread
From: Martin Vuille @ 2018-03-09 19:17 UTC (permalink / raw)
  To: Kim Phillips
  Cc: Arnaldo Carvalho de Melo, Jiri Olsa, Christian Hansen (chansen3),
	linux-perf-users, Peter Zijlstra, Ingo Molnar,
	Alexander Shishkin, Jiri Olsa, Namhyung Kim, linux-kernel,
	Mathieu Poirier, Vuille, Martin (Martin)

Yes, thought of doing that.

Unfortunately it was sent directly from git, so I do not have a copy of the message that was sent.

MV


On 03/09/18 14:15, Kim Phillips wrote:
> On Fri, 9 Mar 2018 13:49:50 -0500
> Martin Vuille <jpmv27@aim.com> wrote:
>
>> For https://patchwork.kernel.org/patch/10211483/, I'm not sure how to go about doing a reply to all.
> Hit reply-all from the copy in your Sent folder.
>
> Kim
> --
> To unsubscribe from this list: send the line "unsubscribe linux-perf-users" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: [PATCH] perf tools arm64: Add libdw DWARF post unwind support for ARM64
  2018-03-09 18:49               ` Martin Vuille
  2018-03-09 19:15                 ` Kim Phillips
@ 2018-03-09 19:29                 ` Arnaldo Carvalho de Melo
  2018-03-09 19:35                   ` Martin Vuille
  1 sibling, 1 reply; 11+ messages in thread
From: Arnaldo Carvalho de Melo @ 2018-03-09 19:29 UTC (permalink / raw)
  To: Martin Vuille
  Cc: Kim Phillips, Jiri Olsa, Christian Hansen (chansen3),
	linux-perf-users, Peter Zijlstra, Ingo Molnar,
	Alexander Shishkin, Jiri Olsa, Namhyung Kim, linux-kernel,
	Mathieu Poirier, Vuille, Martin (Martin)

Em Fri, Mar 09, 2018 at 01:49:50PM -0500, Martin Vuille escreveu:
> Hi,
> 
> I made two other submissions that may also have been overlooked:
> 
> https://patchwork.kernel.org/patch/10211401/ -- This one has the S-o-B

Ok, replied to that one, I can't see where is it that the symfs is being
first appended, please clarify that in the patch commit log message.
 
> https://patchwork.kernel.org/patch/10211473/ -- RFC, was looking for comments, has the S-o-B

[RFC,1/1] perf annotate: Don't prepend symfs path to vmlinux path

So, lemme try to provide the precise steps to reproduce this problem:

[root@jouet ~]# perf record -F 10000 sleep 1
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.017 MB perf.data (11 samples) ]
[root@jouet ~]# perf buildid-list
44d954246227536955cb1ecbe9ef2a05665876b6 /lib/modules/4.16.0-rc4/build/vmlinux
87ae276466bc68e958c9817f11d5e09f14510585 [vdso]
3113881229974f02113945e92c1a4d4f146e061c /usr/lib64/libc-2.26.so
[root@jouet ~]#

then we go on and remove that buildid from the cache:

[root@jouet ~]# perf record -F 10000 sleep 1
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.017 MB perf.data (10 samples) ]
[root@jouet ~]# perf report --dso \[kernel.vmlinux\] | grep -v ^# | head -5
    38.00%  sleep    [k] filemap_map_pages
    19.68%  sleep    [k] elf_map
     2.69%  perf     [k] perf_iterate_ctx
     0.29%  perf     [k] end_repeat_nmi
     0.04%  perf     [k] native_sched_clock
[root@jouet ~]#
[root@jouet ~]# perf buildid-list
44d954246227536955cb1ecbe9ef2a05665876b6 /lib/modules/4.16.0-rc4/build/vmlinux
87ae276466bc68e958c9817f11d5e09f14510585 [vdso]
3113881229974f02113945e92c1a4d4f146e061c /usr/lib64/libc-2.26.so
[root@jouet ~]# ls -la ~/.debug/.build-id/44/d954246227536955cb1ecbe9ef2a05665876b6
lrwxrwxrwx. 1 root root 77 Mar  9 16:14 /root/.debug/.build-id/44/d954246227536955cb1ecbe9ef2a05665876b6 -> ../../home/build/v4.16.0-rc4/vmlinux/44d954246227536955cb1ecbe9ef2a05665876b6
[root@jouet ~]# ls -la ~/.debug/home/build/v4.16.0-rc4/vmlinux/44d954246227536955cb1ecbe9ef2a05665876b6/
total 510840
drwxr-xr-x. 2 root root      4096 Mar  9 16:14 .
drwxr-xr-x. 3 root root      4096 Mar  6 11:35 ..
-rwxr-xr-x. 1 root root 523085744 Mar  6 11:35 elf
-rw-r--r--. 1 root root         0 Mar  9 16:14 probes
[root@jouet ~]# perf buildid-cache --remove /lib/modules/4.16.0-rc4/build/vmlinux
[root@jouet ~]# ls -la ~/.debug/.build-id/44/d954246227536955cb1ecbe9ef2a05665876b6
ls: cannot access '/root/.debug/.build-id/44/d954246227536955cb1ecbe9ef2a05665876b6': No such file or directory
[root@jouet ~]# ls -la ~/.debug/home/build/v4.16.0-rc4/vmlinux/44d954246227536955cb1ecbe9ef2a05665876b6/
ls: cannot access '/root/.debug/home/build/v4.16.0-rc4/vmlinux/44d954246227536955cb1ecbe9ef2a05665876b6/': No such file or directory
[root@jouet ~]#

Ok, so now I do:

[root@jouet ~]# perf annotate --stdio --vmlinux /lib/modules/4.16.0-rc4/build/vmlinux filemap_map_pages
Failed to open [kernel.kallsyms]_text, continuing without symbols
Error:
The perf.data file has no samples!
[root@jouet ~]# 


But I ran out of time today, this one needs a bit more investigation, I
couldn't get to that dso__disassemble_filename() in the above case :-\
 
> For https://patchwork.kernel.org/patch/10211483/, I'm not sure how to go about doing a reply to all.

So, no need for that, just state here that you provide your Signed-off-by: to
it and I'll add it, which is what I'm doing now since this seems to be your
intent, right?

I'll just add another Link: tag pointing to your reply to -this- message,
if it comes with a S-o-B for https://patchwork.kernel.org/patch/10211483/, ok?

- Arnaldo
 
> I had some email problems and was cut-off from the list for a while.
> 
> MV
> 
> 
> On 03/09/18 13:24, Arnaldo Carvalho de Melo wrote:
> > Em Fri, Mar 09, 2018 at 12:07:20PM -0600, Kim Phillips escreveu:
> > > On Fri, 9 Mar 2018 12:06:27 -0300
> > > Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
> > > 
> > > Hi Arnaldo,
> > > 
> > > > Em Thu, Mar 08, 2018 at 09:10:30PM -0600, Kim Phillips escreveu:
> > > > > Based on prior work:
> > > > > 
> > > > > https://lkml.org/lkml/2014/5/6/395
> > > > Thanks, looks good, applying.
> > > > 
> > > > Jean, is everything ok with you on this?
> > > By now your email to Jean should have bounced with "The email account
> > > that you tried to reach does not exist."  Removing Jean from Cc.
> > > 
> > > It seems like you're applying patches.  There are a couple that have
> > > slipped through the cracks: Can you please take a look at applying them?
> > > 
> > > - "perf tools: Fixing uninitialised variable"
> > >    https://patchwork.kernel.org/patch/10179381/
> > [acme@jouet perf]$ git tag --contains d2785de15f1bd42d613d56bbac5a007e7293b874
> > perf-core-for-mingo-4.17-20180216
> > 
> > commit d2785de15f1bd42d613d56bbac5a007e7293b874
> > Author:     Mathieu Poirier <mathieu.poirier@linaro.org>
> > AuthorDate: Mon Feb 12 13:32:37 2018 -0700
> > Commit:     Arnaldo Carvalho de Melo <acme@redhat.com>
> > CommitDate: Fri Feb 16 14:55:40 2018 -0300
> > 
> >      perf auxtrace arm: Fixing uninitialised variable
> >      When working natively on arm64 the compiler gets pesky and complains
> >      that variable 'i' is uninitialised, something that breaks the
> >      compilation.  Here no further checks are needed since variable
> >      'found_spe' can only be true if variable 'i' has been initialised as
> >      part of the for loop.
> >      Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
> >      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
> >      Cc: Jin Yao <yao.jin@linux.intel.com>
> >      Cc: Namhyung Kim <namhyung@kernel.org>
> >      Cc: Peter Zijlstra <peterz@infradead.org>
> >      Cc: linux-arm-kernel@lists.infradead.org
> >      Link: http://lkml.kernel.org/r/1518467557-18505-4-git-send-email-mathieu.poirier@linaro.org
> >      Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> > 
> > diff --git a/tools/perf/arch/arm/util/auxtrace.c b/tools/perf/arch/arm/util/auxtrace.c
> > index 2323581b157d..fa639e3e52ac 100644
> > --- a/tools/perf/arch/arm/util/auxtrace.c
> > +++ b/tools/perf/arch/arm/util/auxtrace.c
> > @@ -68,7 +68,7 @@ struct auxtrace_record
> >          bool found_spe = false;
> >          static struct perf_pmu **arm_spe_pmus = NULL;
> >          static int nr_spes = 0;
> > -       int i;
> > +       int i = 0;
> > > - "perf unwind: Report error from dwfl_attach_state"
> > >    https://patchwork.kernel.org/patch/10211483/
> > >    [Martin, I guess it would help if you replied-all that patch and
> > >     added your signed-off-by.]
> > Right, the S-o-B is needed
> > > - "perf unwind: Unwind with libdw doesn't take symfs into account"
> > >    https://patchwork.kernel.org/patch/10211599/
> > This one has the S-o-B, applying, Jiri, holler if you disagree,
> > 
> > - Arnaldo
> > > Thanks,
> > > 
> > > Kim
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-perf-users" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: [PATCH] perf tools arm64: Add libdw DWARF post unwind support for ARM64
  2018-03-09 19:29                 ` Arnaldo Carvalho de Melo
@ 2018-03-09 19:35                   ` Martin Vuille
  0 siblings, 0 replies; 11+ messages in thread
From: Martin Vuille @ 2018-03-09 19:35 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Kim Phillips, Jiri Olsa, Christian Hansen (chansen3),
	linux-perf-users, Peter Zijlstra, Ingo Molnar,
	Alexander Shishkin, Jiri Olsa, Namhyung Kim, linux-kernel,
	Mathieu Poirier, Vuille, Martin (Martin)

Thanks.

I replied to your message with additional information.

I will update the commit message and resubmit the patch.

MV


On 03/09/18 14:29, Arnaldo Carvalho de Melo wrote:
> Em Fri, Mar 09, 2018 at 01:49:50PM -0500, Martin Vuille escreveu:
>> Hi,
>>
>> I made two other submissions that may also have been overlooked:
>>
>> https://patchwork.kernel.org/patch/10211401/ -- This one has the S-o-B
> Ok, replied to that one, I can't see where is it that the symfs is being
> first appended, please clarify that in the patch commit log message.
>   

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

* Re: [PATCH] perf tools arm64: Add libdw DWARF post unwind support for ARM64
  2018-03-09 18:24             ` Arnaldo Carvalho de Melo
  2018-03-09 18:49               ` Martin Vuille
@ 2018-03-13 15:23               ` Martin Vuille
  1 sibling, 0 replies; 11+ messages in thread
From: Martin Vuille @ 2018-03-13 15:23 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Kim Phillips, Jiri Olsa
  Cc: Christian Hansen (chansen3),
	linux-perf-users, Peter Zijlstra, Ingo Molnar,
	Alexander Shishkin, Jiri Olsa, Namhyung Kim, linux-kernel,
	Mathieu Poirier, Vuille, Martin (Martin)



On 03/09/18 13:24, Arnaldo Carvalho de Melo wrote:
>
>> - "perf unwind: Report error from dwfl_attach_state"
>>    https://patchwork.kernel.org/patch/10211483/
>>    [Martin, I guess it would help if you replied-all that patch and
>>     added your signed-off-by.]
> Right, the S-o-B is needed

S-o-B has been provided by reply to this email. If you prefer, I can
resubmit the patch with the S-o-B included.

>   
>> - "perf unwind: Unwind with libdw doesn't take symfs into account"
>>    https://patchwork.kernel.org/patch/10211599/
> This one has the S-o-B, applying, Jiri, holler if you disagree,
>
> - Arnaldo
>   

Thanks.

Regards,
MV

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

* [tip:perf/core] perf tools arm64: Add libdw DWARF post unwind support for ARM64
  2018-03-09  3:10       ` [PATCH] perf tools arm64: Add libdw DWARF post unwind support for ARM64 Kim Phillips
  2018-03-09 15:06         ` Arnaldo Carvalho de Melo
@ 2018-03-20  6:20         ` tip-bot for Kim Phillips
  1 sibling, 0 replies; 11+ messages in thread
From: tip-bot for Kim Phillips @ 2018-03-20  6:20 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: alexander.shishkin, peterz, hpa, linux-kernel, jolsa, namhyung,
	acme, jean.pihet, tglx, mingo, chansen3, kim.phillips

Commit-ID:  744e9a91cf898bf027dbe65cc61a5d7565335cba
Gitweb:     https://git.kernel.org/tip/744e9a91cf898bf027dbe65cc61a5d7565335cba
Author:     Kim Phillips <kim.phillips@arm.com>
AuthorDate: Thu, 8 Mar 2018 21:10:30 -0600
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Fri, 16 Mar 2018 13:53:46 -0300

perf tools arm64: Add libdw DWARF post unwind support for ARM64

Based on prior work:

  https://lkml.org/lkml/2014/5/6/395

and on how other arches add libdw unwind support.  Includes support for
running the unwind test, e.g., on a system with only elfutils' libdw
0.170, the test now runs, and successfully:

  $ ./perf test unwind
  56: Test dwarf unwind                 : Ok

Originally-by: Jean Pihet <jean.pihet@linaro.org>
Reported-by: Christian Hansen <chansen3@cisco.com>
Signed-off-by: Kim Phillips <kim.phillips@arm.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20180308211030.4ee4a0d6ff6dc5cda1b567d4@arm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/Makefile.config                 |  2 +-
 tools/perf/arch/arm64/include/arch-tests.h | 12 ++++++
 tools/perf/arch/arm64/tests/Build          |  2 +
 tools/perf/arch/arm64/tests/arch-tests.c   | 16 ++++++++
 tools/perf/arch/arm64/util/Build           |  1 +
 tools/perf/arch/arm64/util/unwind-libdw.c  | 60 ++++++++++++++++++++++++++++++
 6 files changed, 92 insertions(+), 1 deletion(-)

diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
index 89cb2a36b8ff..98ff73648b51 100644
--- a/tools/perf/Makefile.config
+++ b/tools/perf/Makefile.config
@@ -75,7 +75,7 @@ endif
 # Disable it on all other architectures in case libdw unwind
 # support is detected in system. Add supported architectures
 # to the check.
-ifneq ($(SRCARCH),$(filter $(SRCARCH),x86 arm powerpc s390))
+ifneq ($(SRCARCH),$(filter $(SRCARCH),x86 arm arm64 powerpc s390))
   NO_LIBDW_DWARF_UNWIND := 1
 endif
 
diff --git a/tools/perf/arch/arm64/include/arch-tests.h b/tools/perf/arch/arm64/include/arch-tests.h
new file mode 100644
index 000000000000..90ec4c8cb880
--- /dev/null
+++ b/tools/perf/arch/arm64/include/arch-tests.h
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef ARCH_TESTS_H
+#define ARCH_TESTS_H
+
+#ifdef HAVE_DWARF_UNWIND_SUPPORT
+struct thread;
+struct perf_sample;
+#endif
+
+extern struct test arch_tests[];
+
+#endif
diff --git a/tools/perf/arch/arm64/tests/Build b/tools/perf/arch/arm64/tests/Build
index b30eff9bcc83..883c57ff0c08 100644
--- a/tools/perf/arch/arm64/tests/Build
+++ b/tools/perf/arch/arm64/tests/Build
@@ -1,2 +1,4 @@
 libperf-y += regs_load.o
 libperf-y += dwarf-unwind.o
+
+libperf-y += arch-tests.o
diff --git a/tools/perf/arch/arm64/tests/arch-tests.c b/tools/perf/arch/arm64/tests/arch-tests.c
new file mode 100644
index 000000000000..5b1543c98022
--- /dev/null
+++ b/tools/perf/arch/arm64/tests/arch-tests.c
@@ -0,0 +1,16 @@
+// SPDX-License-Identifier: GPL-2.0
+#include <string.h>
+#include "tests/tests.h"
+#include "arch-tests.h"
+
+struct test arch_tests[] = {
+#ifdef HAVE_DWARF_UNWIND_SUPPORT
+	{
+		.desc = "DWARF unwind",
+		.func = test__dwarf_unwind,
+	},
+#endif
+	{
+		.func = NULL,
+	},
+};
diff --git a/tools/perf/arch/arm64/util/Build b/tools/perf/arch/arm64/util/Build
index c0b8dfef98ba..68f8a8eb3ad0 100644
--- a/tools/perf/arch/arm64/util/Build
+++ b/tools/perf/arch/arm64/util/Build
@@ -2,6 +2,7 @@ libperf-y += header.o
 libperf-y += sym-handling.o
 libperf-$(CONFIG_DWARF)     += dwarf-regs.o
 libperf-$(CONFIG_LOCAL_LIBUNWIND) += unwind-libunwind.o
+libperf-$(CONFIG_LIBDW_DWARF_UNWIND) += unwind-libdw.o
 
 libperf-$(CONFIG_AUXTRACE) += ../../arm/util/pmu.o \
 			      ../../arm/util/auxtrace.o \
diff --git a/tools/perf/arch/arm64/util/unwind-libdw.c b/tools/perf/arch/arm64/util/unwind-libdw.c
new file mode 100644
index 000000000000..7623d85e77f3
--- /dev/null
+++ b/tools/perf/arch/arm64/util/unwind-libdw.c
@@ -0,0 +1,60 @@
+// SPDX-License-Identifier: GPL-2.0
+#include <elfutils/libdwfl.h>
+#include "../../util/unwind-libdw.h"
+#include "../../util/perf_regs.h"
+#include "../../util/event.h"
+
+bool libdw__arch_set_initial_registers(Dwfl_Thread *thread, void *arg)
+{
+	struct unwind_info *ui = arg;
+	struct regs_dump *user_regs = &ui->sample->user_regs;
+	Dwarf_Word dwarf_regs[PERF_REG_ARM64_MAX], dwarf_pc;
+
+#define REG(r) ({						\
+	Dwarf_Word val = 0;					\
+	perf_reg_value(&val, user_regs, PERF_REG_ARM64_##r);	\
+	val;							\
+})
+
+	dwarf_regs[0]  = REG(X0);
+	dwarf_regs[1]  = REG(X1);
+	dwarf_regs[2]  = REG(X2);
+	dwarf_regs[3]  = REG(X3);
+	dwarf_regs[4]  = REG(X4);
+	dwarf_regs[5]  = REG(X5);
+	dwarf_regs[6]  = REG(X6);
+	dwarf_regs[7]  = REG(X7);
+	dwarf_regs[8]  = REG(X8);
+	dwarf_regs[9]  = REG(X9);
+	dwarf_regs[10] = REG(X10);
+	dwarf_regs[11] = REG(X11);
+	dwarf_regs[12] = REG(X12);
+	dwarf_regs[13] = REG(X13);
+	dwarf_regs[14] = REG(X14);
+	dwarf_regs[15] = REG(X15);
+	dwarf_regs[16] = REG(X16);
+	dwarf_regs[17] = REG(X17);
+	dwarf_regs[18] = REG(X18);
+	dwarf_regs[19] = REG(X19);
+	dwarf_regs[20] = REG(X20);
+	dwarf_regs[21] = REG(X21);
+	dwarf_regs[22] = REG(X22);
+	dwarf_regs[23] = REG(X23);
+	dwarf_regs[24] = REG(X24);
+	dwarf_regs[25] = REG(X25);
+	dwarf_regs[26] = REG(X26);
+	dwarf_regs[27] = REG(X27);
+	dwarf_regs[28] = REG(X28);
+	dwarf_regs[29] = REG(X29);
+	dwarf_regs[30] = REG(LR);
+	dwarf_regs[31] = REG(SP);
+
+	if (!dwfl_thread_state_registers(thread, 0, PERF_REG_ARM64_MAX,
+					 dwarf_regs))
+		return false;
+
+	dwarf_pc = REG(PC);
+	dwfl_thread_state_register_pc(thread, dwarf_pc);
+
+	return true;
+}

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

end of thread, other threads:[~2018-03-20  6:21 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <A5E405FE-1BA3-46FC-9A43-CF19A4B369C5@cisco.com>
     [not found] ` <20180226142726.cd413c792d0782f77b60a23e@arm.com>
     [not found]   ` <20180226174040.6998bd3c0a79b2f19c491e4d@arm.com>
     [not found]     ` <9B701F46-6AEA-48D8-9103-71D35C83776D@cisco.com>
2018-03-09  3:10       ` [PATCH] perf tools arm64: Add libdw DWARF post unwind support for ARM64 Kim Phillips
2018-03-09 15:06         ` Arnaldo Carvalho de Melo
2018-03-09 18:07           ` Kim Phillips
2018-03-09 18:24             ` Arnaldo Carvalho de Melo
2018-03-09 18:49               ` Martin Vuille
2018-03-09 19:15                 ` Kim Phillips
2018-03-09 19:17                   ` Martin Vuille
2018-03-09 19:29                 ` Arnaldo Carvalho de Melo
2018-03-09 19:35                   ` Martin Vuille
2018-03-13 15:23               ` Martin Vuille
2018-03-20  6:20         ` [tip:perf/core] " tip-bot for Kim Phillips

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