Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/tools/perf/arch/x86/util/unwind-libunwind.c
26292 views
1
// SPDX-License-Identifier: GPL-2.0
2
3
#include <errno.h>
4
#include "../../util/debug.h"
5
#ifndef REMOTE_UNWIND_LIBUNWIND
6
#include <libunwind.h>
7
#include "perf_regs.h"
8
#include "../../util/unwind.h"
9
#endif
10
11
#ifdef HAVE_ARCH_X86_64_SUPPORT
12
int LIBUNWIND__ARCH_REG_ID(int regnum)
13
{
14
int id;
15
16
switch (regnum) {
17
case UNW_X86_64_RAX:
18
id = PERF_REG_X86_AX;
19
break;
20
case UNW_X86_64_RDX:
21
id = PERF_REG_X86_DX;
22
break;
23
case UNW_X86_64_RCX:
24
id = PERF_REG_X86_CX;
25
break;
26
case UNW_X86_64_RBX:
27
id = PERF_REG_X86_BX;
28
break;
29
case UNW_X86_64_RSI:
30
id = PERF_REG_X86_SI;
31
break;
32
case UNW_X86_64_RDI:
33
id = PERF_REG_X86_DI;
34
break;
35
case UNW_X86_64_RBP:
36
id = PERF_REG_X86_BP;
37
break;
38
case UNW_X86_64_RSP:
39
id = PERF_REG_X86_SP;
40
break;
41
case UNW_X86_64_R8:
42
id = PERF_REG_X86_R8;
43
break;
44
case UNW_X86_64_R9:
45
id = PERF_REG_X86_R9;
46
break;
47
case UNW_X86_64_R10:
48
id = PERF_REG_X86_R10;
49
break;
50
case UNW_X86_64_R11:
51
id = PERF_REG_X86_R11;
52
break;
53
case UNW_X86_64_R12:
54
id = PERF_REG_X86_R12;
55
break;
56
case UNW_X86_64_R13:
57
id = PERF_REG_X86_R13;
58
break;
59
case UNW_X86_64_R14:
60
id = PERF_REG_X86_R14;
61
break;
62
case UNW_X86_64_R15:
63
id = PERF_REG_X86_R15;
64
break;
65
case UNW_X86_64_RIP:
66
id = PERF_REG_X86_IP;
67
break;
68
default:
69
pr_err("unwind: invalid reg id %d\n", regnum);
70
return -EINVAL;
71
}
72
73
return id;
74
}
75
#else
76
int LIBUNWIND__ARCH_REG_ID(int regnum)
77
{
78
int id;
79
80
switch (regnum) {
81
case UNW_X86_EAX:
82
id = PERF_REG_X86_AX;
83
break;
84
case UNW_X86_EDX:
85
id = PERF_REG_X86_DX;
86
break;
87
case UNW_X86_ECX:
88
id = PERF_REG_X86_CX;
89
break;
90
case UNW_X86_EBX:
91
id = PERF_REG_X86_BX;
92
break;
93
case UNW_X86_ESI:
94
id = PERF_REG_X86_SI;
95
break;
96
case UNW_X86_EDI:
97
id = PERF_REG_X86_DI;
98
break;
99
case UNW_X86_EBP:
100
id = PERF_REG_X86_BP;
101
break;
102
case UNW_X86_ESP:
103
id = PERF_REG_X86_SP;
104
break;
105
case UNW_X86_EIP:
106
id = PERF_REG_X86_IP;
107
break;
108
default:
109
pr_err("unwind: invalid reg id %d\n", regnum);
110
return -EINVAL;
111
}
112
113
return id;
114
}
115
#endif /* HAVE_ARCH_X86_64_SUPPORT */
116
117