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