xref: /linux/tools/perf/arch/arm/util/unwind-libunwind.c (revision 4949009eb8d40a441dcddcd96e101e77d31cf1b2)
1 
2 #include <errno.h>
3 #include <libunwind.h>
4 #include "perf_regs.h"
5 #include "../../util/unwind.h"
6 #include "../../util/debug.h"
7 
8 int libunwind__arch_reg_id(int regnum)
9 {
10 	switch (regnum) {
11 	case UNW_ARM_R0:
12 		return PERF_REG_ARM_R0;
13 	case UNW_ARM_R1:
14 		return PERF_REG_ARM_R1;
15 	case UNW_ARM_R2:
16 		return PERF_REG_ARM_R2;
17 	case UNW_ARM_R3:
18 		return PERF_REG_ARM_R3;
19 	case UNW_ARM_R4:
20 		return PERF_REG_ARM_R4;
21 	case UNW_ARM_R5:
22 		return PERF_REG_ARM_R5;
23 	case UNW_ARM_R6:
24 		return PERF_REG_ARM_R6;
25 	case UNW_ARM_R7:
26 		return PERF_REG_ARM_R7;
27 	case UNW_ARM_R8:
28 		return PERF_REG_ARM_R8;
29 	case UNW_ARM_R9:
30 		return PERF_REG_ARM_R9;
31 	case UNW_ARM_R10:
32 		return PERF_REG_ARM_R10;
33 	case UNW_ARM_R11:
34 		return PERF_REG_ARM_FP;
35 	case UNW_ARM_R12:
36 		return PERF_REG_ARM_IP;
37 	case UNW_ARM_R13:
38 		return PERF_REG_ARM_SP;
39 	case UNW_ARM_R14:
40 		return PERF_REG_ARM_LR;
41 	case UNW_ARM_R15:
42 		return PERF_REG_ARM_PC;
43 	default:
44 		pr_err("unwind: invalid reg id %d\n", regnum);
45 		return -EINVAL;
46 	}
47 
48 	return -EINVAL;
49 }
50