@@ -109,7 +109,47 @@ static int (*bpf_skb_under_cgroup)(void *ctx, void *map, int index) =
109
109
static int (* bpf_skb_change_head )(void * , int len , int flags ) =
110
110
(void * ) BPF_FUNC_skb_change_head ;
111
111
112
+ /* Scan the ARCH passed in from ARCH env variable (see Makefile) */
113
+ #if defined(__TARGET_ARCH_x86 )
114
+ #define bpf_target_x86
115
+ #define bpf_target_defined
116
+ #elif defined(__TARGET_ARCH_s930x )
117
+ #define bpf_target_s930x
118
+ #define bpf_target_defined
119
+ #elif defined(__TARGET_ARCH_arm64 )
120
+ #define bpf_target_arm64
121
+ #define bpf_target_defined
122
+ #elif defined(__TARGET_ARCH_mips )
123
+ #define bpf_target_mips
124
+ #define bpf_target_defined
125
+ #elif defined(__TARGET_ARCH_powerpc )
126
+ #define bpf_target_powerpc
127
+ #define bpf_target_defined
128
+ #elif defined(__TARGET_ARCH_sparc )
129
+ #define bpf_target_sparc
130
+ #define bpf_target_defined
131
+ #else
132
+ #undef bpf_target_defined
133
+ #endif
134
+
135
+ /* Fall back to what the compiler says */
136
+ #ifndef bpf_target_defined
112
137
#if defined(__x86_64__ )
138
+ #define bpf_target_x86
139
+ #elif defined(__s390x__ )
140
+ #define bpf_target_s930x
141
+ #elif defined(__aarch64__ )
142
+ #define bpf_target_arm64
143
+ #elif defined(__mips__ )
144
+ #define bpf_target_mips
145
+ #elif defined(__powerpc__ )
146
+ #define bpf_target_powerpc
147
+ #elif defined(__sparc__ )
148
+ #define bpf_target_sparc
149
+ #endif
150
+ #endif
151
+
152
+ #if defined(bpf_target_x86 )
113
153
114
154
#define PT_REGS_PARM1 (x ) ((x)->di)
115
155
#define PT_REGS_PARM2 (x ) ((x)->si)
@@ -122,7 +162,7 @@ static int (*bpf_skb_change_head)(void *, int len, int flags) =
122
162
#define PT_REGS_SP (x ) ((x)->sp)
123
163
#define PT_REGS_IP (x ) ((x)->ip)
124
164
125
- #elif defined(__s390x__ )
165
+ #elif defined(bpf_target_s390x )
126
166
127
167
#define PT_REGS_PARM1 (x ) ((x)->gprs[2])
128
168
#define PT_REGS_PARM2 (x ) ((x)->gprs[3])
@@ -135,7 +175,7 @@ static int (*bpf_skb_change_head)(void *, int len, int flags) =
135
175
#define PT_REGS_SP (x ) ((x)->gprs[15])
136
176
#define PT_REGS_IP (x ) ((x)->psw.addr)
137
177
138
- #elif defined(__aarch64__ )
178
+ #elif defined(bpf_target_arm64 )
139
179
140
180
#define PT_REGS_PARM1 (x ) ((x)->regs[0])
141
181
#define PT_REGS_PARM2 (x ) ((x)->regs[1])
@@ -148,7 +188,7 @@ static int (*bpf_skb_change_head)(void *, int len, int flags) =
148
188
#define PT_REGS_SP (x ) ((x)->sp)
149
189
#define PT_REGS_IP (x ) ((x)->pc)
150
190
151
- #elif defined(__mips__ )
191
+ #elif defined(bpf_target_mips )
152
192
153
193
#define PT_REGS_PARM1 (x ) ((x)->regs[4])
154
194
#define PT_REGS_PARM2 (x ) ((x)->regs[5])
@@ -161,7 +201,7 @@ static int (*bpf_skb_change_head)(void *, int len, int flags) =
161
201
#define PT_REGS_SP (x ) ((x)->regs[29])
162
202
#define PT_REGS_IP (x ) ((x)->cp0_epc)
163
203
164
- #elif defined(__powerpc__ )
204
+ #elif defined(bpf_target_powerpc )
165
205
166
206
#define PT_REGS_PARM1 (x ) ((x)->gpr[3])
167
207
#define PT_REGS_PARM2 (x ) ((x)->gpr[4])
@@ -172,7 +212,7 @@ static int (*bpf_skb_change_head)(void *, int len, int flags) =
172
212
#define PT_REGS_SP (x ) ((x)->sp)
173
213
#define PT_REGS_IP (x ) ((x)->nip)
174
214
175
- #elif defined(__sparc__ )
215
+ #elif defined(bpf_target_sparc )
176
216
177
217
#define PT_REGS_PARM1 (x ) ((x)->u_regs[UREG_I0])
178
218
#define PT_REGS_PARM2 (x ) ((x)->u_regs[UREG_I1])
@@ -182,6 +222,8 @@ static int (*bpf_skb_change_head)(void *, int len, int flags) =
182
222
#define PT_REGS_RET (x ) ((x)->u_regs[UREG_I7])
183
223
#define PT_REGS_RC (x ) ((x)->u_regs[UREG_I0])
184
224
#define PT_REGS_SP (x ) ((x)->u_regs[UREG_FP])
225
+
226
+ /* Should this also be a bpf_target check for the sparc case? */
185
227
#if defined(__arch64__ )
186
228
#define PT_REGS_IP (x ) ((x)->tpc)
187
229
#else
@@ -190,10 +232,10 @@ static int (*bpf_skb_change_head)(void *, int len, int flags) =
190
232
191
233
#endif
192
234
193
- #ifdef __powerpc__
235
+ #ifdef bpf_target_powerpc
194
236
#define BPF_KPROBE_READ_RET_IP (ip , ctx ) ({ (ip) = (ctx)->link; })
195
237
#define BPF_KRETPROBE_READ_RET_IP BPF_KPROBE_READ_RET_IP
196
- #elif defined( __sparc__ )
238
+ #elif bpf_target_sparc
197
239
#define BPF_KPROBE_READ_RET_IP (ip , ctx ) ({ (ip) = PT_REGS_RET(ctx); })
198
240
#define BPF_KRETPROBE_READ_RET_IP BPF_KPROBE_READ_RET_IP
199
241
#else
0 commit comments