• Alan Maguire's avatar
    libbpf: BTF dumper support for typed data · 920d16af
    Alan Maguire authored
    Add a BTF dumper for typed data, so that the user can dump a typed
    version of the data provided.
    
    The API is
    
    int btf_dump__dump_type_data(struct btf_dump *d, __u32 id,
                                 void *data, size_t data_sz,
                                 const struct btf_dump_type_data_opts *opts);
    
    ...where the id is the BTF id of the data pointed to by the "void *"
    argument; for example the BTF id of "struct sk_buff" for a
    "struct skb *" data pointer.  Options supported are
    
     - a starting indent level (indent_lvl)
     - a user-specified indent string which will be printed once per
       indent level; if NULL, tab is chosen but any string <= 32 chars
       can be provided.
     - a set of boolean options to control dump display, similar to those
       used for BPF helper bpf_snprintf_btf().  Options are
            - compact : omit newlines and other indentation
            - skip_names: omit member names
            - emit_zeroes: show zero-value members
    
    Default output format is identical to that dumped by bpf_snprintf_btf(),
    for example a "struct sk_buff" representation would look like this:
    
    struct sk_buff){
    	(union){
    		(struct){
    			.next = (struct sk_buff *)0xffffffffffffffff,
    			.prev = (struct sk_buff *)0xffffffffffffffff,
    		(union){
    			.dev = (struct net_device *)0xffffffffffffffff,
    			.dev_scratch = (long unsigned int)18446744073709551615,
    		},
    	},
    ...
    
    If the data structure is larger than the *data_sz*
    number of bytes that are available in *data*, as much
    of the data as possible will be dumped and -E2BIG will
    be returned.  This is useful as tracers will sometimes
    not be able to capture all of the data associated with
    a type; for example a "struct task_struct" is ~16k.
    Being able to specify that only a subset is available is
    important for such cases.  On success, the amount of data
    dumped is returned.
    Signed-off-by: default avatarAlan Maguire <alan.maguire@oracle.com>
    Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/1626362126-27775-2-git-send-email-alan.maguire@oracle.com
    920d16af
btf_dump.c 60.6 KB