1 .. SPDX-License-Identifier: (GPL-2.0-only OR B << 2 << 3 ================ 1 ================ 4 bpftool-btf 2 bpftool-btf 5 ================ 3 ================ 6 ---------------------------------------------- 4 ------------------------------------------------------------------------------- 7 tool for inspection of BTF data 5 tool for inspection of BTF data 8 ---------------------------------------------- 6 ------------------------------------------------------------------------------- 9 7 10 :Manual section: 8 8 :Manual section: 8 11 9 12 .. include:: substitutions.rst << 13 << 14 SYNOPSIS 10 SYNOPSIS 15 ======== 11 ======== 16 12 17 **bpftool** [*OPTIONS*] **btf** *COMMAND* !! 13 **bpftool** [*OPTIONS*] **btf** *COMMAND* 18 14 19 *OPTIONS* := { |COMMON_OPTIONS| | { **-B** | * !! 15 *OPTIONS* := { { **-j** | **--json** } [{ **-p** | **--pretty** }] } 20 16 21 *COMMANDS* := { **dump** | **help** } !! 17 *COMMANDS* := { **dump** | **help** } 22 18 23 BTF COMMANDS 19 BTF COMMANDS 24 ============= 20 ============= 25 21 26 | **bpftool** **btf** { **show** | **list** } !! 22 | **bpftool** **btf dump** *BTF_SRC* 27 | **bpftool** **btf dump** *BTF_SRC* [**format !! 23 | **bpftool** **btf help** 28 | **bpftool** **btf help** << 29 | 24 | 30 | *BTF_SRC* := { **id** *BTF_ID* | **prog** *P !! 25 | *BTF_SRC* := { **id** *BTF_ID* | **prog** *PROG* | **map** *MAP* [{**key** | **value** | **kv** | **all**}] | **file** *FILE* } 31 | *FORMAT* := { **raw** | **c** [**unsorted**] !! 26 | *MAP* := { **id** *MAP_ID* | **pinned** *FILE* } 32 | *MAP* := { **id** *MAP_ID* | **pinned** *FIL !! 27 | *PROG* := { **id** *PROG_ID* | **pinned** *FILE* | **tag** *PROG_TAG* } 33 | *PROG* := { **id** *PROG_ID* | **pinned** *F << 34 28 35 DESCRIPTION 29 DESCRIPTION 36 =========== 30 =========== 37 bpftool btf { show | list } [id *BTF_ID*] !! 31 **bpftool btf dump** *BTF_SRC* 38 Show information about loaded BTF objects. !! 32 Dump BTF entries from a given *BTF_SRC*. 39 information only about given BTF object, o !! 33 40 currently loaded on the system. !! 34 When **id** is specified, BTF object with that ID will be 41 !! 35 loaded and all its BTF types emitted. 42 Since Linux 5.8 bpftool is able to discove !! 36 43 that hold open file descriptors (FDs) agai !! 37 When **map** is provided, it's expected that map has 44 bpftool will automatically emit this infor !! 38 associated BTF object with BTF types describing key and 45 !! 39 value. It's possible to select whether to dump only BTF 46 bpftool btf dump *BTF_SRC* !! 40 type(s) associated with key (**key**), value (**value**), 47 Dump BTF entries from a given *BTF_SRC*. !! 41 both key and value (**kv**), or all BTF types present in 48 !! 42 associated BTF object (**all**). If not specified, **kv** 49 When **id** is specified, BTF object with !! 43 is assumed. 50 its BTF types emitted. !! 44 51 !! 45 When **prog** is provided, it's expected that program has 52 When **map** is provided, it's expected th !! 46 associated BTF object with BTF types. 53 with BTF types describing key and value. I !! 47 54 dump only BTF type(s) associated with key !! 48 When specifying *FILE*, an ELF file is expected, containing 55 both key and value (**kv**), or all BTF ty !! 49 .BTF section with well-defined BTF binary format data, 56 object (**all**). If not specified, **kv** !! 50 typically produced by clang or pahole. 57 << 58 When **prog** is provided, it's expected t << 59 object with BTF types. << 60 << 61 When specifying *FILE*, an ELF file is exp << 62 with well-defined BTF binary format data, << 63 pahole. << 64 << 65 **format** option can be used to override << 66 (**raw**) or C-syntax (**c**) output forma << 67 formatting, the output is sorted by defaul << 68 to avoid sorting the output. << 69 51 70 bpftool btf help !! 52 **bpftool btf help** 71 Print short help message. !! 53 Print short help message. 72 54 73 OPTIONS 55 OPTIONS 74 ======= 56 ======= 75 .. include:: common_options.rst !! 57 -h, --help >> 58 Print short generic help message (similar to **bpftool help**). 76 59 77 -B, --base-btf *FILE* !! 60 -V, --version 78 Pass a base BTF object. Base BTF objects a !! 61 Print version number (similar to **bpftool version**). 79 objects for kernel modules. To avoid dupli !! 62 80 required by modules, BTF objects for modul !! 63 -j, --json 81 built incrementally on top of the kernel ( !! 64 Generate JSON output. For commands that cannot produce JSON, this 82 base BTF reference should usually point to !! 65 option has no effect. 83 !! 66 84 When the main BTF object to process (for e !! 67 -p, --pretty 85 dump) is passed as a *FILE*, bpftool attem !! 68 Generate human-readable JSON output. Implies **-j**. 86 for the base object, and passing this opti << 87 BTF object is passed through other handles << 88 necessary. << 89 69 90 EXAMPLES 70 EXAMPLES 91 ======== 71 ======== 92 **# bpftool btf dump id 1226** 72 **# bpftool btf dump id 1226** 93 << 94 :: 73 :: 95 74 96 [1] PTR '(anon)' type_id=2 75 [1] PTR '(anon)' type_id=2 97 [2] STRUCT 'dummy_tracepoint_args' size=16 v 76 [2] STRUCT 'dummy_tracepoint_args' size=16 vlen=2 98 'pad' type_id=3 bits_offset=0 77 'pad' type_id=3 bits_offset=0 99 'sock' type_id=4 bits_offset=64 78 'sock' type_id=4 bits_offset=64 100 [3] INT 'long long unsigned int' size=8 bits 79 [3] INT 'long long unsigned int' size=8 bits_offset=0 nr_bits=64 encoding=(none) 101 [4] PTR '(anon)' type_id=5 80 [4] PTR '(anon)' type_id=5 102 [5] FWD 'sock' fwd_kind=union 81 [5] FWD 'sock' fwd_kind=union 103 82 104 This gives an example of default output for al 83 This gives an example of default output for all supported BTF kinds. 105 84 106 **$ cat prog.c** 85 **$ cat prog.c** 107 << 108 :: 86 :: 109 87 110 struct fwd_struct; 88 struct fwd_struct; 111 89 112 enum my_enum { 90 enum my_enum { 113 VAL1 = 3, 91 VAL1 = 3, 114 VAL2 = 7, 92 VAL2 = 7, 115 }; 93 }; 116 94 117 typedef struct my_struct my_struct_t; 95 typedef struct my_struct my_struct_t; 118 96 119 struct my_struct { 97 struct my_struct { 120 const unsigned int const_int_field; 98 const unsigned int const_int_field; 121 int bitfield_field: 4; 99 int bitfield_field: 4; 122 char arr_field[16]; 100 char arr_field[16]; 123 const struct fwd_struct *restrict fw 101 const struct fwd_struct *restrict fwd_field; 124 enum my_enum enum_field; 102 enum my_enum enum_field; 125 volatile my_struct_t *typedef_ptr_fi 103 volatile my_struct_t *typedef_ptr_field; 126 }; 104 }; 127 105 128 union my_union { 106 union my_union { 129 int a; 107 int a; 130 struct my_struct b; 108 struct my_struct b; 131 }; 109 }; 132 110 133 struct my_struct struct_global_var __attribu 111 struct my_struct struct_global_var __attribute__((section("data_sec"))) = { 134 .bitfield_field = 3, 112 .bitfield_field = 3, 135 .enum_field = VAL1, 113 .enum_field = VAL1, 136 }; 114 }; 137 int global_var __attribute__((section("data_ 115 int global_var __attribute__((section("data_sec"))) = 7; 138 116 139 __attribute__((noinline)) 117 __attribute__((noinline)) 140 int my_func(union my_union *arg1, int arg2) 118 int my_func(union my_union *arg1, int arg2) 141 { 119 { 142 static int static_var __attribute__( 120 static int static_var __attribute__((section("data_sec"))) = 123; 143 static_var++; 121 static_var++; 144 return static_var; 122 return static_var; 145 } 123 } 146 124 147 **$ bpftool btf dump file prog.o** 125 **$ bpftool btf dump file prog.o** 148 << 149 :: 126 :: 150 127 151 [1] PTR '(anon)' type_id=2 128 [1] PTR '(anon)' type_id=2 152 [2] UNION 'my_union' size=48 vlen=2 129 [2] UNION 'my_union' size=48 vlen=2 153 'a' type_id=3 bits_offset=0 130 'a' type_id=3 bits_offset=0 154 'b' type_id=4 bits_offset=0 131 'b' type_id=4 bits_offset=0 155 [3] INT 'int' size=4 bits_offset=0 nr_bits=3 132 [3] INT 'int' size=4 bits_offset=0 nr_bits=32 encoding=SIGNED 156 [4] STRUCT 'my_struct' size=48 vlen=6 133 [4] STRUCT 'my_struct' size=48 vlen=6 157 'const_int_field' type_id=5 bits_off 134 'const_int_field' type_id=5 bits_offset=0 158 'bitfield_field' type_id=3 bits_offs 135 'bitfield_field' type_id=3 bits_offset=32 bitfield_size=4 159 'arr_field' type_id=8 bits_offset=40 136 'arr_field' type_id=8 bits_offset=40 160 'fwd_field' type_id=10 bits_offset=1 137 'fwd_field' type_id=10 bits_offset=192 161 'enum_field' type_id=14 bits_offset= 138 'enum_field' type_id=14 bits_offset=256 162 'typedef_ptr_field' type_id=15 bits_ 139 'typedef_ptr_field' type_id=15 bits_offset=320 163 [5] CONST '(anon)' type_id=6 140 [5] CONST '(anon)' type_id=6 164 [6] INT 'unsigned int' size=4 bits_offset=0 141 [6] INT 'unsigned int' size=4 bits_offset=0 nr_bits=32 encoding=(none) 165 [7] INT 'char' size=1 bits_offset=0 nr_bits= 142 [7] INT 'char' size=1 bits_offset=0 nr_bits=8 encoding=SIGNED 166 [8] ARRAY '(anon)' type_id=7 index_type_id=9 143 [8] ARRAY '(anon)' type_id=7 index_type_id=9 nr_elems=16 167 [9] INT '__ARRAY_SIZE_TYPE__' size=4 bits_of 144 [9] INT '__ARRAY_SIZE_TYPE__' size=4 bits_offset=0 nr_bits=32 encoding=(none) 168 [10] RESTRICT '(anon)' type_id=11 145 [10] RESTRICT '(anon)' type_id=11 169 [11] PTR '(anon)' type_id=12 146 [11] PTR '(anon)' type_id=12 170 [12] CONST '(anon)' type_id=13 147 [12] CONST '(anon)' type_id=13 171 [13] FWD 'fwd_struct' fwd_kind=union 148 [13] FWD 'fwd_struct' fwd_kind=union 172 [14] ENUM 'my_enum' size=4 vlen=2 149 [14] ENUM 'my_enum' size=4 vlen=2 173 'VAL1' val=3 150 'VAL1' val=3 174 'VAL2' val=7 151 'VAL2' val=7 175 [15] PTR '(anon)' type_id=16 152 [15] PTR '(anon)' type_id=16 176 [16] VOLATILE '(anon)' type_id=17 153 [16] VOLATILE '(anon)' type_id=17 177 [17] TYPEDEF 'my_struct_t' type_id=4 154 [17] TYPEDEF 'my_struct_t' type_id=4 178 [18] FUNC_PROTO '(anon)' ret_type_id=3 vlen= 155 [18] FUNC_PROTO '(anon)' ret_type_id=3 vlen=2 179 'arg1' type_id=1 156 'arg1' type_id=1 180 'arg2' type_id=3 157 'arg2' type_id=3 181 [19] FUNC 'my_func' type_id=18 158 [19] FUNC 'my_func' type_id=18 182 [20] VAR 'struct_global_var' type_id=4, link 159 [20] VAR 'struct_global_var' type_id=4, linkage=global-alloc 183 [21] VAR 'global_var' type_id=3, linkage=glo 160 [21] VAR 'global_var' type_id=3, linkage=global-alloc 184 [22] VAR 'my_func.static_var' type_id=3, lin 161 [22] VAR 'my_func.static_var' type_id=3, linkage=static 185 [23] DATASEC 'data_sec' size=0 vlen=3 162 [23] DATASEC 'data_sec' size=0 vlen=3 186 type_id=20 offset=0 size=48 163 type_id=20 offset=0 size=48 187 type_id=21 offset=0 size=4 164 type_id=21 offset=0 size=4 188 type_id=22 offset=52 size=4 165 type_id=22 offset=52 size=4 189 166 190 The following commands print BTF types associa 167 The following commands print BTF types associated with specified map's key, 191 value, both key and value, and all BTF types, 168 value, both key and value, and all BTF types, respectively. By default, both 192 key and value types will be printed. 169 key and value types will be printed. 193 170 194 **# bpftool btf dump map id 123 key** 171 **# bpftool btf dump map id 123 key** 195 172 196 :: 173 :: 197 174 198 [39] TYPEDEF 'u32' type_id=37 175 [39] TYPEDEF 'u32' type_id=37 199 176 200 **# bpftool btf dump map id 123 value** 177 **# bpftool btf dump map id 123 value** 201 178 202 :: 179 :: 203 180 204 [86] PTR '(anon)' type_id=87 181 [86] PTR '(anon)' type_id=87 205 182 206 **# bpftool btf dump map id 123 kv** 183 **# bpftool btf dump map id 123 kv** 207 184 208 :: 185 :: 209 186 210 [39] TYPEDEF 'u32' type_id=37 187 [39] TYPEDEF 'u32' type_id=37 211 [86] PTR '(anon)' type_id=87 188 [86] PTR '(anon)' type_id=87 212 189 213 **# bpftool btf dump map id 123 all** 190 **# bpftool btf dump map id 123 all** 214 191 215 :: 192 :: 216 193 217 [1] PTR '(anon)' type_id=0 194 [1] PTR '(anon)' type_id=0 218 . 195 . 219 . 196 . 220 . 197 . 221 [2866] ARRAY '(anon)' type_id=52 index_type_ 198 [2866] ARRAY '(anon)' type_id=52 index_type_id=51 nr_elems=4 222 199 223 All the standard ways to specify map or progra 200 All the standard ways to specify map or program are supported: 224 201 225 **# bpftool btf dump map id 123** 202 **# bpftool btf dump map id 123** 226 203 227 **# bpftool btf dump map pinned /sys/fs/bpf/ma 204 **# bpftool btf dump map pinned /sys/fs/bpf/map_name** 228 205 229 **# bpftool btf dump prog id 456** 206 **# bpftool btf dump prog id 456** 230 207 231 **# bpftool btf dump prog tag b88e0a09b1d9759d 208 **# bpftool btf dump prog tag b88e0a09b1d9759d** 232 209 233 **# bpftool btf dump prog pinned /sys/fs/bpf/p 210 **# bpftool btf dump prog pinned /sys/fs/bpf/prog_name** 234 211 235 | !! 212 SEE ALSO 236 | **# bpftool btf dump file /sys/kernel/btf/i2 !! 213 ======== 237 | (or) !! 214 **bpf**\ (2), 238 | **# I2C_SMBUS_ID=$(bpftool btf show -p | jq !! 215 **bpf-helpers**\ (7), 239 | **# bpftool btf dump id ${I2C_SMBUS_ID} -B / !! 216 **bpftool**\ (8), 240 !! 217 **bpftool-map**\ (8), 241 :: !! 218 **bpftool-prog**\ (8), 242 !! 219 **bpftool-cgroup**\ (8), 243 [104848] STRUCT 'i2c_smbus_alert' size=40 vl !! 220 **bpftool-feature**\ (8), 244 'alert' type_id=393 bits_offset=0 !! 221 **bpftool-net**\ (8), 245 'ara' type_id=56050 bits_offset=256 !! 222 **bpftool-perf**\ (8) 246 [104849] STRUCT 'alert_data' size=12 vlen=3 << 247 'addr' type_id=16 bits_offset=0 << 248 'type' type_id=56053 bits_offset=32 << 249 'data' type_id=7 bits_offset=64 << 250 [104850] PTR '(anon)' type_id=104848 << 251 [104851] PTR '(anon)' type_id=104849 << 252 [104852] FUNC 'i2c_register_spd' type_id=847 << 253 [104853] FUNC 'smbalert_driver_init' type_id << 254 [104854] FUNC_PROTO '(anon)' ret_type_id=18 << 255 'ara' type_id=56050 << 256 [104855] FUNC 'i2c_handle_smbus_alert' type_ << 257 [104856] FUNC 'smbalert_remove' type_id=1048 << 258 [104857] FUNC_PROTO '(anon)' ret_type_id=18 << 259 'ara' type_id=56050 << 260 'id' type_id=56056 << 261 [104858] FUNC 'smbalert_probe' type_id=10485 << 262 [104859] FUNC 'smbalert_work' type_id=9695 l << 263 [104860] FUNC 'smbus_alert' type_id=71367 li << 264 [104861] FUNC 'smbus_do_alert' type_id=84827 <<
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.