1BPFTOOL-BTF(8)                                                  BPFTOOL-BTF(8)
2
3
4

NAME

6       bpftool-btf - tool for inspection of BTF data
7

SYNOPSIS

9          bpftool [OPTIONS] btf COMMAND
10
11          OPTIONS := { { -j | --json } [{ -p | --pretty }] }
12
13          COMMANDS := { dump | help }
14

BTF COMMANDS

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

DESCRIPTION

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

OPTIONS

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

EXAMPLES

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

SEE ALSO

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)
Impressum