1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * Copyright 2016 Chandan Kumar, IBM Corporation.
4  */
5 
6 #include <errno.h>
7 #include <libunwind.h>
8 #include <asm/perf_regs.h>
9 #include "../../util/unwind.h"
10 #include "../../util/debug.h"
11 
12 int libunwind__arch_reg_id(int regnum)
13 {
14 	switch (regnum) {
15 	case UNW_PPC64_R0:
16 		return PERF_REG_POWERPC_R0;
17 	case UNW_PPC64_R1:
18 		return PERF_REG_POWERPC_R1;
19 	case UNW_PPC64_R2:
20 		return PERF_REG_POWERPC_R2;
21 	case UNW_PPC64_R3:
22 		return PERF_REG_POWERPC_R3;
23 	case UNW_PPC64_R4:
24 		return PERF_REG_POWERPC_R4;
25 	case UNW_PPC64_R5:
26 		return PERF_REG_POWERPC_R5;
27 	case UNW_PPC64_R6:
28 		return PERF_REG_POWERPC_R6;
29 	case UNW_PPC64_R7:
30 		return PERF_REG_POWERPC_R7;
31 	case UNW_PPC64_R8:
32 		return PERF_REG_POWERPC_R8;
33 	case UNW_PPC64_R9:
34 		return PERF_REG_POWERPC_R9;
35 	case UNW_PPC64_R10:
36 		return PERF_REG_POWERPC_R10;
37 	case UNW_PPC64_R11:
38 		return PERF_REG_POWERPC_R11;
39 	case UNW_PPC64_R12:
40 		return PERF_REG_POWERPC_R12;
41 	case UNW_PPC64_R13:
42 		return PERF_REG_POWERPC_R13;
43 	case UNW_PPC64_R14:
44 		return PERF_REG_POWERPC_R14;
45 	case UNW_PPC64_R15:
46 		return PERF_REG_POWERPC_R15;
47 	case UNW_PPC64_R16:
48 		return PERF_REG_POWERPC_R16;
49 	case UNW_PPC64_R17:
50 		return PERF_REG_POWERPC_R17;
51 	case UNW_PPC64_R18:
52 		return PERF_REG_POWERPC_R18;
53 	case UNW_PPC64_R19:
54 		return PERF_REG_POWERPC_R19;
55 	case UNW_PPC64_R20:
56 		return PERF_REG_POWERPC_R20;
57 	case UNW_PPC64_R21:
58 		return PERF_REG_POWERPC_R21;
59 	case UNW_PPC64_R22:
60 		return PERF_REG_POWERPC_R22;
61 	case UNW_PPC64_R23:
62 		return PERF_REG_POWERPC_R23;
63 	case UNW_PPC64_R24:
64 		return PERF_REG_POWERPC_R24;
65 	case UNW_PPC64_R25:
66 		return PERF_REG_POWERPC_R25;
67 	case UNW_PPC64_R26:
68 		return PERF_REG_POWERPC_R26;
69 	case UNW_PPC64_R27:
70 		return PERF_REG_POWERPC_R27;
71 	case UNW_PPC64_R28:
72 		return PERF_REG_POWERPC_R28;
73 	case UNW_PPC64_R29:
74 		return PERF_REG_POWERPC_R29;
75 	case UNW_PPC64_R30:
76 		return PERF_REG_POWERPC_R30;
77 	case UNW_PPC64_R31:
78 		return PERF_REG_POWERPC_R31;
79 	case UNW_PPC64_LR:
80 		return PERF_REG_POWERPC_LINK;
81 	case UNW_PPC64_CTR:
82 		return PERF_REG_POWERPC_CTR;
83 	case UNW_PPC64_XER:
84 		return PERF_REG_POWERPC_XER;
85 	case UNW_PPC64_NIP:
86 		return PERF_REG_POWERPC_NIP;
87 	default:
88 		pr_err("unwind: invalid reg id %d\n", regnum);
89 		return -EINVAL;
90 	}
91 	return -EINVAL;
92 }
93