On 2016/03/31 10:52AM, Alexei Starovoitov wrote: > On 3/31/16 4:25 AM, Naveen N. Rao wrote: > ... > >+ > >+#ifdef __powerpc__ > >+#define BPF_KPROBE_READ_RET_IP(ip, ctx) { (ip) = (ctx)->link; } > >+#define BPF_KRETPROBE_READ_RET_IP(ip, ctx) BPF_KPROBE_READ_RET_IP(ip, ctx) > >+#else > >+#define BPF_KPROBE_READ_RET_IP(ip, ctx) > > \ > >+ bpf_probe_read(&(ip), sizeof(ip), (void *)PT_REGS_RET(ctx)) > >+#define BPF_KRETPROBE_READ_RET_IP(ip, ctx) > >\ > >+ bpf_probe_read(&(ip), sizeof(ip), > >\ > >+ (void *)(PT_REGS_FP(ctx) + sizeof(ip))) > > makes sense, but please use ({ }) gcc extension instead of {} and > open call to make sure that macro body is scoped.
To be sure I understand this right, do you mean something like this? + +#ifdef __powerpc__ +#define BPF_KPROBE_READ_RET_IP(ip, ctx) ({ (ip) = (ctx)->link; }) +#define BPF_KRETPROBE_READ_RET_IP BPF_KPROBE_READ_RET_IP +#else +#define BPF_KPROBE_READ_RET_IP(ip, ctx) ({ \ + bpf_probe_read(&(ip), sizeof(ip), (void *)PT_REGS_RET(ctx)); }) +#define BPF_KRETPROBE_READ_RET_IP(ip, ctx) ({ \ + bpf_probe_read(&(ip), sizeof(ip), \ + (void *)(PT_REGS_FP(ctx) + sizeof(ip))); }) +#endif + Thanks, Naveen