diff options
Diffstat (limited to 'tools/perf/arch/arm/util/unwind.c')
-rw-r--r-- | tools/perf/arch/arm/util/unwind.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/tools/perf/arch/arm/util/unwind.c b/tools/perf/arch/arm/util/unwind.c new file mode 100644 index 000000000000..da3dc950550c --- /dev/null +++ b/tools/perf/arch/arm/util/unwind.c | |||
@@ -0,0 +1,48 @@ | |||
1 | |||
2 | #include <errno.h> | ||
3 | #include <libunwind.h> | ||
4 | #include "perf_regs.h" | ||
5 | #include "../../util/unwind.h" | ||
6 | |||
7 | int unwind__arch_reg_id(int regnum) | ||
8 | { | ||
9 | switch (regnum) { | ||
10 | case UNW_ARM_R0: | ||
11 | return PERF_REG_ARM_R0; | ||
12 | case UNW_ARM_R1: | ||
13 | return PERF_REG_ARM_R1; | ||
14 | case UNW_ARM_R2: | ||
15 | return PERF_REG_ARM_R2; | ||
16 | case UNW_ARM_R3: | ||
17 | return PERF_REG_ARM_R3; | ||
18 | case UNW_ARM_R4: | ||
19 | return PERF_REG_ARM_R4; | ||
20 | case UNW_ARM_R5: | ||
21 | return PERF_REG_ARM_R5; | ||
22 | case UNW_ARM_R6: | ||
23 | return PERF_REG_ARM_R6; | ||
24 | case UNW_ARM_R7: | ||
25 | return PERF_REG_ARM_R7; | ||
26 | case UNW_ARM_R8: | ||
27 | return PERF_REG_ARM_R8; | ||
28 | case UNW_ARM_R9: | ||
29 | return PERF_REG_ARM_R9; | ||
30 | case UNW_ARM_R10: | ||
31 | return PERF_REG_ARM_R10; | ||
32 | case UNW_ARM_R11: | ||
33 | return PERF_REG_ARM_FP; | ||
34 | case UNW_ARM_R12: | ||
35 | return PERF_REG_ARM_IP; | ||
36 | case UNW_ARM_R13: | ||
37 | return PERF_REG_ARM_SP; | ||
38 | case UNW_ARM_R14: | ||
39 | return PERF_REG_ARM_LR; | ||
40 | case UNW_ARM_R15: | ||
41 | return PERF_REG_ARM_PC; | ||
42 | default: | ||
43 | pr_err("unwind: invalid reg id %d\n", regnum); | ||
44 | return -EINVAL; | ||
45 | } | ||
46 | |||
47 | return -EINVAL; | ||
48 | } | ||