• Andrii Nakryiko's avatar
    libbpf: Support BTF dedup of split BTFs · f86524ef
    Andrii Nakryiko authored
    
    
    Add support for deduplication split BTFs. When deduplicating split BTF, base
    BTF is considered to be immutable and can't be modified or adjusted. 99% of
    BTF deduplication logic is left intact (module some type numbering adjustments).
    There are only two differences.
    
    First, each type in base BTF gets hashed (expect VAR and DATASEC, of course,
    those are always considered to be self-canonical instances) and added into
    a table of canonical table candidates. Hashing is a shallow, fast operation,
    so mostly eliminates the overhead of having entire base BTF to be a part of
    BTF dedup.
    
    Second difference is very critical and subtle. While deduplicating split BTF
    types, it is possible to discover that one of immutable base BTF BTF_KIND_FWD
    types can and should be resolved to a full STRUCT/UNION type from the split
    BTF part.  This is, obviously, can't happen because we can't modify the base
    BTF types anymore. So because of that, any type in split BTF that directly or
    indirectly references that newly-to-be-resolved FWD type can't be considered
    to be equivalent to the corresponding canonical types in base BTF, because
    that would result in a loss of type resolution information. So in such case,
    split BTF types will be deduplicated separately and will cause some
    duplication of type information, which is unavoidable.
    
    With those two changes, the rest of the algorithm manages to deduplicate split
    BTF correctly, pointing all the duplicates to their canonical counter-parts in
    base BTF, but also is deduplicating whatever unique types are present in split
    BTF on their own.
    
    Also, theoretically, split BTF after deduplication could end up with either
    empty type section or empty string section. This is handled by libbpf
    correctly in one of previous patches in the series.
    Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Acked-by: default avatarSong Liu <songliubraving@fb.com>
    Link: https://lore.kernel.org/bpf/20201105043402.2530976-9-andrii@kernel.org
    f86524ef
btf.c 119 KB