Lines Matching refs:btf
26 struct btf { struct
40 static int btf_add_type(struct btf *btf, struct btf_type *t) in btf_add_type() argument
42 if (btf->types_size - btf->nr_types < 2) { in btf_add_type()
46 if (btf->types_size == BTF_MAX_NR_TYPES) in btf_add_type()
49 expand_by = max(btf->types_size >> 2, 16); in btf_add_type()
50 new_size = min(BTF_MAX_NR_TYPES, btf->types_size + expand_by); in btf_add_type()
52 new_types = realloc(btf->types, sizeof(*new_types) * new_size); in btf_add_type()
56 if (btf->nr_types == 0) in btf_add_type()
59 btf->types = new_types; in btf_add_type()
60 btf->types_size = new_size; in btf_add_type()
63 btf->types[++(btf->nr_types)] = t; in btf_add_type()
68 static int btf_parse_hdr(struct btf *btf, btf_print_fn_t err_log) in btf_parse_hdr() argument
70 const struct btf_header *hdr = btf->hdr; in btf_parse_hdr()
73 if (btf->data_size < sizeof(struct btf_header)) { in btf_parse_hdr()
93 meta_left = btf->data_size - sizeof(*hdr); in btf_parse_hdr()
119 btf->nohdr_data = btf->hdr + 1; in btf_parse_hdr()
124 static int btf_parse_str_sec(struct btf *btf, btf_print_fn_t err_log) in btf_parse_str_sec() argument
126 const struct btf_header *hdr = btf->hdr; in btf_parse_str_sec()
127 const char *start = btf->nohdr_data + hdr->str_off; in btf_parse_str_sec()
128 const char *end = start + btf->hdr->str_len; in btf_parse_str_sec()
136 btf->strings = start; in btf_parse_str_sec()
141 static int btf_parse_type_sec(struct btf *btf, btf_print_fn_t err_log) in btf_parse_type_sec() argument
143 struct btf_header *hdr = btf->hdr; in btf_parse_type_sec()
144 void *nohdr_data = btf->nohdr_data; in btf_parse_type_sec()
181 err = btf_add_type(btf, t); in btf_parse_type_sec()
189 const struct btf_type *btf__type_by_id(const struct btf *btf, __u32 type_id) in btf__type_by_id() argument
191 if (type_id > btf->nr_types) in btf__type_by_id()
194 return btf->types[type_id]; in btf__type_by_id()
224 __s64 btf__resolve_size(const struct btf *btf, __u32 type_id) in btf__resolve_size() argument
232 t = btf__type_by_id(btf, type_id); in btf__resolve_size()
257 t = btf__type_by_id(btf, type_id); in btf__resolve_size()
269 int btf__resolve_type(const struct btf *btf, __u32 type_id) in btf__resolve_type() argument
274 t = btf__type_by_id(btf, type_id); in btf__resolve_type()
279 t = btf__type_by_id(btf, type_id); in btf__resolve_type()
289 __s32 btf__find_by_name(const struct btf *btf, const char *type_name) in btf__find_by_name() argument
296 for (i = 1; i <= btf->nr_types; i++) { in btf__find_by_name()
297 const struct btf_type *t = btf->types[i]; in btf__find_by_name()
298 const char *name = btf__name_by_offset(btf, t->name_off); in btf__find_by_name()
307 void btf__free(struct btf *btf) in btf__free() argument
309 if (!btf) in btf__free()
312 if (btf->fd != -1) in btf__free()
313 close(btf->fd); in btf__free()
315 free(btf->data); in btf__free()
316 free(btf->types); in btf__free()
317 free(btf); in btf__free()
320 struct btf *btf__new(__u8 *data, __u32 size, btf_print_fn_t err_log) in btf__new()
324 struct btf *btf; in btf__new() local
327 btf = calloc(1, sizeof(struct btf)); in btf__new()
328 if (!btf) in btf__new()
331 btf->fd = -1; in btf__new()
343 btf->data = malloc(size); in btf__new()
344 if (!btf->data) { in btf__new()
349 memcpy(btf->data, data, size); in btf__new()
350 btf->data_size = size; in btf__new()
352 btf->fd = bpf_load_btf(btf->data, btf->data_size, in btf__new()
355 if (btf->fd == -1) { in btf__new()
363 err = btf_parse_hdr(btf, err_log); in btf__new()
367 err = btf_parse_str_sec(btf, err_log); in btf__new()
371 err = btf_parse_type_sec(btf, err_log); in btf__new()
377 btf__free(btf); in btf__new()
381 return btf; in btf__new()
384 int btf__fd(const struct btf *btf) in btf__fd() argument
386 return btf->fd; in btf__fd()
389 const char *btf__name_by_offset(const struct btf *btf, __u32 offset) in btf__name_by_offset() argument
391 if (offset < btf->hdr->str_len) in btf__name_by_offset()
392 return &btf->strings[offset]; in btf__name_by_offset()