• Martin KaFai Lau's avatar
    bpf: Create a new btf_name_by_offset() for non type name use case · 23127b33
    Martin KaFai Lau authored
    The current btf_name_by_offset() is returning "(anon)" type name for
    the offset == 0 case and "(invalid-name-offset)" for the out-of-bound
    offset case.
    
    It fits well for the internal BTF verbose log purpose which
    is focusing on type.  For example,
    offset == 0 => "(anon)" => anonymous type/name.
    Returning non-NULL for the bad offset case is needed
    during the BTF verification process because the BTF verifier may
    complain about another field first before discovering the name_off
    is invalid.
    
    However, it may not be ideal for the newer use case which does not
    necessary mean type name.  For example, when logging line_info
    in the BPF verifier in the next patch, it is better to log an
    empty src line instead of logging "(anon)".
    
    The existing bpf_name_by_offset() is renamed to __bpf_name_by_offset()
    and static to btf.c.
    
    A new bpf_name_by_offset() is added for generic context usage.  It
    returns "\0" for name_off == 0 (note that btf->strings[0] is "\0")
    and NULL for invalid offset.  It allows the caller to decide
    what is the best output in its context.
    
    The new btf_name_by_offset() is overlapped with btf_name_offset_valid().
    Hence, btf_name_offset_valid() is removed from btf.h to keep the btf.h API
    minimal.  The existing btf_name_offset_valid() usage in btf.c could also be
    replaced later.
    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>
    23127b33
btf.c 66.7 KB