• Andrii Nakryiko's avatar
    libbpf: Support custom SEC() handlers · 697f104d
    Andrii Nakryiko authored
    Allow registering and unregistering custom handlers for BPF program.
    This allows user applications and libraries to plug into libbpf's
    declarative SEC() definition handling logic. This allows to offload
    complex and intricate custom logic into external libraries, but still
    provide a great user experience.
    
    One such example is USDT handling library, which has a lot of code and
    complexity which doesn't make sense to put into libbpf directly, but it
    would be really great for users to be able to specify BPF programs with
    something like SEC("usdt/<path-to-binary>:<usdt_provider>:<usdt_name>")
    and have correct BPF program type set (BPF_PROGRAM_TYPE_KPROBE, as it is
    uprobe) and even support BPF skeleton's auto-attach logic.
    
    In some cases, it might be even good idea to override libbpf's default
    handling, like for SEC("perf_event") programs. With custom library, it's
    possible to extend logic to support specifying perf event specification
    right there in SEC() definition without burdening libbpf with lots of
    custom logic or extra library dependecies (e.g., libpfm4). With current
    patch it's possible to override libbpf's SEC("perf_event") handling and
    specify a completely custom ones.
    
    Further, it's possible to specify a generic fallback handling for any
    SEC() that doesn't match any other custom or standard libbpf handlers.
    This allows to accommodate whatever legacy use cases there might be, if
    necessary.
    
    See doc comments for libbpf_register_prog_handler() and
    libbpf_unregister_prog_handler() for detailed semantics.
    
    This patch also bumps libbpf development version to v0.8 and adds new
    APIs there.
    Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Tested-by: default avatarAlan Maguire <alan.maguire@oracle.com>
    Reviewed-by: default avatarAlan Maguire <alan.maguire@oracle.com>
    Link: https://lore.kernel.org/bpf/20220305010129.1549719-3-andrii@kernel.org
    697f104d
libbpf_version.h 242 Bytes