bpftool-btf(8) System Manager's Manual bpftool-btf(8) (NAME) bpftool-btf - BTF (SYNOPSIS) bpftool [OPTIONS] btf COMMAND OPTIONS := { { -j | --json } [{ -p | --pretty }] | { -d | --debug } | { -B | --base-btf } } COMMANDS := { dump | help } BTF (BTF COMMANDS) bpftool btf { show | list } [id BTF_ID] bpftool btf dump BTF_SRC [format FORMAT] [root_id ROOT_ID] bpftool btf help BTF_SRC := { id BTF_ID | prog PROG | map MAP [{key | value | kv | all}] | file FILE [file FILE]... } FORMAT := { raw | c [unsorted] } MAP := { id MAP_ID | pinned FILE } PROG := { id PROG_ID | pinned FILE | tag PROG_TAG | name PROG_NAME } (DESCRIPTION) bpftool btf { show | list } [id BTF_ID] BTF . BTF BTF BTF . 5.8 bpftool (FD) BTF . bpftool . bpftool btf dump BTF_SRC [format FORMAT] [root_id ROOT_ID] (Dump) BTF BTF_SRC . id BTF BTF . map BTF BTF . / BTF (key) (value) (kv) BTF BTF (all) . kv . prog BTF BTF . FILE ELF BTF ( /sys/kernel/btf/) . file BTF . sysfs BTF vmlinux vmlinux . BTF -B . format (raw) . (raw) C (c) . C . unsorted . root_id dump . ( "key" "value" "kv" BTF ) . . bpftool btf help . (OPTIONS) -h, --help ( bpftool help). -V, --version bpftool ( bpftool version) libbpf bpftool . LLVM libbfd JIT (bpftool prog dump jited) BPF ( bpftool prog profile pid BPF ) . -j, --json JSON. JSON . -p, --pretty JSON . -j . -d, --debug (debug). libbpf (verifier) . -B, --base-btf FILE BTF . BTF BTF . BTF "split" () BTF (vmlinux) . BTF BTF . BTF ( BTF ) FILE bpftool . BTF (handles) . (EXAMPLES) # bpftool btf dump id 1226 [1] PTR '(anon)' type_id=2 [2] STRUCT 'dummy_tracepoint_args' size=16 vlen=2 'pad' type_id=3 bits_offset=0 'sock' type_id=4 bits_offset=64 [3] INT 'long long unsigned int' size=8 bits_offset=0 nr_bits=64 encoding=(none) [4] PTR '(anon)' type_id=5 [5] FWD 'sock' fwd_kind=union BTF . $ cat prog.c struct fwd_struct; enum my_enum { VAL1 = 3, VAL2 = 7, }; typedef struct my_struct my_struct_t; struct my_struct { const unsigned int const_int_field; int bitfield_field: 4; char arr_field[16]; const struct fwd_struct *restrict fwd_field; enum my_enum enum_field; volatile my_struct_t *typedef_ptr_field; }; union my_union { int a; struct my_struct b; }; struct my_struct struct_global_var __attribute__((section("data_sec"))) = { .bitfield_field = 3, .enum_field = VAL1, }; int global_var __attribute__((section("data_sec"))) = 7; __attribute__((noinline)) int my_func(union my_union *arg1, int arg2) { static int static_var __attribute__((section("data_sec"))) = 123; static_var++; return static_var; } $ bpftool btf dump file prog.o [1] PTR '(anon)' type_id=2 [2] UNION 'my_union' size=48 vlen=2 'a' type_id=3 bits_offset=0 'b' type_id=4 bits_offset=0 [3] INT 'int' size=4 bits_offset=0 nr_bits=32 encoding=SIGNED [4] STRUCT 'my_struct' size=48 vlen=6 'const_int_field' type_id=5 bits_offset=0 'bitfield_field' type_id=3 bits_offset=32 bitfield_size=4 'arr_field' type_id=8 bits_offset=40 'fwd_field' type_id=10 bits_offset=192 'enum_field' type_id=14 bits_offset=256 'typedef_ptr_field' type_id=15 bits_offset=320 [5] CONST '(anon)' type_id=6 [6] INT 'unsigned int' size=4 bits_offset=0 nr_bits=32 encoding=(none) [7] INT 'char' size=1 bits_offset=0 nr_bits=8 encoding=SIGNED [8] ARRAY '(anon)' type_id=7 index_type_id=9 nr_elems=16 [9] INT '__ARRAY_SIZE_TYPE__' size=4 bits_offset=0 nr_bits=32 encoding=(none) [10] RESTRICT '(anon)' type_id=11 [11] PTR '(anon)' type_id=12 [12] CONST '(anon)' type_id=13 [13] FWD 'fwd_struct' fwd_kind=union [14] ENUM 'my_enum' size=4 vlen=2 'VAL1' val=3 'VAL2' val=7 [15] PTR '(anon)' type_id=16 [16] VOLATILE '(anon)' type_id=17 [17] TYPEDEF 'my_struct_t' type_id=4 [18] FUNC_PROTO '(anon)' ret_type_id=3 vlen=2 'arg1' type_id=1 'arg2' type_id=3 [19] FUNC 'my_func' type_id=18 [20] VAR 'struct_global_var' type_id=4, linkage=global-alloc [21] VAR 'global_var' type_id=3, linkage=global-alloc [22] VAR 'my_func.static_var' type_id=3, linkage=static [23] DATASEC 'data_sec' size=0 vlen=3 type_id=20 offset=0 size=48 type_id=21 offset=0 size=4 type_id=22 offset=52 size=4 BTF BTF . . # bpftool btf dump map id 123 key [39] TYPEDEF 'u32' type_id=37 # bpftool btf dump map id 123 value [86] PTR '(anon)' type_id=87 # bpftool btf dump map id 123 kv [39] TYPEDEF 'u32' type_id=37 [86] PTR '(anon)' type_id=87 # bpftool btf dump map id 123 all [1] PTR '(anon)' type_id=0 . . . [2866] ARRAY '(anon)' type_id=52 index_type_id=51 nr_elems=4 : # bpftool btf dump map id 123 # bpftool btf dump map pinned /sys/fs/bpf/map_name # bpftool btf dump prog id 456 # bpftool btf dump prog tag b88e0a09b1d9759d # bpftool btf dump prog pinned /sys/fs/bpf/prog_name # bpftool btf dump file /sys/kernel/btf/i2c_smbus () # I2C_SMBUS_ID=$(bpftool btf show -p | jq '.[] | select(.name=="i2c_smbus").id') # bpftool btf dump id ${I2C_SMBUS_ID} -B /sys/kernel/btf/vmlinux [104848] STRUCT 'i2c_smbus_alert' size=40 vlen=2 'alert' type_id=393 bits_offset=0 'ara' type_id=56050 bits_offset=256 [104849] STRUCT 'alert_data' size=12 vlen=3 'addr' type_id=16 bits_offset=0 'type' type_id=56053 bits_offset=32 'data' type_id=7 bits_offset=64 [104850] PTR '(anon)' type_id=104848 [104851] PTR '(anon)' type_id=104849 [104852] FUNC 'i2c_register_spd' type_id=84745 linkage=static [104853] FUNC 'smbalert_driver_init' type_id=1213 linkage=static [104854] FUNC_PROTO '(anon)' ret_type_id=18 vlen=1 'ara' type_id=56050 [104855] FUNC 'i2c_handle_smbus_alert' type_id=104854 linkage=static [104856] FUNC 'smbalert_remove' type_id=104854 linkage=static [104857] FUNC_PROTO '(anon)' ret_type_id=18 vlen=2 'ara' type_id=56050 'id' type_id=56056 [104858] FUNC 'smbalert_probe' type_id=104857 linkage=static [104859] FUNC 'smbalert_work' type_id=9695 linkage=static [104860] FUNC 'smbus_alert' type_id=71367 linkage=static [104861] FUNC 'smbus_do_alert' type_id=84827 linkage=static (SEE ALSO) bpf(2), bpf-helpers(7), bpftool(8), bpftool-cgroup(8), bpftool-feature(8), bpftool-gen(8), bpftool-iter(8), bpftool-link(8), bpftool-map(8), bpftool-net(8), bpftool-perf(8), bpftool-prog(8), bpftool-struct_ops(8), bpftool-token(8) bpftool-btf(8)