• Alexander Lobakin's avatar
    bpftool: Define a local bpf_perf_link to fix accessing its fields · 67a43462
    Alexander Lobakin authored
    When building bpftool with !CONFIG_PERF_EVENTS:
    
    skeleton/pid_iter.bpf.c:47:14: error: incomplete definition of type 'struct bpf_perf_link'
            perf_link = container_of(link, struct bpf_perf_link, link);
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    tools/bpf/bpftool/bootstrap/libbpf/include/bpf/bpf_helpers.h:74:22: note: expanded from macro 'container_of'
                    ((type *)(__mptr - offsetof(type, member)));    \
                                       ^~~~~~~~~~~~~~~~~~~~~~
    tools/bpf/bpftool/bootstrap/libbpf/include/bpf/bpf_helpers.h:68:60: note: expanded from macro 'offsetof'
     #define offsetof(TYPE, MEMBER)  ((unsigned long)&((TYPE *)0)->MEMBER)
                                                      ~~~~~~~~~~~^
    skeleton/pid_iter.bpf.c:44:9: note: forward declaration of 'struct bpf_perf_link'
            struct bpf_perf_link *perf_link;
                   ^
    
    &bpf_perf_link is being defined and used only under the ifdef.
    Define struct bpf_perf_link___local with the `preserve_access_index`
    attribute inside the pid_iter BPF prog to allow compiling on any
    configs. CO-RE will substitute it with the real struct bpf_perf_link
    accesses later on.
    container_of() uses offsetof(), which does the necessary CO-RE
    relocation if the field is specified with `preserve_access_index` - as
    is the case for struct bpf_perf_link___local.
    
    Fixes: cbdaf71f ("bpftool: Add bpf_cookie to link output")
    Suggested-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Signed-off-by: default avatarAlexander Lobakin <alobakin@pm.me>
    Signed-off-by: default avatarQuentin Monnet <quentin@isovalent.com>
    Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20230707095425.168126-3-quentin@isovalent.com
    67a43462
pid_iter.bpf.c 2.57 KB