From 17e03213cd50ffd5caed3e912b149cfbee7355a5 Mon Sep 17 00:00:00 2001 From: Samuli Piippo Date: Thu, 4 Feb 2016 12:54:16 +0200 Subject: toradex: move perf patches Toradex machines are the last ones to use these. Change-Id: I6c769a250267733f851453eb8e72193201f5fbd6 Reviewed-by: Teemu Holappa --- ...RM-perf-add-support-for-perf-registers-API.diff | 126 +++++++++++++++ ...re-up-perf_regs-and-unwind-support-for-AR.patch | 172 +++++++++++++++++++++ .../recipes/linux/linux-toradex-fsl_git.bbappend | 2 +- ...RM-perf-add-support-for-perf-registers-API.diff | 126 --------------- ...re-up-perf_regs-and-unwind-support-for-AR.patch | 172 --------------------- 5 files changed, 299 insertions(+), 299 deletions(-) create mode 100644 meta-toradex-extras/recipes/linux/linux-toradex-fsl/ARM-perf-add-support-for-perf-registers-API.diff create mode 100644 meta-toradex-extras/recipes/linux/linux-toradex-fsl/ARM-perf-wire-up-perf_regs-and-unwind-support-for-AR.patch delete mode 100644 recipes/linux/linux/ARM-perf-add-support-for-perf-registers-API.diff delete mode 100644 recipes/linux/linux/ARM-perf-wire-up-perf_regs-and-unwind-support-for-AR.patch diff --git a/meta-toradex-extras/recipes/linux/linux-toradex-fsl/ARM-perf-add-support-for-perf-registers-API.diff b/meta-toradex-extras/recipes/linux/linux-toradex-fsl/ARM-perf-add-support-for-perf-registers-API.diff new file mode 100644 index 0000000..e6f44fd --- /dev/null +++ b/meta-toradex-extras/recipes/linux/linux-toradex-fsl/ARM-perf-add-support-for-perf-registers-API.diff @@ -0,0 +1,126 @@ +From 49863894db3ed7bd41541b1c17733273966cea71 Mon Sep 17 00:00:00 2001 +From: Will Deacon +Date: Thu, 26 Sep 2013 12:36:35 +0100 +Subject: [PATCH] ARM: perf: add support for perf registers API + +This patch implements the functions required for the perf registers API, +allowing the perf tool to interface kernel register dumps with libunwind +in order to provide userspace backtracing. + +Cc: Jean Pihet +Signed-off-by: Will Deacon +--- + arch/arm/Kconfig | 2 ++ + arch/arm/include/uapi/asm/Kbuild | 1 + + arch/arm/include/uapi/asm/perf_regs.h | 23 +++++++++++++++++++++++ + arch/arm/kernel/Makefile | 1 + + arch/arm/kernel/perf_regs.c | 30 ++++++++++++++++++++++++++++++ + 5 files changed, 57 insertions(+) + create mode 100644 arch/arm/include/uapi/asm/perf_regs.h + create mode 100644 arch/arm/kernel/perf_regs.c + +diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig +index 1ad6fb6..899d0c6 100644 +--- a/arch/arm/Kconfig ++++ b/arch/arm/Kconfig +@@ -51,6 +51,8 @@ config ARM + select HAVE_MOD_ARCH_SPECIFIC if ARM_UNWIND + select HAVE_OPROFILE if (HAVE_PERF_EVENTS) + select HAVE_PERF_EVENTS ++ select HAVE_PERF_REGS ++ select HAVE_PERF_USER_STACK_DUMP + select HAVE_REGS_AND_STACK_ACCESS_API + select HAVE_SYSCALL_TRACEPOINTS + select HAVE_UID16 +diff --git a/arch/arm/include/uapi/asm/Kbuild b/arch/arm/include/uapi/asm/Kbuild +index 18d76fd..70a1c9d 100644 +--- a/arch/arm/include/uapi/asm/Kbuild ++++ b/arch/arm/include/uapi/asm/Kbuild +@@ -7,6 +7,7 @@ header-y += hwcap.h + header-y += ioctls.h + header-y += kvm_para.h + header-y += mman.h ++header-y += perf_regs.h + header-y += posix_types.h + header-y += ptrace.h + header-y += setup.h +diff --git a/arch/arm/include/uapi/asm/perf_regs.h b/arch/arm/include/uapi/asm/perf_regs.h +new file mode 100644 +index 0000000..ce59448 +--- /dev/null ++++ b/arch/arm/include/uapi/asm/perf_regs.h +@@ -0,0 +1,23 @@ ++#ifndef _ASM_ARM_PERF_REGS_H ++#define _ASM_ARM_PERF_REGS_H ++ ++enum perf_event_arm_regs { ++ PERF_REG_ARM_R0, ++ PERF_REG_ARM_R1, ++ PERF_REG_ARM_R2, ++ PERF_REG_ARM_R3, ++ PERF_REG_ARM_R4, ++ PERF_REG_ARM_R5, ++ PERF_REG_ARM_R6, ++ PERF_REG_ARM_R7, ++ PERF_REG_ARM_R8, ++ PERF_REG_ARM_R9, ++ PERF_REG_ARM_R10, ++ PERF_REG_ARM_FP, ++ PERF_REG_ARM_IP, ++ PERF_REG_ARM_SP, ++ PERF_REG_ARM_LR, ++ PERF_REG_ARM_PC, ++ PERF_REG_ARM_MAX, ++}; ++#endif /* _ASM_ARM_PERF_REGS_H */ +diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile +index 5140df5f..9b818ca 100644 +--- a/arch/arm/kernel/Makefile ++++ b/arch/arm/kernel/Makefile +@@ -78,6 +78,7 @@ obj-$(CONFIG_CPU_XSC3) += xscale-cp0.o + obj-$(CONFIG_CPU_MOHAWK) += xscale-cp0.o + obj-$(CONFIG_CPU_PJ4) += pj4-cp0.o + obj-$(CONFIG_IWMMXT) += iwmmxt.o ++obj-$(CONFIG_PERF_EVENTS) += perf_regs.o + obj-$(CONFIG_HW_PERF_EVENTS) += perf_event.o perf_event_cpu.o + AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt + obj-$(CONFIG_ARM_CPU_TOPOLOGY) += topology.o +diff --git a/arch/arm/kernel/perf_regs.c b/arch/arm/kernel/perf_regs.c +new file mode 100644 +index 0000000..6e4379c +--- /dev/null ++++ b/arch/arm/kernel/perf_regs.c +@@ -0,0 +1,30 @@ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++u64 perf_reg_value(struct pt_regs *regs, int idx) ++{ ++ if (WARN_ON_ONCE((u32)idx >= PERF_REG_ARM_MAX)) ++ return 0; ++ ++ return regs->uregs[idx]; ++} ++ ++#define REG_RESERVED (~((1ULL << PERF_REG_ARM_MAX) - 1)) ++ ++int perf_reg_validate(u64 mask) ++{ ++ if (!mask || mask & REG_RESERVED) ++ return -EINVAL; ++ ++ return 0; ++} ++ ++u64 perf_reg_abi(struct task_struct *task) ++{ ++ return PERF_SAMPLE_REGS_ABI_32; ++} +-- +1.9.1 + diff --git a/meta-toradex-extras/recipes/linux/linux-toradex-fsl/ARM-perf-wire-up-perf_regs-and-unwind-support-for-AR.patch b/meta-toradex-extras/recipes/linux/linux-toradex-fsl/ARM-perf-wire-up-perf_regs-and-unwind-support-for-AR.patch new file mode 100644 index 0000000..1e497c6 --- /dev/null +++ b/meta-toradex-extras/recipes/linux/linux-toradex-fsl/ARM-perf-wire-up-perf_regs-and-unwind-support-for-AR.patch @@ -0,0 +1,172 @@ +From 8abd7519c1fd2b6ae35eddbb41f93f44d3886000 Mon Sep 17 00:00:00 2001 +From: Will Deacon +Date: Thu, 26 Sep 2013 12:36:36 +0100 +Subject: [PATCH] ARM: perf: wire up perf_regs and unwind support for ARM + +This patch hooks in the perf_regs and libunwind code for ARM. + +B2Qt: Backported for 3.10 kernel + +Cc: Jean Pihet +Signed-off-by: Will Deacon +--- + tools/perf/Makefile | 6 +++- + tools/perf/arch/arm/Makefile | 3 ++ + tools/perf/arch/arm/include/perf_regs.h | 54 +++++++++++++++++++++++++++++++++ + tools/perf/arch/arm/util/unwind.c | 48 +++++++++++++++++++++++++++++ + 4 files changed, 110 insertions(+), 1 deletion(-) + create mode 100644 tools/perf/arch/arm/include/perf_regs.h + create mode 100644 tools/perf/arch/arm/util/unwind.c + +diff --git a/tools/perf/Makefile b/tools/perf/Makefile +index b0f164b..f8fdad5 100644 +--- a/tools/perf/Makefile ++++ b/tools/perf/Makefile +@@ -87,6 +87,10 @@ ifeq ($(ARCH),x86_64) + NO_PERF_REGS := 0 + LIBUNWIND_LIBS = -lunwind -lunwind-x86_64 + endif ++ifeq ($(ARCH),arm) ++ NO_PERF_REGS := 0 ++ LIBUNWIND_LIBS = -lunwind -lunwind-arm ++endif + + # Treat warnings as errors unless directed not to + ifneq ($(WERROR),0) +@@ -607,7 +611,7 @@ endif # SOURCE_LIBELF + endif # NO_LIBELF + + # There's only x86 (both 32 and 64) support for CFI unwind so far +-ifneq ($(ARCH),x86) ++ifeq ($(LIBUNWIND_LIBS),) + NO_LIBUNWIND := 1 + endif + +diff --git a/tools/perf/arch/arm/Makefile b/tools/perf/arch/arm/Makefile +index 15130b5..fe9b61e 100644 +--- a/tools/perf/arch/arm/Makefile ++++ b/tools/perf/arch/arm/Makefile +@@ -2,3 +2,6 @@ ifndef NO_DWARF + PERF_HAVE_DWARF_REGS := 1 + LIB_OBJS += $(OUTPUT)arch/$(ARCH)/util/dwarf-regs.o + endif ++ifndef NO_LIBUNWIND ++LIB_OBJS += $(OUTPUT)arch/$(ARCH)/util/unwind.o ++endif +diff --git a/tools/perf/arch/arm/include/perf_regs.h b/tools/perf/arch/arm/include/perf_regs.h +new file mode 100644 +index 0000000..2a1cfde +--- /dev/null ++++ b/tools/perf/arch/arm/include/perf_regs.h +@@ -0,0 +1,54 @@ ++#ifndef ARCH_PERF_REGS_H ++#define ARCH_PERF_REGS_H ++ ++#include ++#include "../../util/types.h" ++#include ++ ++#define PERF_REGS_MASK ((1ULL << PERF_REG_ARM_MAX) - 1) ++#define PERF_REG_IP PERF_REG_ARM_PC ++#define PERF_REG_SP PERF_REG_ARM_SP ++ ++static inline const char *perf_reg_name(int id) ++{ ++ switch (id) { ++ case PERF_REG_ARM_R0: ++ return "r0"; ++ case PERF_REG_ARM_R1: ++ return "r1"; ++ case PERF_REG_ARM_R2: ++ return "r2"; ++ case PERF_REG_ARM_R3: ++ return "r3"; ++ case PERF_REG_ARM_R4: ++ return "r4"; ++ case PERF_REG_ARM_R5: ++ return "r5"; ++ case PERF_REG_ARM_R6: ++ return "r6"; ++ case PERF_REG_ARM_R7: ++ return "r7"; ++ case PERF_REG_ARM_R8: ++ return "r8"; ++ case PERF_REG_ARM_R9: ++ return "r9"; ++ case PERF_REG_ARM_R10: ++ return "r10"; ++ case PERF_REG_ARM_FP: ++ return "fp"; ++ case PERF_REG_ARM_IP: ++ return "ip"; ++ case PERF_REG_ARM_SP: ++ return "sp"; ++ case PERF_REG_ARM_LR: ++ return "lr"; ++ case PERF_REG_ARM_PC: ++ return "pc"; ++ default: ++ return NULL; ++ } ++ ++ return NULL; ++} ++ ++#endif /* ARCH_PERF_REGS_H */ +diff --git a/tools/perf/arch/arm/util/unwind.c b/tools/perf/arch/arm/util/unwind.c +new file mode 100644 +index 0000000..da3dc95 +--- /dev/null ++++ b/tools/perf/arch/arm/util/unwind.c +@@ -0,0 +1,48 @@ ++ ++#include ++#include ++#include "perf_regs.h" ++#include "../../util/unwind.h" ++ ++int unwind__arch_reg_id(int regnum) ++{ ++ switch (regnum) { ++ case UNW_ARM_R0: ++ return PERF_REG_ARM_R0; ++ case UNW_ARM_R1: ++ return PERF_REG_ARM_R1; ++ case UNW_ARM_R2: ++ return PERF_REG_ARM_R2; ++ case UNW_ARM_R3: ++ return PERF_REG_ARM_R3; ++ case UNW_ARM_R4: ++ return PERF_REG_ARM_R4; ++ case UNW_ARM_R5: ++ return PERF_REG_ARM_R5; ++ case UNW_ARM_R6: ++ return PERF_REG_ARM_R6; ++ case UNW_ARM_R7: ++ return PERF_REG_ARM_R7; ++ case UNW_ARM_R8: ++ return PERF_REG_ARM_R8; ++ case UNW_ARM_R9: ++ return PERF_REG_ARM_R9; ++ case UNW_ARM_R10: ++ return PERF_REG_ARM_R10; ++ case UNW_ARM_R11: ++ return PERF_REG_ARM_FP; ++ case UNW_ARM_R12: ++ return PERF_REG_ARM_IP; ++ case UNW_ARM_R13: ++ return PERF_REG_ARM_SP; ++ case UNW_ARM_R14: ++ return PERF_REG_ARM_LR; ++ case UNW_ARM_R15: ++ return PERF_REG_ARM_PC; ++ default: ++ pr_err("unwind: invalid reg id %d\n", regnum); ++ return -EINVAL; ++ } ++ ++ return -EINVAL; ++} +-- +1.9.1 + diff --git a/meta-toradex-extras/recipes/linux/linux-toradex-fsl_git.bbappend b/meta-toradex-extras/recipes/linux/linux-toradex-fsl_git.bbappend index 3f07de3..30aab2e 100644 --- a/meta-toradex-extras/recipes/linux/linux-toradex-fsl_git.bbappend +++ b/meta-toradex-extras/recipes/linux/linux-toradex-fsl_git.bbappend @@ -20,7 +20,7 @@ ## ############################################################################# -FILESEXTRAPATHS_prepend := "${THISDIR}/../../../recipes/linux/linux:" +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" SRC_URI += "\ file://ARM-perf-add-support-for-perf-registers-API.diff \ file://ARM-perf-wire-up-perf_regs-and-unwind-support-for-AR.patch \ diff --git a/recipes/linux/linux/ARM-perf-add-support-for-perf-registers-API.diff b/recipes/linux/linux/ARM-perf-add-support-for-perf-registers-API.diff deleted file mode 100644 index e6f44fd..0000000 --- a/recipes/linux/linux/ARM-perf-add-support-for-perf-registers-API.diff +++ /dev/null @@ -1,126 +0,0 @@ -From 49863894db3ed7bd41541b1c17733273966cea71 Mon Sep 17 00:00:00 2001 -From: Will Deacon -Date: Thu, 26 Sep 2013 12:36:35 +0100 -Subject: [PATCH] ARM: perf: add support for perf registers API - -This patch implements the functions required for the perf registers API, -allowing the perf tool to interface kernel register dumps with libunwind -in order to provide userspace backtracing. - -Cc: Jean Pihet -Signed-off-by: Will Deacon ---- - arch/arm/Kconfig | 2 ++ - arch/arm/include/uapi/asm/Kbuild | 1 + - arch/arm/include/uapi/asm/perf_regs.h | 23 +++++++++++++++++++++++ - arch/arm/kernel/Makefile | 1 + - arch/arm/kernel/perf_regs.c | 30 ++++++++++++++++++++++++++++++ - 5 files changed, 57 insertions(+) - create mode 100644 arch/arm/include/uapi/asm/perf_regs.h - create mode 100644 arch/arm/kernel/perf_regs.c - -diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig -index 1ad6fb6..899d0c6 100644 ---- a/arch/arm/Kconfig -+++ b/arch/arm/Kconfig -@@ -51,6 +51,8 @@ config ARM - select HAVE_MOD_ARCH_SPECIFIC if ARM_UNWIND - select HAVE_OPROFILE if (HAVE_PERF_EVENTS) - select HAVE_PERF_EVENTS -+ select HAVE_PERF_REGS -+ select HAVE_PERF_USER_STACK_DUMP - select HAVE_REGS_AND_STACK_ACCESS_API - select HAVE_SYSCALL_TRACEPOINTS - select HAVE_UID16 -diff --git a/arch/arm/include/uapi/asm/Kbuild b/arch/arm/include/uapi/asm/Kbuild -index 18d76fd..70a1c9d 100644 ---- a/arch/arm/include/uapi/asm/Kbuild -+++ b/arch/arm/include/uapi/asm/Kbuild -@@ -7,6 +7,7 @@ header-y += hwcap.h - header-y += ioctls.h - header-y += kvm_para.h - header-y += mman.h -+header-y += perf_regs.h - header-y += posix_types.h - header-y += ptrace.h - header-y += setup.h -diff --git a/arch/arm/include/uapi/asm/perf_regs.h b/arch/arm/include/uapi/asm/perf_regs.h -new file mode 100644 -index 0000000..ce59448 ---- /dev/null -+++ b/arch/arm/include/uapi/asm/perf_regs.h -@@ -0,0 +1,23 @@ -+#ifndef _ASM_ARM_PERF_REGS_H -+#define _ASM_ARM_PERF_REGS_H -+ -+enum perf_event_arm_regs { -+ PERF_REG_ARM_R0, -+ PERF_REG_ARM_R1, -+ PERF_REG_ARM_R2, -+ PERF_REG_ARM_R3, -+ PERF_REG_ARM_R4, -+ PERF_REG_ARM_R5, -+ PERF_REG_ARM_R6, -+ PERF_REG_ARM_R7, -+ PERF_REG_ARM_R8, -+ PERF_REG_ARM_R9, -+ PERF_REG_ARM_R10, -+ PERF_REG_ARM_FP, -+ PERF_REG_ARM_IP, -+ PERF_REG_ARM_SP, -+ PERF_REG_ARM_LR, -+ PERF_REG_ARM_PC, -+ PERF_REG_ARM_MAX, -+}; -+#endif /* _ASM_ARM_PERF_REGS_H */ -diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile -index 5140df5f..9b818ca 100644 ---- a/arch/arm/kernel/Makefile -+++ b/arch/arm/kernel/Makefile -@@ -78,6 +78,7 @@ obj-$(CONFIG_CPU_XSC3) += xscale-cp0.o - obj-$(CONFIG_CPU_MOHAWK) += xscale-cp0.o - obj-$(CONFIG_CPU_PJ4) += pj4-cp0.o - obj-$(CONFIG_IWMMXT) += iwmmxt.o -+obj-$(CONFIG_PERF_EVENTS) += perf_regs.o - obj-$(CONFIG_HW_PERF_EVENTS) += perf_event.o perf_event_cpu.o - AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt - obj-$(CONFIG_ARM_CPU_TOPOLOGY) += topology.o -diff --git a/arch/arm/kernel/perf_regs.c b/arch/arm/kernel/perf_regs.c -new file mode 100644 -index 0000000..6e4379c ---- /dev/null -+++ b/arch/arm/kernel/perf_regs.c -@@ -0,0 +1,30 @@ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+u64 perf_reg_value(struct pt_regs *regs, int idx) -+{ -+ if (WARN_ON_ONCE((u32)idx >= PERF_REG_ARM_MAX)) -+ return 0; -+ -+ return regs->uregs[idx]; -+} -+ -+#define REG_RESERVED (~((1ULL << PERF_REG_ARM_MAX) - 1)) -+ -+int perf_reg_validate(u64 mask) -+{ -+ if (!mask || mask & REG_RESERVED) -+ return -EINVAL; -+ -+ return 0; -+} -+ -+u64 perf_reg_abi(struct task_struct *task) -+{ -+ return PERF_SAMPLE_REGS_ABI_32; -+} --- -1.9.1 - diff --git a/recipes/linux/linux/ARM-perf-wire-up-perf_regs-and-unwind-support-for-AR.patch b/recipes/linux/linux/ARM-perf-wire-up-perf_regs-and-unwind-support-for-AR.patch deleted file mode 100644 index 1e497c6..0000000 --- a/recipes/linux/linux/ARM-perf-wire-up-perf_regs-and-unwind-support-for-AR.patch +++ /dev/null @@ -1,172 +0,0 @@ -From 8abd7519c1fd2b6ae35eddbb41f93f44d3886000 Mon Sep 17 00:00:00 2001 -From: Will Deacon -Date: Thu, 26 Sep 2013 12:36:36 +0100 -Subject: [PATCH] ARM: perf: wire up perf_regs and unwind support for ARM - -This patch hooks in the perf_regs and libunwind code for ARM. - -B2Qt: Backported for 3.10 kernel - -Cc: Jean Pihet -Signed-off-by: Will Deacon ---- - tools/perf/Makefile | 6 +++- - tools/perf/arch/arm/Makefile | 3 ++ - tools/perf/arch/arm/include/perf_regs.h | 54 +++++++++++++++++++++++++++++++++ - tools/perf/arch/arm/util/unwind.c | 48 +++++++++++++++++++++++++++++ - 4 files changed, 110 insertions(+), 1 deletion(-) - create mode 100644 tools/perf/arch/arm/include/perf_regs.h - create mode 100644 tools/perf/arch/arm/util/unwind.c - -diff --git a/tools/perf/Makefile b/tools/perf/Makefile -index b0f164b..f8fdad5 100644 ---- a/tools/perf/Makefile -+++ b/tools/perf/Makefile -@@ -87,6 +87,10 @@ ifeq ($(ARCH),x86_64) - NO_PERF_REGS := 0 - LIBUNWIND_LIBS = -lunwind -lunwind-x86_64 - endif -+ifeq ($(ARCH),arm) -+ NO_PERF_REGS := 0 -+ LIBUNWIND_LIBS = -lunwind -lunwind-arm -+endif - - # Treat warnings as errors unless directed not to - ifneq ($(WERROR),0) -@@ -607,7 +611,7 @@ endif # SOURCE_LIBELF - endif # NO_LIBELF - - # There's only x86 (both 32 and 64) support for CFI unwind so far --ifneq ($(ARCH),x86) -+ifeq ($(LIBUNWIND_LIBS),) - NO_LIBUNWIND := 1 - endif - -diff --git a/tools/perf/arch/arm/Makefile b/tools/perf/arch/arm/Makefile -index 15130b5..fe9b61e 100644 ---- a/tools/perf/arch/arm/Makefile -+++ b/tools/perf/arch/arm/Makefile -@@ -2,3 +2,6 @@ ifndef NO_DWARF - PERF_HAVE_DWARF_REGS := 1 - LIB_OBJS += $(OUTPUT)arch/$(ARCH)/util/dwarf-regs.o - endif -+ifndef NO_LIBUNWIND -+LIB_OBJS += $(OUTPUT)arch/$(ARCH)/util/unwind.o -+endif -diff --git a/tools/perf/arch/arm/include/perf_regs.h b/tools/perf/arch/arm/include/perf_regs.h -new file mode 100644 -index 0000000..2a1cfde ---- /dev/null -+++ b/tools/perf/arch/arm/include/perf_regs.h -@@ -0,0 +1,54 @@ -+#ifndef ARCH_PERF_REGS_H -+#define ARCH_PERF_REGS_H -+ -+#include -+#include "../../util/types.h" -+#include -+ -+#define PERF_REGS_MASK ((1ULL << PERF_REG_ARM_MAX) - 1) -+#define PERF_REG_IP PERF_REG_ARM_PC -+#define PERF_REG_SP PERF_REG_ARM_SP -+ -+static inline const char *perf_reg_name(int id) -+{ -+ switch (id) { -+ case PERF_REG_ARM_R0: -+ return "r0"; -+ case PERF_REG_ARM_R1: -+ return "r1"; -+ case PERF_REG_ARM_R2: -+ return "r2"; -+ case PERF_REG_ARM_R3: -+ return "r3"; -+ case PERF_REG_ARM_R4: -+ return "r4"; -+ case PERF_REG_ARM_R5: -+ return "r5"; -+ case PERF_REG_ARM_R6: -+ return "r6"; -+ case PERF_REG_ARM_R7: -+ return "r7"; -+ case PERF_REG_ARM_R8: -+ return "r8"; -+ case PERF_REG_ARM_R9: -+ return "r9"; -+ case PERF_REG_ARM_R10: -+ return "r10"; -+ case PERF_REG_ARM_FP: -+ return "fp"; -+ case PERF_REG_ARM_IP: -+ return "ip"; -+ case PERF_REG_ARM_SP: -+ return "sp"; -+ case PERF_REG_ARM_LR: -+ return "lr"; -+ case PERF_REG_ARM_PC: -+ return "pc"; -+ default: -+ return NULL; -+ } -+ -+ return NULL; -+} -+ -+#endif /* ARCH_PERF_REGS_H */ -diff --git a/tools/perf/arch/arm/util/unwind.c b/tools/perf/arch/arm/util/unwind.c -new file mode 100644 -index 0000000..da3dc95 ---- /dev/null -+++ b/tools/perf/arch/arm/util/unwind.c -@@ -0,0 +1,48 @@ -+ -+#include -+#include -+#include "perf_regs.h" -+#include "../../util/unwind.h" -+ -+int unwind__arch_reg_id(int regnum) -+{ -+ switch (regnum) { -+ case UNW_ARM_R0: -+ return PERF_REG_ARM_R0; -+ case UNW_ARM_R1: -+ return PERF_REG_ARM_R1; -+ case UNW_ARM_R2: -+ return PERF_REG_ARM_R2; -+ case UNW_ARM_R3: -+ return PERF_REG_ARM_R3; -+ case UNW_ARM_R4: -+ return PERF_REG_ARM_R4; -+ case UNW_ARM_R5: -+ return PERF_REG_ARM_R5; -+ case UNW_ARM_R6: -+ return PERF_REG_ARM_R6; -+ case UNW_ARM_R7: -+ return PERF_REG_ARM_R7; -+ case UNW_ARM_R8: -+ return PERF_REG_ARM_R8; -+ case UNW_ARM_R9: -+ return PERF_REG_ARM_R9; -+ case UNW_ARM_R10: -+ return PERF_REG_ARM_R10; -+ case UNW_ARM_R11: -+ return PERF_REG_ARM_FP; -+ case UNW_ARM_R12: -+ return PERF_REG_ARM_IP; -+ case UNW_ARM_R13: -+ return PERF_REG_ARM_SP; -+ case UNW_ARM_R14: -+ return PERF_REG_ARM_LR; -+ case UNW_ARM_R15: -+ return PERF_REG_ARM_PC; -+ default: -+ pr_err("unwind: invalid reg id %d\n", regnum); -+ return -EINVAL; -+ } -+ -+ return -EINVAL; -+} --- -1.9.1 - -- cgit v1.2.3-54-g00ecf