Line | Count | Source |
1 | | /* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */ |
2 | | /* Copyright (c) 2018 Facebook */ |
3 | | /*! \file */ |
4 | | |
5 | | #ifndef __LIBBPF_BTF_H |
6 | | #define __LIBBPF_BTF_H |
7 | | |
8 | | #include <stdarg.h> |
9 | | #include <stdbool.h> |
10 | | #include <linux/btf.h> |
11 | | #include <linux/types.h> |
12 | | |
13 | | #include "libbpf_common.h" |
14 | | |
15 | | #ifdef __cplusplus |
16 | | extern "C" { |
17 | | #endif |
18 | | |
19 | 57.4k | #define BTF_ELF_SEC ".BTF" |
20 | 52.8k | #define BTF_EXT_ELF_SEC ".BTF.ext" |
21 | 0 | #define BTF_BASE_ELF_SEC ".BTF.base" |
22 | 56.5k | #define MAPS_ELF_SEC ".maps" |
23 | | |
24 | | struct btf; |
25 | | struct btf_ext; |
26 | | struct btf_type; |
27 | | |
28 | | struct bpf_object; |
29 | | |
30 | | enum btf_endianness { |
31 | | BTF_LITTLE_ENDIAN = 0, |
32 | | BTF_BIG_ENDIAN = 1, |
33 | | }; |
34 | | |
35 | | /** |
36 | | * @brief **btf__free()** frees all data of a BTF object |
37 | | * @param btf BTF object to free |
38 | | */ |
39 | | LIBBPF_API void btf__free(struct btf *btf); |
40 | | |
41 | | /** |
42 | | * @brief **btf__new()** creates a new instance of a BTF object from the raw |
43 | | * bytes of an ELF's BTF section |
44 | | * @param data raw bytes |
45 | | * @param size number of bytes passed in `data` |
46 | | * @return new BTF object instance which has to be eventually freed with |
47 | | * **btf__free()** |
48 | | * |
49 | | * On error, error-code-encoded-as-pointer is returned, not a NULL. To extract |
50 | | * error code from such a pointer `libbpf_get_error()` should be used. If |
51 | | * `libbpf_set_strict_mode(LIBBPF_STRICT_CLEAN_PTRS)` is enabled, NULL is |
52 | | * returned on error instead. In both cases thread-local `errno` variable is |
53 | | * always set to error code as well. |
54 | | */ |
55 | | LIBBPF_API struct btf *btf__new(const void *data, __u32 size); |
56 | | |
57 | | /** |
58 | | * @brief **btf__new_split()** create a new instance of a BTF object from the |
59 | | * provided raw data bytes. It takes another BTF instance, **base_btf**, which |
60 | | * serves as a base BTF, which is extended by types in a newly created BTF |
61 | | * instance |
62 | | * @param data raw bytes |
63 | | * @param size length of raw bytes |
64 | | * @param base_btf the base BTF object |
65 | | * @return new BTF object instance which has to be eventually freed with |
66 | | * **btf__free()** |
67 | | * |
68 | | * If *base_btf* is NULL, `btf__new_split()` is equivalent to `btf__new()` and |
69 | | * creates non-split BTF. |
70 | | * |
71 | | * On error, error-code-encoded-as-pointer is returned, not a NULL. To extract |
72 | | * error code from such a pointer `libbpf_get_error()` should be used. If |
73 | | * `libbpf_set_strict_mode(LIBBPF_STRICT_CLEAN_PTRS)` is enabled, NULL is |
74 | | * returned on error instead. In both cases thread-local `errno` variable is |
75 | | * always set to error code as well. |
76 | | */ |
77 | | LIBBPF_API struct btf *btf__new_split(const void *data, __u32 size, struct btf *base_btf); |
78 | | |
79 | | /** |
80 | | * @brief **btf__new_empty()** creates an empty BTF object. Use |
81 | | * `btf__add_*()` to populate such BTF object. |
82 | | * @return new BTF object instance which has to be eventually freed with |
83 | | * **btf__free()** |
84 | | * |
85 | | * On error, error-code-encoded-as-pointer is returned, not a NULL. To extract |
86 | | * error code from such a pointer `libbpf_get_error()` should be used. If |
87 | | * `libbpf_set_strict_mode(LIBBPF_STRICT_CLEAN_PTRS)` is enabled, NULL is |
88 | | * returned on error instead. In both cases thread-local `errno` variable is |
89 | | * always set to error code as well. |
90 | | */ |
91 | | LIBBPF_API struct btf *btf__new_empty(void); |
92 | | |
93 | | /** |
94 | | * @brief **btf__new_empty_split()** creates an unpopulated BTF object from an |
95 | | * ELF BTF section except with a base BTF on top of which split BTF should be |
96 | | * based |
97 | | * @param base_btf base BTF object |
98 | | * @return new BTF object instance which has to be eventually freed with |
99 | | * **btf__free()** |
100 | | * |
101 | | * If *base_btf* is NULL, `btf__new_empty_split()` is equivalent to |
102 | | * `btf__new_empty()` and creates non-split BTF. |
103 | | * |
104 | | * On error, error-code-encoded-as-pointer is returned, not a NULL. To extract |
105 | | * error code from such a pointer `libbpf_get_error()` should be used. If |
106 | | * `libbpf_set_strict_mode(LIBBPF_STRICT_CLEAN_PTRS)` is enabled, NULL is |
107 | | * returned on error instead. In both cases thread-local `errno` variable is |
108 | | * always set to error code as well. |
109 | | */ |
110 | | LIBBPF_API struct btf *btf__new_empty_split(struct btf *base_btf); |
111 | | |
112 | | struct btf_new_opts { |
113 | | size_t sz; |
114 | | struct btf *base_btf; /* optional base BTF */ |
115 | | bool add_layout; /* add BTF layout information */ |
116 | | size_t:0; |
117 | | }; |
118 | | #define btf_new_opts__last_field add_layout |
119 | | |
120 | | /** |
121 | | * @brief **btf__new_empty_opts()** creates an unpopulated BTF object with |
122 | | * optional *base_btf* and BTF kind layout description if *add_layout* |
123 | | * is set |
124 | | * @return new BTF object instance which has to be eventually freed with |
125 | | * **btf__free()** |
126 | | * |
127 | | * On error, NULL is returned and the thread-local `errno` variable is |
128 | | * set to the error code. |
129 | | */ |
130 | | LIBBPF_API struct btf *btf__new_empty_opts(struct btf_new_opts *opts); |
131 | | |
132 | | /** |
133 | | * @brief **btf__distill_base()** creates new versions of the split BTF |
134 | | * *src_btf* and its base BTF. The new base BTF will only contain the types |
135 | | * needed to improve robustness of the split BTF to small changes in base BTF. |
136 | | * When that split BTF is loaded against a (possibly changed) base, this |
137 | | * distilled base BTF will help update references to that (possibly changed) |
138 | | * base BTF. |
139 | | * @param src_btf source split BTF object |
140 | | * @param new_base_btf pointer to where the new base BTF object pointer will be stored |
141 | | * @param new_split_btf pointer to where the new split BTF object pointer will be stored |
142 | | * @return 0 on success; negative error code, otherwise |
143 | | * |
144 | | * Both the new split and its associated new base BTF must be freed by |
145 | | * the caller. |
146 | | * |
147 | | * If successful, 0 is returned and **new_base_btf** and **new_split_btf** |
148 | | * will point at new base/split BTF. Both the new split and its associated |
149 | | * new base BTF must be freed by the caller. |
150 | | * |
151 | | * A negative value is returned on error and the thread-local `errno` variable |
152 | | * is set to the error code as well. |
153 | | */ |
154 | | LIBBPF_API int btf__distill_base(const struct btf *src_btf, struct btf **new_base_btf, |
155 | | struct btf **new_split_btf); |
156 | | |
157 | | LIBBPF_API struct btf *btf__parse(const char *path, struct btf_ext **btf_ext); |
158 | | LIBBPF_API struct btf *btf__parse_split(const char *path, struct btf *base_btf); |
159 | | LIBBPF_API struct btf *btf__parse_elf(const char *path, struct btf_ext **btf_ext); |
160 | | LIBBPF_API struct btf *btf__parse_elf_split(const char *path, struct btf *base_btf); |
161 | | LIBBPF_API struct btf *btf__parse_raw(const char *path); |
162 | | LIBBPF_API struct btf *btf__parse_raw_split(const char *path, struct btf *base_btf); |
163 | | |
164 | | LIBBPF_API struct btf *btf__load_vmlinux_btf(void); |
165 | | LIBBPF_API struct btf *btf__load_module_btf(const char *module_name, struct btf *vmlinux_btf); |
166 | | |
167 | | LIBBPF_API struct btf *btf__load_from_kernel_by_id(__u32 id); |
168 | | LIBBPF_API struct btf *btf__load_from_kernel_by_id_split(__u32 id, struct btf *base_btf); |
169 | | |
170 | | LIBBPF_API int btf__load_into_kernel(struct btf *btf); |
171 | | LIBBPF_API __s32 btf__find_by_name(const struct btf *btf, |
172 | | const char *type_name); |
173 | | LIBBPF_API __s32 btf__find_by_name_kind(const struct btf *btf, |
174 | | const char *type_name, __u32 kind); |
175 | | LIBBPF_API __u32 btf__type_cnt(const struct btf *btf); |
176 | | LIBBPF_API const struct btf *btf__base_btf(const struct btf *btf); |
177 | | LIBBPF_API const struct btf_type *btf__type_by_id(const struct btf *btf, |
178 | | __u32 id); |
179 | | LIBBPF_API size_t btf__pointer_size(const struct btf *btf); |
180 | | LIBBPF_API int btf__set_pointer_size(struct btf *btf, size_t ptr_sz); |
181 | | LIBBPF_API enum btf_endianness btf__endianness(const struct btf *btf); |
182 | | LIBBPF_API int btf__set_endianness(struct btf *btf, enum btf_endianness endian); |
183 | | LIBBPF_API __s64 btf__resolve_size(const struct btf *btf, __u32 type_id); |
184 | | LIBBPF_API int btf__resolve_type(const struct btf *btf, __u32 type_id); |
185 | | LIBBPF_API int btf__align_of(const struct btf *btf, __u32 id); |
186 | | LIBBPF_API int btf__fd(const struct btf *btf); |
187 | | LIBBPF_API void btf__set_fd(struct btf *btf, int fd); |
188 | | LIBBPF_API const void *btf__raw_data(const struct btf *btf, __u32 *size); |
189 | | LIBBPF_API const char *btf__name_by_offset(const struct btf *btf, __u32 offset); |
190 | | LIBBPF_API const char *btf__str_by_offset(const struct btf *btf, __u32 offset); |
191 | | |
192 | | LIBBPF_API struct btf_ext *btf_ext__new(const __u8 *data, __u32 size); |
193 | | LIBBPF_API void btf_ext__free(struct btf_ext *btf_ext); |
194 | | LIBBPF_API const void *btf_ext__raw_data(const struct btf_ext *btf_ext, __u32 *size); |
195 | | LIBBPF_API enum btf_endianness btf_ext__endianness(const struct btf_ext *btf_ext); |
196 | | LIBBPF_API int btf_ext__set_endianness(struct btf_ext *btf_ext, |
197 | | enum btf_endianness endian); |
198 | | |
199 | | LIBBPF_API int btf__find_str(struct btf *btf, const char *s); |
200 | | LIBBPF_API int btf__add_str(struct btf *btf, const char *s); |
201 | | LIBBPF_API int btf__add_type(struct btf *btf, const struct btf *src_btf, |
202 | | const struct btf_type *src_type); |
203 | | /** |
204 | | * @brief **btf__add_btf()** appends all the BTF types from *src_btf* into *btf* |
205 | | * @param btf BTF object which all the BTF types and strings are added to |
206 | | * @param src_btf BTF object which all BTF types and referenced strings are copied from |
207 | | * @return BTF type ID of the first appended BTF type, or negative error code |
208 | | * |
209 | | * **btf__add_btf()** can be used to simply and efficiently append the entire |
210 | | * contents of one BTF object to another one. All the BTF type data is copied |
211 | | * over, all referenced type IDs are adjusted by adding a necessary ID offset. |
212 | | * Only strings referenced from BTF types are copied over and deduplicated, so |
213 | | * if there were some unused strings in *src_btf*, those won't be copied over, |
214 | | * which is consistent with the general string deduplication semantics of BTF |
215 | | * writing APIs. |
216 | | * |
217 | | * If any error is encountered during this process, the contents of *btf* is |
218 | | * left intact, which means that **btf__add_btf()** follows the transactional |
219 | | * semantics and the operation as a whole is all-or-nothing. |
220 | | * |
221 | | * *src_btf* has to be non-split BTF, as of now copying types from split BTF |
222 | | * is not supported and will result in -ENOTSUP error code returned. |
223 | | */ |
224 | | LIBBPF_API int btf__add_btf(struct btf *btf, const struct btf *src_btf); |
225 | | |
226 | | LIBBPF_API int btf__add_int(struct btf *btf, const char *name, size_t byte_sz, int encoding); |
227 | | LIBBPF_API int btf__add_float(struct btf *btf, const char *name, size_t byte_sz); |
228 | | LIBBPF_API int btf__add_ptr(struct btf *btf, int ref_type_id); |
229 | | LIBBPF_API int btf__add_array(struct btf *btf, |
230 | | int index_type_id, int elem_type_id, __u32 nr_elems); |
231 | | /* struct/union construction APIs */ |
232 | | LIBBPF_API int btf__add_struct(struct btf *btf, const char *name, __u32 sz); |
233 | | LIBBPF_API int btf__add_union(struct btf *btf, const char *name, __u32 sz); |
234 | | LIBBPF_API int btf__add_field(struct btf *btf, const char *name, int field_type_id, |
235 | | __u32 bit_offset, __u32 bit_size); |
236 | | |
237 | | /* enum construction APIs */ |
238 | | LIBBPF_API int btf__add_enum(struct btf *btf, const char *name, __u32 bytes_sz); |
239 | | LIBBPF_API int btf__add_enum_value(struct btf *btf, const char *name, __s64 value); |
240 | | LIBBPF_API int btf__add_enum64(struct btf *btf, const char *name, __u32 bytes_sz, bool is_signed); |
241 | | LIBBPF_API int btf__add_enum64_value(struct btf *btf, const char *name, __u64 value); |
242 | | |
243 | | enum btf_fwd_kind { |
244 | | BTF_FWD_STRUCT = 0, |
245 | | BTF_FWD_UNION = 1, |
246 | | BTF_FWD_ENUM = 2, |
247 | | }; |
248 | | |
249 | | LIBBPF_API int btf__add_fwd(struct btf *btf, const char *name, enum btf_fwd_kind fwd_kind); |
250 | | LIBBPF_API int btf__add_typedef(struct btf *btf, const char *name, int ref_type_id); |
251 | | LIBBPF_API int btf__add_volatile(struct btf *btf, int ref_type_id); |
252 | | LIBBPF_API int btf__add_const(struct btf *btf, int ref_type_id); |
253 | | LIBBPF_API int btf__add_restrict(struct btf *btf, int ref_type_id); |
254 | | LIBBPF_API int btf__add_type_tag(struct btf *btf, const char *value, int ref_type_id); |
255 | | LIBBPF_API int btf__add_type_attr(struct btf *btf, const char *value, int ref_type_id); |
256 | | |
257 | | /* func and func_proto construction APIs */ |
258 | | LIBBPF_API int btf__add_func(struct btf *btf, const char *name, |
259 | | enum btf_func_linkage linkage, int proto_type_id); |
260 | | LIBBPF_API int btf__add_func_proto(struct btf *btf, int ret_type_id); |
261 | | LIBBPF_API int btf__add_func_param(struct btf *btf, const char *name, int type_id); |
262 | | |
263 | | /* var & datasec construction APIs */ |
264 | | LIBBPF_API int btf__add_var(struct btf *btf, const char *name, int linkage, int type_id); |
265 | | LIBBPF_API int btf__add_datasec(struct btf *btf, const char *name, __u32 byte_sz); |
266 | | LIBBPF_API int btf__add_datasec_var_info(struct btf *btf, int var_type_id, |
267 | | __u32 offset, __u32 byte_sz); |
268 | | |
269 | | /* tag construction API */ |
270 | | LIBBPF_API int btf__add_decl_tag(struct btf *btf, const char *value, int ref_type_id, |
271 | | int component_idx); |
272 | | LIBBPF_API int btf__add_decl_attr(struct btf *btf, const char *value, int ref_type_id, |
273 | | int component_idx); |
274 | | |
275 | | struct btf_dedup_opts { |
276 | | size_t sz; |
277 | | /* optional .BTF.ext info to dedup along the main BTF info */ |
278 | | struct btf_ext *btf_ext; |
279 | | /* force hash collisions (used for testing) */ |
280 | | bool force_collisions; |
281 | | size_t :0; |
282 | | }; |
283 | | #define btf_dedup_opts__last_field force_collisions |
284 | | |
285 | | LIBBPF_API int btf__dedup(struct btf *btf, const struct btf_dedup_opts *opts); |
286 | | |
287 | | /** |
288 | | * @brief **btf__relocate()** will check the split BTF *btf* for references |
289 | | * to base BTF kinds, and verify those references are compatible with |
290 | | * *base_btf*; if they are, *btf* is adjusted such that is re-parented to |
291 | | * *base_btf* and type ids and strings are adjusted to accommodate this. |
292 | | * @param btf split BTF object to relocate |
293 | | * @param base_btf base BTF object |
294 | | * @return 0 on success; negative error code, otherwise |
295 | | * |
296 | | * If successful, 0 is returned and **btf** now has **base_btf** as its |
297 | | * base. |
298 | | * |
299 | | * A negative value is returned on error and the thread-local `errno` variable |
300 | | * is set to the error code as well. |
301 | | */ |
302 | | LIBBPF_API int btf__relocate(struct btf *btf, const struct btf *base_btf); |
303 | | |
304 | | struct btf_permute_opts { |
305 | | size_t sz; |
306 | | /* optional .BTF.ext info along the main BTF info */ |
307 | | struct btf_ext *btf_ext; |
308 | | size_t :0; |
309 | | }; |
310 | | #define btf_permute_opts__last_field btf_ext |
311 | | |
312 | | /** |
313 | | * @brief **btf__permute()** rearranges BTF types in-place according to a specified ID mapping |
314 | | * @param btf BTF object to permute |
315 | | * @param id_map Array mapping original type IDs to new IDs |
316 | | * @param id_map_cnt Number of elements in @id_map |
317 | | * @param opts Optional parameters, including BTF extension data for reference updates |
318 | | * @return 0 on success, negative error code on failure |
319 | | * |
320 | | * **btf__permute()** reorders BTF types based on the provided @id_map array, |
321 | | * updating all internal type references to maintain consistency. The function |
322 | | * operates in-place, modifying the BTF object directly. |
323 | | * |
324 | | * For **base BTF**: |
325 | | * - @id_map must include all types from ID 0 to `btf__type_cnt(btf) - 1` |
326 | | * - @id_map_cnt must be `btf__type_cnt(btf)` |
327 | | * - Mapping is defined as `id_map[original_id] = new_id` |
328 | | * - `id_map[0]` must be 0 (void type cannot be moved) |
329 | | * |
330 | | * For **split BTF**: |
331 | | * - @id_map must include only split types (types added on top of the base BTF) |
332 | | * - @id_map_cnt must be `btf__type_cnt(btf) - btf__type_cnt(btf__base_btf(btf))` |
333 | | * - Mapping is defined as `id_map[original_id - start_id] = new_id` |
334 | | * - `start_id` equals `btf__type_cnt(btf__base_btf(btf))` |
335 | | * |
336 | | * After permutation, all type references within the BTF data and optional |
337 | | * BTF extension (if provided via @opts) are updated automatically. |
338 | | * |
339 | | * On error, returns a negative error code and sets errno: |
340 | | * - `-EINVAL`: Invalid parameters or invalid ID mapping |
341 | | * - `-ENOMEM`: Memory allocation failure |
342 | | */ |
343 | | LIBBPF_API int btf__permute(struct btf *btf, __u32 *id_map, __u32 id_map_cnt, |
344 | | const struct btf_permute_opts *opts); |
345 | | |
346 | | struct btf_dump; |
347 | | |
348 | | struct btf_dump_opts { |
349 | | size_t sz; |
350 | | }; |
351 | | #define btf_dump_opts__last_field sz |
352 | | |
353 | | typedef void (*btf_dump_printf_fn_t)(void *ctx, const char *fmt, va_list args); |
354 | | |
355 | | LIBBPF_API struct btf_dump *btf_dump__new(const struct btf *btf, |
356 | | btf_dump_printf_fn_t printf_fn, |
357 | | void *ctx, |
358 | | const struct btf_dump_opts *opts); |
359 | | |
360 | | LIBBPF_API void btf_dump__free(struct btf_dump *d); |
361 | | |
362 | | LIBBPF_API int btf_dump__dump_type(struct btf_dump *d, __u32 id); |
363 | | |
364 | | struct btf_dump_emit_type_decl_opts { |
365 | | /* size of this struct, for forward/backward compatibility */ |
366 | | size_t sz; |
367 | | /* optional field name for type declaration, e.g.: |
368 | | * - struct my_struct <FNAME> |
369 | | * - void (*<FNAME>)(int) |
370 | | * - char (*<FNAME>)[123] |
371 | | */ |
372 | | const char *field_name; |
373 | | /* extra indentation level (in number of tabs) to emit for multi-line |
374 | | * type declarations (e.g., anonymous struct); applies for lines |
375 | | * starting from the second one (first line is assumed to have |
376 | | * necessary indentation already |
377 | | */ |
378 | | int indent_level; |
379 | | /* strip all the const/volatile/restrict mods */ |
380 | | bool strip_mods; |
381 | | size_t :0; |
382 | | }; |
383 | | #define btf_dump_emit_type_decl_opts__last_field strip_mods |
384 | | |
385 | | LIBBPF_API int |
386 | | btf_dump__emit_type_decl(struct btf_dump *d, __u32 id, |
387 | | const struct btf_dump_emit_type_decl_opts *opts); |
388 | | |
389 | | |
390 | | struct btf_dump_type_data_opts { |
391 | | /* size of this struct, for forward/backward compatibility */ |
392 | | size_t sz; |
393 | | const char *indent_str; |
394 | | int indent_level; |
395 | | /* below match "show" flags for bpf_show_snprintf() */ |
396 | | bool compact; /* no newlines/indentation */ |
397 | | bool skip_names; /* skip member/type names */ |
398 | | bool emit_zeroes; /* show 0-valued fields */ |
399 | | bool emit_strings; /* print char arrays as strings */ |
400 | | size_t :0; |
401 | | }; |
402 | | #define btf_dump_type_data_opts__last_field emit_strings |
403 | | |
404 | | LIBBPF_API int |
405 | | btf_dump__dump_type_data(struct btf_dump *d, __u32 id, |
406 | | const void *data, size_t data_sz, |
407 | | const struct btf_dump_type_data_opts *opts); |
408 | | |
409 | | /* |
410 | | * A set of helpers for easier BTF types handling. |
411 | | * |
412 | | * The inline functions below rely on constants from the kernel headers which |
413 | | * may not be available for applications including this header file. To avoid |
414 | | * compilation errors, we define all the constants here that were added after |
415 | | * the initial introduction of the BTF_KIND* constants. |
416 | | */ |
417 | | #ifndef BTF_KIND_FUNC |
418 | 22.7k | #define BTF_KIND_FUNC 12 /* Function */ |
419 | 6.67k | #define BTF_KIND_FUNC_PROTO 13 /* Function Proto */ |
420 | | #endif |
421 | | #ifndef BTF_KIND_VAR |
422 | 26.2k | #define BTF_KIND_VAR 14 /* Variable */ |
423 | 42.2k | #define BTF_KIND_DATASEC 15 /* Section */ |
424 | | #endif |
425 | | #ifndef BTF_KIND_FLOAT |
426 | 19.7k | #define BTF_KIND_FLOAT 16 /* Floating point */ |
427 | | #endif |
428 | | /* The kernel header switched to enums, so the following were never #defined */ |
429 | 9.90k | #define BTF_KIND_DECL_TAG 17 /* Decl Tag */ |
430 | 27.4k | #define BTF_KIND_TYPE_TAG 18 /* Type Tag */ |
431 | 1.47k | #define BTF_KIND_ENUM64 19 /* Enum for up-to 64bit values */ |
432 | | |
433 | | static inline __u16 btf_kind(const struct btf_type *t) |
434 | 169k | { |
435 | 169k | return BTF_INFO_KIND(t->info); |
436 | 169k | } Line | Count | Source | 434 | 56.9k | { | 435 | 56.9k | return BTF_INFO_KIND(t->info); | 436 | 56.9k | } |
Unexecuted instantiation: libbpf_utils.c:btf_kind Unexecuted instantiation: libbpf_probes.c:btf_kind Unexecuted instantiation: gen_loader.c:btf_kind Unexecuted instantiation: relo_core.c:btf_kind Unexecuted instantiation: usdt.c:btf_kind Unexecuted instantiation: zip.c:btf_kind Unexecuted instantiation: elf.c:btf_kind Unexecuted instantiation: features.c:btf_kind Unexecuted instantiation: bpf.c:btf_kind Line | Count | Source | 434 | 112k | { | 435 | 112k | return BTF_INFO_KIND(t->info); | 436 | 112k | } |
Unexecuted instantiation: strset.c:btf_kind Unexecuted instantiation: btf_iter.c:btf_kind Unexecuted instantiation: btf_relocate.c:btf_kind |
437 | | |
438 | | static inline __u32 btf_vlen(const struct btf_type *t) |
439 | 62.3k | { |
440 | 62.3k | return BTF_INFO_VLEN(t->info); |
441 | 62.3k | } Line | Count | Source | 439 | 8.17k | { | 440 | 8.17k | return BTF_INFO_VLEN(t->info); | 441 | 8.17k | } |
Unexecuted instantiation: libbpf_utils.c:btf_vlen Unexecuted instantiation: libbpf_probes.c:btf_vlen Unexecuted instantiation: gen_loader.c:btf_vlen Unexecuted instantiation: relo_core.c:btf_vlen Unexecuted instantiation: usdt.c:btf_vlen Unexecuted instantiation: zip.c:btf_vlen Unexecuted instantiation: elf.c:btf_vlen Unexecuted instantiation: features.c:btf_vlen Unexecuted instantiation: bpf.c:btf_vlen Line | Count | Source | 439 | 54.1k | { | 440 | 54.1k | return BTF_INFO_VLEN(t->info); | 441 | 54.1k | } |
Unexecuted instantiation: strset.c:btf_vlen Unexecuted instantiation: btf_iter.c:btf_vlen Unexecuted instantiation: btf_relocate.c:btf_vlen |
442 | | |
443 | | static inline bool btf_kflag(const struct btf_type *t) |
444 | 26 | { |
445 | 26 | return BTF_INFO_KFLAG(t->info); |
446 | 26 | } Line | Count | Source | 444 | 13 | { | 445 | 13 | return BTF_INFO_KFLAG(t->info); | 446 | 13 | } |
Unexecuted instantiation: libbpf_utils.c:btf_kflag Unexecuted instantiation: libbpf_probes.c:btf_kflag Unexecuted instantiation: gen_loader.c:btf_kflag Unexecuted instantiation: relo_core.c:btf_kflag Unexecuted instantiation: usdt.c:btf_kflag Unexecuted instantiation: zip.c:btf_kflag Unexecuted instantiation: elf.c:btf_kflag Unexecuted instantiation: features.c:btf_kflag Unexecuted instantiation: bpf.c:btf_kflag Line | Count | Source | 444 | 13 | { | 445 | 13 | return BTF_INFO_KFLAG(t->info); | 446 | 13 | } |
Unexecuted instantiation: strset.c:btf_kflag Unexecuted instantiation: btf_iter.c:btf_kflag Unexecuted instantiation: btf_relocate.c:btf_kflag |
447 | | |
448 | | static inline bool btf_is_void(const struct btf_type *t) |
449 | 0 | { |
450 | 0 | return btf_kind(t) == BTF_KIND_UNKN; |
451 | 0 | } Unexecuted instantiation: libbpf.c:btf_is_void Unexecuted instantiation: libbpf_utils.c:btf_is_void Unexecuted instantiation: libbpf_probes.c:btf_is_void Unexecuted instantiation: gen_loader.c:btf_is_void Unexecuted instantiation: relo_core.c:btf_is_void Unexecuted instantiation: usdt.c:btf_is_void Unexecuted instantiation: zip.c:btf_is_void Unexecuted instantiation: elf.c:btf_is_void Unexecuted instantiation: features.c:btf_is_void Unexecuted instantiation: bpf.c:btf_is_void Unexecuted instantiation: btf.c:btf_is_void Unexecuted instantiation: strset.c:btf_is_void Unexecuted instantiation: btf_iter.c:btf_is_void Unexecuted instantiation: btf_relocate.c:btf_is_void |
452 | | |
453 | | static inline bool btf_is_int(const struct btf_type *t) |
454 | 5.25k | { |
455 | 5.25k | return btf_kind(t) == BTF_KIND_INT; |
456 | 5.25k | } Line | Count | Source | 454 | 5.25k | { | 455 | 5.25k | return btf_kind(t) == BTF_KIND_INT; | 456 | 5.25k | } |
Unexecuted instantiation: libbpf_utils.c:btf_is_int Unexecuted instantiation: libbpf_probes.c:btf_is_int Unexecuted instantiation: gen_loader.c:btf_is_int Unexecuted instantiation: relo_core.c:btf_is_int Unexecuted instantiation: usdt.c:btf_is_int Unexecuted instantiation: zip.c:btf_is_int Unexecuted instantiation: elf.c:btf_is_int Unexecuted instantiation: features.c:btf_is_int Unexecuted instantiation: bpf.c:btf_is_int Unexecuted instantiation: btf.c:btf_is_int Unexecuted instantiation: strset.c:btf_is_int Unexecuted instantiation: btf_iter.c:btf_is_int Unexecuted instantiation: btf_relocate.c:btf_is_int |
457 | | |
458 | | static inline bool btf_is_ptr(const struct btf_type *t) |
459 | 0 | { |
460 | 0 | return btf_kind(t) == BTF_KIND_PTR; |
461 | 0 | } Unexecuted instantiation: libbpf.c:btf_is_ptr Unexecuted instantiation: libbpf_utils.c:btf_is_ptr Unexecuted instantiation: libbpf_probes.c:btf_is_ptr Unexecuted instantiation: gen_loader.c:btf_is_ptr Unexecuted instantiation: relo_core.c:btf_is_ptr Unexecuted instantiation: usdt.c:btf_is_ptr Unexecuted instantiation: zip.c:btf_is_ptr Unexecuted instantiation: elf.c:btf_is_ptr Unexecuted instantiation: features.c:btf_is_ptr Unexecuted instantiation: bpf.c:btf_is_ptr Unexecuted instantiation: btf.c:btf_is_ptr Unexecuted instantiation: strset.c:btf_is_ptr Unexecuted instantiation: btf_iter.c:btf_is_ptr Unexecuted instantiation: btf_relocate.c:btf_is_ptr |
462 | | |
463 | | static inline bool btf_is_array(const struct btf_type *t) |
464 | 0 | { |
465 | 0 | return btf_kind(t) == BTF_KIND_ARRAY; |
466 | 0 | } Unexecuted instantiation: libbpf.c:btf_is_array Unexecuted instantiation: libbpf_utils.c:btf_is_array Unexecuted instantiation: libbpf_probes.c:btf_is_array Unexecuted instantiation: gen_loader.c:btf_is_array Unexecuted instantiation: relo_core.c:btf_is_array Unexecuted instantiation: usdt.c:btf_is_array Unexecuted instantiation: zip.c:btf_is_array Unexecuted instantiation: elf.c:btf_is_array Unexecuted instantiation: features.c:btf_is_array Unexecuted instantiation: bpf.c:btf_is_array Unexecuted instantiation: btf.c:btf_is_array Unexecuted instantiation: strset.c:btf_is_array Unexecuted instantiation: btf_iter.c:btf_is_array Unexecuted instantiation: btf_relocate.c:btf_is_array |
467 | | |
468 | | static inline bool btf_is_struct(const struct btf_type *t) |
469 | 361 | { |
470 | 361 | return btf_kind(t) == BTF_KIND_STRUCT; |
471 | 361 | } Line | Count | Source | 469 | 361 | { | 470 | 361 | return btf_kind(t) == BTF_KIND_STRUCT; | 471 | 361 | } |
Unexecuted instantiation: libbpf_utils.c:btf_is_struct Unexecuted instantiation: libbpf_probes.c:btf_is_struct Unexecuted instantiation: gen_loader.c:btf_is_struct Unexecuted instantiation: relo_core.c:btf_is_struct Unexecuted instantiation: usdt.c:btf_is_struct Unexecuted instantiation: zip.c:btf_is_struct Unexecuted instantiation: elf.c:btf_is_struct Unexecuted instantiation: features.c:btf_is_struct Unexecuted instantiation: bpf.c:btf_is_struct Unexecuted instantiation: btf.c:btf_is_struct Unexecuted instantiation: strset.c:btf_is_struct Unexecuted instantiation: btf_iter.c:btf_is_struct Unexecuted instantiation: btf_relocate.c:btf_is_struct |
472 | | |
473 | | static inline bool btf_is_union(const struct btf_type *t) |
474 | 0 | { |
475 | 0 | return btf_kind(t) == BTF_KIND_UNION; |
476 | 0 | } Unexecuted instantiation: libbpf.c:btf_is_union Unexecuted instantiation: libbpf_utils.c:btf_is_union Unexecuted instantiation: libbpf_probes.c:btf_is_union Unexecuted instantiation: gen_loader.c:btf_is_union Unexecuted instantiation: relo_core.c:btf_is_union Unexecuted instantiation: usdt.c:btf_is_union Unexecuted instantiation: zip.c:btf_is_union Unexecuted instantiation: elf.c:btf_is_union Unexecuted instantiation: features.c:btf_is_union Unexecuted instantiation: bpf.c:btf_is_union Unexecuted instantiation: btf.c:btf_is_union Unexecuted instantiation: strset.c:btf_is_union Unexecuted instantiation: btf_iter.c:btf_is_union Unexecuted instantiation: btf_relocate.c:btf_is_union |
477 | | |
478 | | static inline bool btf_is_composite(const struct btf_type *t) |
479 | 0 | { |
480 | 0 | __u16 kind = btf_kind(t); |
481 | |
|
482 | 0 | return kind == BTF_KIND_STRUCT || kind == BTF_KIND_UNION; |
483 | 0 | } Unexecuted instantiation: libbpf.c:btf_is_composite Unexecuted instantiation: libbpf_utils.c:btf_is_composite Unexecuted instantiation: libbpf_probes.c:btf_is_composite Unexecuted instantiation: gen_loader.c:btf_is_composite Unexecuted instantiation: relo_core.c:btf_is_composite Unexecuted instantiation: usdt.c:btf_is_composite Unexecuted instantiation: zip.c:btf_is_composite Unexecuted instantiation: elf.c:btf_is_composite Unexecuted instantiation: features.c:btf_is_composite Unexecuted instantiation: bpf.c:btf_is_composite Unexecuted instantiation: btf.c:btf_is_composite Unexecuted instantiation: strset.c:btf_is_composite Unexecuted instantiation: btf_iter.c:btf_is_composite Unexecuted instantiation: btf_relocate.c:btf_is_composite |
484 | | |
485 | | static inline bool btf_is_enum(const struct btf_type *t) |
486 | 0 | { |
487 | 0 | return btf_kind(t) == BTF_KIND_ENUM; |
488 | 0 | } Unexecuted instantiation: libbpf.c:btf_is_enum Unexecuted instantiation: libbpf_utils.c:btf_is_enum Unexecuted instantiation: libbpf_probes.c:btf_is_enum Unexecuted instantiation: gen_loader.c:btf_is_enum Unexecuted instantiation: relo_core.c:btf_is_enum Unexecuted instantiation: usdt.c:btf_is_enum Unexecuted instantiation: zip.c:btf_is_enum Unexecuted instantiation: elf.c:btf_is_enum Unexecuted instantiation: features.c:btf_is_enum Unexecuted instantiation: bpf.c:btf_is_enum Unexecuted instantiation: btf.c:btf_is_enum Unexecuted instantiation: strset.c:btf_is_enum Unexecuted instantiation: btf_iter.c:btf_is_enum Unexecuted instantiation: btf_relocate.c:btf_is_enum |
489 | | |
490 | | static inline bool btf_is_enum64(const struct btf_type *t) |
491 | 0 | { |
492 | 0 | return btf_kind(t) == BTF_KIND_ENUM64; |
493 | 0 | } Unexecuted instantiation: libbpf.c:btf_is_enum64 Unexecuted instantiation: libbpf_utils.c:btf_is_enum64 Unexecuted instantiation: libbpf_probes.c:btf_is_enum64 Unexecuted instantiation: gen_loader.c:btf_is_enum64 Unexecuted instantiation: relo_core.c:btf_is_enum64 Unexecuted instantiation: usdt.c:btf_is_enum64 Unexecuted instantiation: zip.c:btf_is_enum64 Unexecuted instantiation: elf.c:btf_is_enum64 Unexecuted instantiation: features.c:btf_is_enum64 Unexecuted instantiation: bpf.c:btf_is_enum64 Unexecuted instantiation: btf.c:btf_is_enum64 Unexecuted instantiation: strset.c:btf_is_enum64 Unexecuted instantiation: btf_iter.c:btf_is_enum64 Unexecuted instantiation: btf_relocate.c:btf_is_enum64 |
494 | | |
495 | | static inline bool btf_is_fwd(const struct btf_type *t) |
496 | 3.08k | { |
497 | 3.08k | return btf_kind(t) == BTF_KIND_FWD; |
498 | 3.08k | } Unexecuted instantiation: libbpf.c:btf_is_fwd Unexecuted instantiation: libbpf_utils.c:btf_is_fwd Unexecuted instantiation: libbpf_probes.c:btf_is_fwd Unexecuted instantiation: gen_loader.c:btf_is_fwd Unexecuted instantiation: relo_core.c:btf_is_fwd Unexecuted instantiation: usdt.c:btf_is_fwd Unexecuted instantiation: zip.c:btf_is_fwd Unexecuted instantiation: elf.c:btf_is_fwd Unexecuted instantiation: features.c:btf_is_fwd Unexecuted instantiation: bpf.c:btf_is_fwd Line | Count | Source | 496 | 3.08k | { | 497 | 3.08k | return btf_kind(t) == BTF_KIND_FWD; | 498 | 3.08k | } |
Unexecuted instantiation: strset.c:btf_is_fwd Unexecuted instantiation: btf_iter.c:btf_is_fwd Unexecuted instantiation: btf_relocate.c:btf_is_fwd |
499 | | |
500 | | static inline bool btf_is_typedef(const struct btf_type *t) |
501 | 1.88k | { |
502 | 1.88k | return btf_kind(t) == BTF_KIND_TYPEDEF; |
503 | 1.88k | } Line | Count | Source | 501 | 869 | { | 502 | 869 | return btf_kind(t) == BTF_KIND_TYPEDEF; | 503 | 869 | } |
Unexecuted instantiation: libbpf_utils.c:btf_is_typedef Unexecuted instantiation: libbpf_probes.c:btf_is_typedef Unexecuted instantiation: gen_loader.c:btf_is_typedef Unexecuted instantiation: relo_core.c:btf_is_typedef Unexecuted instantiation: usdt.c:btf_is_typedef Unexecuted instantiation: zip.c:btf_is_typedef Unexecuted instantiation: elf.c:btf_is_typedef Unexecuted instantiation: features.c:btf_is_typedef Unexecuted instantiation: bpf.c:btf_is_typedef Line | Count | Source | 501 | 1.01k | { | 502 | 1.01k | return btf_kind(t) == BTF_KIND_TYPEDEF; | 503 | 1.01k | } |
Unexecuted instantiation: strset.c:btf_is_typedef Unexecuted instantiation: btf_iter.c:btf_is_typedef Unexecuted instantiation: btf_relocate.c:btf_is_typedef |
504 | | |
505 | | static inline bool btf_is_volatile(const struct btf_type *t) |
506 | 0 | { |
507 | 0 | return btf_kind(t) == BTF_KIND_VOLATILE; |
508 | 0 | } Unexecuted instantiation: libbpf.c:btf_is_volatile Unexecuted instantiation: libbpf_utils.c:btf_is_volatile Unexecuted instantiation: libbpf_probes.c:btf_is_volatile Unexecuted instantiation: gen_loader.c:btf_is_volatile Unexecuted instantiation: relo_core.c:btf_is_volatile Unexecuted instantiation: usdt.c:btf_is_volatile Unexecuted instantiation: zip.c:btf_is_volatile Unexecuted instantiation: elf.c:btf_is_volatile Unexecuted instantiation: features.c:btf_is_volatile Unexecuted instantiation: bpf.c:btf_is_volatile Unexecuted instantiation: btf.c:btf_is_volatile Unexecuted instantiation: strset.c:btf_is_volatile Unexecuted instantiation: btf_iter.c:btf_is_volatile Unexecuted instantiation: btf_relocate.c:btf_is_volatile |
509 | | |
510 | | static inline bool btf_is_const(const struct btf_type *t) |
511 | 0 | { |
512 | 0 | return btf_kind(t) == BTF_KIND_CONST; |
513 | 0 | } Unexecuted instantiation: libbpf.c:btf_is_const Unexecuted instantiation: libbpf_utils.c:btf_is_const Unexecuted instantiation: libbpf_probes.c:btf_is_const Unexecuted instantiation: gen_loader.c:btf_is_const Unexecuted instantiation: relo_core.c:btf_is_const Unexecuted instantiation: usdt.c:btf_is_const Unexecuted instantiation: zip.c:btf_is_const Unexecuted instantiation: elf.c:btf_is_const Unexecuted instantiation: features.c:btf_is_const Unexecuted instantiation: bpf.c:btf_is_const Unexecuted instantiation: btf.c:btf_is_const Unexecuted instantiation: strset.c:btf_is_const Unexecuted instantiation: btf_iter.c:btf_is_const Unexecuted instantiation: btf_relocate.c:btf_is_const |
514 | | |
515 | | static inline bool btf_is_restrict(const struct btf_type *t) |
516 | 0 | { |
517 | 0 | return btf_kind(t) == BTF_KIND_RESTRICT; |
518 | 0 | } Unexecuted instantiation: libbpf.c:btf_is_restrict Unexecuted instantiation: libbpf_utils.c:btf_is_restrict Unexecuted instantiation: libbpf_probes.c:btf_is_restrict Unexecuted instantiation: gen_loader.c:btf_is_restrict Unexecuted instantiation: relo_core.c:btf_is_restrict Unexecuted instantiation: usdt.c:btf_is_restrict Unexecuted instantiation: zip.c:btf_is_restrict Unexecuted instantiation: elf.c:btf_is_restrict Unexecuted instantiation: features.c:btf_is_restrict Unexecuted instantiation: bpf.c:btf_is_restrict Unexecuted instantiation: btf.c:btf_is_restrict Unexecuted instantiation: strset.c:btf_is_restrict Unexecuted instantiation: btf_iter.c:btf_is_restrict Unexecuted instantiation: btf_relocate.c:btf_is_restrict |
519 | | |
520 | | static inline bool btf_is_mod(const struct btf_type *t) |
521 | 2.31k | { |
522 | 2.31k | __u16 kind = btf_kind(t); |
523 | | |
524 | 2.31k | return kind == BTF_KIND_VOLATILE || |
525 | 2.20k | kind == BTF_KIND_CONST || |
526 | 2.04k | kind == BTF_KIND_RESTRICT || |
527 | 1.95k | kind == BTF_KIND_TYPE_TAG; |
528 | 2.31k | } Line | Count | Source | 521 | 1.13k | { | 522 | 1.13k | __u16 kind = btf_kind(t); | 523 | | | 524 | 1.13k | return kind == BTF_KIND_VOLATILE || | 525 | 1.07k | kind == BTF_KIND_CONST || | 526 | 960 | kind == BTF_KIND_RESTRICT || | 527 | 911 | kind == BTF_KIND_TYPE_TAG; | 528 | 1.13k | } |
Unexecuted instantiation: libbpf_utils.c:btf_is_mod Unexecuted instantiation: libbpf_probes.c:btf_is_mod Unexecuted instantiation: gen_loader.c:btf_is_mod Unexecuted instantiation: relo_core.c:btf_is_mod Unexecuted instantiation: usdt.c:btf_is_mod Unexecuted instantiation: zip.c:btf_is_mod Unexecuted instantiation: elf.c:btf_is_mod Unexecuted instantiation: features.c:btf_is_mod Unexecuted instantiation: bpf.c:btf_is_mod Line | Count | Source | 521 | 1.17k | { | 522 | 1.17k | __u16 kind = btf_kind(t); | 523 | | | 524 | 1.17k | return kind == BTF_KIND_VOLATILE || | 525 | 1.12k | kind == BTF_KIND_CONST || | 526 | 1.08k | kind == BTF_KIND_RESTRICT || | 527 | 1.04k | kind == BTF_KIND_TYPE_TAG; | 528 | 1.17k | } |
Unexecuted instantiation: strset.c:btf_is_mod Unexecuted instantiation: btf_iter.c:btf_is_mod Unexecuted instantiation: btf_relocate.c:btf_is_mod |
529 | | |
530 | | static inline bool btf_is_func(const struct btf_type *t) |
531 | 9.12k | { |
532 | 9.12k | return btf_kind(t) == BTF_KIND_FUNC; |
533 | 9.12k | } Line | Count | Source | 531 | 9.12k | { | 532 | 9.12k | return btf_kind(t) == BTF_KIND_FUNC; | 533 | 9.12k | } |
Unexecuted instantiation: libbpf_utils.c:btf_is_func Unexecuted instantiation: libbpf_probes.c:btf_is_func Unexecuted instantiation: gen_loader.c:btf_is_func Unexecuted instantiation: relo_core.c:btf_is_func Unexecuted instantiation: usdt.c:btf_is_func Unexecuted instantiation: zip.c:btf_is_func Unexecuted instantiation: elf.c:btf_is_func Unexecuted instantiation: features.c:btf_is_func Unexecuted instantiation: bpf.c:btf_is_func Unexecuted instantiation: btf.c:btf_is_func Unexecuted instantiation: strset.c:btf_is_func Unexecuted instantiation: btf_iter.c:btf_is_func Unexecuted instantiation: btf_relocate.c:btf_is_func |
534 | | |
535 | | static inline bool btf_is_func_proto(const struct btf_type *t) |
536 | 0 | { |
537 | 0 | return btf_kind(t) == BTF_KIND_FUNC_PROTO; |
538 | 0 | } Unexecuted instantiation: libbpf.c:btf_is_func_proto Unexecuted instantiation: libbpf_utils.c:btf_is_func_proto Unexecuted instantiation: libbpf_probes.c:btf_is_func_proto Unexecuted instantiation: gen_loader.c:btf_is_func_proto Unexecuted instantiation: relo_core.c:btf_is_func_proto Unexecuted instantiation: usdt.c:btf_is_func_proto Unexecuted instantiation: zip.c:btf_is_func_proto Unexecuted instantiation: elf.c:btf_is_func_proto Unexecuted instantiation: features.c:btf_is_func_proto Unexecuted instantiation: bpf.c:btf_is_func_proto Unexecuted instantiation: btf.c:btf_is_func_proto Unexecuted instantiation: strset.c:btf_is_func_proto Unexecuted instantiation: btf_iter.c:btf_is_func_proto Unexecuted instantiation: btf_relocate.c:btf_is_func_proto |
539 | | |
540 | | static inline bool btf_is_var(const struct btf_type *t) |
541 | 12.3k | { |
542 | 12.3k | return btf_kind(t) == BTF_KIND_VAR; |
543 | 12.3k | } Line | Count | Source | 541 | 11.3k | { | 542 | 11.3k | return btf_kind(t) == BTF_KIND_VAR; | 543 | 11.3k | } |
Unexecuted instantiation: libbpf_utils.c:btf_is_var Unexecuted instantiation: libbpf_probes.c:btf_is_var Unexecuted instantiation: gen_loader.c:btf_is_var Unexecuted instantiation: relo_core.c:btf_is_var Unexecuted instantiation: usdt.c:btf_is_var Unexecuted instantiation: zip.c:btf_is_var Unexecuted instantiation: elf.c:btf_is_var Unexecuted instantiation: features.c:btf_is_var Unexecuted instantiation: bpf.c:btf_is_var Line | Count | Source | 541 | 974 | { | 542 | 974 | return btf_kind(t) == BTF_KIND_VAR; | 543 | 974 | } |
Unexecuted instantiation: strset.c:btf_is_var Unexecuted instantiation: btf_iter.c:btf_is_var Unexecuted instantiation: btf_relocate.c:btf_is_var |
544 | | |
545 | | static inline bool btf_is_datasec(const struct btf_type *t) |
546 | 28.4k | { |
547 | 28.4k | return btf_kind(t) == BTF_KIND_DATASEC; |
548 | 28.4k | } Line | Count | Source | 546 | 28.4k | { | 547 | 28.4k | return btf_kind(t) == BTF_KIND_DATASEC; | 548 | 28.4k | } |
Unexecuted instantiation: libbpf_utils.c:btf_is_datasec Unexecuted instantiation: libbpf_probes.c:btf_is_datasec Unexecuted instantiation: gen_loader.c:btf_is_datasec Unexecuted instantiation: relo_core.c:btf_is_datasec Unexecuted instantiation: usdt.c:btf_is_datasec Unexecuted instantiation: zip.c:btf_is_datasec Unexecuted instantiation: elf.c:btf_is_datasec Unexecuted instantiation: features.c:btf_is_datasec Unexecuted instantiation: bpf.c:btf_is_datasec Unexecuted instantiation: btf.c:btf_is_datasec Unexecuted instantiation: strset.c:btf_is_datasec Unexecuted instantiation: btf_iter.c:btf_is_datasec Unexecuted instantiation: btf_relocate.c:btf_is_datasec |
549 | | |
550 | | static inline bool btf_is_float(const struct btf_type *t) |
551 | 0 | { |
552 | 0 | return btf_kind(t) == BTF_KIND_FLOAT; |
553 | 0 | } Unexecuted instantiation: libbpf.c:btf_is_float Unexecuted instantiation: libbpf_utils.c:btf_is_float Unexecuted instantiation: libbpf_probes.c:btf_is_float Unexecuted instantiation: gen_loader.c:btf_is_float Unexecuted instantiation: relo_core.c:btf_is_float Unexecuted instantiation: usdt.c:btf_is_float Unexecuted instantiation: zip.c:btf_is_float Unexecuted instantiation: elf.c:btf_is_float Unexecuted instantiation: features.c:btf_is_float Unexecuted instantiation: bpf.c:btf_is_float Unexecuted instantiation: btf.c:btf_is_float Unexecuted instantiation: strset.c:btf_is_float Unexecuted instantiation: btf_iter.c:btf_is_float Unexecuted instantiation: btf_relocate.c:btf_is_float |
554 | | |
555 | | static inline bool btf_is_decl_tag(const struct btf_type *t) |
556 | 0 | { |
557 | 0 | return btf_kind(t) == BTF_KIND_DECL_TAG; |
558 | 0 | } Unexecuted instantiation: libbpf.c:btf_is_decl_tag Unexecuted instantiation: libbpf_utils.c:btf_is_decl_tag Unexecuted instantiation: libbpf_probes.c:btf_is_decl_tag Unexecuted instantiation: gen_loader.c:btf_is_decl_tag Unexecuted instantiation: relo_core.c:btf_is_decl_tag Unexecuted instantiation: usdt.c:btf_is_decl_tag Unexecuted instantiation: zip.c:btf_is_decl_tag Unexecuted instantiation: elf.c:btf_is_decl_tag Unexecuted instantiation: features.c:btf_is_decl_tag Unexecuted instantiation: bpf.c:btf_is_decl_tag Unexecuted instantiation: btf.c:btf_is_decl_tag Unexecuted instantiation: strset.c:btf_is_decl_tag Unexecuted instantiation: btf_iter.c:btf_is_decl_tag Unexecuted instantiation: btf_relocate.c:btf_is_decl_tag |
559 | | |
560 | | static inline bool btf_is_type_tag(const struct btf_type *t) |
561 | 0 | { |
562 | 0 | return btf_kind(t) == BTF_KIND_TYPE_TAG; |
563 | 0 | } Unexecuted instantiation: libbpf.c:btf_is_type_tag Unexecuted instantiation: libbpf_utils.c:btf_is_type_tag Unexecuted instantiation: libbpf_probes.c:btf_is_type_tag Unexecuted instantiation: gen_loader.c:btf_is_type_tag Unexecuted instantiation: relo_core.c:btf_is_type_tag Unexecuted instantiation: usdt.c:btf_is_type_tag Unexecuted instantiation: zip.c:btf_is_type_tag Unexecuted instantiation: elf.c:btf_is_type_tag Unexecuted instantiation: features.c:btf_is_type_tag Unexecuted instantiation: bpf.c:btf_is_type_tag Unexecuted instantiation: btf.c:btf_is_type_tag Unexecuted instantiation: strset.c:btf_is_type_tag Unexecuted instantiation: btf_iter.c:btf_is_type_tag Unexecuted instantiation: btf_relocate.c:btf_is_type_tag |
564 | | |
565 | | static inline bool btf_is_any_enum(const struct btf_type *t) |
566 | 0 | { |
567 | 0 | return btf_is_enum(t) || btf_is_enum64(t); |
568 | 0 | } Unexecuted instantiation: libbpf.c:btf_is_any_enum Unexecuted instantiation: libbpf_utils.c:btf_is_any_enum Unexecuted instantiation: libbpf_probes.c:btf_is_any_enum Unexecuted instantiation: gen_loader.c:btf_is_any_enum Unexecuted instantiation: relo_core.c:btf_is_any_enum Unexecuted instantiation: usdt.c:btf_is_any_enum Unexecuted instantiation: zip.c:btf_is_any_enum Unexecuted instantiation: elf.c:btf_is_any_enum Unexecuted instantiation: features.c:btf_is_any_enum Unexecuted instantiation: bpf.c:btf_is_any_enum Unexecuted instantiation: btf.c:btf_is_any_enum Unexecuted instantiation: strset.c:btf_is_any_enum Unexecuted instantiation: btf_iter.c:btf_is_any_enum Unexecuted instantiation: btf_relocate.c:btf_is_any_enum |
569 | | |
570 | | static inline bool btf_kind_core_compat(const struct btf_type *t1, |
571 | | const struct btf_type *t2) |
572 | 0 | { |
573 | 0 | return btf_kind(t1) == btf_kind(t2) || |
574 | 0 | (btf_is_any_enum(t1) && btf_is_any_enum(t2)); |
575 | 0 | } Unexecuted instantiation: libbpf.c:btf_kind_core_compat Unexecuted instantiation: libbpf_utils.c:btf_kind_core_compat Unexecuted instantiation: libbpf_probes.c:btf_kind_core_compat Unexecuted instantiation: gen_loader.c:btf_kind_core_compat Unexecuted instantiation: relo_core.c:btf_kind_core_compat Unexecuted instantiation: usdt.c:btf_kind_core_compat Unexecuted instantiation: zip.c:btf_kind_core_compat Unexecuted instantiation: elf.c:btf_kind_core_compat Unexecuted instantiation: features.c:btf_kind_core_compat Unexecuted instantiation: bpf.c:btf_kind_core_compat Unexecuted instantiation: btf.c:btf_kind_core_compat Unexecuted instantiation: strset.c:btf_kind_core_compat Unexecuted instantiation: btf_iter.c:btf_kind_core_compat Unexecuted instantiation: btf_relocate.c:btf_kind_core_compat |
576 | | |
577 | | static inline __u8 btf_int_encoding(const struct btf_type *t) |
578 | 219 | { |
579 | 219 | return BTF_INT_ENCODING(*(__u32 *)(t + 1)); |
580 | 219 | } libbpf.c:btf_int_encoding Line | Count | Source | 578 | 219 | { | 579 | 219 | return BTF_INT_ENCODING(*(__u32 *)(t + 1)); | 580 | 219 | } |
Unexecuted instantiation: libbpf_utils.c:btf_int_encoding Unexecuted instantiation: libbpf_probes.c:btf_int_encoding Unexecuted instantiation: gen_loader.c:btf_int_encoding Unexecuted instantiation: relo_core.c:btf_int_encoding Unexecuted instantiation: usdt.c:btf_int_encoding Unexecuted instantiation: zip.c:btf_int_encoding Unexecuted instantiation: elf.c:btf_int_encoding Unexecuted instantiation: features.c:btf_int_encoding Unexecuted instantiation: bpf.c:btf_int_encoding Unexecuted instantiation: btf.c:btf_int_encoding Unexecuted instantiation: strset.c:btf_int_encoding Unexecuted instantiation: btf_iter.c:btf_int_encoding Unexecuted instantiation: btf_relocate.c:btf_int_encoding |
581 | | |
582 | | static inline __u8 btf_int_offset(const struct btf_type *t) |
583 | 0 | { |
584 | 0 | return BTF_INT_OFFSET(*(__u32 *)(t + 1)); |
585 | 0 | } Unexecuted instantiation: libbpf.c:btf_int_offset Unexecuted instantiation: libbpf_utils.c:btf_int_offset Unexecuted instantiation: libbpf_probes.c:btf_int_offset Unexecuted instantiation: gen_loader.c:btf_int_offset Unexecuted instantiation: relo_core.c:btf_int_offset Unexecuted instantiation: usdt.c:btf_int_offset Unexecuted instantiation: zip.c:btf_int_offset Unexecuted instantiation: elf.c:btf_int_offset Unexecuted instantiation: features.c:btf_int_offset Unexecuted instantiation: bpf.c:btf_int_offset Unexecuted instantiation: btf.c:btf_int_offset Unexecuted instantiation: strset.c:btf_int_offset Unexecuted instantiation: btf_iter.c:btf_int_offset Unexecuted instantiation: btf_relocate.c:btf_int_offset |
586 | | |
587 | | static inline __u8 btf_int_bits(const struct btf_type *t) |
588 | 1.24k | { |
589 | 1.24k | return BTF_INT_BITS(*(__u32 *)(t + 1)); |
590 | 1.24k | } Line | Count | Source | 588 | 1.24k | { | 589 | 1.24k | return BTF_INT_BITS(*(__u32 *)(t + 1)); | 590 | 1.24k | } |
Unexecuted instantiation: libbpf_utils.c:btf_int_bits Unexecuted instantiation: libbpf_probes.c:btf_int_bits Unexecuted instantiation: gen_loader.c:btf_int_bits Unexecuted instantiation: relo_core.c:btf_int_bits Unexecuted instantiation: usdt.c:btf_int_bits Unexecuted instantiation: zip.c:btf_int_bits Unexecuted instantiation: elf.c:btf_int_bits Unexecuted instantiation: features.c:btf_int_bits Unexecuted instantiation: bpf.c:btf_int_bits Unexecuted instantiation: btf.c:btf_int_bits Unexecuted instantiation: strset.c:btf_int_bits Unexecuted instantiation: btf_iter.c:btf_int_bits Unexecuted instantiation: btf_relocate.c:btf_int_bits |
591 | | |
592 | | static inline struct btf_array *btf_array(const struct btf_type *t) |
593 | 5.05k | { |
594 | 5.05k | return (struct btf_array *)(t + 1); |
595 | 5.05k | } Line | Count | Source | 593 | 296 | { | 594 | 296 | return (struct btf_array *)(t + 1); | 595 | 296 | } |
Unexecuted instantiation: libbpf_utils.c:btf_array Unexecuted instantiation: libbpf_probes.c:btf_array Unexecuted instantiation: gen_loader.c:btf_array Unexecuted instantiation: relo_core.c:btf_array Unexecuted instantiation: usdt.c:btf_array Unexecuted instantiation: zip.c:btf_array Unexecuted instantiation: elf.c:btf_array Unexecuted instantiation: features.c:btf_array Unexecuted instantiation: bpf.c:btf_array Line | Count | Source | 593 | 4.76k | { | 594 | 4.76k | return (struct btf_array *)(t + 1); | 595 | 4.76k | } |
Unexecuted instantiation: strset.c:btf_array Unexecuted instantiation: btf_iter.c:btf_array Unexecuted instantiation: btf_relocate.c:btf_array |
596 | | |
597 | | static inline struct btf_enum *btf_enum(const struct btf_type *t) |
598 | 531 | { |
599 | 531 | return (struct btf_enum *)(t + 1); |
600 | 531 | } Unexecuted instantiation: libbpf.c:btf_enum Unexecuted instantiation: libbpf_utils.c:btf_enum Unexecuted instantiation: libbpf_probes.c:btf_enum Unexecuted instantiation: gen_loader.c:btf_enum Unexecuted instantiation: relo_core.c:btf_enum Unexecuted instantiation: usdt.c:btf_enum Unexecuted instantiation: zip.c:btf_enum Unexecuted instantiation: elf.c:btf_enum Unexecuted instantiation: features.c:btf_enum Unexecuted instantiation: bpf.c:btf_enum Line | Count | Source | 598 | 531 | { | 599 | 531 | return (struct btf_enum *)(t + 1); | 600 | 531 | } |
Unexecuted instantiation: strset.c:btf_enum Unexecuted instantiation: btf_iter.c:btf_enum Unexecuted instantiation: btf_relocate.c:btf_enum |
601 | | |
602 | | struct btf_enum64; |
603 | | |
604 | | static inline struct btf_enum64 *btf_enum64(const struct btf_type *t) |
605 | 497 | { |
606 | 497 | return (struct btf_enum64 *)(t + 1); |
607 | 497 | } Unexecuted instantiation: libbpf.c:btf_enum64 Unexecuted instantiation: libbpf_utils.c:btf_enum64 Unexecuted instantiation: libbpf_probes.c:btf_enum64 Unexecuted instantiation: gen_loader.c:btf_enum64 Unexecuted instantiation: relo_core.c:btf_enum64 Unexecuted instantiation: usdt.c:btf_enum64 Unexecuted instantiation: zip.c:btf_enum64 Unexecuted instantiation: elf.c:btf_enum64 Unexecuted instantiation: features.c:btf_enum64 Unexecuted instantiation: bpf.c:btf_enum64 Line | Count | Source | 605 | 497 | { | 606 | 497 | return (struct btf_enum64 *)(t + 1); | 607 | 497 | } |
Unexecuted instantiation: strset.c:btf_enum64 Unexecuted instantiation: btf_iter.c:btf_enum64 Unexecuted instantiation: btf_relocate.c:btf_enum64 |
608 | | |
609 | | static inline __u64 btf_enum64_value(const struct btf_enum64 *e) |
610 | 0 | { |
611 | | /* struct btf_enum64 is introduced in Linux 6.0, which is very |
612 | | * bleeding-edge. Here we are avoiding relying on struct btf_enum64 |
613 | | * definition coming from kernel UAPI headers to support wider range |
614 | | * of system-wide kernel headers. |
615 | | * |
616 | | * Given this header can be also included from C++ applications, that |
617 | | * further restricts C tricks we can use (like using compatible |
618 | | * anonymous struct). So just treat struct btf_enum64 as |
619 | | * a three-element array of u32 and access second (lo32) and third |
620 | | * (hi32) elements directly. |
621 | | * |
622 | | * For reference, here is a struct btf_enum64 definition: |
623 | | * |
624 | | * const struct btf_enum64 { |
625 | | * __u32 name_off; |
626 | | * __u32 val_lo32; |
627 | | * __u32 val_hi32; |
628 | | * }; |
629 | | */ |
630 | 0 | const __u32 *e64 = (const __u32 *)e; |
631 | |
|
632 | 0 | return ((__u64)e64[2] << 32) | e64[1]; |
633 | 0 | } Unexecuted instantiation: libbpf.c:btf_enum64_value Unexecuted instantiation: libbpf_utils.c:btf_enum64_value Unexecuted instantiation: libbpf_probes.c:btf_enum64_value Unexecuted instantiation: gen_loader.c:btf_enum64_value Unexecuted instantiation: relo_core.c:btf_enum64_value Unexecuted instantiation: usdt.c:btf_enum64_value Unexecuted instantiation: zip.c:btf_enum64_value Unexecuted instantiation: elf.c:btf_enum64_value Unexecuted instantiation: features.c:btf_enum64_value Unexecuted instantiation: bpf.c:btf_enum64_value Unexecuted instantiation: btf.c:btf_enum64_value Unexecuted instantiation: strset.c:btf_enum64_value Unexecuted instantiation: btf_iter.c:btf_enum64_value Unexecuted instantiation: btf_relocate.c:btf_enum64_value |
634 | | |
635 | | static inline struct btf_member *btf_members(const struct btf_type *t) |
636 | 1.36k | { |
637 | 1.36k | return (struct btf_member *)(t + 1); |
638 | 1.36k | } Line | Count | Source | 636 | 26 | { | 637 | 26 | return (struct btf_member *)(t + 1); | 638 | 26 | } |
Unexecuted instantiation: libbpf_utils.c:btf_members Unexecuted instantiation: libbpf_probes.c:btf_members Unexecuted instantiation: gen_loader.c:btf_members Unexecuted instantiation: relo_core.c:btf_members Unexecuted instantiation: usdt.c:btf_members Unexecuted instantiation: zip.c:btf_members Unexecuted instantiation: elf.c:btf_members Unexecuted instantiation: features.c:btf_members Unexecuted instantiation: bpf.c:btf_members Line | Count | Source | 636 | 1.33k | { | 637 | 1.33k | return (struct btf_member *)(t + 1); | 638 | 1.33k | } |
Unexecuted instantiation: strset.c:btf_members Unexecuted instantiation: btf_iter.c:btf_members Unexecuted instantiation: btf_relocate.c:btf_members |
639 | | |
640 | | /* Get bit offset of a member with specified index. */ |
641 | | static inline __u32 btf_member_bit_offset(const struct btf_type *t, |
642 | | __u32 member_idx) |
643 | 13 | { |
644 | 13 | const struct btf_member *m = btf_members(t) + member_idx; |
645 | 13 | bool kflag = btf_kflag(t); |
646 | | |
647 | 13 | return kflag ? BTF_MEMBER_BIT_OFFSET(m->offset) : m->offset; |
648 | 13 | } libbpf.c:btf_member_bit_offset Line | Count | Source | 643 | 13 | { | 644 | 13 | const struct btf_member *m = btf_members(t) + member_idx; | 645 | 13 | bool kflag = btf_kflag(t); | 646 | | | 647 | 13 | return kflag ? BTF_MEMBER_BIT_OFFSET(m->offset) : m->offset; | 648 | 13 | } |
Unexecuted instantiation: libbpf_utils.c:btf_member_bit_offset Unexecuted instantiation: libbpf_probes.c:btf_member_bit_offset Unexecuted instantiation: gen_loader.c:btf_member_bit_offset Unexecuted instantiation: relo_core.c:btf_member_bit_offset Unexecuted instantiation: usdt.c:btf_member_bit_offset Unexecuted instantiation: zip.c:btf_member_bit_offset Unexecuted instantiation: elf.c:btf_member_bit_offset Unexecuted instantiation: features.c:btf_member_bit_offset Unexecuted instantiation: bpf.c:btf_member_bit_offset Unexecuted instantiation: btf.c:btf_member_bit_offset Unexecuted instantiation: strset.c:btf_member_bit_offset Unexecuted instantiation: btf_iter.c:btf_member_bit_offset Unexecuted instantiation: btf_relocate.c:btf_member_bit_offset |
649 | | /* |
650 | | * Get bitfield size of a member, assuming t is BTF_KIND_STRUCT or |
651 | | * BTF_KIND_UNION. If member is not a bitfield, zero is returned. |
652 | | */ |
653 | | static inline __u32 btf_member_bitfield_size(const struct btf_type *t, |
654 | | __u32 member_idx) |
655 | 13 | { |
656 | 13 | const struct btf_member *m = btf_members(t) + member_idx; |
657 | 13 | bool kflag = btf_kflag(t); |
658 | | |
659 | 13 | return kflag ? BTF_MEMBER_BITFIELD_SIZE(m->offset) : 0; |
660 | 13 | } Unexecuted instantiation: libbpf.c:btf_member_bitfield_size Unexecuted instantiation: libbpf_utils.c:btf_member_bitfield_size Unexecuted instantiation: libbpf_probes.c:btf_member_bitfield_size Unexecuted instantiation: gen_loader.c:btf_member_bitfield_size Unexecuted instantiation: relo_core.c:btf_member_bitfield_size Unexecuted instantiation: usdt.c:btf_member_bitfield_size Unexecuted instantiation: zip.c:btf_member_bitfield_size Unexecuted instantiation: elf.c:btf_member_bitfield_size Unexecuted instantiation: features.c:btf_member_bitfield_size Unexecuted instantiation: bpf.c:btf_member_bitfield_size btf.c:btf_member_bitfield_size Line | Count | Source | 655 | 13 | { | 656 | 13 | const struct btf_member *m = btf_members(t) + member_idx; | 657 | 13 | bool kflag = btf_kflag(t); | 658 | | | 659 | 13 | return kflag ? BTF_MEMBER_BITFIELD_SIZE(m->offset) : 0; | 660 | 13 | } |
Unexecuted instantiation: strset.c:btf_member_bitfield_size Unexecuted instantiation: btf_iter.c:btf_member_bitfield_size Unexecuted instantiation: btf_relocate.c:btf_member_bitfield_size |
661 | | |
662 | | static inline struct btf_param *btf_params(const struct btf_type *t) |
663 | 2.63k | { |
664 | 2.63k | return (struct btf_param *)(t + 1); |
665 | 2.63k | } Line | Count | Source | 663 | 79 | { | 664 | 79 | return (struct btf_param *)(t + 1); | 665 | 79 | } |
Unexecuted instantiation: libbpf_utils.c:btf_params Unexecuted instantiation: libbpf_probes.c:btf_params Unexecuted instantiation: gen_loader.c:btf_params Unexecuted instantiation: relo_core.c:btf_params Unexecuted instantiation: usdt.c:btf_params Unexecuted instantiation: zip.c:btf_params Unexecuted instantiation: elf.c:btf_params Unexecuted instantiation: features.c:btf_params Unexecuted instantiation: bpf.c:btf_params Line | Count | Source | 663 | 2.55k | { | 664 | 2.55k | return (struct btf_param *)(t + 1); | 665 | 2.55k | } |
Unexecuted instantiation: strset.c:btf_params Unexecuted instantiation: btf_iter.c:btf_params Unexecuted instantiation: btf_relocate.c:btf_params |
666 | | |
667 | | static inline struct btf_var *btf_var(const struct btf_type *t) |
668 | 3.29k | { |
669 | 3.29k | return (struct btf_var *)(t + 1); |
670 | 3.29k | } Line | Count | Source | 668 | 2.22k | { | 669 | 2.22k | return (struct btf_var *)(t + 1); | 670 | 2.22k | } |
Unexecuted instantiation: libbpf_utils.c:btf_var Unexecuted instantiation: libbpf_probes.c:btf_var Unexecuted instantiation: gen_loader.c:btf_var Unexecuted instantiation: relo_core.c:btf_var Unexecuted instantiation: usdt.c:btf_var Unexecuted instantiation: zip.c:btf_var Unexecuted instantiation: elf.c:btf_var Unexecuted instantiation: features.c:btf_var Unexecuted instantiation: bpf.c:btf_var Line | Count | Source | 668 | 1.07k | { | 669 | 1.07k | return (struct btf_var *)(t + 1); | 670 | 1.07k | } |
Unexecuted instantiation: strset.c:btf_var Unexecuted instantiation: btf_iter.c:btf_var Unexecuted instantiation: btf_relocate.c:btf_var |
671 | | |
672 | | static inline struct btf_var_secinfo * |
673 | | btf_var_secinfos(const struct btf_type *t) |
674 | 11.9k | { |
675 | 11.9k | return (struct btf_var_secinfo *)(t + 1); |
676 | 11.9k | } libbpf.c:btf_var_secinfos Line | Count | Source | 674 | 6.41k | { | 675 | 6.41k | return (struct btf_var_secinfo *)(t + 1); | 676 | 6.41k | } |
Unexecuted instantiation: libbpf_utils.c:btf_var_secinfos Unexecuted instantiation: libbpf_probes.c:btf_var_secinfos Unexecuted instantiation: gen_loader.c:btf_var_secinfos Unexecuted instantiation: relo_core.c:btf_var_secinfos Unexecuted instantiation: usdt.c:btf_var_secinfos Unexecuted instantiation: zip.c:btf_var_secinfos Unexecuted instantiation: elf.c:btf_var_secinfos Unexecuted instantiation: features.c:btf_var_secinfos Unexecuted instantiation: bpf.c:btf_var_secinfos Line | Count | Source | 674 | 5.56k | { | 675 | 5.56k | return (struct btf_var_secinfo *)(t + 1); | 676 | 5.56k | } |
Unexecuted instantiation: strset.c:btf_var_secinfos Unexecuted instantiation: btf_iter.c:btf_var_secinfos Unexecuted instantiation: btf_relocate.c:btf_var_secinfos |
677 | | |
678 | | struct btf_decl_tag; |
679 | | static inline struct btf_decl_tag *btf_decl_tag(const struct btf_type *t) |
680 | 664 | { |
681 | 664 | return (struct btf_decl_tag *)(t + 1); |
682 | 664 | } Unexecuted instantiation: libbpf.c:btf_decl_tag Unexecuted instantiation: libbpf_utils.c:btf_decl_tag Unexecuted instantiation: libbpf_probes.c:btf_decl_tag Unexecuted instantiation: gen_loader.c:btf_decl_tag Unexecuted instantiation: relo_core.c:btf_decl_tag Unexecuted instantiation: usdt.c:btf_decl_tag Unexecuted instantiation: zip.c:btf_decl_tag Unexecuted instantiation: elf.c:btf_decl_tag Unexecuted instantiation: features.c:btf_decl_tag Unexecuted instantiation: bpf.c:btf_decl_tag Line | Count | Source | 680 | 664 | { | 681 | 664 | return (struct btf_decl_tag *)(t + 1); | 682 | 664 | } |
Unexecuted instantiation: strset.c:btf_decl_tag Unexecuted instantiation: btf_iter.c:btf_decl_tag Unexecuted instantiation: btf_relocate.c:btf_decl_tag |
683 | | |
684 | | #ifdef __cplusplus |
685 | | } /* extern "C" */ |
686 | | #endif |
687 | | |
688 | | #endif /* __LIBBPF_BTF_H */ |