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