On Wed, Jan 19, 2022 at 5:13 AM Kenta Tada <Kenta.Tada@xxxxxxxx> wrote: > > Currently, rcx is read as the fourth parameter of syscall on x86_64. > But x86_64 Linux System Call convention uses r10 actually. > This commit adds the wrapper for users who want to access to > syscall params to analyze the user space. > > Signed-off-by: Kenta Tada <Kenta.Tada@xxxxxxxx> > --- > tools/lib/bpf/bpf_tracing.h | 34 ++++++++++++++++++++++++++++++++++ > 1 file changed, 34 insertions(+) > > diff --git a/tools/lib/bpf/bpf_tracing.h b/tools/lib/bpf/bpf_tracing.h > index 90f56b0f585f..81673a24973e 100644 > --- a/tools/lib/bpf/bpf_tracing.h > +++ b/tools/lib/bpf/bpf_tracing.h > @@ -70,6 +70,7 @@ > #define __PT_PARM2_REG si > #define __PT_PARM3_REG dx > #define __PT_PARM4_REG cx > +#define __PT_PARM4_REG_SYSCALL r10 /* syscall uses r10 */ > #define __PT_PARM5_REG r8 > #define __PT_RET_REG sp > #define __PT_FP_REG bp > @@ -99,6 +100,7 @@ > #define __PT_PARM2_REG rsi > #define __PT_PARM3_REG rdx > #define __PT_PARM4_REG rcx > +#define __PT_PARM4_REG_SYSCALL r10 /* syscall uses r10 */ > #define __PT_PARM5_REG r8 > #define __PT_RET_REG rsp > #define __PT_FP_REG rbp > @@ -263,6 +265,26 @@ struct pt_regs; > > #endif > > +#define PT_REGS_PARM1_SYSCALL(x) PT_REGS_PARM1(x) > +#define PT_REGS_PARM2_SYSCALL(x) PT_REGS_PARM2(x) > +#define PT_REGS_PARM3_SYSCALL(x) PT_REGS_PARM3(x) > +#ifdef __PT_PARM4_REG_SYSCALL > +#define PT_REGS_PARM4_SYSCALL(x) (__PT_REGS_CAST(x)->__PT_PARM4_REG_SYSCALL) > +#else /* __PT_PARM4_REG_SYSCALL */ > +#define PT_REGS_PARM4_SYSCALL(x) PT_REGS_PARM4(x) > +#endif > +#define PT_REGS_PARM5_SYSCALL(x) PT_REGS_PARM5(x) > + > +#define PT_REGS_PARM1_CORE_SYSCALL(x) PT_REGS_PARM1_CORE(x) > +#define PT_REGS_PARM2_CORE_SYSCALL(x) PT_REGS_PARM2_CORE(x) > +#define PT_REGS_PARM3_CORE_SYSCALL(x) PT_REGS_PARM3_CORE(x) > +#ifdef __PT_PARM4_REG_SYSCALL > +#define PT_REGS_PARM4_CORE_SYSCALL(x) (__PT_REGS_CAST(x)->__PT_PARM4_REG_SYSCALL) did you check PT_REGS_PARM4_CORE() definition? This should be BPF_CORE_READ(__PT_REGS_CAST(x), __PT_PARM4_REG_SYSCALL) > +#else /* __PT_PARM4_REG_SYSCALL */ > +#define PT_REGS_PARM4_CORE_SYSCALL(x) PT_REGS_PARM4_CORE(x) > +#endif > +#define PT_REGS_PARM5_CORE_SYSCALL(x) PT_REGS_PARM5_CORE(x) > + > #else /* defined(bpf_target_defined) */ > > #define PT_REGS_PARM1(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) > @@ -290,6 +312,18 @@ struct pt_regs; > #define BPF_KPROBE_READ_RET_IP(ip, ctx) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) > #define BPF_KRETPROBE_READ_RET_IP(ip, ctx) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) > > +#define PT_REGS_PARM1_SYSCALL(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) > +#define PT_REGS_PARM2_SYSCALL(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) > +#define PT_REGS_PARM3_SYSCALL(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) > +#define PT_REGS_PARM4_SYSCALL(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) > +#define PT_REGS_PARM5_SYSCALL(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) > + > +#define PT_REGS_PARM1_CORE_SYSCALL(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) > +#define PT_REGS_PARM2_CORE_SYSCALL(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) > +#define PT_REGS_PARM3_CORE_SYSCALL(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) > +#define PT_REGS_PARM4_CORE_SYSCALL(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) > +#define PT_REGS_PARM5_CORE_SYSCALL(x) ({ _Pragma(__BPF_TARGET_MISSING); 0l; }) > + > #endif /* defined(bpf_target_defined) */ > > #ifndef ___bpf_concat > -- > 2.32.0 >