• Martin KaFai Lau's avatar
    bpf: libbpf: Refactor and bug fix on the bpf_func_info loading logic · f0187f0b
    Martin KaFai Lau authored
    This patch refactor and fix a bug in the libbpf's bpf_func_info loading
    logic.  The bug fix and refactoring are targeting the same
    commit 2993e051 ("tools/bpf: add support to read .BTF.ext sections")
    which is in the bpf-next branch.
    
    1) In bpf_load_program_xattr(), it should retry when errno == E2BIG
       regardless of log_buf and log_buf_sz.  This patch fixes it.
    
    2) btf_ext__reloc_init() and btf_ext__reloc() are essentially
       the same except btf_ext__reloc_init() always has insns_cnt == 0.
       Hence, btf_ext__reloc_init() is removed.
    
       btf_ext__reloc() is also renamed to btf_ext__reloc_func_info()
       to get ready for the line_info support in the next patch.
    
    3) Consolidate func_info section logic from "btf_ext_parse_hdr()",
       "btf_ext_validate_func_info()" and "btf_ext__new()" to
       a new function "btf_ext_copy_func_info()" such that similar
       logic can be reused by the later libbpf's line_info patch.
    
    4) The next line_info patch will store line_info_cnt instead of
       line_info_len in the bpf_program because the kernel is taking
       line_info_cnt also.  It will save a few "len" to "cnt" conversions
       and will also save some function args.
    
       Hence, this patch also makes bpf_program to store func_info_cnt
       instead of func_info_len.
    
    5) btf_ext depends on btf.  e.g. the func_info's type_id
       in ".BTF.ext" is not useful when ".BTF" is absent.
       This patch only init the obj->btf_ext pointer after
       it has successfully init the obj->btf pointer.
    
       This can avoid always checking "obj->btf && obj->btf_ext"
       together for accessing ".BTF.ext".  Checking "obj->btf_ext"
       alone will do.
    
    6) Move "struct btf_sec_func_info" from btf.h to btf.c.
       There is no external usage outside btf.c.
    
    Fixes: 2993e051 ("tools/bpf: add support to read .BTF.ext sections")
    Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Acked-by: default avatarYonghong Song <yhs@fb.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    f0187f0b
libbpf.c 67.1 KB