@@ -32,196 +32,6 @@ struct bpf_map_def {
32
32
unsigned int map_flags ;
33
33
};
34
34
35
- /* Scan the ARCH passed in from ARCH env variable (see Makefile) */
36
- #if defined(__TARGET_ARCH_x86 )
37
- #define bpf_target_x86
38
- #define bpf_target_defined
39
- #elif defined(__TARGET_ARCH_s390 )
40
- #define bpf_target_s390
41
- #define bpf_target_defined
42
- #elif defined(__TARGET_ARCH_arm )
43
- #define bpf_target_arm
44
- #define bpf_target_defined
45
- #elif defined(__TARGET_ARCH_arm64 )
46
- #define bpf_target_arm64
47
- #define bpf_target_defined
48
- #elif defined(__TARGET_ARCH_mips )
49
- #define bpf_target_mips
50
- #define bpf_target_defined
51
- #elif defined(__TARGET_ARCH_powerpc )
52
- #define bpf_target_powerpc
53
- #define bpf_target_defined
54
- #elif defined(__TARGET_ARCH_sparc )
55
- #define bpf_target_sparc
56
- #define bpf_target_defined
57
- #else
58
- #undef bpf_target_defined
59
- #endif
60
-
61
- /* Fall back to what the compiler says */
62
- #ifndef bpf_target_defined
63
- #if defined(__x86_64__ )
64
- #define bpf_target_x86
65
- #elif defined(__s390__ )
66
- #define bpf_target_s390
67
- #elif defined(__arm__ )
68
- #define bpf_target_arm
69
- #elif defined(__aarch64__ )
70
- #define bpf_target_arm64
71
- #elif defined(__mips__ )
72
- #define bpf_target_mips
73
- #elif defined(__powerpc__ )
74
- #define bpf_target_powerpc
75
- #elif defined(__sparc__ )
76
- #define bpf_target_sparc
77
- #endif
78
- #endif
79
-
80
- #if defined(bpf_target_x86 )
81
-
82
- #ifdef __KERNEL__
83
- #define PT_REGS_PARM1 (x ) ((x)->di)
84
- #define PT_REGS_PARM2 (x ) ((x)->si)
85
- #define PT_REGS_PARM3 (x ) ((x)->dx)
86
- #define PT_REGS_PARM4 (x ) ((x)->cx)
87
- #define PT_REGS_PARM5 (x ) ((x)->r8)
88
- #define PT_REGS_RET (x ) ((x)->sp)
89
- #define PT_REGS_FP (x ) ((x)->bp)
90
- #define PT_REGS_RC (x ) ((x)->ax)
91
- #define PT_REGS_SP (x ) ((x)->sp)
92
- #define PT_REGS_IP (x ) ((x)->ip)
93
- #else
94
- #ifdef __i386__
95
- /* i386 kernel is built with -mregparm=3 */
96
- #define PT_REGS_PARM1 (x ) ((x)->eax)
97
- #define PT_REGS_PARM2 (x ) ((x)->edx)
98
- #define PT_REGS_PARM3 (x ) ((x)->ecx)
99
- #define PT_REGS_PARM4 (x ) 0
100
- #define PT_REGS_PARM5 (x ) 0
101
- #define PT_REGS_RET (x ) ((x)->esp)
102
- #define PT_REGS_FP (x ) ((x)->ebp)
103
- #define PT_REGS_RC (x ) ((x)->eax)
104
- #define PT_REGS_SP (x ) ((x)->esp)
105
- #define PT_REGS_IP (x ) ((x)->eip)
106
- #else
107
- #define PT_REGS_PARM1 (x ) ((x)->rdi)
108
- #define PT_REGS_PARM2 (x ) ((x)->rsi)
109
- #define PT_REGS_PARM3 (x ) ((x)->rdx)
110
- #define PT_REGS_PARM4 (x ) ((x)->rcx)
111
- #define PT_REGS_PARM5 (x ) ((x)->r8)
112
- #define PT_REGS_RET (x ) ((x)->rsp)
113
- #define PT_REGS_FP (x ) ((x)->rbp)
114
- #define PT_REGS_RC (x ) ((x)->rax)
115
- #define PT_REGS_SP (x ) ((x)->rsp)
116
- #define PT_REGS_IP (x ) ((x)->rip)
117
- #endif
118
- #endif
119
-
120
- #elif defined(bpf_target_s390 )
121
-
122
- /* s390 provides user_pt_regs instead of struct pt_regs to userspace */
123
- struct pt_regs ;
124
- #define PT_REGS_S390 const volatile user_pt_regs
125
- #define PT_REGS_PARM1 (x ) (((PT_REGS_S390 *)(x))->gprs[2])
126
- #define PT_REGS_PARM2 (x ) (((PT_REGS_S390 *)(x))->gprs[3])
127
- #define PT_REGS_PARM3 (x ) (((PT_REGS_S390 *)(x))->gprs[4])
128
- #define PT_REGS_PARM4 (x ) (((PT_REGS_S390 *)(x))->gprs[5])
129
- #define PT_REGS_PARM5 (x ) (((PT_REGS_S390 *)(x))->gprs[6])
130
- #define PT_REGS_RET (x ) (((PT_REGS_S390 *)(x))->gprs[14])
131
- /* Works only with CONFIG_FRAME_POINTER */
132
- #define PT_REGS_FP (x ) (((PT_REGS_S390 *)(x))->gprs[11])
133
- #define PT_REGS_RC (x ) (((PT_REGS_S390 *)(x))->gprs[2])
134
- #define PT_REGS_SP (x ) (((PT_REGS_S390 *)(x))->gprs[15])
135
- #define PT_REGS_IP (x ) (((PT_REGS_S390 *)(x))->psw.addr)
136
-
137
- #elif defined(bpf_target_arm )
138
-
139
- #define PT_REGS_PARM1 (x ) ((x)->uregs[0])
140
- #define PT_REGS_PARM2 (x ) ((x)->uregs[1])
141
- #define PT_REGS_PARM3 (x ) ((x)->uregs[2])
142
- #define PT_REGS_PARM4 (x ) ((x)->uregs[3])
143
- #define PT_REGS_PARM5 (x ) ((x)->uregs[4])
144
- #define PT_REGS_RET (x ) ((x)->uregs[14])
145
- #define PT_REGS_FP (x ) ((x)->uregs[11]) /* Works only with CONFIG_FRAME_POINTER */
146
- #define PT_REGS_RC (x ) ((x)->uregs[0])
147
- #define PT_REGS_SP (x ) ((x)->uregs[13])
148
- #define PT_REGS_IP (x ) ((x)->uregs[12])
149
-
150
- #elif defined(bpf_target_arm64 )
151
-
152
- /* arm64 provides struct user_pt_regs instead of struct pt_regs to userspace */
153
- struct pt_regs ;
154
- #define PT_REGS_ARM64 const volatile struct user_pt_regs
155
- #define PT_REGS_PARM1 (x ) (((PT_REGS_ARM64 *)(x))->regs[0])
156
- #define PT_REGS_PARM2 (x ) (((PT_REGS_ARM64 *)(x))->regs[1])
157
- #define PT_REGS_PARM3 (x ) (((PT_REGS_ARM64 *)(x))->regs[2])
158
- #define PT_REGS_PARM4 (x ) (((PT_REGS_ARM64 *)(x))->regs[3])
159
- #define PT_REGS_PARM5 (x ) (((PT_REGS_ARM64 *)(x))->regs[4])
160
- #define PT_REGS_RET (x ) (((PT_REGS_ARM64 *)(x))->regs[30])
161
- /* Works only with CONFIG_FRAME_POINTER */
162
- #define PT_REGS_FP (x ) (((PT_REGS_ARM64 *)(x))->regs[29])
163
- #define PT_REGS_RC (x ) (((PT_REGS_ARM64 *)(x))->regs[0])
164
- #define PT_REGS_SP (x ) (((PT_REGS_ARM64 *)(x))->sp)
165
- #define PT_REGS_IP (x ) (((PT_REGS_ARM64 *)(x))->pc)
166
-
167
- #elif defined(bpf_target_mips )
168
-
169
- #define PT_REGS_PARM1 (x ) ((x)->regs[4])
170
- #define PT_REGS_PARM2 (x ) ((x)->regs[5])
171
- #define PT_REGS_PARM3 (x ) ((x)->regs[6])
172
- #define PT_REGS_PARM4 (x ) ((x)->regs[7])
173
- #define PT_REGS_PARM5 (x ) ((x)->regs[8])
174
- #define PT_REGS_RET (x ) ((x)->regs[31])
175
- #define PT_REGS_FP (x ) ((x)->regs[30]) /* Works only with CONFIG_FRAME_POINTER */
176
- #define PT_REGS_RC (x ) ((x)->regs[1])
177
- #define PT_REGS_SP (x ) ((x)->regs[29])
178
- #define PT_REGS_IP (x ) ((x)->cp0_epc)
179
-
180
- #elif defined(bpf_target_powerpc )
181
-
182
- #define PT_REGS_PARM1 (x ) ((x)->gpr[3])
183
- #define PT_REGS_PARM2 (x ) ((x)->gpr[4])
184
- #define PT_REGS_PARM3 (x ) ((x)->gpr[5])
185
- #define PT_REGS_PARM4 (x ) ((x)->gpr[6])
186
- #define PT_REGS_PARM5 (x ) ((x)->gpr[7])
187
- #define PT_REGS_RC (x ) ((x)->gpr[3])
188
- #define PT_REGS_SP (x ) ((x)->sp)
189
- #define PT_REGS_IP (x ) ((x)->nip)
190
-
191
- #elif defined(bpf_target_sparc )
192
-
193
- #define PT_REGS_PARM1 (x ) ((x)->u_regs[UREG_I0])
194
- #define PT_REGS_PARM2 (x ) ((x)->u_regs[UREG_I1])
195
- #define PT_REGS_PARM3 (x ) ((x)->u_regs[UREG_I2])
196
- #define PT_REGS_PARM4 (x ) ((x)->u_regs[UREG_I3])
197
- #define PT_REGS_PARM5 (x ) ((x)->u_regs[UREG_I4])
198
- #define PT_REGS_RET (x ) ((x)->u_regs[UREG_I7])
199
- #define PT_REGS_RC (x ) ((x)->u_regs[UREG_I0])
200
- #define PT_REGS_SP (x ) ((x)->u_regs[UREG_FP])
201
-
202
- /* Should this also be a bpf_target check for the sparc case? */
203
- #if defined(__arch64__ )
204
- #define PT_REGS_IP (x ) ((x)->tpc)
205
- #else
206
- #define PT_REGS_IP (x ) ((x)->pc)
207
- #endif
208
-
209
- #endif
210
-
211
- #if defined(bpf_target_powerpc )
212
- #define BPF_KPROBE_READ_RET_IP (ip , ctx ) ({ (ip) = (ctx)->link; })
213
- #define BPF_KRETPROBE_READ_RET_IP BPF_KPROBE_READ_RET_IP
214
- #elif defined(bpf_target_sparc )
215
- #define BPF_KPROBE_READ_RET_IP (ip , ctx ) ({ (ip) = PT_REGS_RET(ctx); })
216
- #define BPF_KRETPROBE_READ_RET_IP BPF_KPROBE_READ_RET_IP
217
- #else
218
- #define BPF_KPROBE_READ_RET_IP (ip , ctx ) ({ \
219
- bpf_probe_read(&(ip), sizeof(ip), (void *)PT_REGS_RET(ctx)); })
220
- #define BPF_KRETPROBE_READ_RET_IP (ip , ctx ) ({ \
221
- bpf_probe_read(&(ip), sizeof(ip), \
222
- (void *)(PT_REGS_FP(ctx) + sizeof(ip))); })
223
- #endif
224
-
225
35
/*
226
36
* bpf_core_read() abstracts away bpf_probe_read() call and captures offset
227
37
* relocation for source address using __builtin_preserve_access_index()
0 commit comments