|
@@ -109,7 +109,47 @@ static int (*bpf_skb_under_cgroup)(void *ctx, void *map, int index) =
|
|
|
static int (*bpf_skb_change_head)(void *, int len, int flags) =
|
|
|
(void *) BPF_FUNC_skb_change_head;
|
|
|
|
|
|
+/* Scan the ARCH passed in from ARCH env variable (see Makefile) */
|
|
|
+#if defined(__TARGET_ARCH_x86)
|
|
|
+ #define bpf_target_x86
|
|
|
+ #define bpf_target_defined
|
|
|
+#elif defined(__TARGET_ARCH_s930x)
|
|
|
+ #define bpf_target_s930x
|
|
|
+ #define bpf_target_defined
|
|
|
+#elif defined(__TARGET_ARCH_arm64)
|
|
|
+ #define bpf_target_arm64
|
|
|
+ #define bpf_target_defined
|
|
|
+#elif defined(__TARGET_ARCH_mips)
|
|
|
+ #define bpf_target_mips
|
|
|
+ #define bpf_target_defined
|
|
|
+#elif defined(__TARGET_ARCH_powerpc)
|
|
|
+ #define bpf_target_powerpc
|
|
|
+ #define bpf_target_defined
|
|
|
+#elif defined(__TARGET_ARCH_sparc)
|
|
|
+ #define bpf_target_sparc
|
|
|
+ #define bpf_target_defined
|
|
|
+#else
|
|
|
+ #undef bpf_target_defined
|
|
|
+#endif
|
|
|
+
|
|
|
+/* Fall back to what the compiler says */
|
|
|
+#ifndef bpf_target_defined
|
|
|
#if defined(__x86_64__)
|
|
|
+ #define bpf_target_x86
|
|
|
+#elif defined(__s390x__)
|
|
|
+ #define bpf_target_s930x
|
|
|
+#elif defined(__aarch64__)
|
|
|
+ #define bpf_target_arm64
|
|
|
+#elif defined(__mips__)
|
|
|
+ #define bpf_target_mips
|
|
|
+#elif defined(__powerpc__)
|
|
|
+ #define bpf_target_powerpc
|
|
|
+#elif defined(__sparc__)
|
|
|
+ #define bpf_target_sparc
|
|
|
+#endif
|
|
|
+#endif
|
|
|
+
|
|
|
+#if defined(bpf_target_x86)
|
|
|
|
|
|
#define PT_REGS_PARM1(x) ((x)->di)
|
|
|
#define PT_REGS_PARM2(x) ((x)->si)
|
|
@@ -122,7 +162,7 @@ static int (*bpf_skb_change_head)(void *, int len, int flags) =
|
|
|
#define PT_REGS_SP(x) ((x)->sp)
|
|
|
#define PT_REGS_IP(x) ((x)->ip)
|
|
|
|
|
|
-#elif defined(__s390x__)
|
|
|
+#elif defined(bpf_target_s390x)
|
|
|
|
|
|
#define PT_REGS_PARM1(x) ((x)->gprs[2])
|
|
|
#define PT_REGS_PARM2(x) ((x)->gprs[3])
|
|
@@ -135,7 +175,7 @@ static int (*bpf_skb_change_head)(void *, int len, int flags) =
|
|
|
#define PT_REGS_SP(x) ((x)->gprs[15])
|
|
|
#define PT_REGS_IP(x) ((x)->psw.addr)
|
|
|
|
|
|
-#elif defined(__aarch64__)
|
|
|
+#elif defined(bpf_target_arm64)
|
|
|
|
|
|
#define PT_REGS_PARM1(x) ((x)->regs[0])
|
|
|
#define PT_REGS_PARM2(x) ((x)->regs[1])
|
|
@@ -148,7 +188,7 @@ static int (*bpf_skb_change_head)(void *, int len, int flags) =
|
|
|
#define PT_REGS_SP(x) ((x)->sp)
|
|
|
#define PT_REGS_IP(x) ((x)->pc)
|
|
|
|
|
|
-#elif defined(__mips__)
|
|
|
+#elif defined(bpf_target_mips)
|
|
|
|
|
|
#define PT_REGS_PARM1(x) ((x)->regs[4])
|
|
|
#define PT_REGS_PARM2(x) ((x)->regs[5])
|
|
@@ -161,7 +201,7 @@ static int (*bpf_skb_change_head)(void *, int len, int flags) =
|
|
|
#define PT_REGS_SP(x) ((x)->regs[29])
|
|
|
#define PT_REGS_IP(x) ((x)->cp0_epc)
|
|
|
|
|
|
-#elif defined(__powerpc__)
|
|
|
+#elif defined(bpf_target_powerpc)
|
|
|
|
|
|
#define PT_REGS_PARM1(x) ((x)->gpr[3])
|
|
|
#define PT_REGS_PARM2(x) ((x)->gpr[4])
|
|
@@ -172,7 +212,7 @@ static int (*bpf_skb_change_head)(void *, int len, int flags) =
|
|
|
#define PT_REGS_SP(x) ((x)->sp)
|
|
|
#define PT_REGS_IP(x) ((x)->nip)
|
|
|
|
|
|
-#elif defined(__sparc__)
|
|
|
+#elif defined(bpf_target_sparc)
|
|
|
|
|
|
#define PT_REGS_PARM1(x) ((x)->u_regs[UREG_I0])
|
|
|
#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) =
|
|
|
#define PT_REGS_RET(x) ((x)->u_regs[UREG_I7])
|
|
|
#define PT_REGS_RC(x) ((x)->u_regs[UREG_I0])
|
|
|
#define PT_REGS_SP(x) ((x)->u_regs[UREG_FP])
|
|
|
+
|
|
|
+/* Should this also be a bpf_target check for the sparc case? */
|
|
|
#if defined(__arch64__)
|
|
|
#define PT_REGS_IP(x) ((x)->tpc)
|
|
|
#else
|
|
@@ -190,10 +232,10 @@ static int (*bpf_skb_change_head)(void *, int len, int flags) =
|
|
|
|
|
|
#endif
|
|
|
|
|
|
-#ifdef __powerpc__
|
|
|
+#ifdef bpf_target_powerpc
|
|
|
#define BPF_KPROBE_READ_RET_IP(ip, ctx) ({ (ip) = (ctx)->link; })
|
|
|
#define BPF_KRETPROBE_READ_RET_IP BPF_KPROBE_READ_RET_IP
|
|
|
-#elif defined(__sparc__)
|
|
|
+#elif bpf_target_sparc
|
|
|
#define BPF_KPROBE_READ_RET_IP(ip, ctx) ({ (ip) = PT_REGS_RET(ctx); })
|
|
|
#define BPF_KRETPROBE_READ_RET_IP BPF_KPROBE_READ_RET_IP
|
|
|
#else
|