• Andrii Nakryiko's avatar
    bpftool: Apply preserve_access_index attribute to all types in BTF dump · 1cf5b239
    Andrii Nakryiko authored
    This patch makes structs and unions, emitted through BTF dump, automatically
    CO-RE-relocatable (unless disabled with `#define BPF_NO_PRESERVE_ACCESS_INDEX`,
    specified before including generated header file).
    
    This effectivaly turns usual bpf_probe_read() call into equivalent of
    bpf_core_read(), by automatically applying builtin_preserve_access_index to
    any field accesses of types in generated C types header.
    
    This is especially useful for tp_btf/fentry/fexit BPF program types. They
    allow direct memory access, so BPF C code just uses straightfoward a->b->c
    access pattern to read data from kernel. But without kernel structs marked as
    CO-RE relocatable through preserve_access_index attribute, one has to enclose
    all the data reads into a special __builtin_preserve_access_index code block,
    like so:
    
    __builtin_preserve_access_index(({
        x = p->pid; /* where p is struct task_struct *, for example */
    }));
    
    This is very inconvenient and obscures the logic quite a bit. By marking all
    auto-generated types with preserve_access_index attribute the above code is
    reduced to just a clean and natural `x = p->pid;`.
    Signed-off-by: default avatarAndrii Nakryiko <andriin@fb.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20200113073143.1779940-5-andriin@fb.com
    1cf5b239
btf.c 20.2 KB