Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

libbpf: Normalize PT_REGS_xxx() macro definitions

Refactor PT_REGS macros definitions in bpf_tracing.h to avoid excessive
duplication. We currently have classic PT_REGS_xxx() and CO-RE-enabled
PT_REGS_xxx_CORE(). We are about to add also _SYSCALL variants, which
would require excessive copying of all the per-architecture definitions.

Instead, separate architecture-specific field/register names from the
final macro that utilize them. That way for upcoming _SYSCALL variants
we'll be able to just define x86_64 exception and otherwise have one
common set of _SYSCALL macro definitions common for all architectures.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Tested-by: Ilya Leoshkevich <iii@linux.ibm.com>
Acked-by: Yonghong Song <yhs@fb.com>
Acked-by: Ilya Leoshkevich <iii@linux.ibm.com>
Link: https://lore.kernel.org/bpf/20211222213924.1869758-1-andrii@kernel.org

authored by

Andrii Nakryiko and committed by
Alexei Starovoitov
3cc31d79 ecf45e60

+149 -222
+149 -222
tools/lib/bpf/bpf_tracing.h
··· 66 66 67 67 #if defined(__KERNEL__) || defined(__VMLINUX_H__) 68 68 69 - #define PT_REGS_PARM1(x) ((x)->di) 70 - #define PT_REGS_PARM2(x) ((x)->si) 71 - #define PT_REGS_PARM3(x) ((x)->dx) 72 - #define PT_REGS_PARM4(x) ((x)->cx) 73 - #define PT_REGS_PARM5(x) ((x)->r8) 74 - #define PT_REGS_RET(x) ((x)->sp) 75 - #define PT_REGS_FP(x) ((x)->bp) 76 - #define PT_REGS_RC(x) ((x)->ax) 77 - #define PT_REGS_SP(x) ((x)->sp) 78 - #define PT_REGS_IP(x) ((x)->ip) 79 - 80 - #define PT_REGS_PARM1_CORE(x) BPF_CORE_READ((x), di) 81 - #define PT_REGS_PARM2_CORE(x) BPF_CORE_READ((x), si) 82 - #define PT_REGS_PARM3_CORE(x) BPF_CORE_READ((x), dx) 83 - #define PT_REGS_PARM4_CORE(x) BPF_CORE_READ((x), cx) 84 - #define PT_REGS_PARM5_CORE(x) BPF_CORE_READ((x), r8) 85 - #define PT_REGS_RET_CORE(x) BPF_CORE_READ((x), sp) 86 - #define PT_REGS_FP_CORE(x) BPF_CORE_READ((x), bp) 87 - #define PT_REGS_RC_CORE(x) BPF_CORE_READ((x), ax) 88 - #define PT_REGS_SP_CORE(x) BPF_CORE_READ((x), sp) 89 - #define PT_REGS_IP_CORE(x) BPF_CORE_READ((x), ip) 69 + #define __PT_PARM1_REG di 70 + #define __PT_PARM2_REG si 71 + #define __PT_PARM3_REG dx 72 + #define __PT_PARM4_REG cx 73 + #define __PT_PARM5_REG r8 74 + #define __PT_RET_REG sp 75 + #define __PT_FP_REG bp 76 + #define __PT_RC_REG ax 77 + #define __PT_SP_REG sp 78 + #define __PT_IP_REG ip 90 79 91 80 #else 92 81 93 82 #ifdef __i386__ 83 + 84 + #define __PT_PARM1_REG eax 85 + #define __PT_PARM2_REG edx 86 + #define __PT_PARM3_REG ecx 94 87 /* i386 kernel is built with -mregparm=3 */ 95 - #define PT_REGS_PARM1(x) ((x)->eax) 96 - #define PT_REGS_PARM2(x) ((x)->edx) 97 - #define PT_REGS_PARM3(x) ((x)->ecx) 98 - #define PT_REGS_PARM4(x) 0 99 - #define PT_REGS_PARM5(x) 0 100 - #define PT_REGS_RET(x) ((x)->esp) 101 - #define PT_REGS_FP(x) ((x)->ebp) 102 - #define PT_REGS_RC(x) ((x)->eax) 103 - #define PT_REGS_SP(x) ((x)->esp) 104 - #define PT_REGS_IP(x) ((x)->eip) 88 + #define __PT_PARM4_REG __unsupported__ 89 + #define __PT_PARM5_REG __unsupported__ 90 + #define __PT_RET_REG esp 91 + #define __PT_FP_REG ebp 92 + #define __PT_RC_REG eax 93 + #define __PT_SP_REG esp 94 + #define __PT_IP_REG eip 105 95 106 - #define PT_REGS_PARM1_CORE(x) BPF_CORE_READ((x), eax) 107 - #define PT_REGS_PARM2_CORE(x) BPF_CORE_READ((x), edx) 108 - #define PT_REGS_PARM3_CORE(x) BPF_CORE_READ((x), ecx) 109 - #define PT_REGS_PARM4_CORE(x) 0 110 - #define PT_REGS_PARM5_CORE(x) 0 111 - #define PT_REGS_RET_CORE(x) BPF_CORE_READ((x), esp) 112 - #define PT_REGS_FP_CORE(x) BPF_CORE_READ((x), ebp) 113 - #define PT_REGS_RC_CORE(x) BPF_CORE_READ((x), eax) 114 - #define PT_REGS_SP_CORE(x) BPF_CORE_READ((x), esp) 115 - #define PT_REGS_IP_CORE(x) BPF_CORE_READ((x), eip) 96 + #else /* __i386__ */ 116 97 117 - #else 98 + #define __PT_PARM1_REG rdi 99 + #define __PT_PARM2_REG rsi 100 + #define __PT_PARM3_REG rdx 101 + #define __PT_PARM4_REG rcx 102 + #define __PT_PARM5_REG r8 103 + #define __PT_RET_REG rsp 104 + #define __PT_FP_REG rbp 105 + #define __PT_RC_REG rax 106 + #define __PT_SP_REG rsp 107 + #define __PT_IP_REG rip 118 108 119 - #define PT_REGS_PARM1(x) ((x)->rdi) 120 - #define PT_REGS_PARM2(x) ((x)->rsi) 121 - #define PT_REGS_PARM3(x) ((x)->rdx) 122 - #define PT_REGS_PARM4(x) ((x)->rcx) 123 - #define PT_REGS_PARM5(x) ((x)->r8) 124 - #define PT_REGS_RET(x) ((x)->rsp) 125 - #define PT_REGS_FP(x) ((x)->rbp) 126 - #define PT_REGS_RC(x) ((x)->rax) 127 - #define PT_REGS_SP(x) ((x)->rsp) 128 - #define PT_REGS_IP(x) ((x)->rip) 109 + #endif /* __i386__ */ 129 110 130 - #define PT_REGS_PARM1_CORE(x) BPF_CORE_READ((x), rdi) 131 - #define PT_REGS_PARM2_CORE(x) BPF_CORE_READ((x), rsi) 132 - #define PT_REGS_PARM3_CORE(x) BPF_CORE_READ((x), rdx) 133 - #define PT_REGS_PARM4_CORE(x) BPF_CORE_READ((x), rcx) 134 - #define PT_REGS_PARM5_CORE(x) BPF_CORE_READ((x), r8) 135 - #define PT_REGS_RET_CORE(x) BPF_CORE_READ((x), rsp) 136 - #define PT_REGS_FP_CORE(x) BPF_CORE_READ((x), rbp) 137 - #define PT_REGS_RC_CORE(x) BPF_CORE_READ((x), rax) 138 - #define PT_REGS_SP_CORE(x) BPF_CORE_READ((x), rsp) 139 - #define PT_REGS_IP_CORE(x) BPF_CORE_READ((x), rip) 140 - 141 - #endif 142 - #endif 111 + #endif /* __KERNEL__ || __VMLINUX_H__ */ 143 112 144 113 #elif defined(bpf_target_s390) 145 114 146 115 /* s390 provides user_pt_regs instead of struct pt_regs to userspace */ 147 - struct pt_regs; 148 - #define PT_REGS_S390 const volatile user_pt_regs 149 - #define PT_REGS_PARM1(x) (((PT_REGS_S390 *)(x))->gprs[2]) 150 - #define PT_REGS_PARM2(x) (((PT_REGS_S390 *)(x))->gprs[3]) 151 - #define PT_REGS_PARM3(x) (((PT_REGS_S390 *)(x))->gprs[4]) 152 - #define PT_REGS_PARM4(x) (((PT_REGS_S390 *)(x))->gprs[5]) 153 - #define PT_REGS_PARM5(x) (((PT_REGS_S390 *)(x))->gprs[6]) 154 - #define PT_REGS_RET(x) (((PT_REGS_S390 *)(x))->gprs[14]) 155 - /* Works only with CONFIG_FRAME_POINTER */ 156 - #define PT_REGS_FP(x) (((PT_REGS_S390 *)(x))->gprs[11]) 157 - #define PT_REGS_RC(x) (((PT_REGS_S390 *)(x))->gprs[2]) 158 - #define PT_REGS_SP(x) (((PT_REGS_S390 *)(x))->gprs[15]) 159 - #define PT_REGS_IP(x) (((PT_REGS_S390 *)(x))->psw.addr) 160 - 161 - #define PT_REGS_PARM1_CORE(x) BPF_CORE_READ((PT_REGS_S390 *)(x), gprs[2]) 162 - #define PT_REGS_PARM2_CORE(x) BPF_CORE_READ((PT_REGS_S390 *)(x), gprs[3]) 163 - #define PT_REGS_PARM3_CORE(x) BPF_CORE_READ((PT_REGS_S390 *)(x), gprs[4]) 164 - #define PT_REGS_PARM4_CORE(x) BPF_CORE_READ((PT_REGS_S390 *)(x), gprs[5]) 165 - #define PT_REGS_PARM5_CORE(x) BPF_CORE_READ((PT_REGS_S390 *)(x), gprs[6]) 166 - #define PT_REGS_RET_CORE(x) BPF_CORE_READ((PT_REGS_S390 *)(x), gprs[14]) 167 - #define PT_REGS_FP_CORE(x) BPF_CORE_READ((PT_REGS_S390 *)(x), gprs[11]) 168 - #define PT_REGS_RC_CORE(x) BPF_CORE_READ((PT_REGS_S390 *)(x), gprs[2]) 169 - #define PT_REGS_SP_CORE(x) BPF_CORE_READ((PT_REGS_S390 *)(x), gprs[15]) 170 - #define PT_REGS_IP_CORE(x) BPF_CORE_READ((PT_REGS_S390 *)(x), psw.addr) 116 + #define __PT_REGS_CAST(x) ((const user_pt_regs *)(x)) 117 + #define __PT_PARM1_REG gprs[2] 118 + #define __PT_PARM2_REG gprs[3] 119 + #define __PT_PARM3_REG gprs[4] 120 + #define __PT_PARM4_REG gprs[5] 121 + #define __PT_PARM5_REG gprs[6] 122 + #define __PT_RET_REG grps[14] 123 + #define __PT_FP_REG gprs[11] /* Works only with CONFIG_FRAME_POINTER */ 124 + #define __PT_RC_REG gprs[2] 125 + #define __PT_SP_REG gprs[15] 126 + #define __PT_IP_REG psw.addr 171 127 172 128 #elif defined(bpf_target_arm) 173 129 174 - #define PT_REGS_PARM1(x) ((x)->uregs[0]) 175 - #define PT_REGS_PARM2(x) ((x)->uregs[1]) 176 - #define PT_REGS_PARM3(x) ((x)->uregs[2]) 177 - #define PT_REGS_PARM4(x) ((x)->uregs[3]) 178 - #define PT_REGS_PARM5(x) ((x)->uregs[4]) 179 - #define PT_REGS_RET(x) ((x)->uregs[14]) 180 - #define PT_REGS_FP(x) ((x)->uregs[11]) /* Works only with CONFIG_FRAME_POINTER */ 181 - #define PT_REGS_RC(x) ((x)->uregs[0]) 182 - #define PT_REGS_SP(x) ((x)->uregs[13]) 183 - #define PT_REGS_IP(x) ((x)->uregs[12]) 184 - 185 - #define PT_REGS_PARM1_CORE(x) BPF_CORE_READ((x), uregs[0]) 186 - #define PT_REGS_PARM2_CORE(x) BPF_CORE_READ((x), uregs[1]) 187 - #define PT_REGS_PARM3_CORE(x) BPF_CORE_READ((x), uregs[2]) 188 - #define PT_REGS_PARM4_CORE(x) BPF_CORE_READ((x), uregs[3]) 189 - #define PT_REGS_PARM5_CORE(x) BPF_CORE_READ((x), uregs[4]) 190 - #define PT_REGS_RET_CORE(x) BPF_CORE_READ((x), uregs[14]) 191 - #define PT_REGS_FP_CORE(x) BPF_CORE_READ((x), uregs[11]) 192 - #define PT_REGS_RC_CORE(x) BPF_CORE_READ((x), uregs[0]) 193 - #define PT_REGS_SP_CORE(x) BPF_CORE_READ((x), uregs[13]) 194 - #define PT_REGS_IP_CORE(x) BPF_CORE_READ((x), uregs[12]) 130 + #define __PT_PARM1_REG uregs[0] 131 + #define __PT_PARM2_REG uregs[1] 132 + #define __PT_PARM3_REG uregs[2] 133 + #define __PT_PARM4_REG uregs[3] 134 + #define __PT_PARM5_REG uregs[4] 135 + #define __PT_RET_REG uregs[14] 136 + #define __PT_FP_REG uregs[11] /* Works only with CONFIG_FRAME_POINTER */ 137 + #define __PT_RC_REG uregs[0] 138 + #define __PT_SP_REG uregs[13] 139 + #define __PT_IP_REG uregs[12] 195 140 196 141 #elif defined(bpf_target_arm64) 197 142 198 143 /* arm64 provides struct user_pt_regs instead of struct pt_regs to userspace */ 199 - struct pt_regs; 200 - #define PT_REGS_ARM64 const volatile struct user_pt_regs 201 - #define PT_REGS_PARM1(x) (((PT_REGS_ARM64 *)(x))->regs[0]) 202 - #define PT_REGS_PARM2(x) (((PT_REGS_ARM64 *)(x))->regs[1]) 203 - #define PT_REGS_PARM3(x) (((PT_REGS_ARM64 *)(x))->regs[2]) 204 - #define PT_REGS_PARM4(x) (((PT_REGS_ARM64 *)(x))->regs[3]) 205 - #define PT_REGS_PARM5(x) (((PT_REGS_ARM64 *)(x))->regs[4]) 206 - #define PT_REGS_RET(x) (((PT_REGS_ARM64 *)(x))->regs[30]) 207 - /* Works only with CONFIG_FRAME_POINTER */ 208 - #define PT_REGS_FP(x) (((PT_REGS_ARM64 *)(x))->regs[29]) 209 - #define PT_REGS_RC(x) (((PT_REGS_ARM64 *)(x))->regs[0]) 210 - #define PT_REGS_SP(x) (((PT_REGS_ARM64 *)(x))->sp) 211 - #define PT_REGS_IP(x) (((PT_REGS_ARM64 *)(x))->pc) 212 - 213 - #define PT_REGS_PARM1_CORE(x) BPF_CORE_READ((PT_REGS_ARM64 *)(x), regs[0]) 214 - #define PT_REGS_PARM2_CORE(x) BPF_CORE_READ((PT_REGS_ARM64 *)(x), regs[1]) 215 - #define PT_REGS_PARM3_CORE(x) BPF_CORE_READ((PT_REGS_ARM64 *)(x), regs[2]) 216 - #define PT_REGS_PARM4_CORE(x) BPF_CORE_READ((PT_REGS_ARM64 *)(x), regs[3]) 217 - #define PT_REGS_PARM5_CORE(x) BPF_CORE_READ((PT_REGS_ARM64 *)(x), regs[4]) 218 - #define PT_REGS_RET_CORE(x) BPF_CORE_READ((PT_REGS_ARM64 *)(x), regs[30]) 219 - #define PT_REGS_FP_CORE(x) BPF_CORE_READ((PT_REGS_ARM64 *)(x), regs[29]) 220 - #define PT_REGS_RC_CORE(x) BPF_CORE_READ((PT_REGS_ARM64 *)(x), regs[0]) 221 - #define PT_REGS_SP_CORE(x) BPF_CORE_READ((PT_REGS_ARM64 *)(x), sp) 222 - #define PT_REGS_IP_CORE(x) BPF_CORE_READ((PT_REGS_ARM64 *)(x), pc) 144 + #define __PT_REGS_CAST(x) ((const struct user_pt_regs *)(x)) 145 + #define __PT_PARM1_REG regs[0] 146 + #define __PT_PARM2_REG regs[1] 147 + #define __PT_PARM3_REG regs[2] 148 + #define __PT_PARM4_REG regs[3] 149 + #define __PT_PARM5_REG regs[4] 150 + #define __PT_RET_REG regs[30] 151 + #define __PT_FP_REG regs[29] /* Works only with CONFIG_FRAME_POINTER */ 152 + #define __PT_RC_REG regs[0] 153 + #define __PT_SP_REG sp 154 + #define __PT_IP_REG pc 223 155 224 156 #elif defined(bpf_target_mips) 225 157 226 - #define PT_REGS_PARM1(x) ((x)->regs[4]) 227 - #define PT_REGS_PARM2(x) ((x)->regs[5]) 228 - #define PT_REGS_PARM3(x) ((x)->regs[6]) 229 - #define PT_REGS_PARM4(x) ((x)->regs[7]) 230 - #define PT_REGS_PARM5(x) ((x)->regs[8]) 231 - #define PT_REGS_RET(x) ((x)->regs[31]) 232 - #define PT_REGS_FP(x) ((x)->regs[30]) /* Works only with CONFIG_FRAME_POINTER */ 233 - #define PT_REGS_RC(x) ((x)->regs[2]) 234 - #define PT_REGS_SP(x) ((x)->regs[29]) 235 - #define PT_REGS_IP(x) ((x)->cp0_epc) 236 - 237 - #define PT_REGS_PARM1_CORE(x) BPF_CORE_READ((x), regs[4]) 238 - #define PT_REGS_PARM2_CORE(x) BPF_CORE_READ((x), regs[5]) 239 - #define PT_REGS_PARM3_CORE(x) BPF_CORE_READ((x), regs[6]) 240 - #define PT_REGS_PARM4_CORE(x) BPF_CORE_READ((x), regs[7]) 241 - #define PT_REGS_PARM5_CORE(x) BPF_CORE_READ((x), regs[8]) 242 - #define PT_REGS_RET_CORE(x) BPF_CORE_READ((x), regs[31]) 243 - #define PT_REGS_FP_CORE(x) BPF_CORE_READ((x), regs[30]) 244 - #define PT_REGS_RC_CORE(x) BPF_CORE_READ((x), regs[2]) 245 - #define PT_REGS_SP_CORE(x) BPF_CORE_READ((x), regs[29]) 246 - #define PT_REGS_IP_CORE(x) BPF_CORE_READ((x), cp0_epc) 158 + #define __PT_PARM1_REG regs[4] 159 + #define __PT_PARM2_REG regs[5] 160 + #define __PT_PARM3_REG regs[6] 161 + #define __PT_PARM4_REG regs[7] 162 + #define __PT_PARM5_REG regs[8] 163 + #define __PT_RET_REG regs[31] 164 + #define __PT_FP_REG regs[30] /* Works only with CONFIG_FRAME_POINTER */ 165 + #define __PT_RC_REG regs[2] 166 + #define __PT_SP_REG regs[29] 167 + #define __PT_IP_REG cp0_epc 247 168 248 169 #elif defined(bpf_target_powerpc) 249 170 250 - #define PT_REGS_PARM1(x) ((x)->gpr[3]) 251 - #define PT_REGS_PARM2(x) ((x)->gpr[4]) 252 - #define PT_REGS_PARM3(x) ((x)->gpr[5]) 253 - #define PT_REGS_PARM4(x) ((x)->gpr[6]) 254 - #define PT_REGS_PARM5(x) ((x)->gpr[7]) 255 - #define PT_REGS_RC(x) ((x)->gpr[3]) 256 - #define PT_REGS_SP(x) ((x)->sp) 257 - #define PT_REGS_IP(x) ((x)->nip) 258 - 259 - #define PT_REGS_PARM1_CORE(x) BPF_CORE_READ((x), gpr[3]) 260 - #define PT_REGS_PARM2_CORE(x) BPF_CORE_READ((x), gpr[4]) 261 - #define PT_REGS_PARM3_CORE(x) BPF_CORE_READ((x), gpr[5]) 262 - #define PT_REGS_PARM4_CORE(x) BPF_CORE_READ((x), gpr[6]) 263 - #define PT_REGS_PARM5_CORE(x) BPF_CORE_READ((x), gpr[7]) 264 - #define PT_REGS_RC_CORE(x) BPF_CORE_READ((x), gpr[3]) 265 - #define PT_REGS_SP_CORE(x) BPF_CORE_READ((x), sp) 266 - #define PT_REGS_IP_CORE(x) BPF_CORE_READ((x), nip) 171 + #define __PT_PARM1_REG gpr[3] 172 + #define __PT_PARM2_REG gpr[4] 173 + #define __PT_PARM3_REG gpr[5] 174 + #define __PT_PARM4_REG gpr[6] 175 + #define __PT_PARM5_REG gpr[7] 176 + #define __PT_RET_REG regs[31] 177 + #define __PT_FP_REG __unsupported__ 178 + #define __PT_RC_REG gpr[3] 179 + #define __PT_SP_REG sp 180 + #define __PT_IP_REG nip 267 181 268 182 #elif defined(bpf_target_sparc) 269 183 270 - #define PT_REGS_PARM1(x) ((x)->u_regs[UREG_I0]) 271 - #define PT_REGS_PARM2(x) ((x)->u_regs[UREG_I1]) 272 - #define PT_REGS_PARM3(x) ((x)->u_regs[UREG_I2]) 273 - #define PT_REGS_PARM4(x) ((x)->u_regs[UREG_I3]) 274 - #define PT_REGS_PARM5(x) ((x)->u_regs[UREG_I4]) 275 - #define PT_REGS_RET(x) ((x)->u_regs[UREG_I7]) 276 - #define PT_REGS_RC(x) ((x)->u_regs[UREG_I0]) 277 - #define PT_REGS_SP(x) ((x)->u_regs[UREG_FP]) 278 - 279 - #define PT_REGS_PARM1_CORE(x) BPF_CORE_READ((x), u_regs[UREG_I0]) 280 - #define PT_REGS_PARM2_CORE(x) BPF_CORE_READ((x), u_regs[UREG_I1]) 281 - #define PT_REGS_PARM3_CORE(x) BPF_CORE_READ((x), u_regs[UREG_I2]) 282 - #define PT_REGS_PARM4_CORE(x) BPF_CORE_READ((x), u_regs[UREG_I3]) 283 - #define PT_REGS_PARM5_CORE(x) BPF_CORE_READ((x), u_regs[UREG_I4]) 284 - #define PT_REGS_RET_CORE(x) BPF_CORE_READ((x), u_regs[UREG_I7]) 285 - #define PT_REGS_RC_CORE(x) BPF_CORE_READ((x), u_regs[UREG_I0]) 286 - #define PT_REGS_SP_CORE(x) BPF_CORE_READ((x), u_regs[UREG_FP]) 287 - 184 + #define __PT_PARM1_REG u_regs[UREG_I0] 185 + #define __PT_PARM2_REG u_regs[UREG_I1] 186 + #define __PT_PARM3_REG u_regs[UREG_I2] 187 + #define __PT_PARM4_REG u_regs[UREG_I3] 188 + #define __PT_PARM5_REG u_regs[UREG_I4] 189 + #define __PT_RET_REG u_regs[UREG_I7] 190 + #define __PT_FP_REG __unsupported__ 191 + #define __PT_RC_REG u_regs[UREG_I0] 192 + #define __PT_SP_REG u_regs[UREG_FP] 288 193 /* Should this also be a bpf_target check for the sparc case? */ 289 194 #if defined(__arch64__) 290 - #define PT_REGS_IP(x) ((x)->tpc) 291 - #define PT_REGS_IP_CORE(x) BPF_CORE_READ((x), tpc) 195 + #define __PT_IP_REG tpc 292 196 #else 293 - #define PT_REGS_IP(x) ((x)->pc) 294 - #define PT_REGS_IP_CORE(x) BPF_CORE_READ((x), pc) 197 + #define __PT_IP_REG pc 295 198 #endif 296 199 297 200 #elif defined(bpf_target_riscv) 298 201 299 - struct pt_regs; 300 - #define PT_REGS_RV const volatile struct user_regs_struct 301 - #define PT_REGS_PARM1(x) (((PT_REGS_RV *)(x))->a0) 302 - #define PT_REGS_PARM2(x) (((PT_REGS_RV *)(x))->a1) 303 - #define PT_REGS_PARM3(x) (((PT_REGS_RV *)(x))->a2) 304 - #define PT_REGS_PARM4(x) (((PT_REGS_RV *)(x))->a3) 305 - #define PT_REGS_PARM5(x) (((PT_REGS_RV *)(x))->a4) 306 - #define PT_REGS_RET(x) (((PT_REGS_RV *)(x))->ra) 307 - #define PT_REGS_FP(x) (((PT_REGS_RV *)(x))->s5) 308 - #define PT_REGS_RC(x) (((PT_REGS_RV *)(x))->a5) 309 - #define PT_REGS_SP(x) (((PT_REGS_RV *)(x))->sp) 310 - #define PT_REGS_IP(x) (((PT_REGS_RV *)(x))->epc) 311 - 312 - #define PT_REGS_PARM1_CORE(x) BPF_CORE_READ((PT_REGS_RV *)(x), a0) 313 - #define PT_REGS_PARM2_CORE(x) BPF_CORE_READ((PT_REGS_RV *)(x), a1) 314 - #define PT_REGS_PARM3_CORE(x) BPF_CORE_READ((PT_REGS_RV *)(x), a2) 315 - #define PT_REGS_PARM4_CORE(x) BPF_CORE_READ((PT_REGS_RV *)(x), a3) 316 - #define PT_REGS_PARM5_CORE(x) BPF_CORE_READ((PT_REGS_RV *)(x), a4) 317 - #define PT_REGS_RET_CORE(x) BPF_CORE_READ((PT_REGS_RV *)(x), ra) 318 - #define PT_REGS_FP_CORE(x) BPF_CORE_READ((PT_REGS_RV *)(x), fp) 319 - #define PT_REGS_RC_CORE(x) BPF_CORE_READ((PT_REGS_RV *)(x), a5) 320 - #define PT_REGS_SP_CORE(x) BPF_CORE_READ((PT_REGS_RV *)(x), sp) 321 - #define PT_REGS_IP_CORE(x) BPF_CORE_READ((PT_REGS_RV *)(x), epc) 202 + #define __PT_REGS_CAST(x) ((const struct user_regs_struct *)(x)) 203 + #define __PT_PARM1_REG a0 204 + #define __PT_PARM2_REG a1 205 + #define __PT_PARM3_REG a2 206 + #define __PT_PARM4_REG a3 207 + #define __PT_PARM5_REG a4 208 + #define __PT_RET_REG ra 209 + #define __PT_FP_REG fp 210 + #define __PT_RC_REG a5 211 + #define __PT_SP_REG sp 212 + #define __PT_IP_REG epc 322 213 323 214 #endif 324 215 216 + #if defined(bpf_target_defined) 217 + 218 + struct pt_regs; 219 + 220 + /* allow some architecutres to override `struct pt_regs` */ 221 + #ifndef __PT_REGS_CAST 222 + #define __PT_REGS_CAST(x) (x) 223 + #endif 224 + 225 + #define PT_REGS_PARM1(x) (__PT_REGS_CAST(x)->__PT_PARM1_REG) 226 + #define PT_REGS_PARM2(x) (__PT_REGS_CAST(x)->__PT_PARM2_REG) 227 + #define PT_REGS_PARM3(x) (__PT_REGS_CAST(x)->__PT_PARM3_REG) 228 + #define PT_REGS_PARM4(x) (__PT_REGS_CAST(x)->__PT_PARM4_REG) 229 + #define PT_REGS_PARM5(x) (__PT_REGS_CAST(x)->__PT_PARM5_REG) 230 + #define PT_REGS_RET(x) (__PT_REGS_CAST(x)->__PT_RET_REG) 231 + #define PT_REGS_FP(x) (__PT_REGS_CAST(x)->__PT_FP_REG) 232 + #define PT_REGS_RC(x) (__PT_REGS_CAST(x)->__PT_RC_REG) 233 + #define PT_REGS_SP(x) (__PT_REGS_CAST(x)->__PT_SP_REG) 234 + #define PT_REGS_IP(x) (__PT_REGS_CAST(x)->__PT_IP_REG) 235 + 236 + #define PT_REGS_PARM1_CORE(x) BPF_CORE_READ(__PT_REGS_CAST(x), __PT_PARM1_REG) 237 + #define PT_REGS_PARM2_CORE(x) BPF_CORE_READ(__PT_REGS_CAST(x), __PT_PARM2_REG) 238 + #define PT_REGS_PARM3_CORE(x) BPF_CORE_READ(__PT_REGS_CAST(x), __PT_PARM3_REG) 239 + #define PT_REGS_PARM4_CORE(x) BPF_CORE_READ(__PT_REGS_CAST(x), __PT_PARM4_REG) 240 + #define PT_REGS_PARM5_CORE(x) BPF_CORE_READ(__PT_REGS_CAST(x), __PT_PARM5_REG) 241 + #define PT_REGS_RET_CORE(x) BPF_CORE_READ(__PT_REGS_CAST(x), __PT_RET_REG) 242 + #define PT_REGS_FP_CORE(x) BPF_CORE_READ(__PT_REGS_CAST(x), __PT_FP_REG) 243 + #define PT_REGS_RC_CORE(x) BPF_CORE_READ(__PT_REGS_CAST(x), __PT_RC_REG) 244 + #define PT_REGS_SP_CORE(x) BPF_CORE_READ(__PT_REGS_CAST(x), __PT_SP_REG) 245 + #define PT_REGS_IP_CORE(x) BPF_CORE_READ(__PT_REGS_CAST(x), __PT_IP_REG) 246 + 325 247 #if defined(bpf_target_powerpc) 248 + 326 249 #define BPF_KPROBE_READ_RET_IP(ip, ctx) ({ (ip) = (ctx)->link; }) 327 250 #define BPF_KRETPROBE_READ_RET_IP BPF_KPROBE_READ_RET_IP 251 + 328 252 #elif defined(bpf_target_sparc) 253 + 329 254 #define BPF_KPROBE_READ_RET_IP(ip, ctx) ({ (ip) = PT_REGS_RET(ctx); }) 330 255 #define BPF_KRETPROBE_READ_RET_IP BPF_KPROBE_READ_RET_IP 331 - #elif defined(bpf_target_defined) 256 + 257 + #else 258 + 332 259 #define BPF_KPROBE_READ_RET_IP(ip, ctx) \ 333 260 ({ bpf_probe_read_kernel(&(ip), sizeof(ip), (void *)PT_REGS_RET(ctx)); }) 334 261 #define BPF_KRETPROBE_READ_RET_IP(ip, ctx) \ 335 - ({ bpf_probe_read_kernel(&(ip), sizeof(ip), \ 336 - (void *)(PT_REGS_FP(ctx) + sizeof(ip))); }) 262 + ({ bpf_probe_read_kernel(&(ip), sizeof(ip), (void *)(PT_REGS_FP(ctx) + sizeof(ip))); }) 263 + 337 264 #endif 338 265 339 - #if !defined(bpf_target_defined) 266 + #else /* defined(bpf_target_defined) */ 340 267 341 268 #define PT_REGS_PARM1(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) 342 269 #define PT_REGS_PARM2(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) ··· 290 363 #define BPF_KPROBE_READ_RET_IP(ip, ctx) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) 291 364 #define BPF_KRETPROBE_READ_RET_IP(ip, ctx) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) 292 365 293 - #endif /* !defined(bpf_target_defined) */ 366 + #endif /* defined(bpf_target_defined) */ 294 367 295 368 #ifndef ___bpf_concat 296 369 #define ___bpf_concat(a, b) a ## b