• Andrii Nakryiko's avatar
    libbpf: Support opting out from autoloading BPF programs declaratively · a3820c48
    Andrii Nakryiko authored
    Establish SEC("?abc") naming convention (i.e., adding question mark in
    front of otherwise normal section name) that allows to set corresponding
    program's autoload property to false. This is effectively just
    a declarative way to do bpf_program__set_autoload(prog, false).
    
    Having a way to do this declaratively in BPF code itself is useful and
    convenient for various scenarios. E.g., for testing, when BPF object
    consists of multiple independent BPF programs that each needs to be
    tested separately. Opting out all of them by default and then setting
    autoload to true for just one of them at a time simplifies testing code
    (see next patch for few conversions in BPF selftests taking advantage of
    this new feature).
    
    Another real-world use case is in libbpf-tools for cases when different
    BPF programs have to be picked depending on particulars of the host
    kernel due to various incompatible changes (like kernel function renames
    or signature change, or to pick kprobe vs fentry depending on
    corresponding kernel support for the latter). Marking all the different
    BPF program candidates as non-autoloaded declaratively makes this more
    obvious in BPF source code and allows simpler code in user-space code.
    
    When BPF program marked as SEC("?abc") it is otherwise treated just like
    SEC("abc") and bpf_program__section_name() reported will be "abc".
    Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20220419002452.632125-1-andrii@kernel.org
    a3820c48
libbpf.c 332 KB