1BPFTOOL-BTF(8) BPFTOOL-BTF(8)
2
3
4
6 bpftool-btf - tool for inspection of BTF data
7
9 bpftool [OPTIONS] btf COMMAND
10
11 OPTIONS := { { -j | --json } [{ -p | --pretty }] }
12
13 COMMANDS := { dump | help }
14
16 bpftool btf { show | list } [id BTF_ID]
17 bpftool btf dump BTF_SRC [format FORMAT]
18 bpftool btf help
19
20 BTF_SRC := { id BTF_ID | prog PROG | map MAP [{key | value | kv | all}] | file FILE }
21 FORMAT := { raw | c }
22 MAP := { id MAP_ID | pinned FILE }
23 PROG := { id PROG_ID | pinned FILE | tag PROG_TAG }
24
25
27 bpftool btf { show | list } [id BTF_ID]
28 Show information about loaded BTF objects. If a BTF ID is
29 specified, show information only about given BTF object, oth‐
30 erwise list all BTF objects currently loaded on the system.
31
32 Since Linux 5.8 bpftool is able to discover information about
33 processes that hold open file descriptors (FDs) against BTF
34 objects. On such kernels bpftool will automatically emit this
35 information as well.
36
37 bpftool btf dump BTF_SRC
38 Dump BTF entries from a given BTF_SRC.
39
40 When id is specified, BTF object with that ID will be loaded
41 and all its BTF types emitted.
42
43 When map is provided, it's expected that map has associated
44 BTF object with BTF types describing key and value. It's pos‐
45 sible to select whether to dump only BTF type(s) associated
46 with key (key), value (value), both key and value (kv), or
47 all BTF types present in associated BTF object (all). If not
48 specified, kv is assumed.
49
50 When prog is provided, it's expected that program has associ‐
51 ated BTF object with BTF types.
52
53 When specifying FILE, an ELF file is expected, containing
54 .BTF section with well-defined BTF binary format data, typi‐
55 cally produced by clang or pahole.
56
57 format option can be used to override default (raw) output
58 format. Raw (raw) or C-syntax (c) output formats are sup‐
59 ported.
60
61 bpftool btf help
62 Print short help message.
63
65 -h, --help
66 Print short help message (similar to bpftool help).
67
68 -V, --version
69 Print version number (similar to bpftool version), and
70 optional features that were included when bpftool was com‐
71 piled. Optional features include linking against libbfd to
72 provide the disassembler for JIT-ted programs (bpftool prog
73 dump jited) and usage of BPF skeletons (some features like
74 bpftool prog profile or showing pids associated to BPF
75 objects may rely on it).
76
77 -j, --json
78 Generate JSON output. For commands that cannot produce JSON,
79 this option has no effect.
80
81 -p, --pretty
82 Generate human-readable JSON output. Implies -j.
83
84 -d, --debug
85 Print all logs available, even debug-level information. This
86 includes logs from libbpf as well as from the verifier, when
87 attempting to load programs.
88
90 # bpftool btf dump id 1226
91
92 [1] PTR '(anon)' type_id=2
93 [2] STRUCT 'dummy_tracepoint_args' size=16 vlen=2
94 'pad' type_id=3 bits_offset=0
95 'sock' type_id=4 bits_offset=64
96 [3] INT 'long long unsigned int' size=8 bits_offset=0 nr_bits=64 encoding=(none)
97 [4] PTR '(anon)' type_id=5
98 [5] FWD 'sock' fwd_kind=union
99
100 This gives an example of default output for all supported BTF kinds.
101
102 $ cat prog.c
103
104 struct fwd_struct;
105
106 enum my_enum {
107 VAL1 = 3,
108 VAL2 = 7,
109 };
110
111 typedef struct my_struct my_struct_t;
112
113 struct my_struct {
114 const unsigned int const_int_field;
115 int bitfield_field: 4;
116 char arr_field[16];
117 const struct fwd_struct *restrict fwd_field;
118 enum my_enum enum_field;
119 volatile my_struct_t *typedef_ptr_field;
120 };
121
122 union my_union {
123 int a;
124 struct my_struct b;
125 };
126
127 struct my_struct struct_global_var __attribute__((section("data_sec"))) = {
128 .bitfield_field = 3,
129 .enum_field = VAL1,
130 };
131 int global_var __attribute__((section("data_sec"))) = 7;
132
133 __attribute__((noinline))
134 int my_func(union my_union *arg1, int arg2)
135 {
136 static int static_var __attribute__((section("data_sec"))) = 123;
137 static_var++;
138 return static_var;
139 }
140
141 $ bpftool btf dump file prog.o
142
143 [1] PTR '(anon)' type_id=2
144 [2] UNION 'my_union' size=48 vlen=2
145 'a' type_id=3 bits_offset=0
146 'b' type_id=4 bits_offset=0
147 [3] INT 'int' size=4 bits_offset=0 nr_bits=32 encoding=SIGNED
148 [4] STRUCT 'my_struct' size=48 vlen=6
149 'const_int_field' type_id=5 bits_offset=0
150 'bitfield_field' type_id=3 bits_offset=32 bitfield_size=4
151 'arr_field' type_id=8 bits_offset=40
152 'fwd_field' type_id=10 bits_offset=192
153 'enum_field' type_id=14 bits_offset=256
154 'typedef_ptr_field' type_id=15 bits_offset=320
155 [5] CONST '(anon)' type_id=6
156 [6] INT 'unsigned int' size=4 bits_offset=0 nr_bits=32 encoding=(none)
157 [7] INT 'char' size=1 bits_offset=0 nr_bits=8 encoding=SIGNED
158 [8] ARRAY '(anon)' type_id=7 index_type_id=9 nr_elems=16
159 [9] INT '__ARRAY_SIZE_TYPE__' size=4 bits_offset=0 nr_bits=32 encoding=(none)
160 [10] RESTRICT '(anon)' type_id=11
161 [11] PTR '(anon)' type_id=12
162 [12] CONST '(anon)' type_id=13
163 [13] FWD 'fwd_struct' fwd_kind=union
164 [14] ENUM 'my_enum' size=4 vlen=2
165 'VAL1' val=3
166 'VAL2' val=7
167 [15] PTR '(anon)' type_id=16
168 [16] VOLATILE '(anon)' type_id=17
169 [17] TYPEDEF 'my_struct_t' type_id=4
170 [18] FUNC_PROTO '(anon)' ret_type_id=3 vlen=2
171 'arg1' type_id=1
172 'arg2' type_id=3
173 [19] FUNC 'my_func' type_id=18
174 [20] VAR 'struct_global_var' type_id=4, linkage=global-alloc
175 [21] VAR 'global_var' type_id=3, linkage=global-alloc
176 [22] VAR 'my_func.static_var' type_id=3, linkage=static
177 [23] DATASEC 'data_sec' size=0 vlen=3
178 type_id=20 offset=0 size=48
179 type_id=21 offset=0 size=4
180 type_id=22 offset=52 size=4
181
182 The following commands print BTF types associated with specified map's
183 key, value, both key and value, and all BTF types, respectively. By
184 default, both key and value types will be printed.
185
186 # bpftool btf dump map id 123 key
187
188 [39] TYPEDEF 'u32' type_id=37
189
190 # bpftool btf dump map id 123 value
191
192 [86] PTR '(anon)' type_id=87
193
194 # bpftool btf dump map id 123 kv
195
196 [39] TYPEDEF 'u32' type_id=37
197 [86] PTR '(anon)' type_id=87
198
199 # bpftool btf dump map id 123 all
200
201 [1] PTR '(anon)' type_id=0
202 .
203 .
204 .
205 [2866] ARRAY '(anon)' type_id=52 index_type_id=51 nr_elems=4
206
207 All the standard ways to specify map or program are supported:
208
209 # bpftool btf dump map id 123
210
211 # bpftool btf dump map pinned /sys/fs/bpf/map_name
212
213 # bpftool btf dump prog id 456
214
215 # bpftool btf dump prog tag b88e0a09b1d9759d
216
217 # bpftool btf dump prog pinned /sys/fs/bpf/prog_name
218
220 bpf(2), bpf-helpers(7), bpftool(8), bpftool-cgroup(8), bpftool-fea‐
221 ture(8), bpftool-gen(8), bpftool-iter(8), bpftool-link(8),
222 bpftool-map(8), bpftool-net(8), bpftool-perf(8), bpftool-prog(8),
223 bpftool-struct_ops(8)
224
225
226
227
228 BPFTOOL-BTF(8)