On Thu, Jul 25, 2019 at 4:26 PM Alexei Starovoitov <alexei.starovoitov@xxxxxxxxx> wrote: > > On Wed, Jul 24, 2019 at 12:27:38PM -0700, Andrii Nakryiko wrote: > > Add tests for various array handling/relocation scenarios. > > > > Signed-off-by: Andrii Nakryiko <andriin@xxxxxx> > ... > > + > > +#define CORE_READ(dst, src) \ > > + bpf_probe_read(dst, sizeof(*src), __builtin_preserve_access_index(src)) > > This is the key accessor that all progs will use. > Please split just this single macro into individual commit and add > detailed comment about its purpose and > what __builtin_preserve_access_index() does underneath. I'm planning to add more powerful and flexible set of macros to support BCC style a->b->c->d accesses using single macro. Something like BPF_CORE_READ(&dst, sizeof(dst), a, b, c, d). I want to move bpf_helpers.h into libbpf itself first, after some clean up. How about I write all that at that time and for now just add this simpler CORE_READ into bpf_helpers.h? Relocations recorded by __builtin_preserve_access_index() are described pretty well in patch #1, which adds bpf_offset_reloc. I'll double check if I mention this built-in there, and if not - will add that. > > > +SEC("raw_tracepoint/sys_enter") > > +int test_core_nesting(void *ctx) > > +{ > > + struct core_reloc_arrays *in = (void *)&data.in; > > + struct core_reloc_arrays_output *out = (void *)&data.out; > > + > > + /* in->a[2] */ > > + if (CORE_READ(&out->a2, &in->a[2])) > > + return 1; > > + /* in->b[1][2][3] */ > > + if (CORE_READ(&out->b123, &in->b[1][2][3])) > > + return 1;