• Mauricio Vásquez's avatar
    bpftool: Implement "gen min_core_btf" logic · a9caaba3
    Mauricio Vásquez authored
    This commit implements the logic for the gen min_core_btf command.
    Specifically, it implements the following functions:
    
    - minimize_btf(): receives the path of a source and destination BTF
    files and a list of BPF objects. This function records the relocations
    for all objects and then generates the BTF file by calling
    btfgen_get_btf() (implemented in the following commit).
    
    - btfgen_record_obj(): loads the BTF and BTF.ext sections of the BPF
    objects and loops through all CO-RE relocations. It uses
    bpf_core_calc_relo_insn() from libbpf and passes the target spec to
    btfgen_record_reloc(), that calls one of the following functions
    depending on the relocation kind.
    
    - btfgen_record_field_relo(): uses the target specification to mark all
    the types that are involved in a field-based CO-RE relocation. In this
    case types resolved and marked recursively using btfgen_mark_type().
    Only the struct and union members (and their types) involved in the
    relocation are marked to optimize the size of the generated BTF file.
    
    - btfgen_record_type_relo(): marks the types involved in a type-based
    CO-RE relocation. In this case no members for the struct and union types
    are marked as libbpf doesn't use them while performing this kind of
    relocation. Pointed types are marked as they are used by libbpf in this
    case.
    
    - btfgen_record_enumval_relo(): marks the whole enum type for enum-based
    relocations.
    Signed-off-by: default avatarMauricio Vásquez <mauricio@kinvolk.io>
    Signed-off-by: default avatarRafael David Tinoco <rafael.tinoco@aquasec.com>
    Signed-off-by: default avatarLorenzo Fontana <lorenzo.fontana@elastic.co>
    Signed-off-by: default avatarLeonardo Di Donato <leonardo.didonato@elastic.co>
    Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20220215225856.671072-5-mauricio@kinvolk.io
    a9caaba3
Makefile 8.06 KB