• Andrii Nakryiko's avatar
    libbpf: deprecate legacy BPF map definitions · 93b8952d
    Andrii Nakryiko authored
    Enact deprecation of legacy BPF map definition in SEC("maps") ([0]). For
    the definitions themselves introduce LIBBPF_STRICT_MAP_DEFINITIONS flag
    for libbpf strict mode. If it is set, error out on any struct
    bpf_map_def-based map definition. If not set, libbpf will print out
    a warning for each legacy BPF map to raise awareness that it goes away.
    
    For any use of BPF_ANNOTATE_KV_PAIR() macro providing a legacy way to
    associate BTF key/value type information with legacy BPF map definition,
    warn through libbpf's pr_warn() error message (but don't fail BPF object
    open).
    
    BPF-side struct bpf_map_def is marked as deprecated. User-space struct
    bpf_map_def has to be used internally in libbpf, so it is left
    untouched. It should be enough for bpf_map__def() to be marked
    deprecated to raise awareness that it goes away.
    
    bpftool is an interesting case that utilizes libbpf to open BPF ELF
    object to generate skeleton. As such, even though bpftool itself uses
    full on strict libbpf mode (LIBBPF_STRICT_ALL), it has to relax it a bit
    for BPF map definition handling to minimize unnecessary disruptions. So
    opt-out of LIBBPF_STRICT_MAP_DEFINITIONS for bpftool. User's code that
    will later use generated skeleton will make its own decision whether to
    enforce LIBBPF_STRICT_MAP_DEFINITIONS or not.
    
    There are few tests in selftests/bpf that are consciously using legacy
    BPF map definitions to test libbpf functionality. For those, temporary
    opt out of LIBBPF_STRICT_MAP_DEFINITIONS mode for the duration of those
    tests.
    
      [0] Closes: https://github.com/libbpf/libbpf/issues/272Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/r/20220120060529.1890907-4-andrii@kernel.orgSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    93b8952d
btf.c 206 KB