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