• Quentin Monnet's avatar
    tools: bpftool: Support dumping split BTF by id · 211ab78f
    Quentin Monnet authored
    
    
    Split BTF objects are typically BTF objects for kernel modules, which
    are incrementally built on top of kernel BTF instead of redefining all
    kernel symbols they need. We can use bpftool with its -B command-line
    option to dump split BTF objects. It works well when the handle provided
    for the BTF object to dump is a "path" to the BTF object, typically
    under /sys/kernel/btf, because bpftool internally calls
    btf__parse_split() which can take a "base_btf" pointer and resolve the
    BTF reconstruction (although in that case, the "-B" option is
    unnecessary because bpftool performs autodetection).
    
    However, it did not work so far when passing the BTF object through its
    id, because bpftool would call btf__get_from_id() which did not provide
    a way to pass a "base_btf" pointer.
    
    In other words, the following works:
    
        # bpftool btf dump file /sys/kernel/btf/i2c_smbus -B /sys/kernel/btf/vmlinux
    
    But this was not possible:
    
        # bpftool btf dump id 6 -B /sys/kernel/btf/vmlinux
    
    The libbpf API has recently changed, and btf__get_from_id() has been
    deprecated in favour of btf__load_from_kernel_by_id() and its version
    with support for split BTF, btf__load_from_kernel_by_id_split(). Let's
    update bpftool to make it able to dump the BTF object in the second case
    as well.
    Signed-off-by: default avatarQuentin Monnet <quentin@isovalent.com>
    Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Acked-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
    Link: https://lore.kernel.org/bpf/20210729162028.29512-9-quentin@isovalent.com
    211ab78f
btf.c 21.9 KB