• A
    bpf: Add bpf_snprintf_btf helper · c4d0bfb4
    Alan Maguire 提交于
    A helper is added to support tracing kernel type information in BPF
    using the BPF Type Format (BTF).  Its signature is
    
    long bpf_snprintf_btf(char *str, u32 str_size, struct btf_ptr *ptr,
    		      u32 btf_ptr_size, u64 flags);
    
    struct btf_ptr * specifies
    
    - a pointer to the data to be traced
    - the BTF id of the type of data pointed to
    - a flags field is provided for future use; these flags
      are not to be confused with the BTF_F_* flags
      below that control how the btf_ptr is displayed; the
      flags member of the struct btf_ptr may be used to
      disambiguate types in kernel versus module BTF, etc;
      the main distinction is the flags relate to the type
      and information needed in identifying it; not how it
      is displayed.
    
    For example a BPF program with a struct sk_buff *skb
    could do the following:
    
    	static struct btf_ptr b = { };
    
    	b.ptr = skb;
    	b.type_id = __builtin_btf_type_id(struct sk_buff, 1);
    	bpf_snprintf_btf(str, sizeof(str), &b, sizeof(b), 0, 0);
    
    Default output looks like this:
    
    (struct sk_buff){
     .transport_header = (__u16)65535,
     .mac_header = (__u16)65535,
     .end = (sk_buff_data_t)192,
     .head = (unsigned char *)0x000000007524fd8b,
     .data = (unsigned char *)0x000000007524fd8b,
     .truesize = (unsigned int)768,
     .users = (refcount_t){
      .refs = (atomic_t){
       .counter = (int)1,
      },
     },
    }
    
    Flags modifying display are as follows:
    
    - BTF_F_COMPACT:	no formatting around type information
    - BTF_F_NONAME:		no struct/union member names/types
    - BTF_F_PTR_RAW:	show raw (unobfuscated) pointer values;
    			equivalent to %px.
    - BTF_F_ZERO:		show zero-valued struct/union members;
    			they are not displayed by default
    Signed-off-by: NAlan Maguire <alan.maguire@oracle.com>
    Signed-off-by: NAlexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/1601292670-1616-4-git-send-email-alan.maguire@oracle.com
    c4d0bfb4
bpf.h 61.5 KB