xref: /aosp_15_r20/external/bpftool/docs/bpftool-btf.rst (revision 858ea5e570667251cdc31d3fe7b846b591105938)
1*858ea5e5SAndroid Build Coastguard Worker.. SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2*858ea5e5SAndroid Build Coastguard Worker
3*858ea5e5SAndroid Build Coastguard Worker================
4*858ea5e5SAndroid Build Coastguard Workerbpftool-btf
5*858ea5e5SAndroid Build Coastguard Worker================
6*858ea5e5SAndroid Build Coastguard Worker-------------------------------------------------------------------------------
7*858ea5e5SAndroid Build Coastguard Workertool for inspection of BTF data
8*858ea5e5SAndroid Build Coastguard Worker-------------------------------------------------------------------------------
9*858ea5e5SAndroid Build Coastguard Worker
10*858ea5e5SAndroid Build Coastguard Worker:Manual section: 8
11*858ea5e5SAndroid Build Coastguard Worker
12*858ea5e5SAndroid Build Coastguard Worker.. include:: substitutions.rst
13*858ea5e5SAndroid Build Coastguard Worker
14*858ea5e5SAndroid Build Coastguard WorkerSYNOPSIS
15*858ea5e5SAndroid Build Coastguard Worker========
16*858ea5e5SAndroid Build Coastguard Worker
17*858ea5e5SAndroid Build Coastguard Worker	**bpftool** [*OPTIONS*] **btf** *COMMAND*
18*858ea5e5SAndroid Build Coastguard Worker
19*858ea5e5SAndroid Build Coastguard Worker	*OPTIONS* := { |COMMON_OPTIONS| | { **-B** | **--base-btf** } }
20*858ea5e5SAndroid Build Coastguard Worker
21*858ea5e5SAndroid Build Coastguard Worker	*COMMANDS* := { **dump** | **help** }
22*858ea5e5SAndroid Build Coastguard Worker
23*858ea5e5SAndroid Build Coastguard WorkerBTF COMMANDS
24*858ea5e5SAndroid Build Coastguard Worker=============
25*858ea5e5SAndroid Build Coastguard Worker
26*858ea5e5SAndroid Build Coastguard Worker|	**bpftool** **btf** { **show** | **list** } [**id** *BTF_ID*]
27*858ea5e5SAndroid Build Coastguard Worker|	**bpftool** **btf dump** *BTF_SRC* [**format** *FORMAT*]
28*858ea5e5SAndroid Build Coastguard Worker|	**bpftool** **btf help**
29*858ea5e5SAndroid Build Coastguard Worker|
30*858ea5e5SAndroid Build Coastguard Worker|	*BTF_SRC* := { **id** *BTF_ID* | **prog** *PROG* | **map** *MAP* [{**key** | **value** | **kv** | **all**}] | **file** *FILE* }
31*858ea5e5SAndroid Build Coastguard Worker|	*FORMAT* := { **raw** | **c** }
32*858ea5e5SAndroid Build Coastguard Worker|	*MAP* := { **id** *MAP_ID* | **pinned** *FILE* }
33*858ea5e5SAndroid Build Coastguard Worker|	*PROG* := { **id** *PROG_ID* | **pinned** *FILE* | **tag** *PROG_TAG* }
34*858ea5e5SAndroid Build Coastguard Worker
35*858ea5e5SAndroid Build Coastguard WorkerDESCRIPTION
36*858ea5e5SAndroid Build Coastguard Worker===========
37*858ea5e5SAndroid Build Coastguard Worker	**bpftool btf { show | list }** [**id** *BTF_ID*]
38*858ea5e5SAndroid Build Coastguard Worker		  Show information about loaded BTF objects. If a BTF ID is
39*858ea5e5SAndroid Build Coastguard Worker		  specified, show information only about given BTF object,
40*858ea5e5SAndroid Build Coastguard Worker		  otherwise list all BTF objects currently loaded on the
41*858ea5e5SAndroid Build Coastguard Worker		  system.
42*858ea5e5SAndroid Build Coastguard Worker
43*858ea5e5SAndroid Build Coastguard Worker		  Since Linux 5.8 bpftool is able to discover information about
44*858ea5e5SAndroid Build Coastguard Worker		  processes that hold open file descriptors (FDs) against BTF
45*858ea5e5SAndroid Build Coastguard Worker		  objects. On such kernels bpftool will automatically emit this
46*858ea5e5SAndroid Build Coastguard Worker		  information as well.
47*858ea5e5SAndroid Build Coastguard Worker
48*858ea5e5SAndroid Build Coastguard Worker	**bpftool btf dump** *BTF_SRC*
49*858ea5e5SAndroid Build Coastguard Worker		  Dump BTF entries from a given *BTF_SRC*.
50*858ea5e5SAndroid Build Coastguard Worker
51*858ea5e5SAndroid Build Coastguard Worker		  When **id** is specified, BTF object with that ID will be
52*858ea5e5SAndroid Build Coastguard Worker		  loaded and all its BTF types emitted.
53*858ea5e5SAndroid Build Coastguard Worker
54*858ea5e5SAndroid Build Coastguard Worker		  When **map** is provided, it's expected that map has
55*858ea5e5SAndroid Build Coastguard Worker		  associated BTF object with BTF types describing key and
56*858ea5e5SAndroid Build Coastguard Worker		  value. It's possible to select whether to dump only BTF
57*858ea5e5SAndroid Build Coastguard Worker		  type(s) associated with key (**key**), value (**value**),
58*858ea5e5SAndroid Build Coastguard Worker		  both key and value (**kv**), or all BTF types present in
59*858ea5e5SAndroid Build Coastguard Worker		  associated BTF object (**all**). If not specified, **kv**
60*858ea5e5SAndroid Build Coastguard Worker		  is assumed.
61*858ea5e5SAndroid Build Coastguard Worker
62*858ea5e5SAndroid Build Coastguard Worker		  When **prog** is provided, it's expected that program has
63*858ea5e5SAndroid Build Coastguard Worker		  associated BTF object with BTF types.
64*858ea5e5SAndroid Build Coastguard Worker
65*858ea5e5SAndroid Build Coastguard Worker		  When specifying *FILE*, an ELF file is expected, containing
66*858ea5e5SAndroid Build Coastguard Worker		  .BTF section with well-defined BTF binary format data,
67*858ea5e5SAndroid Build Coastguard Worker		  typically produced by clang or pahole.
68*858ea5e5SAndroid Build Coastguard Worker
69*858ea5e5SAndroid Build Coastguard Worker		  **format** option can be used to override default (raw)
70*858ea5e5SAndroid Build Coastguard Worker		  output format. Raw (**raw**) or C-syntax (**c**) output
71*858ea5e5SAndroid Build Coastguard Worker		  formats are supported.
72*858ea5e5SAndroid Build Coastguard Worker
73*858ea5e5SAndroid Build Coastguard Worker	**bpftool btf help**
74*858ea5e5SAndroid Build Coastguard Worker		  Print short help message.
75*858ea5e5SAndroid Build Coastguard Worker
76*858ea5e5SAndroid Build Coastguard WorkerOPTIONS
77*858ea5e5SAndroid Build Coastguard Worker=======
78*858ea5e5SAndroid Build Coastguard Worker	.. include:: common_options.rst
79*858ea5e5SAndroid Build Coastguard Worker
80*858ea5e5SAndroid Build Coastguard Worker	-B, --base-btf *FILE*
81*858ea5e5SAndroid Build Coastguard Worker		  Pass a base BTF object. Base BTF objects are typically used
82*858ea5e5SAndroid Build Coastguard Worker		  with BTF objects for kernel modules. To avoid duplicating
83*858ea5e5SAndroid Build Coastguard Worker		  all kernel symbols required by modules, BTF objects for
84*858ea5e5SAndroid Build Coastguard Worker		  modules are "split", they are built incrementally on top of
85*858ea5e5SAndroid Build Coastguard Worker		  the kernel (vmlinux) BTF object. So the base BTF reference
86*858ea5e5SAndroid Build Coastguard Worker		  should usually point to the kernel BTF.
87*858ea5e5SAndroid Build Coastguard Worker
88*858ea5e5SAndroid Build Coastguard Worker		  When the main BTF object to process (for example, the
89*858ea5e5SAndroid Build Coastguard Worker		  module BTF to dump) is passed as a *FILE*, bpftool attempts
90*858ea5e5SAndroid Build Coastguard Worker		  to autodetect the path for the base object, and passing
91*858ea5e5SAndroid Build Coastguard Worker		  this option is optional. When the main BTF object is passed
92*858ea5e5SAndroid Build Coastguard Worker		  through other handles, this option becomes necessary.
93*858ea5e5SAndroid Build Coastguard Worker
94*858ea5e5SAndroid Build Coastguard WorkerEXAMPLES
95*858ea5e5SAndroid Build Coastguard Worker========
96*858ea5e5SAndroid Build Coastguard Worker**# bpftool btf dump id 1226**
97*858ea5e5SAndroid Build Coastguard Worker
98*858ea5e5SAndroid Build Coastguard Worker::
99*858ea5e5SAndroid Build Coastguard Worker
100*858ea5e5SAndroid Build Coastguard Worker  [1] PTR '(anon)' type_id=2
101*858ea5e5SAndroid Build Coastguard Worker  [2] STRUCT 'dummy_tracepoint_args' size=16 vlen=2
102*858ea5e5SAndroid Build Coastguard Worker          'pad' type_id=3 bits_offset=0
103*858ea5e5SAndroid Build Coastguard Worker          'sock' type_id=4 bits_offset=64
104*858ea5e5SAndroid Build Coastguard Worker  [3] INT 'long long unsigned int' size=8 bits_offset=0 nr_bits=64 encoding=(none)
105*858ea5e5SAndroid Build Coastguard Worker  [4] PTR '(anon)' type_id=5
106*858ea5e5SAndroid Build Coastguard Worker  [5] FWD 'sock' fwd_kind=union
107*858ea5e5SAndroid Build Coastguard Worker
108*858ea5e5SAndroid Build Coastguard WorkerThis gives an example of default output for all supported BTF kinds.
109*858ea5e5SAndroid Build Coastguard Worker
110*858ea5e5SAndroid Build Coastguard Worker**$ cat prog.c**
111*858ea5e5SAndroid Build Coastguard Worker
112*858ea5e5SAndroid Build Coastguard Worker::
113*858ea5e5SAndroid Build Coastguard Worker
114*858ea5e5SAndroid Build Coastguard Worker  struct fwd_struct;
115*858ea5e5SAndroid Build Coastguard Worker
116*858ea5e5SAndroid Build Coastguard Worker  enum my_enum {
117*858ea5e5SAndroid Build Coastguard Worker          VAL1 = 3,
118*858ea5e5SAndroid Build Coastguard Worker          VAL2 = 7,
119*858ea5e5SAndroid Build Coastguard Worker  };
120*858ea5e5SAndroid Build Coastguard Worker
121*858ea5e5SAndroid Build Coastguard Worker  typedef struct my_struct my_struct_t;
122*858ea5e5SAndroid Build Coastguard Worker
123*858ea5e5SAndroid Build Coastguard Worker  struct my_struct {
124*858ea5e5SAndroid Build Coastguard Worker          const unsigned int const_int_field;
125*858ea5e5SAndroid Build Coastguard Worker          int bitfield_field: 4;
126*858ea5e5SAndroid Build Coastguard Worker          char arr_field[16];
127*858ea5e5SAndroid Build Coastguard Worker          const struct fwd_struct *restrict fwd_field;
128*858ea5e5SAndroid Build Coastguard Worker          enum my_enum enum_field;
129*858ea5e5SAndroid Build Coastguard Worker          volatile my_struct_t *typedef_ptr_field;
130*858ea5e5SAndroid Build Coastguard Worker  };
131*858ea5e5SAndroid Build Coastguard Worker
132*858ea5e5SAndroid Build Coastguard Worker  union my_union {
133*858ea5e5SAndroid Build Coastguard Worker          int a;
134*858ea5e5SAndroid Build Coastguard Worker          struct my_struct b;
135*858ea5e5SAndroid Build Coastguard Worker  };
136*858ea5e5SAndroid Build Coastguard Worker
137*858ea5e5SAndroid Build Coastguard Worker  struct my_struct struct_global_var __attribute__((section("data_sec"))) = {
138*858ea5e5SAndroid Build Coastguard Worker          .bitfield_field = 3,
139*858ea5e5SAndroid Build Coastguard Worker          .enum_field = VAL1,
140*858ea5e5SAndroid Build Coastguard Worker  };
141*858ea5e5SAndroid Build Coastguard Worker  int global_var __attribute__((section("data_sec"))) = 7;
142*858ea5e5SAndroid Build Coastguard Worker
143*858ea5e5SAndroid Build Coastguard Worker  __attribute__((noinline))
144*858ea5e5SAndroid Build Coastguard Worker  int my_func(union my_union *arg1, int arg2)
145*858ea5e5SAndroid Build Coastguard Worker  {
146*858ea5e5SAndroid Build Coastguard Worker          static int static_var __attribute__((section("data_sec"))) = 123;
147*858ea5e5SAndroid Build Coastguard Worker          static_var++;
148*858ea5e5SAndroid Build Coastguard Worker          return static_var;
149*858ea5e5SAndroid Build Coastguard Worker  }
150*858ea5e5SAndroid Build Coastguard Worker
151*858ea5e5SAndroid Build Coastguard Worker**$ bpftool btf dump file prog.o**
152*858ea5e5SAndroid Build Coastguard Worker
153*858ea5e5SAndroid Build Coastguard Worker::
154*858ea5e5SAndroid Build Coastguard Worker
155*858ea5e5SAndroid Build Coastguard Worker  [1] PTR '(anon)' type_id=2
156*858ea5e5SAndroid Build Coastguard Worker  [2] UNION 'my_union' size=48 vlen=2
157*858ea5e5SAndroid Build Coastguard Worker          'a' type_id=3 bits_offset=0
158*858ea5e5SAndroid Build Coastguard Worker          'b' type_id=4 bits_offset=0
159*858ea5e5SAndroid Build Coastguard Worker  [3] INT 'int' size=4 bits_offset=0 nr_bits=32 encoding=SIGNED
160*858ea5e5SAndroid Build Coastguard Worker  [4] STRUCT 'my_struct' size=48 vlen=6
161*858ea5e5SAndroid Build Coastguard Worker          'const_int_field' type_id=5 bits_offset=0
162*858ea5e5SAndroid Build Coastguard Worker          'bitfield_field' type_id=3 bits_offset=32 bitfield_size=4
163*858ea5e5SAndroid Build Coastguard Worker          'arr_field' type_id=8 bits_offset=40
164*858ea5e5SAndroid Build Coastguard Worker          'fwd_field' type_id=10 bits_offset=192
165*858ea5e5SAndroid Build Coastguard Worker          'enum_field' type_id=14 bits_offset=256
166*858ea5e5SAndroid Build Coastguard Worker          'typedef_ptr_field' type_id=15 bits_offset=320
167*858ea5e5SAndroid Build Coastguard Worker  [5] CONST '(anon)' type_id=6
168*858ea5e5SAndroid Build Coastguard Worker  [6] INT 'unsigned int' size=4 bits_offset=0 nr_bits=32 encoding=(none)
169*858ea5e5SAndroid Build Coastguard Worker  [7] INT 'char' size=1 bits_offset=0 nr_bits=8 encoding=SIGNED
170*858ea5e5SAndroid Build Coastguard Worker  [8] ARRAY '(anon)' type_id=7 index_type_id=9 nr_elems=16
171*858ea5e5SAndroid Build Coastguard Worker  [9] INT '__ARRAY_SIZE_TYPE__' size=4 bits_offset=0 nr_bits=32 encoding=(none)
172*858ea5e5SAndroid Build Coastguard Worker  [10] RESTRICT '(anon)' type_id=11
173*858ea5e5SAndroid Build Coastguard Worker  [11] PTR '(anon)' type_id=12
174*858ea5e5SAndroid Build Coastguard Worker  [12] CONST '(anon)' type_id=13
175*858ea5e5SAndroid Build Coastguard Worker  [13] FWD 'fwd_struct' fwd_kind=union
176*858ea5e5SAndroid Build Coastguard Worker  [14] ENUM 'my_enum' size=4 vlen=2
177*858ea5e5SAndroid Build Coastguard Worker          'VAL1' val=3
178*858ea5e5SAndroid Build Coastguard Worker          'VAL2' val=7
179*858ea5e5SAndroid Build Coastguard Worker  [15] PTR '(anon)' type_id=16
180*858ea5e5SAndroid Build Coastguard Worker  [16] VOLATILE '(anon)' type_id=17
181*858ea5e5SAndroid Build Coastguard Worker  [17] TYPEDEF 'my_struct_t' type_id=4
182*858ea5e5SAndroid Build Coastguard Worker  [18] FUNC_PROTO '(anon)' ret_type_id=3 vlen=2
183*858ea5e5SAndroid Build Coastguard Worker          'arg1' type_id=1
184*858ea5e5SAndroid Build Coastguard Worker          'arg2' type_id=3
185*858ea5e5SAndroid Build Coastguard Worker  [19] FUNC 'my_func' type_id=18
186*858ea5e5SAndroid Build Coastguard Worker  [20] VAR 'struct_global_var' type_id=4, linkage=global-alloc
187*858ea5e5SAndroid Build Coastguard Worker  [21] VAR 'global_var' type_id=3, linkage=global-alloc
188*858ea5e5SAndroid Build Coastguard Worker  [22] VAR 'my_func.static_var' type_id=3, linkage=static
189*858ea5e5SAndroid Build Coastguard Worker  [23] DATASEC 'data_sec' size=0 vlen=3
190*858ea5e5SAndroid Build Coastguard Worker          type_id=20 offset=0 size=48
191*858ea5e5SAndroid Build Coastguard Worker          type_id=21 offset=0 size=4
192*858ea5e5SAndroid Build Coastguard Worker          type_id=22 offset=52 size=4
193*858ea5e5SAndroid Build Coastguard Worker
194*858ea5e5SAndroid Build Coastguard WorkerThe following commands print BTF types associated with specified map's key,
195*858ea5e5SAndroid Build Coastguard Workervalue, both key and value, and all BTF types, respectively. By default, both
196*858ea5e5SAndroid Build Coastguard Workerkey and value types will be printed.
197*858ea5e5SAndroid Build Coastguard Worker
198*858ea5e5SAndroid Build Coastguard Worker**# bpftool btf dump map id 123 key**
199*858ea5e5SAndroid Build Coastguard Worker
200*858ea5e5SAndroid Build Coastguard Worker::
201*858ea5e5SAndroid Build Coastguard Worker
202*858ea5e5SAndroid Build Coastguard Worker  [39] TYPEDEF 'u32' type_id=37
203*858ea5e5SAndroid Build Coastguard Worker
204*858ea5e5SAndroid Build Coastguard Worker**# bpftool btf dump map id 123 value**
205*858ea5e5SAndroid Build Coastguard Worker
206*858ea5e5SAndroid Build Coastguard Worker::
207*858ea5e5SAndroid Build Coastguard Worker
208*858ea5e5SAndroid Build Coastguard Worker  [86] PTR '(anon)' type_id=87
209*858ea5e5SAndroid Build Coastguard Worker
210*858ea5e5SAndroid Build Coastguard Worker**# bpftool btf dump map id 123 kv**
211*858ea5e5SAndroid Build Coastguard Worker
212*858ea5e5SAndroid Build Coastguard Worker::
213*858ea5e5SAndroid Build Coastguard Worker
214*858ea5e5SAndroid Build Coastguard Worker  [39] TYPEDEF 'u32' type_id=37
215*858ea5e5SAndroid Build Coastguard Worker  [86] PTR '(anon)' type_id=87
216*858ea5e5SAndroid Build Coastguard Worker
217*858ea5e5SAndroid Build Coastguard Worker**# bpftool btf dump map id 123 all**
218*858ea5e5SAndroid Build Coastguard Worker
219*858ea5e5SAndroid Build Coastguard Worker::
220*858ea5e5SAndroid Build Coastguard Worker
221*858ea5e5SAndroid Build Coastguard Worker  [1] PTR '(anon)' type_id=0
222*858ea5e5SAndroid Build Coastguard Worker  .
223*858ea5e5SAndroid Build Coastguard Worker  .
224*858ea5e5SAndroid Build Coastguard Worker  .
225*858ea5e5SAndroid Build Coastguard Worker  [2866] ARRAY '(anon)' type_id=52 index_type_id=51 nr_elems=4
226*858ea5e5SAndroid Build Coastguard Worker
227*858ea5e5SAndroid Build Coastguard WorkerAll the standard ways to specify map or program are supported:
228*858ea5e5SAndroid Build Coastguard Worker
229*858ea5e5SAndroid Build Coastguard Worker**# bpftool btf dump map id 123**
230*858ea5e5SAndroid Build Coastguard Worker
231*858ea5e5SAndroid Build Coastguard Worker**# bpftool btf dump map pinned /sys/fs/bpf/map_name**
232*858ea5e5SAndroid Build Coastguard Worker
233*858ea5e5SAndroid Build Coastguard Worker**# bpftool btf dump prog id 456**
234*858ea5e5SAndroid Build Coastguard Worker
235*858ea5e5SAndroid Build Coastguard Worker**# bpftool btf dump prog tag b88e0a09b1d9759d**
236*858ea5e5SAndroid Build Coastguard Worker
237*858ea5e5SAndroid Build Coastguard Worker**# bpftool btf dump prog pinned /sys/fs/bpf/prog_name**
238*858ea5e5SAndroid Build Coastguard Worker
239*858ea5e5SAndroid Build Coastguard Worker|
240*858ea5e5SAndroid Build Coastguard Worker| **# bpftool btf dump file /sys/kernel/btf/i2c_smbus**
241*858ea5e5SAndroid Build Coastguard Worker| (or)
242*858ea5e5SAndroid Build Coastguard Worker| **# I2C_SMBUS_ID=$(bpftool btf show -p | jq '.[] | select(.name=="i2c_smbus").id')**
243*858ea5e5SAndroid Build Coastguard Worker| **# bpftool btf dump id ${I2C_SMBUS_ID} -B /sys/kernel/btf/vmlinux**
244*858ea5e5SAndroid Build Coastguard Worker
245*858ea5e5SAndroid Build Coastguard Worker::
246*858ea5e5SAndroid Build Coastguard Worker
247*858ea5e5SAndroid Build Coastguard Worker  [104848] STRUCT 'i2c_smbus_alert' size=40 vlen=2
248*858ea5e5SAndroid Build Coastguard Worker          'alert' type_id=393 bits_offset=0
249*858ea5e5SAndroid Build Coastguard Worker          'ara' type_id=56050 bits_offset=256
250*858ea5e5SAndroid Build Coastguard Worker  [104849] STRUCT 'alert_data' size=12 vlen=3
251*858ea5e5SAndroid Build Coastguard Worker          'addr' type_id=16 bits_offset=0
252*858ea5e5SAndroid Build Coastguard Worker          'type' type_id=56053 bits_offset=32
253*858ea5e5SAndroid Build Coastguard Worker          'data' type_id=7 bits_offset=64
254*858ea5e5SAndroid Build Coastguard Worker  [104850] PTR '(anon)' type_id=104848
255*858ea5e5SAndroid Build Coastguard Worker  [104851] PTR '(anon)' type_id=104849
256*858ea5e5SAndroid Build Coastguard Worker  [104852] FUNC 'i2c_register_spd' type_id=84745 linkage=static
257*858ea5e5SAndroid Build Coastguard Worker  [104853] FUNC 'smbalert_driver_init' type_id=1213 linkage=static
258*858ea5e5SAndroid Build Coastguard Worker  [104854] FUNC_PROTO '(anon)' ret_type_id=18 vlen=1
259*858ea5e5SAndroid Build Coastguard Worker          'ara' type_id=56050
260*858ea5e5SAndroid Build Coastguard Worker  [104855] FUNC 'i2c_handle_smbus_alert' type_id=104854 linkage=static
261*858ea5e5SAndroid Build Coastguard Worker  [104856] FUNC 'smbalert_remove' type_id=104854 linkage=static
262*858ea5e5SAndroid Build Coastguard Worker  [104857] FUNC_PROTO '(anon)' ret_type_id=18 vlen=2
263*858ea5e5SAndroid Build Coastguard Worker          'ara' type_id=56050
264*858ea5e5SAndroid Build Coastguard Worker          'id' type_id=56056
265*858ea5e5SAndroid Build Coastguard Worker  [104858] FUNC 'smbalert_probe' type_id=104857 linkage=static
266*858ea5e5SAndroid Build Coastguard Worker  [104859] FUNC 'smbalert_work' type_id=9695 linkage=static
267*858ea5e5SAndroid Build Coastguard Worker  [104860] FUNC 'smbus_alert' type_id=71367 linkage=static
268*858ea5e5SAndroid Build Coastguard Worker  [104861] FUNC 'smbus_do_alert' type_id=84827 linkage=static
269