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 { 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

DESCRIPTION

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          bpftool btf dump BTF_SRC
33                 Dump BTF entries from a given BTF_SRC.
34
35                 When  id is specified, BTF object with that ID will be loaded
36                 and all its BTF types emitted.
37
38                 When map is provided, it's expected that map  has  associated
39                 BTF object with BTF types describing key and value. It's pos‐
40                 sible to select whether to dump only BTF  type(s)  associated
41                 with  key  (key),  value (value), both key and value (kv), or
42                 all BTF types present in associated BTF object (all). If  not
43                 specified, kv is assumed.
44
45                 When prog is provided, it's expected that program has associ‐
46                 ated BTF object with BTF types.
47
48                 When specifying FILE, an ELF  file  is  expected,  containing
49                 typically produced by clang or pahole.
50
51                 format  option  can  be used to override default (raw) output
52                 format. Raw (raw) or C-syntax (c)  output  formats  are  sup‐
53                 ported.
54
55          bpftool btf help
56                 Print short help message.
57

OPTIONS

59          -h, --help
60                 Print short generic help message (similar to bpftool help).
61
62          -V, --version
63                 Print version number (similar to bpftool version).
64
65          -j, --json
66                 Generate  JSON output. For commands that cannot produce JSON,
67                 this option has no effect.
68
69          -p, --pretty
70                 Generate human-readable JSON output. Implies -j.
71
72          -d, --debug
73                 Print all logs available from libbpf,  including  debug-level
74                 information.
75

EXAMPLES

77       # bpftool btf dump id 1226
78
79          [1] PTR '(anon)' type_id=2
80          [2] STRUCT 'dummy_tracepoint_args' size=16 vlen=2
81                  'pad' type_id=3 bits_offset=0
82                  'sock' type_id=4 bits_offset=64
83          [3] INT 'long long unsigned int' size=8 bits_offset=0 nr_bits=64 encoding=(none)
84          [4] PTR '(anon)' type_id=5
85          [5] FWD 'sock' fwd_kind=union
86
87       This gives an example of default output for all supported BTF kinds.
88
89       $ cat prog.c
90
91          struct fwd_struct;
92
93          enum my_enum {
94                  VAL1 = 3,
95                  VAL2 = 7,
96          };
97
98          typedef struct my_struct my_struct_t;
99
100          struct my_struct {
101                  const unsigned int const_int_field;
102                  int bitfield_field: 4;
103                  char arr_field[16];
104                  const struct fwd_struct *restrict fwd_field;
105                  enum my_enum enum_field;
106                  volatile my_struct_t *typedef_ptr_field;
107          };
108
109          union my_union {
110                  int a;
111                  struct my_struct b;
112          };
113
114          struct my_struct struct_global_var __attribute__((section("data_sec"))) = {
115                  .bitfield_field = 3,
116                  .enum_field = VAL1,
117          };
118          int global_var __attribute__((section("data_sec"))) = 7;
119
120          __attribute__((noinline))
121          int my_func(union my_union *arg1, int arg2)
122          {
123                  static int static_var __attribute__((section("data_sec"))) = 123;
124                  static_var++;
125                  return static_var;
126          }
127
128       $ bpftool btf dump file prog.o
129
130          [1] PTR '(anon)' type_id=2
131          [2] UNION 'my_union' size=48 vlen=2
132                  'a' type_id=3 bits_offset=0
133                  'b' type_id=4 bits_offset=0
134          [3] INT 'int' size=4 bits_offset=0 nr_bits=32 encoding=SIGNED
135          [4] STRUCT 'my_struct' size=48 vlen=6
136                  'const_int_field' type_id=5 bits_offset=0
137                  'bitfield_field' type_id=3 bits_offset=32 bitfield_size=4
138                  'arr_field' type_id=8 bits_offset=40
139                  'fwd_field' type_id=10 bits_offset=192
140                  'enum_field' type_id=14 bits_offset=256
141                  'typedef_ptr_field' type_id=15 bits_offset=320
142          [5] CONST '(anon)' type_id=6
143          [6] INT 'unsigned int' size=4 bits_offset=0 nr_bits=32 encoding=(none)
144          [7] INT 'char' size=1 bits_offset=0 nr_bits=8 encoding=SIGNED
145          [8] ARRAY '(anon)' type_id=7 index_type_id=9 nr_elems=16
146          [9] INT '__ARRAY_SIZE_TYPE__' size=4 bits_offset=0 nr_bits=32 encoding=(none)
147          [10] RESTRICT '(anon)' type_id=11
148          [11] PTR '(anon)' type_id=12
149          [12] CONST '(anon)' type_id=13
150          [13] FWD 'fwd_struct' fwd_kind=union
151          [14] ENUM 'my_enum' size=4 vlen=2
152                  'VAL1' val=3
153                  'VAL2' val=7
154          [15] PTR '(anon)' type_id=16
155          [16] VOLATILE '(anon)' type_id=17
156          [17] TYPEDEF 'my_struct_t' type_id=4
157          [18] FUNC_PROTO '(anon)' ret_type_id=3 vlen=2
158                  'arg1' type_id=1
159                  'arg2' type_id=3
160          [19] FUNC 'my_func' type_id=18
161          [20] VAR 'struct_global_var' type_id=4, linkage=global-alloc
162          [21] VAR 'global_var' type_id=3, linkage=global-alloc
163          [22] VAR 'my_func.static_var' type_id=3, linkage=static
164          [23] DATASEC 'data_sec' size=0 vlen=3
165                  type_id=20 offset=0 size=48
166                  type_id=21 offset=0 size=4
167                  type_id=22 offset=52 size=4
168
169       The  following commands print BTF types associated with specified map's
170       key, value, both key and value, and all  BTF  types,  respectively.  By
171       default, both key and value types will be printed.
172
173       # bpftool btf dump map id 123 key
174
175          [39] TYPEDEF 'u32' type_id=37
176
177       # bpftool btf dump map id 123 value
178
179          [86] PTR '(anon)' type_id=87
180
181       # bpftool btf dump map id 123 kv
182
183          [39] TYPEDEF 'u32' type_id=37
184          [86] PTR '(anon)' type_id=87
185
186       # bpftool btf dump map id 123 all
187
188          [1] PTR '(anon)' type_id=0
189          .
190          .
191          .
192          [2866] ARRAY '(anon)' type_id=52 index_type_id=51 nr_elems=4
193
194       All the standard ways to specify map or program are supported:
195
196       # bpftool btf dump map id 123
197
198       # bpftool btf dump map pinned /sys/fs/bpf/map_name
199
200       # bpftool btf dump prog id 456
201
202       # bpftool btf dump prog tag b88e0a09b1d9759d
203
204       # bpftool btf dump prog pinned /sys/fs/bpf/prog_name
205

SEE ALSO

207          bpf(2), bpf-helpers(7), bpftool(8), bpftool-map(8), bpftool-prog(8),
208          bpftool-cgroup(8),        bpftool-feature(8),        bpftool-net(8),
209          bpftool-perf(8)
210
211
212
213
214                                                                BPFTOOL-BTF(8)
Impressum