143448428SQuentin Monnet.. SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 243448428SQuentin Monnet 3ca253339SAndrii Nakryiko================ 4ca253339SAndrii Nakryikobpftool-btf 5ca253339SAndrii Nakryiko================ 6ca253339SAndrii Nakryiko------------------------------------------------------------------------------- 7ca253339SAndrii Nakryikotool for inspection of BTF data 8ca253339SAndrii Nakryiko------------------------------------------------------------------------------- 9ca253339SAndrii Nakryiko 10ca253339SAndrii Nakryiko:Manual section: 8 11ca253339SAndrii Nakryiko 12*b6231815SQuentin Monnet.. include:: substitutions.rst 13*b6231815SQuentin Monnet 14ca253339SAndrii NakryikoSYNOPSIS 15ca253339SAndrii Nakryiko======== 16ca253339SAndrii Nakryiko 17ca253339SAndrii Nakryiko **bpftool** [*OPTIONS*] **btf** *COMMAND* 18ca253339SAndrii Nakryiko 19*b6231815SQuentin Monnet *OPTIONS* := { |COMMON_OPTIONS| | { **-B** | **--base-btf** } } 20ca253339SAndrii Nakryiko 21ca253339SAndrii Nakryiko *COMMANDS* := { **dump** | **help** } 22ca253339SAndrii Nakryiko 23ca253339SAndrii NakryikoBTF COMMANDS 24ca253339SAndrii Nakryiko============= 25ca253339SAndrii Nakryiko 264d374ba0SQuentin Monnet| **bpftool** **btf** { **show** | **list** } [**id** *BTF_ID*] 27220ba451SAndrii Nakryiko| **bpftool** **btf dump** *BTF_SRC* [**format** *FORMAT*] 28ca253339SAndrii Nakryiko| **bpftool** **btf help** 29ca253339SAndrii Nakryiko| 30ca253339SAndrii Nakryiko| *BTF_SRC* := { **id** *BTF_ID* | **prog** *PROG* | **map** *MAP* [{**key** | **value** | **kv** | **all**}] | **file** *FILE* } 31220ba451SAndrii Nakryiko| *FORMAT* := { **raw** | **c** } 32ca253339SAndrii Nakryiko| *MAP* := { **id** *MAP_ID* | **pinned** *FILE* } 33ca253339SAndrii Nakryiko| *PROG* := { **id** *PROG_ID* | **pinned** *FILE* | **tag** *PROG_TAG* } 34ca253339SAndrii Nakryiko 35ca253339SAndrii NakryikoDESCRIPTION 36ca253339SAndrii Nakryiko=========== 374d374ba0SQuentin Monnet **bpftool btf { show | list }** [**id** *BTF_ID*] 384d374ba0SQuentin Monnet Show information about loaded BTF objects. If a BTF ID is 394d374ba0SQuentin Monnet specified, show information only about given BTF object, 404d374ba0SQuentin Monnet otherwise list all BTF objects currently loaded on the 414d374ba0SQuentin Monnet system. 424d374ba0SQuentin Monnet 43075c7766SAndrii Nakryiko Since Linux 5.8 bpftool is able to discover information about 44075c7766SAndrii Nakryiko processes that hold open file descriptors (FDs) against BTF 45075c7766SAndrii Nakryiko objects. On such kernels bpftool will automatically emit this 46075c7766SAndrii Nakryiko information as well. 47075c7766SAndrii Nakryiko 48ca253339SAndrii Nakryiko **bpftool btf dump** *BTF_SRC* 49ca253339SAndrii Nakryiko Dump BTF entries from a given *BTF_SRC*. 50ca253339SAndrii Nakryiko 51ca253339SAndrii Nakryiko When **id** is specified, BTF object with that ID will be 52ca253339SAndrii Nakryiko loaded and all its BTF types emitted. 53ca253339SAndrii Nakryiko 54ca253339SAndrii Nakryiko When **map** is provided, it's expected that map has 55ca253339SAndrii Nakryiko associated BTF object with BTF types describing key and 56ca253339SAndrii Nakryiko value. It's possible to select whether to dump only BTF 57ca253339SAndrii Nakryiko type(s) associated with key (**key**), value (**value**), 58ca253339SAndrii Nakryiko both key and value (**kv**), or all BTF types present in 59ca253339SAndrii Nakryiko associated BTF object (**all**). If not specified, **kv** 60ca253339SAndrii Nakryiko is assumed. 61ca253339SAndrii Nakryiko 62ca253339SAndrii Nakryiko When **prog** is provided, it's expected that program has 63ca253339SAndrii Nakryiko associated BTF object with BTF types. 64ca253339SAndrii Nakryiko 65ca253339SAndrii Nakryiko When specifying *FILE*, an ELF file is expected, containing 66ca253339SAndrii Nakryiko .BTF section with well-defined BTF binary format data, 67ca253339SAndrii Nakryiko typically produced by clang or pahole. 68ca253339SAndrii Nakryiko 69220ba451SAndrii Nakryiko **format** option can be used to override default (raw) 70220ba451SAndrii Nakryiko output format. Raw (**raw**) or C-syntax (**c**) output 71220ba451SAndrii Nakryiko formats are supported. 72220ba451SAndrii Nakryiko 73ca253339SAndrii Nakryiko **bpftool btf help** 74ca253339SAndrii Nakryiko Print short help message. 75ca253339SAndrii Nakryiko 76ca253339SAndrii NakryikoOPTIONS 77ca253339SAndrii Nakryiko======= 78f28ef96dSQuentin Monnet .. include:: common_options.rst 79775bc8adSQuentin Monnet 808cc8c635SQuentin Monnet -B, --base-btf *FILE* 818cc8c635SQuentin Monnet Pass a base BTF object. Base BTF objects are typically used 828cc8c635SQuentin Monnet with BTF objects for kernel modules. To avoid duplicating 838cc8c635SQuentin Monnet all kernel symbols required by modules, BTF objects for 848cc8c635SQuentin Monnet modules are "split", they are built incrementally on top of 858cc8c635SQuentin Monnet the kernel (vmlinux) BTF object. So the base BTF reference 868cc8c635SQuentin Monnet should usually point to the kernel BTF. 878cc8c635SQuentin Monnet 888cc8c635SQuentin Monnet When the main BTF object to process (for example, the 898cc8c635SQuentin Monnet module BTF to dump) is passed as a *FILE*, bpftool attempts 908cc8c635SQuentin Monnet to autodetect the path for the base object, and passing 918cc8c635SQuentin Monnet this option is optional. When the main BTF object is passed 928cc8c635SQuentin Monnet through other handles, this option becomes necessary. 938cc8c635SQuentin Monnet 94ca253339SAndrii NakryikoEXAMPLES 95ca253339SAndrii Nakryiko======== 96ca253339SAndrii Nakryiko**# bpftool btf dump id 1226** 9716f3ddfbSQuentin Monnet 98ca253339SAndrii Nakryiko:: 99ca253339SAndrii Nakryiko 100ca253339SAndrii Nakryiko [1] PTR '(anon)' type_id=2 101ca253339SAndrii Nakryiko [2] STRUCT 'dummy_tracepoint_args' size=16 vlen=2 102ca253339SAndrii Nakryiko 'pad' type_id=3 bits_offset=0 103ca253339SAndrii Nakryiko 'sock' type_id=4 bits_offset=64 104ca253339SAndrii Nakryiko [3] INT 'long long unsigned int' size=8 bits_offset=0 nr_bits=64 encoding=(none) 105ca253339SAndrii Nakryiko [4] PTR '(anon)' type_id=5 106ca253339SAndrii Nakryiko [5] FWD 'sock' fwd_kind=union 107ca253339SAndrii Nakryiko 108ca253339SAndrii NakryikoThis gives an example of default output for all supported BTF kinds. 109ca253339SAndrii Nakryiko 110ca253339SAndrii Nakryiko**$ cat prog.c** 11116f3ddfbSQuentin Monnet 112ca253339SAndrii Nakryiko:: 113ca253339SAndrii Nakryiko 114ca253339SAndrii Nakryiko struct fwd_struct; 115ca253339SAndrii Nakryiko 116ca253339SAndrii Nakryiko enum my_enum { 117ca253339SAndrii Nakryiko VAL1 = 3, 118ca253339SAndrii Nakryiko VAL2 = 7, 119ca253339SAndrii Nakryiko }; 120ca253339SAndrii Nakryiko 121ca253339SAndrii Nakryiko typedef struct my_struct my_struct_t; 122ca253339SAndrii Nakryiko 123ca253339SAndrii Nakryiko struct my_struct { 124ca253339SAndrii Nakryiko const unsigned int const_int_field; 125ca253339SAndrii Nakryiko int bitfield_field: 4; 126ca253339SAndrii Nakryiko char arr_field[16]; 127ca253339SAndrii Nakryiko const struct fwd_struct *restrict fwd_field; 128ca253339SAndrii Nakryiko enum my_enum enum_field; 129ca253339SAndrii Nakryiko volatile my_struct_t *typedef_ptr_field; 130ca253339SAndrii Nakryiko }; 131ca253339SAndrii Nakryiko 132ca253339SAndrii Nakryiko union my_union { 133ca253339SAndrii Nakryiko int a; 134ca253339SAndrii Nakryiko struct my_struct b; 135ca253339SAndrii Nakryiko }; 136ca253339SAndrii Nakryiko 137ca253339SAndrii Nakryiko struct my_struct struct_global_var __attribute__((section("data_sec"))) = { 138ca253339SAndrii Nakryiko .bitfield_field = 3, 139ca253339SAndrii Nakryiko .enum_field = VAL1, 140ca253339SAndrii Nakryiko }; 141ca253339SAndrii Nakryiko int global_var __attribute__((section("data_sec"))) = 7; 142ca253339SAndrii Nakryiko 143ca253339SAndrii Nakryiko __attribute__((noinline)) 144ca253339SAndrii Nakryiko int my_func(union my_union *arg1, int arg2) 145ca253339SAndrii Nakryiko { 146ca253339SAndrii Nakryiko static int static_var __attribute__((section("data_sec"))) = 123; 147ca253339SAndrii Nakryiko static_var++; 148ca253339SAndrii Nakryiko return static_var; 149ca253339SAndrii Nakryiko } 150ca253339SAndrii Nakryiko 151ca253339SAndrii Nakryiko**$ bpftool btf dump file prog.o** 15216f3ddfbSQuentin Monnet 153ca253339SAndrii Nakryiko:: 154ca253339SAndrii Nakryiko 155ca253339SAndrii Nakryiko [1] PTR '(anon)' type_id=2 156ca253339SAndrii Nakryiko [2] UNION 'my_union' size=48 vlen=2 157ca253339SAndrii Nakryiko 'a' type_id=3 bits_offset=0 158ca253339SAndrii Nakryiko 'b' type_id=4 bits_offset=0 159ca253339SAndrii Nakryiko [3] INT 'int' size=4 bits_offset=0 nr_bits=32 encoding=SIGNED 160ca253339SAndrii Nakryiko [4] STRUCT 'my_struct' size=48 vlen=6 161ca253339SAndrii Nakryiko 'const_int_field' type_id=5 bits_offset=0 162ca253339SAndrii Nakryiko 'bitfield_field' type_id=3 bits_offset=32 bitfield_size=4 163ca253339SAndrii Nakryiko 'arr_field' type_id=8 bits_offset=40 164ca253339SAndrii Nakryiko 'fwd_field' type_id=10 bits_offset=192 165ca253339SAndrii Nakryiko 'enum_field' type_id=14 bits_offset=256 166ca253339SAndrii Nakryiko 'typedef_ptr_field' type_id=15 bits_offset=320 167ca253339SAndrii Nakryiko [5] CONST '(anon)' type_id=6 168ca253339SAndrii Nakryiko [6] INT 'unsigned int' size=4 bits_offset=0 nr_bits=32 encoding=(none) 169ca253339SAndrii Nakryiko [7] INT 'char' size=1 bits_offset=0 nr_bits=8 encoding=SIGNED 170ca253339SAndrii Nakryiko [8] ARRAY '(anon)' type_id=7 index_type_id=9 nr_elems=16 171ca253339SAndrii Nakryiko [9] INT '__ARRAY_SIZE_TYPE__' size=4 bits_offset=0 nr_bits=32 encoding=(none) 172ca253339SAndrii Nakryiko [10] RESTRICT '(anon)' type_id=11 173ca253339SAndrii Nakryiko [11] PTR '(anon)' type_id=12 174ca253339SAndrii Nakryiko [12] CONST '(anon)' type_id=13 175ca253339SAndrii Nakryiko [13] FWD 'fwd_struct' fwd_kind=union 176ca253339SAndrii Nakryiko [14] ENUM 'my_enum' size=4 vlen=2 177ca253339SAndrii Nakryiko 'VAL1' val=3 178ca253339SAndrii Nakryiko 'VAL2' val=7 179ca253339SAndrii Nakryiko [15] PTR '(anon)' type_id=16 180ca253339SAndrii Nakryiko [16] VOLATILE '(anon)' type_id=17 181ca253339SAndrii Nakryiko [17] TYPEDEF 'my_struct_t' type_id=4 182ca253339SAndrii Nakryiko [18] FUNC_PROTO '(anon)' ret_type_id=3 vlen=2 183ca253339SAndrii Nakryiko 'arg1' type_id=1 184ca253339SAndrii Nakryiko 'arg2' type_id=3 185ca253339SAndrii Nakryiko [19] FUNC 'my_func' type_id=18 186ca253339SAndrii Nakryiko [20] VAR 'struct_global_var' type_id=4, linkage=global-alloc 187ca253339SAndrii Nakryiko [21] VAR 'global_var' type_id=3, linkage=global-alloc 188ca253339SAndrii Nakryiko [22] VAR 'my_func.static_var' type_id=3, linkage=static 189ca253339SAndrii Nakryiko [23] DATASEC 'data_sec' size=0 vlen=3 190ca253339SAndrii Nakryiko type_id=20 offset=0 size=48 191ca253339SAndrii Nakryiko type_id=21 offset=0 size=4 192ca253339SAndrii Nakryiko type_id=22 offset=52 size=4 193ca253339SAndrii Nakryiko 194ca253339SAndrii NakryikoThe following commands print BTF types associated with specified map's key, 195ca253339SAndrii Nakryikovalue, both key and value, and all BTF types, respectively. By default, both 196ca253339SAndrii Nakryikokey and value types will be printed. 197ca253339SAndrii Nakryiko 198ca253339SAndrii Nakryiko**# bpftool btf dump map id 123 key** 199ca253339SAndrii Nakryiko 200ca253339SAndrii Nakryiko:: 201ca253339SAndrii Nakryiko 202ca253339SAndrii Nakryiko [39] TYPEDEF 'u32' type_id=37 203ca253339SAndrii Nakryiko 204ca253339SAndrii Nakryiko**# bpftool btf dump map id 123 value** 205ca253339SAndrii Nakryiko 206ca253339SAndrii Nakryiko:: 207ca253339SAndrii Nakryiko 208ca253339SAndrii Nakryiko [86] PTR '(anon)' type_id=87 209ca253339SAndrii Nakryiko 210ca253339SAndrii Nakryiko**# bpftool btf dump map id 123 kv** 211ca253339SAndrii Nakryiko 212ca253339SAndrii Nakryiko:: 213ca253339SAndrii Nakryiko 214ca253339SAndrii Nakryiko [39] TYPEDEF 'u32' type_id=37 215ca253339SAndrii Nakryiko [86] PTR '(anon)' type_id=87 216ca253339SAndrii Nakryiko 217ca253339SAndrii Nakryiko**# bpftool btf dump map id 123 all** 218ca253339SAndrii Nakryiko 219ca253339SAndrii Nakryiko:: 220ca253339SAndrii Nakryiko 221ca253339SAndrii Nakryiko [1] PTR '(anon)' type_id=0 222ca253339SAndrii Nakryiko . 223ca253339SAndrii Nakryiko . 224ca253339SAndrii Nakryiko . 225ca253339SAndrii Nakryiko [2866] ARRAY '(anon)' type_id=52 index_type_id=51 nr_elems=4 226ca253339SAndrii Nakryiko 227ca253339SAndrii NakryikoAll the standard ways to specify map or program are supported: 228ca253339SAndrii Nakryiko 229ca253339SAndrii Nakryiko**# bpftool btf dump map id 123** 230ca253339SAndrii Nakryiko 231ca253339SAndrii Nakryiko**# bpftool btf dump map pinned /sys/fs/bpf/map_name** 232ca253339SAndrii Nakryiko 233ca253339SAndrii Nakryiko**# bpftool btf dump prog id 456** 234ca253339SAndrii Nakryiko 235ca253339SAndrii Nakryiko**# bpftool btf dump prog tag b88e0a09b1d9759d** 236ca253339SAndrii Nakryiko 237ca253339SAndrii Nakryiko**# bpftool btf dump prog pinned /sys/fs/bpf/prog_name** 2388cc8c635SQuentin Monnet 2398cc8c635SQuentin Monnet| 2408cc8c635SQuentin Monnet| **# bpftool btf dump file /sys/kernel/btf/i2c_smbus** 2418cc8c635SQuentin Monnet| (or) 2428cc8c635SQuentin Monnet| **# I2C_SMBUS_ID=$(bpftool btf show -p | jq '.[] | select(.name=="i2c_smbus").id')** 2438cc8c635SQuentin Monnet| **# bpftool btf dump id ${I2C_SMBUS_ID} -B /sys/kernel/btf/vmlinux** 2448cc8c635SQuentin Monnet 2458cc8c635SQuentin Monnet:: 2468cc8c635SQuentin Monnet 2478cc8c635SQuentin Monnet [104848] STRUCT 'i2c_smbus_alert' size=40 vlen=2 2488cc8c635SQuentin Monnet 'alert' type_id=393 bits_offset=0 2498cc8c635SQuentin Monnet 'ara' type_id=56050 bits_offset=256 2508cc8c635SQuentin Monnet [104849] STRUCT 'alert_data' size=12 vlen=3 2518cc8c635SQuentin Monnet 'addr' type_id=16 bits_offset=0 2528cc8c635SQuentin Monnet 'type' type_id=56053 bits_offset=32 2538cc8c635SQuentin Monnet 'data' type_id=7 bits_offset=64 2548cc8c635SQuentin Monnet [104850] PTR '(anon)' type_id=104848 2558cc8c635SQuentin Monnet [104851] PTR '(anon)' type_id=104849 2568cc8c635SQuentin Monnet [104852] FUNC 'i2c_register_spd' type_id=84745 linkage=static 2578cc8c635SQuentin Monnet [104853] FUNC 'smbalert_driver_init' type_id=1213 linkage=static 2588cc8c635SQuentin Monnet [104854] FUNC_PROTO '(anon)' ret_type_id=18 vlen=1 2598cc8c635SQuentin Monnet 'ara' type_id=56050 2608cc8c635SQuentin Monnet [104855] FUNC 'i2c_handle_smbus_alert' type_id=104854 linkage=static 2618cc8c635SQuentin Monnet [104856] FUNC 'smbalert_remove' type_id=104854 linkage=static 2628cc8c635SQuentin Monnet [104857] FUNC_PROTO '(anon)' ret_type_id=18 vlen=2 2638cc8c635SQuentin Monnet 'ara' type_id=56050 2648cc8c635SQuentin Monnet 'id' type_id=56056 2658cc8c635SQuentin Monnet [104858] FUNC 'smbalert_probe' type_id=104857 linkage=static 2668cc8c635SQuentin Monnet [104859] FUNC 'smbalert_work' type_id=9695 linkage=static 2678cc8c635SQuentin Monnet [104860] FUNC 'smbus_alert' type_id=71367 linkage=static 2688cc8c635SQuentin Monnet [104861] FUNC 'smbus_do_alert' type_id=84827 linkage=static 269