Message ID | 1399389979-11279-4-git-send-email-jean.pihet@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, May 06, 2014 at 04:26:19PM +0100, Jean Pihet wrote: > Adding libdw DWARF post unwind support, which is part > of elfutils-devel/libdw-dev package from version 0.158. > > The new code is contained in unwin-libdw.c object, and > implements unwind__get_entries unwind interface function. Reviewed-by: Will Deacon <will.deacon@arm.com> Will
On 6 May 2014 19:56, Will Deacon <will.deacon@arm.com> wrote: > On Tue, May 06, 2014 at 04:26:19PM +0100, Jean Pihet wrote: >> Adding libdw DWARF post unwind support, which is part >> of elfutils-devel/libdw-dev package from version 0.158. >> >> The new code is contained in unwin-libdw.c object, and >> implements unwind__get_entries unwind interface function. > > Reviewed-by: Will Deacon <will.deacon@arm.com> Ok, thx! Jiri, Arnaldo, Can you take the series for ARM and ARM64? Jean > > Will
On Wed, May 07, 2014 at 10:52:05AM +0100, Jean Pihet wrote: > On 6 May 2014 19:56, Will Deacon <will.deacon@arm.com> wrote: > > On Tue, May 06, 2014 at 04:26:19PM +0100, Jean Pihet wrote: > >> Adding libdw DWARF post unwind support, which is part > >> of elfutils-devel/libdw-dev package from version 0.158. > >> > >> The new code is contained in unwin-libdw.c object, and > >> implements unwind__get_entries unwind interface function. > > > > Reviewed-by: Will Deacon <will.deacon@arm.com> > > Ok, thx! > > Jiri, Arnaldo, > Can you take the series for ARM and ARM64? Wait: I thought you were going to add compat support for arm64? I haven't acked that patch yet, because it's lacking those changes. The 32-bit ARM patches look fine though. Will
On 7 May 2014 12:00, Will Deacon <will.deacon@arm.com> wrote: > On Wed, May 07, 2014 at 10:52:05AM +0100, Jean Pihet wrote: >> On 6 May 2014 19:56, Will Deacon <will.deacon@arm.com> wrote: >> > On Tue, May 06, 2014 at 04:26:19PM +0100, Jean Pihet wrote: >> >> Adding libdw DWARF post unwind support, which is part >> >> of elfutils-devel/libdw-dev package from version 0.158. >> >> >> >> The new code is contained in unwin-libdw.c object, and >> >> implements unwind__get_entries unwind interface function. >> > >> > Reviewed-by: Will Deacon <will.deacon@arm.com> >> >> Ok, thx! >> >> Jiri, Arnaldo, >> Can you take the series for ARM and ARM64? > > Wait: I thought you were going to add compat support for arm64? I haven't > acked that patch yet, because it's lacking those changes. The compat mode is supported by libdw and _should_ work in principle. I am following it up with Mark Wielaard on elfutils-devel. Cf. [1] for the discussion and [2] for the compat mode support in libdw. [1] https://lists.fedorahosted.org/pipermail/elfutils-devel/2014-March/003905.html [2] https://lists.fedorahosted.org/pipermail/elfutils-devel/2014-March/003910.html So in summary the kernel changes should be fine (it works ok with libunwind), the problem lies somewhere in the libdw registers setup and usage for compat mode. > > The 32-bit ARM patches look fine though. Thx! > > Will Jean
diff --git a/tools/perf/arch/arm/Makefile b/tools/perf/arch/arm/Makefile index 221f21d..09d6215 100644 --- a/tools/perf/arch/arm/Makefile +++ b/tools/perf/arch/arm/Makefile @@ -4,6 +4,11 @@ LIB_OBJS += $(OUTPUT)arch/$(ARCH)/util/dwarf-regs.o endif ifndef NO_LIBUNWIND LIB_OBJS += $(OUTPUT)arch/$(ARCH)/util/unwind-libunwind.o +endif +ifndef NO_LIBDW_DWARF_UNWIND +LIB_OBJS += $(OUTPUT)arch/$(ARCH)/util/unwind-libdw.o +endif +ifndef NO_DWARF_UNWIND LIB_OBJS += $(OUTPUT)arch/$(ARCH)/tests/regs_load.o LIB_OBJS += $(OUTPUT)arch/$(ARCH)/tests/dwarf-unwind.o endif diff --git a/tools/perf/arch/arm/util/unwind-libdw.c b/tools/perf/arch/arm/util/unwind-libdw.c new file mode 100644 index 0000000..b4176c6 --- /dev/null +++ b/tools/perf/arch/arm/util/unwind-libdw.c @@ -0,0 +1,36 @@ +#include <elfutils/libdwfl.h> +#include "../../util/unwind-libdw.h" +#include "../../util/perf_regs.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_ARM_MAX]; + +#define REG(r) ({ \ + Dwarf_Word val = 0; \ + perf_reg_value(&val, user_regs, PERF_REG_ARM_##r); \ + val; \ +}) + + dwarf_regs[0] = REG(R0); + dwarf_regs[1] = REG(R1); + dwarf_regs[2] = REG(R2); + dwarf_regs[3] = REG(R3); + dwarf_regs[4] = REG(R4); + dwarf_regs[5] = REG(R5); + dwarf_regs[6] = REG(R6); + dwarf_regs[7] = REG(R7); + dwarf_regs[8] = REG(R8); + dwarf_regs[9] = REG(R9); + dwarf_regs[10] = REG(R10); + dwarf_regs[11] = REG(FP); + dwarf_regs[12] = REG(IP); + dwarf_regs[13] = REG(SP); + dwarf_regs[14] = REG(LR); + dwarf_regs[15] = REG(PC); + + return dwfl_thread_state_registers(thread, 0, PERF_REG_ARM_MAX, + dwarf_regs); +}
Adding libdw DWARF post unwind support, which is part of elfutils-devel/libdw-dev package from version 0.158. The new code is contained in unwin-libdw.c object, and implements unwind__get_entries unwind interface function. Signed-off-by: Jean Pihet <jean.pihet@linaro.org> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Arnaldo Carvalho de Melo <acme@infradead.org> Cc: David Ahern <dsahern@gmail.com> --- tools/perf/arch/arm/Makefile | 5 +++++ tools/perf/arch/arm/util/unwind-libdw.c | 36 +++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 tools/perf/arch/arm/util/unwind-libdw.c