btf 24 include/linux/bpf.h struct btf; btf 58 include/linux/bpf.h const struct btf *btf, btf 93 include/linux/bpf.h struct btf *btf; btf 171 include/linux/bpf.h return map->btf && map->ops->map_seq_show_elem; btf 175 include/linux/bpf.h const struct btf *btf, btf 395 include/linux/bpf.h struct btf *btf; btf 9 include/linux/btf.h struct btf; btf 16 include/linux/btf.h void btf_put(struct btf *btf); btf 18 include/linux/btf.h struct btf *btf_get_by_fd(int fd); btf 19 include/linux/btf.h int btf_get_info_by_fd(const struct btf *btf, btf 43 include/linux/btf.h const struct btf_type *btf_type_id_size(const struct btf *btf, btf 46 include/linux/btf.h void btf_type_seq_show(const struct btf *btf, u32 type_id, void *obj, btf 49 include/linux/btf.h u32 btf_id(const struct btf *btf); btf 50 include/linux/btf.h bool btf_member_is_reg_int(const struct btf *btf, const struct btf_type *s, btf 53 include/linux/btf.h int btf_find_spin_lock(const struct btf *btf, const struct btf_type *t); btf 57 include/linux/btf.h const struct btf_type *btf_type_by_id(const struct btf *btf, u32 type_id); btf 58 include/linux/btf.h const char *btf_name_by_offset(const struct btf *btf, u32 offset); btf 60 include/linux/btf.h static inline const struct btf_type *btf_type_by_id(const struct btf *btf, btf 65 include/linux/btf.h static inline const char *btf_name_by_offset(const struct btf *btf, btf 491 include/uapi/linux/bpf.h __aligned_u64 btf; btf 3275 include/uapi/linux/bpf.h __aligned_u64 btf; btf 386 kernel/bpf/arraymap.c btf_type_seq_show(map->btf, map->btf_value_type_id, value, m); btf 406 kernel/bpf/arraymap.c btf_type_seq_show(map->btf, map->btf_value_type_id, btf 416 kernel/bpf/arraymap.c const struct btf *btf, btf 619 kernel/bpf/arraymap.c btf_type_seq_show(map->btf, map->btf_value_type_id, btf 250 kernel/bpf/btf.c struct btf *btf; btf 295 kernel/bpf/btf.c void (*seq_show)(const struct btf *btf, const struct btf_type *t, btf 523 kernel/bpf/btf.c static bool btf_name_offset_valid(const struct btf *btf, u32 offset) btf 526 kernel/bpf/btf.c offset < btf->hdr.str_len; btf 540 kernel/bpf/btf.c static bool __btf_name_valid(const struct btf *btf, u32 offset, bool dot_ok) btf 543 kernel/bpf/btf.c const char *src = &btf->strings[offset]; btf 564 kernel/bpf/btf.c static bool btf_name_valid_identifier(const struct btf *btf, u32 offset) btf 566 kernel/bpf/btf.c return __btf_name_valid(btf, offset, false); btf 569 kernel/bpf/btf.c static bool btf_name_valid_section(const struct btf *btf, u32 offset) btf 571 kernel/bpf/btf.c return __btf_name_valid(btf, offset, true); btf 574 kernel/bpf/btf.c static const char *__btf_name_by_offset(const struct btf *btf, u32 offset) btf 578 kernel/bpf/btf.c else if (offset < btf->hdr.str_len) btf 579 kernel/bpf/btf.c return &btf->strings[offset]; btf 584 kernel/bpf/btf.c const char *btf_name_by_offset(const struct btf *btf, u32 offset) btf 586 kernel/bpf/btf.c if (offset < btf->hdr.str_len) btf 587 kernel/bpf/btf.c return &btf->strings[offset]; btf 592 kernel/bpf/btf.c const struct btf_type *btf_type_by_id(const struct btf *btf, u32 type_id) btf 594 kernel/bpf/btf.c if (type_id > btf->nr_types) btf 597 kernel/bpf/btf.c return btf->types[type_id]; btf 627 kernel/bpf/btf.c bool btf_member_is_reg_int(const struct btf *btf, const struct btf_type *s, btf 636 kernel/bpf/btf.c t = btf_type_id_size(btf, &id, NULL); btf 695 kernel/bpf/btf.c struct btf *btf = env->btf; btf 704 kernel/bpf/btf.c __btf_name_by_offset(btf, t->name_off), btf 732 kernel/bpf/btf.c struct btf *btf = env->btf; btf 750 kernel/bpf/btf.c __btf_name_by_offset(btf, member->name_off), btf 756 kernel/bpf/btf.c __btf_name_by_offset(btf, member->name_off), btf 799 kernel/bpf/btf.c const struct btf *btf = env->btf; btf 805 kernel/bpf/btf.c hdr = &btf->hdr; btf 819 kernel/bpf/btf.c struct btf *btf = env->btf; btf 825 kernel/bpf/btf.c if (btf->types_size - btf->nr_types < 2) { btf 831 kernel/bpf/btf.c if (btf->types_size == BTF_MAX_TYPE) { btf 836 kernel/bpf/btf.c expand_by = max_t(u32, btf->types_size >> 2, 16); btf 838 kernel/bpf/btf.c btf->types_size + expand_by); btf 845 kernel/bpf/btf.c if (btf->nr_types == 0) btf 848 kernel/bpf/btf.c memcpy(new_types, btf->types, btf 849 kernel/bpf/btf.c sizeof(*btf->types) * (btf->nr_types + 1)); btf 851 kernel/bpf/btf.c kvfree(btf->types); btf 852 kernel/bpf/btf.c btf->types = new_types; btf 853 kernel/bpf/btf.c btf->types_size = new_size; btf 856 kernel/bpf/btf.c btf->types[++(btf->nr_types)] = t; btf 861 kernel/bpf/btf.c static int btf_alloc_id(struct btf *btf) btf 867 kernel/bpf/btf.c id = idr_alloc_cyclic(&btf_idr, btf, 1, INT_MAX, GFP_ATOMIC); btf 869 kernel/bpf/btf.c btf->id = id; btf 879 kernel/bpf/btf.c static void btf_free_id(struct btf *btf) btf 893 kernel/bpf/btf.c idr_remove(&btf_idr, btf->id); btf 897 kernel/bpf/btf.c static void btf_free(struct btf *btf) btf 899 kernel/bpf/btf.c kvfree(btf->types); btf 900 kernel/bpf/btf.c kvfree(btf->resolved_sizes); btf 901 kernel/bpf/btf.c kvfree(btf->resolved_ids); btf 902 kernel/bpf/btf.c kvfree(btf->data); btf 903 kernel/bpf/btf.c kfree(btf); btf 908 kernel/bpf/btf.c struct btf *btf = container_of(rcu, struct btf, rcu); btf 910 kernel/bpf/btf.c btf_free(btf); btf 913 kernel/bpf/btf.c void btf_put(struct btf *btf) btf 915 kernel/bpf/btf.c if (btf && refcount_dec_and_test(&btf->refcnt)) { btf 916 kernel/bpf/btf.c btf_free_id(btf); btf 917 kernel/bpf/btf.c call_rcu(&btf->rcu, btf_free_rcu); btf 923 kernel/bpf/btf.c struct btf *btf = env->btf; btf 924 kernel/bpf/btf.c u32 nr_types = btf->nr_types; btf 945 kernel/bpf/btf.c btf->resolved_sizes = resolved_sizes; btf 946 kernel/bpf/btf.c btf->resolved_ids = resolved_ids; btf 1034 kernel/bpf/btf.c struct btf *btf = env->btf; btf 1036 kernel/bpf/btf.c btf->resolved_sizes[type_id] = resolved_size; btf 1037 kernel/bpf/btf.c btf->resolved_ids[type_id] = resolved_type_id; btf 1047 kernel/bpf/btf.c static const struct btf_type *btf_type_id_resolve(const struct btf *btf, btf 1050 kernel/bpf/btf.c *type_id = btf->resolved_ids[*type_id]; btf 1051 kernel/bpf/btf.c return btf_type_by_id(btf, *type_id); btf 1054 kernel/bpf/btf.c const struct btf_type *btf_type_id_size(const struct btf *btf, btf 1061 kernel/bpf/btf.c size_type = btf_type_by_id(btf, size_type_id); btf 1068 kernel/bpf/btf.c size = btf->resolved_sizes[size_type_id]; btf 1076 kernel/bpf/btf.c size_type_id = btf->resolved_ids[size_type_id]; btf 1077 kernel/bpf/btf.c size_type = btf_type_by_id(btf, size_type_id); btf 1083 kernel/bpf/btf.c size = btf->resolved_sizes[size_type_id]; btf 1146 kernel/bpf/btf.c static void btf_df_seq_show(const struct btf *btf, const struct btf_type *t, btf 1413 kernel/bpf/btf.c static void btf_int_bits_seq_show(const struct btf *btf, btf 1432 kernel/bpf/btf.c static void btf_int_seq_show(const struct btf *btf, const struct btf_type *t, btf 1443 kernel/bpf/btf.c btf_int_bits_seq_show(btf, t, data, bits_offset, m); btf 1476 kernel/bpf/btf.c btf_int_bits_seq_show(btf, t, data, bits_offset, m); btf 1497 kernel/bpf/btf.c struct btf *btf = env->btf; btf 1499 kernel/bpf/btf.c resolved_type = btf_type_id_size(btf, &resolved_type_id, NULL); btf 1522 kernel/bpf/btf.c struct btf *btf = env->btf; btf 1524 kernel/bpf/btf.c resolved_type = btf_type_id_size(btf, &resolved_type_id, NULL); btf 1589 kernel/bpf/btf.c !btf_name_valid_identifier(env->btf, t->name_off)) { btf 1611 kernel/bpf/btf.c struct btf *btf = env->btf; btf 1613 kernel/bpf/btf.c next_type = btf_type_by_id(btf, next_type_id); btf 1629 kernel/bpf/btf.c if (!btf_type_id_size(btf, &next_type_id, NULL)) { btf 1631 kernel/bpf/btf.c next_type = btf_type_id_resolve(btf, &next_type_id); btf 1653 kernel/bpf/btf.c struct btf *btf = env->btf; btf 1655 kernel/bpf/btf.c next_type = btf_type_by_id(btf, next_type_id); btf 1670 kernel/bpf/btf.c resolved_type = btf_type_id_resolve(btf, &resolved_type_id); btf 1683 kernel/bpf/btf.c if (!btf_type_id_size(btf, &next_type_id, NULL)) { btf 1699 kernel/bpf/btf.c struct btf *btf = env->btf; btf 1701 kernel/bpf/btf.c next_type = btf_type_by_id(btf, next_type_id); btf 1724 kernel/bpf/btf.c resolved_type = btf_type_id_resolve(btf, &resolved_type_id); btf 1733 kernel/bpf/btf.c if (!btf_type_id_size(btf, &next_type_id, NULL)) { btf 1735 kernel/bpf/btf.c next_type = btf_type_id_resolve(btf, &next_type_id); btf 1750 kernel/bpf/btf.c static void btf_modifier_seq_show(const struct btf *btf, btf 1755 kernel/bpf/btf.c t = btf_type_id_resolve(btf, &type_id); btf 1757 kernel/bpf/btf.c btf_type_ops(t)->seq_show(btf, t, type_id, data, bits_offset, m); btf 1760 kernel/bpf/btf.c static void btf_var_seq_show(const struct btf *btf, const struct btf_type *t, btf 1764 kernel/bpf/btf.c t = btf_type_id_resolve(btf, &type_id); btf 1766 kernel/bpf/btf.c btf_type_ops(t)->seq_show(btf, t, type_id, data, bits_offset, m); btf 1769 kernel/bpf/btf.c static void btf_ptr_seq_show(const struct btf *btf, const struct btf_type *t, btf 1817 kernel/bpf/btf.c !btf_name_valid_identifier(env->btf, t->name_off)) { btf 1850 kernel/bpf/btf.c struct btf *btf = env->btf; btf 1859 kernel/bpf/btf.c btf_type_id_size(btf, &array_type_id, &array_size); btf 1930 kernel/bpf/btf.c struct btf *btf = env->btf; btf 1935 kernel/bpf/btf.c index_type = btf_type_by_id(btf, index_type_id); btf 1946 kernel/bpf/btf.c index_type = btf_type_id_size(btf, &index_type_id, NULL); btf 1955 kernel/bpf/btf.c elem_type = btf_type_by_id(btf, elem_type_id); btf 1967 kernel/bpf/btf.c elem_type = btf_type_id_size(btf, &elem_type_id, &elem_size); btf 1998 kernel/bpf/btf.c static void btf_array_seq_show(const struct btf *btf, const struct btf_type *t, btf 2008 kernel/bpf/btf.c elem_type = btf_type_id_size(btf, &elem_type_id, &elem_size); btf 2015 kernel/bpf/btf.c elem_ops->seq_show(btf, elem_type, elem_type_id, data, btf 2063 kernel/bpf/btf.c struct btf *btf = env->btf; btf 2078 kernel/bpf/btf.c !btf_name_valid_identifier(env->btf, t->name_off)) { btf 2087 kernel/bpf/btf.c if (!btf_name_offset_valid(btf, member->name_off)) { btf 2096 kernel/bpf/btf.c !btf_name_valid_identifier(btf, member->name_off)) { btf 2159 kernel/bpf/btf.c last_member_type = btf_type_by_id(env->btf, btf 2175 kernel/bpf/btf.c const struct btf_type *member_type = btf_type_by_id(env->btf, btf 2218 kernel/bpf/btf.c int btf_find_spin_lock(const struct btf *btf, const struct btf_type *t) btf 2227 kernel/bpf/btf.c const struct btf_type *member_type = btf_type_by_id(btf, btf 2233 kernel/bpf/btf.c if (strcmp(__btf_name_by_offset(btf, member_type->name_off), btf 2251 kernel/bpf/btf.c static void btf_struct_seq_show(const struct btf *btf, const struct btf_type *t, btf 2261 kernel/bpf/btf.c const struct btf_type *member_type = btf_type_by_id(btf, btf 2280 kernel/bpf/btf.c ops->seq_show(btf, member_type, member->type, btf 2361 kernel/bpf/btf.c struct btf *btf = env->btf; btf 2387 kernel/bpf/btf.c !btf_name_valid_identifier(env->btf, t->name_off)) { btf 2395 kernel/bpf/btf.c if (!btf_name_offset_valid(btf, enums[i].name_off)) { btf 2403 kernel/bpf/btf.c !btf_name_valid_identifier(btf, enums[i].name_off)) { btf 2410 kernel/bpf/btf.c __btf_name_by_offset(btf, enums[i].name_off), btf 2423 kernel/bpf/btf.c static void btf_enum_seq_show(const struct btf *btf, const struct btf_type *t, btf 2434 kernel/bpf/btf.c __btf_name_by_offset(btf, btf 2499 kernel/bpf/btf.c __btf_name_by_offset(env->btf, btf 2503 kernel/bpf/btf.c __btf_name_by_offset(env->btf, btf 2511 kernel/bpf/btf.c __btf_name_by_offset(env->btf, btf 2544 kernel/bpf/btf.c !btf_name_valid_identifier(env->btf, t->name_off)) { btf 2598 kernel/bpf/btf.c !__btf_name_valid(env->btf, t->name_off, true)) { btf 2669 kernel/bpf/btf.c !btf_name_valid_section(env->btf, t->name_off)) { btf 2719 kernel/bpf/btf.c struct btf *btf = env->btf; btf 2724 kernel/bpf/btf.c const struct btf_type *var_type = btf_type_by_id(env->btf, btf 2739 kernel/bpf/btf.c if (!btf_type_id_size(btf, &type_id, &type_size)) { btf 2760 kernel/bpf/btf.c static void btf_datasec_seq_show(const struct btf *btf, btf 2769 kernel/bpf/btf.c seq_printf(m, "section (\"%s\") = {", __btf_name_by_offset(btf, t->name_off)); btf 2771 kernel/bpf/btf.c var = btf_type_by_id(btf, vsi->type); btf 2774 kernel/bpf/btf.c btf_type_ops(var)->seq_show(btf, var, vsi->type, btf 2794 kernel/bpf/btf.c const struct btf *btf; btf 2798 kernel/bpf/btf.c btf = env->btf; btf 2806 kernel/bpf/btf.c ret_type = btf_type_by_id(btf, ret_type_id); btf 2820 kernel/bpf/btf.c if (!btf_type_id_size(btf, &ret_type_id, NULL)) { btf 2845 kernel/bpf/btf.c arg_type = btf_type_by_id(btf, arg_type_id); btf 2853 kernel/bpf/btf.c (!btf_name_offset_valid(btf, args[i].name_off) || btf 2854 kernel/bpf/btf.c !btf_name_valid_identifier(btf, args[i].name_off))) { btf 2868 kernel/bpf/btf.c if (!btf_type_id_size(btf, &arg_type_id, NULL)) { btf 2883 kernel/bpf/btf.c const struct btf *btf; btf 2886 kernel/bpf/btf.c btf = env->btf; btf 2887 kernel/bpf/btf.c proto_type = btf_type_by_id(btf, t->type); btf 2951 kernel/bpf/btf.c if (!btf_name_offset_valid(env->btf, t->name_off)) { btf 2968 kernel/bpf/btf.c struct btf *btf = env->btf; btf 2972 kernel/bpf/btf.c hdr = &btf->hdr; btf 2973 kernel/bpf/btf.c cur = btf->nohdr_data + hdr->type_off; btf 2997 kernel/bpf/btf.c struct btf *btf = env->btf; btf 3003 kernel/bpf/btf.c return !btf->resolved_ids[type_id] && btf 3004 kernel/bpf/btf.c !btf->resolved_sizes[type_id]; btf 3008 kernel/bpf/btf.c t = btf_type_id_resolve(btf, &type_id); btf 3021 kernel/bpf/btf.c elem_type = btf_type_id_size(btf, &elem_type_id, &elem_size); btf 3024 kernel/bpf/btf.c btf->resolved_sizes[type_id]); btf 3065 kernel/bpf/btf.c struct btf *btf = env->btf; btf 3074 kernel/bpf/btf.c for (type_id = 1; type_id <= btf->nr_types; type_id++) { btf 3075 kernel/bpf/btf.c const struct btf_type *t = btf_type_by_id(btf, type_id); btf 3103 kernel/bpf/btf.c const struct btf_header *hdr = &env->btf->hdr; btf 3127 kernel/bpf/btf.c struct btf *btf = env->btf; btf 3130 kernel/bpf/btf.c hdr = &btf->hdr; btf 3131 kernel/bpf/btf.c start = btf->nohdr_data + hdr->str_off; btf 3134 kernel/bpf/btf.c if (end != btf->data + btf->data_size) { btf 3145 kernel/bpf/btf.c btf->strings = start; btf 3169 kernel/bpf/btf.c const struct btf *btf; btf 3171 kernel/bpf/btf.c btf = env->btf; btf 3172 kernel/bpf/btf.c hdr = &btf->hdr; btf 3220 kernel/bpf/btf.c struct btf *btf; btf 3223 kernel/bpf/btf.c btf = env->btf; btf 3224 kernel/bpf/btf.c btf_data_size = btf->data_size; btf 3232 kernel/bpf/btf.c hdr = btf->data; btf 3240 kernel/bpf/btf.c if (hdr_len > sizeof(btf->hdr)) { btf 3241 kernel/bpf/btf.c u8 *expected_zero = btf->data + sizeof(btf->hdr); btf 3242 kernel/bpf/btf.c u8 *end = btf->data + hdr_len; btf 3252 kernel/bpf/btf.c hdr_copy = min_t(u32, hdr_len, sizeof(btf->hdr)); btf 3253 kernel/bpf/btf.c memcpy(&btf->hdr, btf->data, hdr_copy); btf 3255 kernel/bpf/btf.c hdr = &btf->hdr; btf 3286 kernel/bpf/btf.c static struct btf *btf_parse(void __user *btf_data, u32 btf_data_size, btf 3291 kernel/bpf/btf.c struct btf *btf = NULL; btf 3319 kernel/bpf/btf.c btf = kzalloc(sizeof(*btf), GFP_KERNEL | __GFP_NOWARN); btf 3320 kernel/bpf/btf.c if (!btf) { btf 3324 kernel/bpf/btf.c env->btf = btf; btf 3332 kernel/bpf/btf.c btf->data = data; btf 3333 kernel/bpf/btf.c btf->data_size = btf_data_size; btf 3344 kernel/bpf/btf.c btf->nohdr_data = btf->data + btf->hdr.hdr_len; btf 3360 kernel/bpf/btf.c refcount_set(&btf->refcnt, 1); btf 3361 kernel/bpf/btf.c return btf; btf 3365 kernel/bpf/btf.c if (btf) btf 3366 kernel/bpf/btf.c btf_free(btf); btf 3370 kernel/bpf/btf.c void btf_type_seq_show(const struct btf *btf, u32 type_id, void *obj, btf 3373 kernel/bpf/btf.c const struct btf_type *t = btf_type_by_id(btf, type_id); btf 3375 kernel/bpf/btf.c btf_type_ops(t)->seq_show(btf, t, type_id, obj, 0, m); btf 3381 kernel/bpf/btf.c const struct btf *btf = filp->private_data; btf 3383 kernel/bpf/btf.c seq_printf(m, "btf_id:\t%u\n", btf->id); btf 3400 kernel/bpf/btf.c static int __btf_new_fd(struct btf *btf) btf 3402 kernel/bpf/btf.c return anon_inode_getfd("btf", &btf_fops, btf, O_RDONLY | O_CLOEXEC); btf 3407 kernel/bpf/btf.c struct btf *btf; btf 3410 kernel/bpf/btf.c btf = btf_parse(u64_to_user_ptr(attr->btf), btf 3414 kernel/bpf/btf.c if (IS_ERR(btf)) btf 3415 kernel/bpf/btf.c return PTR_ERR(btf); btf 3417 kernel/bpf/btf.c ret = btf_alloc_id(btf); btf 3419 kernel/bpf/btf.c btf_free(btf); btf 3429 kernel/bpf/btf.c ret = __btf_new_fd(btf); btf 3431 kernel/bpf/btf.c btf_put(btf); btf 3436 kernel/bpf/btf.c struct btf *btf_get_by_fd(int fd) btf 3438 kernel/bpf/btf.c struct btf *btf; btf 3451 kernel/bpf/btf.c btf = f.file->private_data; btf 3452 kernel/bpf/btf.c refcount_inc(&btf->refcnt); btf 3455 kernel/bpf/btf.c return btf; btf 3458 kernel/bpf/btf.c int btf_get_info_by_fd(const struct btf *btf, btf 3476 kernel/bpf/btf.c info.id = btf->id; btf 3477 kernel/bpf/btf.c ubtf = u64_to_user_ptr(info.btf); btf 3478 kernel/bpf/btf.c btf_copy = min_t(u32, btf->data_size, info.btf_size); btf 3479 kernel/bpf/btf.c if (copy_to_user(ubtf, btf->data, btf_copy)) btf 3481 kernel/bpf/btf.c info.btf_size = btf->data_size; btf 3492 kernel/bpf/btf.c struct btf *btf; btf 3496 kernel/bpf/btf.c btf = idr_find(&btf_idr, id); btf 3497 kernel/bpf/btf.c if (!btf || !refcount_inc_not_zero(&btf->refcnt)) btf 3498 kernel/bpf/btf.c btf = ERR_PTR(-ENOENT); btf 3501 kernel/bpf/btf.c if (IS_ERR(btf)) btf 3502 kernel/bpf/btf.c return PTR_ERR(btf); btf 3504 kernel/bpf/btf.c fd = __btf_new_fd(btf); btf 3506 kernel/bpf/btf.c btf_put(btf); btf 3511 kernel/bpf/btf.c u32 btf_id(const struct btf *btf) btf 3513 kernel/bpf/btf.c return btf->id; btf 562 kernel/bpf/core.c type = btf_type_by_id(prog->aux->btf, btf 564 kernel/bpf/core.c func_name = btf_name_by_offset(prog->aux->btf, type->name_off); btf 1227 kernel/bpf/hashtab.c btf_type_seq_show(map->btf, map->btf_key_type_id, key, m); btf 1229 kernel/bpf/hashtab.c btf_type_seq_show(map->btf, map->btf_value_type_id, value, m); btf 1348 kernel/bpf/hashtab.c btf_type_seq_show(map->btf, map->btf_key_type_id, key, m); btf 1353 kernel/bpf/hashtab.c btf_type_seq_show(map->btf, map->btf_value_type_id, btf 334 kernel/bpf/local_storage.c const struct btf *btf, btf 361 kernel/bpf/local_storage.c if (!btf_member_is_reg_int(btf, key_type, m, 0, size)) btf 370 kernel/bpf/local_storage.c if (!btf_member_is_reg_int(btf, key_type, m, offset, size)) btf 391 kernel/bpf/local_storage.c btf_type_seq_show(map->btf, map->btf_key_type_id, key, m); btf 395 kernel/bpf/local_storage.c btf_type_seq_show(map->btf, map->btf_value_type_id, btf 402 kernel/bpf/local_storage.c btf_type_seq_show(map->btf, map->btf_value_type_id, btf 729 kernel/bpf/lpm_trie.c const struct btf *btf, btf 330 kernel/bpf/syscall.c btf_put(map->btf); btf 494 kernel/bpf/syscall.c const struct btf *btf, btf 501 kernel/bpf/syscall.c static int map_check_btf(struct bpf_map *map, const struct btf *btf, btf 510 kernel/bpf/syscall.c key_type = btf_type_id_size(btf, &btf_key_id, &key_size); btf 514 kernel/bpf/syscall.c key_type = btf_type_by_id(btf, 0); btf 519 kernel/bpf/syscall.c value_type = btf_type_id_size(btf, &btf_value_id, &value_size); btf 523 kernel/bpf/syscall.c map->spin_lock_off = btf_find_spin_lock(btf, value_type); btf 543 kernel/bpf/syscall.c ret = map->ops->map_check_btf(map, btf, key_type, value_type); btf 584 kernel/bpf/syscall.c struct btf *btf; btf 591 kernel/bpf/syscall.c btf = btf_get_by_fd(attr->btf_fd); btf 592 kernel/bpf/syscall.c if (IS_ERR(btf)) { btf 593 kernel/bpf/syscall.c err = PTR_ERR(btf); btf 597 kernel/bpf/syscall.c err = map_check_btf(map, btf, attr->btf_key_type_id, btf 600 kernel/bpf/syscall.c btf_put(btf); btf 604 kernel/bpf/syscall.c map->btf = btf; btf 636 kernel/bpf/syscall.c btf_put(map->btf); btf 1344 kernel/bpf/syscall.c btf_put(prog->aux->btf); btf 2522 kernel/bpf/syscall.c if (prog->aux->btf) btf 2523 kernel/bpf/syscall.c info.btf_id = btf_id(prog->aux->btf); btf 2624 kernel/bpf/syscall.c if (map->btf) { btf 2625 kernel/bpf/syscall.c info.btf_id = btf_id(map->btf); btf 2643 kernel/bpf/syscall.c static int bpf_btf_get_info_by_fd(struct btf *btf, btf 2655 kernel/bpf/syscall.c return btf_get_info_by_fd(btf, attr, uattr); btf 312 kernel/bpf/verifier.c ltrim(btf_name_by_offset(env->prog->aux->btf, btf 3159 kernel/bpf/verifier.c if (!map->btf) { btf 6493 kernel/bpf/verifier.c const struct btf *btf; btf 6516 kernel/bpf/verifier.c btf = prog->aux->btf; btf 6568 kernel/bpf/verifier.c type = btf_type_by_id(btf, krecord[i].type_id); btf 6612 kernel/bpf/verifier.c const struct btf *btf; btf 6635 kernel/bpf/verifier.c btf = prog->aux->btf; btf 6687 kernel/bpf/verifier.c if (!btf_name_by_offset(btf, linfo[i].line_off) || btf 6688 kernel/bpf/verifier.c !btf_name_by_offset(btf, linfo[i].file_name_off)) { btf 6730 kernel/bpf/verifier.c struct btf *btf; btf 6736 kernel/bpf/verifier.c btf = btf_get_by_fd(attr->prog_btf_fd); btf 6737 kernel/bpf/verifier.c if (IS_ERR(btf)) btf 6738 kernel/bpf/verifier.c return PTR_ERR(btf); btf 6739 kernel/bpf/verifier.c env->prog->aux->btf = btf; btf 8810 kernel/bpf/verifier.c func[i]->aux->btf = prog->aux->btf; btf 685 net/core/bpf_sk_storage.c const struct btf *btf, btf 77 tools/bpf/bpftool/btf.c static const char *btf_str(const struct btf *btf, __u32 off) btf 81 tools/bpf/bpftool/btf.c return btf__name_by_offset(btf, off) ? : "(invalid)"; btf 84 tools/bpf/bpftool/btf.c static int dump_btf_type(const struct btf *btf, __u32 id, btf 97 tools/bpf/bpftool/btf.c jsonw_string_field(w, "name", btf_str(btf, t->name_off)); btf 100 tools/bpf/bpftool/btf.c btf_str(btf, t->name_off)); btf 160 tools/bpf/bpftool/btf.c const char *name = btf_str(btf, m->name_off); btf 206 tools/bpf/bpftool/btf.c const char *name = btf_str(btf, v->name_off); btf 251 tools/bpf/bpftool/btf.c const char *name = btf_str(btf, p->name_off); btf 321 tools/bpf/bpftool/btf.c static int dump_btf_raw(const struct btf *btf, btf 335 tools/bpf/bpftool/btf.c t = btf__type_by_id(btf, root_type_ids[i]); btf 336 tools/bpf/bpftool/btf.c dump_btf_type(btf, root_type_ids[i], t); btf 339 tools/bpf/bpftool/btf.c int cnt = btf__get_nr_types(btf); btf 342 tools/bpf/bpftool/btf.c t = btf__type_by_id(btf, i); btf 343 tools/bpf/bpftool/btf.c dump_btf_type(btf, i, t); btf 360 tools/bpf/bpftool/btf.c static int dump_btf_c(const struct btf *btf, btf 366 tools/bpf/bpftool/btf.c d = btf_dump__new(btf, NULL, NULL, btf_dump_printf); btf 377 tools/bpf/bpftool/btf.c int cnt = btf__get_nr_types(btf); btf 393 tools/bpf/bpftool/btf.c struct btf *btf = NULL; btf 468 tools/bpf/bpftool/btf.c btf = btf__parse_elf(*argv, NULL); btf 469 tools/bpf/bpftool/btf.c if (IS_ERR(btf)) { btf 470 tools/bpf/bpftool/btf.c err = PTR_ERR(btf); btf 471 tools/bpf/bpftool/btf.c btf = NULL; btf 506 tools/bpf/bpftool/btf.c if (!btf) { btf 507 tools/bpf/bpftool/btf.c err = btf__get_from_id(btf_id, &btf); btf 512 tools/bpf/bpftool/btf.c if (!btf) { btf 525 tools/bpf/bpftool/btf.c err = dump_btf_c(btf, root_type_ids, root_type_cnt); btf 527 tools/bpf/bpftool/btf.c err = dump_btf_raw(btf, root_type_ids, root_type_cnt); btf 532 tools/bpf/bpftool/btf.c btf__free(btf); btf 39 tools/bpf/bpftool/btf_dumper.c actual_type_id = btf__resolve_type(d->btf, type_id); btf 54 tools/bpf/bpftool/btf_dumper.c const struct btf_type *t = btf__type_by_id(d->btf, type_id); btf 60 tools/bpf/bpftool/btf_dumper.c elem_size = btf__resolve_size(d->btf, arr->type); btf 274 tools/bpf/bpftool/btf_dumper.c t = btf__type_by_id(d->btf, type_id); btf 292 tools/bpf/bpftool/btf_dumper.c jsonw_name(d->jw, btf__name_by_offset(d->btf, m[i].name_off)); btf 315 tools/bpf/bpftool/btf_dumper.c const struct btf_type *t = btf__type_by_id(d->btf, type_id); btf 319 tools/bpf/bpftool/btf_dumper.c jsonw_name(d->jw, btf__name_by_offset(d->btf, t->name_off)); btf 333 tools/bpf/bpftool/btf_dumper.c t = btf__type_by_id(d->btf, type_id); btf 341 tools/bpf/bpftool/btf_dumper.c jsonw_name(d->jw, btf__name_by_offset(d->btf, t->name_off)); btf 357 tools/bpf/bpftool/btf_dumper.c const struct btf_type *t = btf__type_by_id(d->btf, type_id); btf 411 tools/bpf/bpftool/btf_dumper.c pos = __btf_dumper_type_only(btf, type, func_sig, \ btf 417 tools/bpf/bpftool/btf_dumper.c static int btf_dump_func(const struct btf *btf, char *func_sig, btf 421 tools/bpf/bpftool/btf_dumper.c static int __btf_dumper_type_only(const struct btf *btf, __u32 type_id, btf 434 tools/bpf/bpftool/btf_dumper.c t = btf__type_by_id(btf, type_id); btf 439 tools/bpf/bpftool/btf_dumper.c BTF_PRINT_ARG("%s ", btf__name_by_offset(btf, t->name_off)); btf 443 tools/bpf/bpftool/btf_dumper.c btf__name_by_offset(btf, t->name_off)); btf 447 tools/bpf/bpftool/btf_dumper.c btf__name_by_offset(btf, t->name_off)); btf 451 tools/bpf/bpftool/btf_dumper.c btf__name_by_offset(btf, t->name_off)); btf 465 tools/bpf/bpftool/btf_dumper.c btf__name_by_offset(btf, t->name_off)); btf 480 tools/bpf/bpftool/btf_dumper.c pos = btf_dump_func(btf, func_sig, t, NULL, pos, size); btf 485 tools/bpf/bpftool/btf_dumper.c proto_type = btf__type_by_id(btf, t->type); btf 486 tools/bpf/bpftool/btf_dumper.c pos = btf_dump_func(btf, func_sig, proto_type, t, pos, size); btf 496 tools/bpf/bpftool/btf_dumper.c btf__name_by_offset(btf, t->name_off)); btf 500 tools/bpf/bpftool/btf_dumper.c btf__name_by_offset(btf, t->name_off)); btf 510 tools/bpf/bpftool/btf_dumper.c static int btf_dump_func(const struct btf *btf, char *func_sig, btf 518 tools/bpf/bpftool/btf_dumper.c BTF_PRINT_ARG("%s(", btf__name_by_offset(btf, func->name_off)); btf 530 tools/bpf/bpftool/btf_dumper.c btf__name_by_offset(btf, arg->name_off)); btf 540 tools/bpf/bpftool/btf_dumper.c void btf_dumper_type_only(const struct btf *btf, __u32 type_id, char *func_sig, btf 546 tools/bpf/bpftool/btf_dumper.c if (!btf) btf 549 tools/bpf/bpftool/btf_dumper.c err = __btf_dumper_type_only(btf, type_id, func_sig, 0, size); btf 562 tools/bpf/bpftool/btf_dumper.c void btf_dump_linfo_plain(const struct btf *btf, btf 566 tools/bpf/bpftool/btf_dumper.c const char *line = btf__name_by_offset(btf, linfo->line_off); btf 576 tools/bpf/bpftool/btf_dumper.c const char *file = btf__name_by_offset(btf, linfo->file_name_off); btf 594 tools/bpf/bpftool/btf_dumper.c void btf_dump_linfo_json(const struct btf *btf, btf 597 tools/bpf/bpftool/btf_dumper.c const char *line = btf__name_by_offset(btf, linfo->line_off); btf 603 tools/bpf/bpftool/btf_dumper.c const char *file = btf__name_by_offset(btf, linfo->file_name_off); btf 77 tools/bpf/bpftool/jit_disasm.c const struct btf *btf, btf 154 tools/bpf/bpftool/jit_disasm.c btf_dump_linfo_json(btf, linfo, linum); btf 159 tools/bpf/bpftool/jit_disasm.c btf_dump_linfo_plain(btf, linfo, "; ", btf 123 tools/bpf/bpftool/main.h struct btf; btf 168 tools/bpf/bpftool/main.h const struct btf *btf, btf 177 tools/bpf/bpftool/main.h const struct btf *btf, btf 199 tools/bpf/bpftool/main.h const struct btf *btf; btf 213 tools/bpf/bpftool/main.h void btf_dumper_type_only(const struct btf *btf, __u32 func_type_id, btf 216 tools/bpf/bpftool/main.h void btf_dump_linfo_plain(const struct btf *btf, btf 219 tools/bpf/bpftool/main.h void btf_dump_linfo_json(const struct btf *btf, btf 208 tools/bpf/bpftool/map.c unsigned char *value, struct btf *btf) btf 217 tools/bpf/bpftool/map.c if (btf) { btf 219 tools/bpf/bpftool/map.c .btf = btf, btf 250 tools/bpf/bpftool/map.c if (btf) { btf 252 tools/bpf/bpftool/map.c .btf = btf, btf 710 tools/bpf/bpftool/map.c struct bpf_map_info *map_info, struct btf *btf, btf 718 tools/bpf/bpftool/map.c print_entry_json(map_info, key, value, btf); btf 720 tools/bpf/bpftool/map.c if (btf) { btf 722 tools/bpf/bpftool/map.c .btf = btf, btf 775 tools/bpf/bpftool/map.c struct btf *btf = NULL; btf 796 tools/bpf/bpftool/map.c err = btf__get_from_id(info.btf_id, &btf); btf 805 tools/bpf/bpftool/map.c if (btf) { btf 809 tools/bpf/bpftool/map.c btf__free(btf); btf 810 tools/bpf/bpftool/map.c btf = NULL; btf 827 tools/bpf/bpftool/map.c num_elems += dump_map_elem(fd, key, value, &info, btf, btf_wtr); btf 833 tools/bpf/bpftool/map.c else if (btf) { btf 845 tools/bpf/bpftool/map.c btf__free(btf); btf 923 tools/bpf/bpftool/map.c struct btf *btf = NULL; btf 926 tools/bpf/bpftool/map.c err = btf__get_from_id(info->btf_id, &btf); btf 933 tools/bpf/bpftool/map.c print_entry_json(info, key, value, btf); btf 934 tools/bpf/bpftool/map.c } else if (btf) { btf 941 tools/bpf/bpftool/map.c btf__free(btf); btf 942 tools/bpf/bpftool/map.c btf = NULL; btf 946 tools/bpf/bpftool/map.c .btf = btf, btf 957 tools/bpf/bpftool/map.c btf__free(btf); btf 420 tools/bpf/bpftool/prog.c struct btf *btf = NULL; btf 511 tools/bpf/bpftool/prog.c if (info->btf_id && btf__get_from_id(info->btf_id, &btf)) { btf 584 tools/bpf/bpftool/prog.c btf_dumper_type_only(btf, record->type_id, btf 605 tools/bpf/bpftool/prog.c name, disasm_opt, btf, btf 621 tools/bpf/bpftool/prog.c disasm_opt, btf, NULL, 0, 0, false); btf 632 tools/bpf/bpftool/prog.c dd.btf = btf; btf 217 tools/bpf/bpftool/xlated_dumper.c struct btf *btf = dd->btf; btf 234 tools/bpf/bpftool/xlated_dumper.c if (btf && record) { btf 236 tools/bpf/bpftool/xlated_dumper.c btf_dumper_type_only(btf, record->type_id, btf 252 tools/bpf/bpftool/xlated_dumper.c btf_dump_linfo_json(btf, linfo, linum); btf 302 tools/bpf/bpftool/xlated_dumper.c struct btf *btf = dd->btf; btf 315 tools/bpf/bpftool/xlated_dumper.c if (btf && record) { btf 317 tools/bpf/bpftool/xlated_dumper.c btf_dumper_type_only(btf, record->type_id, btf 331 tools/bpf/bpftool/xlated_dumper.c btf_dump_linfo_plain(btf, linfo, "; ", btf 22 tools/bpf/bpftool/xlated_dumper.h struct btf *btf; btf 491 tools/include/uapi/linux/bpf.h __aligned_u64 btf; btf 3275 tools/include/uapi/linux/bpf.h __aligned_u64 btf; btf 659 tools/lib/bpf/bpf.c int bpf_load_btf(void *btf, __u32 btf_size, char *log_buf, __u32 log_buf_size, btf 665 tools/lib/bpf/bpf.c attr.btf = ptr_to_u64(btf); btf 168 tools/lib/bpf/bpf.h LIBBPF_API int bpf_load_btf(void *btf, __u32 btf_size, char *log_buf, btf 44 tools/lib/bpf/btf.c static int btf_add_type(struct btf *btf, struct btf_type *t) btf 46 tools/lib/bpf/btf.c if (btf->types_size - btf->nr_types < 2) { btf 50 tools/lib/bpf/btf.c if (btf->types_size == BTF_MAX_NR_TYPES) btf 53 tools/lib/bpf/btf.c expand_by = max(btf->types_size >> 2, 16); btf 54 tools/lib/bpf/btf.c new_size = min(BTF_MAX_NR_TYPES, btf->types_size + expand_by); btf 56 tools/lib/bpf/btf.c new_types = realloc(btf->types, sizeof(*new_types) * new_size); btf 60 tools/lib/bpf/btf.c if (btf->nr_types == 0) btf 63 tools/lib/bpf/btf.c btf->types = new_types; btf 64 tools/lib/bpf/btf.c btf->types_size = new_size; btf 67 tools/lib/bpf/btf.c btf->types[++(btf->nr_types)] = t; btf 72 tools/lib/bpf/btf.c static int btf_parse_hdr(struct btf *btf) btf 74 tools/lib/bpf/btf.c const struct btf_header *hdr = btf->hdr; btf 77 tools/lib/bpf/btf.c if (btf->data_size < sizeof(struct btf_header)) { btf 97 tools/lib/bpf/btf.c meta_left = btf->data_size - sizeof(*hdr); btf 123 tools/lib/bpf/btf.c btf->nohdr_data = btf->hdr + 1; btf 128 tools/lib/bpf/btf.c static int btf_parse_str_sec(struct btf *btf) btf 130 tools/lib/bpf/btf.c const struct btf_header *hdr = btf->hdr; btf 131 tools/lib/bpf/btf.c const char *start = btf->nohdr_data + hdr->str_off; btf 132 tools/lib/bpf/btf.c const char *end = start + btf->hdr->str_len; btf 140 tools/lib/bpf/btf.c btf->strings = start; btf 180 tools/lib/bpf/btf.c static int btf_parse_type_sec(struct btf *btf) btf 182 tools/lib/bpf/btf.c struct btf_header *hdr = btf->hdr; btf 183 tools/lib/bpf/btf.c void *nohdr_data = btf->nohdr_data; btf 196 tools/lib/bpf/btf.c err = btf_add_type(btf, t); btf 204 tools/lib/bpf/btf.c __u32 btf__get_nr_types(const struct btf *btf) btf 206 tools/lib/bpf/btf.c return btf->nr_types; btf 209 tools/lib/bpf/btf.c const struct btf_type *btf__type_by_id(const struct btf *btf, __u32 type_id) btf 211 tools/lib/bpf/btf.c if (type_id > btf->nr_types) btf 214 tools/lib/bpf/btf.c return btf->types[type_id]; btf 229 tools/lib/bpf/btf.c __s64 btf__resolve_size(const struct btf *btf, __u32 type_id) btf 237 tools/lib/bpf/btf.c t = btf__type_by_id(btf, type_id); btf 269 tools/lib/bpf/btf.c t = btf__type_by_id(btf, type_id); btf 281 tools/lib/bpf/btf.c int btf__resolve_type(const struct btf *btf, __u32 type_id) btf 286 tools/lib/bpf/btf.c t = btf__type_by_id(btf, type_id); btf 291 tools/lib/bpf/btf.c t = btf__type_by_id(btf, type_id); btf 301 tools/lib/bpf/btf.c __s32 btf__find_by_name(const struct btf *btf, const char *type_name) btf 308 tools/lib/bpf/btf.c for (i = 1; i <= btf->nr_types; i++) { btf 309 tools/lib/bpf/btf.c const struct btf_type *t = btf->types[i]; btf 310 tools/lib/bpf/btf.c const char *name = btf__name_by_offset(btf, t->name_off); btf 319 tools/lib/bpf/btf.c void btf__free(struct btf *btf) btf 321 tools/lib/bpf/btf.c if (!btf) btf 324 tools/lib/bpf/btf.c if (btf->fd != -1) btf 325 tools/lib/bpf/btf.c close(btf->fd); btf 327 tools/lib/bpf/btf.c free(btf->data); btf 328 tools/lib/bpf/btf.c free(btf->types); btf 329 tools/lib/bpf/btf.c free(btf); btf 332 tools/lib/bpf/btf.c struct btf *btf__new(__u8 *data, __u32 size) btf 334 tools/lib/bpf/btf.c struct btf *btf; btf 337 tools/lib/bpf/btf.c btf = calloc(1, sizeof(struct btf)); btf 338 tools/lib/bpf/btf.c if (!btf) btf 341 tools/lib/bpf/btf.c btf->fd = -1; btf 343 tools/lib/bpf/btf.c btf->data = malloc(size); btf 344 tools/lib/bpf/btf.c if (!btf->data) { btf 349 tools/lib/bpf/btf.c memcpy(btf->data, data, size); btf 350 tools/lib/bpf/btf.c btf->data_size = size; btf 352 tools/lib/bpf/btf.c err = btf_parse_hdr(btf); btf 356 tools/lib/bpf/btf.c err = btf_parse_str_sec(btf); btf 360 tools/lib/bpf/btf.c err = btf_parse_type_sec(btf); btf 364 tools/lib/bpf/btf.c btf__free(btf); btf 368 tools/lib/bpf/btf.c return btf; btf 382 tools/lib/bpf/btf.c struct btf *btf__parse_elf(const char *path, struct btf_ext **btf_ext) btf 386 tools/lib/bpf/btf.c struct btf *btf = NULL; btf 464 tools/lib/bpf/btf.c btf = btf__new(btf_data->d_buf, btf_data->d_size); btf 465 tools/lib/bpf/btf.c if (IS_ERR(btf)) btf 487 tools/lib/bpf/btf.c if (IS_ERR(btf)) btf 488 tools/lib/bpf/btf.c return btf; btf 490 tools/lib/bpf/btf.c btf__free(btf); btf 494 tools/lib/bpf/btf.c return btf; btf 505 tools/lib/bpf/btf.c static int btf_fixup_datasec(struct bpf_object *obj, struct btf *btf, btf 509 tools/lib/bpf/btf.c const char *name = btf__name_by_offset(btf, t->name_off); btf 529 tools/lib/bpf/btf.c t_var = btf__type_by_id(btf, vsi->type); btf 540 tools/lib/bpf/btf.c name = btf__name_by_offset(btf, t_var->name_off); btf 560 tools/lib/bpf/btf.c int btf__finalize_data(struct bpf_object *obj, struct btf *btf) btf 565 tools/lib/bpf/btf.c for (i = 1; i <= btf->nr_types; i++) { btf 566 tools/lib/bpf/btf.c struct btf_type *t = btf->types[i]; btf 574 tools/lib/bpf/btf.c err = btf_fixup_datasec(obj, btf, t); btf 583 tools/lib/bpf/btf.c int btf__load(struct btf *btf) btf 589 tools/lib/bpf/btf.c if (btf->fd >= 0) btf 598 tools/lib/bpf/btf.c btf->fd = bpf_load_btf(btf->data, btf->data_size, btf 600 tools/lib/bpf/btf.c if (btf->fd < 0) { btf 613 tools/lib/bpf/btf.c int btf__fd(const struct btf *btf) btf 615 tools/lib/bpf/btf.c return btf->fd; btf 618 tools/lib/bpf/btf.c const void *btf__get_raw_data(const struct btf *btf, __u32 *size) btf 620 tools/lib/bpf/btf.c *size = btf->data_size; btf 621 tools/lib/bpf/btf.c return btf->data; btf 624 tools/lib/bpf/btf.c const char *btf__name_by_offset(const struct btf *btf, __u32 offset) btf 626 tools/lib/bpf/btf.c if (offset < btf->hdr->str_len) btf 627 tools/lib/bpf/btf.c return &btf->strings[offset]; btf 632 tools/lib/bpf/btf.c int btf__get_from_id(__u32 id, struct btf **btf) btf 642 tools/lib/bpf/btf.c *btf = NULL; btf 660 tools/lib/bpf/btf.c btf_info.btf = ptr_to_u64(ptr); btf 674 tools/lib/bpf/btf.c btf_info.btf = ptr_to_u64(ptr); btf 683 tools/lib/bpf/btf.c *btf = btf__new((__u8 *)(long)btf_info.btf, btf_info.btf_size); btf 684 tools/lib/bpf/btf.c if (IS_ERR(*btf)) { btf 685 tools/lib/bpf/btf.c err = PTR_ERR(*btf); btf 686 tools/lib/bpf/btf.c *btf = NULL; btf 696 tools/lib/bpf/btf.c int btf__get_map_kv_tids(const struct btf *btf, const char *map_name, btf 714 tools/lib/bpf/btf.c container_id = btf__find_by_name(btf, container_name); btf 721 tools/lib/bpf/btf.c container_type = btf__type_by_id(btf, container_id); btf 737 tools/lib/bpf/btf.c key_size = btf__resolve_size(btf, key->type); btf 749 tools/lib/bpf/btf.c value_size = btf__resolve_size(btf, value->type); btf 998 tools/lib/bpf/btf.c static int btf_ext_reloc_info(const struct btf *btf, btf 1015 tools/lib/bpf/btf.c info_sec_name = btf__name_by_offset(btf, sinfo->sec_name_off); btf 1046 tools/lib/bpf/btf.c int btf_ext__reloc_func_info(const struct btf *btf, btf 1051 tools/lib/bpf/btf.c return btf_ext_reloc_info(btf, &btf_ext->func_info, sec_name, btf 1055 tools/lib/bpf/btf.c int btf_ext__reloc_line_info(const struct btf *btf, btf 1060 tools/lib/bpf/btf.c return btf_ext_reloc_info(btf, &btf_ext->line_info, sec_name, btf 1076 tools/lib/bpf/btf.c static struct btf_dedup *btf_dedup_new(struct btf *btf, struct btf_ext *btf_ext, btf 1223 tools/lib/bpf/btf.c int btf__dedup(struct btf *btf, struct btf_ext *btf_ext, btf 1226 tools/lib/bpf/btf.c struct btf_dedup *d = btf_dedup_new(btf, btf_ext, opts); btf 1275 tools/lib/bpf/btf.c struct btf *btf; btf 1385 tools/lib/bpf/btf.c static struct btf_dedup *btf_dedup_new(struct btf *btf, struct btf_ext *btf_ext, btf 1400 tools/lib/bpf/btf.c d->btf = btf; btf 1410 tools/lib/bpf/btf.c d->map = malloc(sizeof(__u32) * (1 + btf->nr_types)); btf 1417 tools/lib/bpf/btf.c for (i = 1; i <= btf->nr_types; i++) { btf 1418 tools/lib/bpf/btf.c struct btf_type *t = d->btf->types[i]; btf 1427 tools/lib/bpf/btf.c d->hypot_map = malloc(sizeof(__u32) * (1 + btf->nr_types)); btf 1432 tools/lib/bpf/btf.c for (i = 0; i <= btf->nr_types; i++) btf 1456 tools/lib/bpf/btf.c for (i = 1; i <= d->btf->nr_types; i++) { btf 1457 tools/lib/bpf/btf.c t = d->btf->types[i]; btf 1611 tools/lib/bpf/btf.c const struct btf_header *hdr = d->btf->hdr; btf 1612 tools/lib/bpf/btf.c char *start = (char *)d->btf->nohdr_data + hdr->str_off; btf 1613 tools/lib/bpf/btf.c char *end = start + d->btf->hdr->str_len; btf 1647 tools/lib/bpf/btf.c tmp_strs = malloc(d->btf->hdr->str_len); btf 1704 tools/lib/bpf/btf.c d->btf->hdr->str_len = p - tmp_strs; btf 1705 tools/lib/bpf/btf.c memmove(start, tmp_strs, d->btf->hdr->str_len); btf 1706 tools/lib/bpf/btf.c end = start + d->btf->hdr->str_len; btf 1716 tools/lib/bpf/btf.c d->btf->hdr->str_len = end - start; btf 1993 tools/lib/bpf/btf.c struct btf_type *t = d->btf->types[type_id]; btf 2020 tools/lib/bpf/btf.c cand = d->btf->types[cand_id]; btf 2032 tools/lib/bpf/btf.c cand = d->btf->types[cand_id]; btf 2055 tools/lib/bpf/btf.c cand = d->btf->types[cand_id]; btf 2078 tools/lib/bpf/btf.c for (i = 1; i <= d->btf->nr_types; i++) { btf 2114 tools/lib/bpf/btf.c if (!btf_is_fwd(d->btf->types[type_id])) btf 2120 tools/lib/bpf/btf.c if (!btf_is_fwd(d->btf->types[type_id])) btf 2248 tools/lib/bpf/btf.c cand_type = d->btf->types[cand_id]; btf 2249 tools/lib/bpf/btf.c canon_type = d->btf->types[canon_id]; btf 2400 tools/lib/bpf/btf.c t_kind = btf_kind(d->btf->types[t_id]); btf 2401 tools/lib/bpf/btf.c c_kind = btf_kind(d->btf->types[c_id]); btf 2469 tools/lib/bpf/btf.c t = d->btf->types[type_id]; btf 2490 tools/lib/bpf/btf.c cand_type = d->btf->types[cand_id]; btf 2516 tools/lib/bpf/btf.c for (i = 1; i <= d->btf->nr_types; i++) { btf 2562 tools/lib/bpf/btf.c t = d->btf->types[type_id]; btf 2580 tools/lib/bpf/btf.c cand = d->btf->types[cand_id]; btf 2604 tools/lib/bpf/btf.c cand = d->btf->types[cand_id]; btf 2636 tools/lib/bpf/btf.c cand = d->btf->types[cand_id]; btf 2660 tools/lib/bpf/btf.c for (i = 1; i <= d->btf->nr_types; i++) { btf 2691 tools/lib/bpf/btf.c for (i = 1; i <= d->btf->nr_types; i++) btf 2694 tools/lib/bpf/btf.c types_start = d->btf->nohdr_data + d->btf->hdr->type_off; btf 2697 tools/lib/bpf/btf.c for (i = 1; i <= d->btf->nr_types; i++) { btf 2701 tools/lib/bpf/btf.c len = btf_type_size(d->btf->types[i]); btf 2705 tools/lib/bpf/btf.c memmove(p, d->btf->types[i], len); btf 2707 tools/lib/bpf/btf.c d->btf->types[next_type_id] = (struct btf_type *)p; btf 2713 tools/lib/bpf/btf.c d->btf->nr_types = next_type_id - 1; btf 2714 tools/lib/bpf/btf.c d->btf->types_size = d->btf->nr_types; btf 2715 tools/lib/bpf/btf.c d->btf->hdr->type_len = p - types_start; btf 2716 tools/lib/bpf/btf.c new_types = realloc(d->btf->types, btf 2717 tools/lib/bpf/btf.c (1 + d->btf->nr_types) * sizeof(struct btf_type *)); btf 2720 tools/lib/bpf/btf.c d->btf->types = new_types; btf 2723 tools/lib/bpf/btf.c d->btf->hdr->str_off = p - (char *)d->btf->nohdr_data; btf 2724 tools/lib/bpf/btf.c memmove(p, d->btf->strings, d->btf->hdr->str_len); btf 2725 tools/lib/bpf/btf.c d->btf->strings = p; btf 2726 tools/lib/bpf/btf.c p += d->btf->hdr->str_len; btf 2728 tools/lib/bpf/btf.c d->btf->data_size = p - (char *)d->btf->data; btf 2761 tools/lib/bpf/btf.c struct btf_type *t = d->btf->types[type_id]; btf 2856 tools/lib/bpf/btf.c for (i = 1; i <= d->btf->nr_types; i++) { btf 23 tools/lib/bpf/btf.h struct btf; btf 67 tools/lib/bpf/btf.h LIBBPF_API void btf__free(struct btf *btf); btf 68 tools/lib/bpf/btf.h LIBBPF_API struct btf *btf__new(__u8 *data, __u32 size); btf 69 tools/lib/bpf/btf.h LIBBPF_API struct btf *btf__parse_elf(const char *path, btf 71 tools/lib/bpf/btf.h LIBBPF_API int btf__finalize_data(struct bpf_object *obj, struct btf *btf); btf 72 tools/lib/bpf/btf.h LIBBPF_API int btf__load(struct btf *btf); btf 73 tools/lib/bpf/btf.h LIBBPF_API __s32 btf__find_by_name(const struct btf *btf, btf 75 tools/lib/bpf/btf.h LIBBPF_API __u32 btf__get_nr_types(const struct btf *btf); btf 76 tools/lib/bpf/btf.h LIBBPF_API const struct btf_type *btf__type_by_id(const struct btf *btf, btf 78 tools/lib/bpf/btf.h LIBBPF_API __s64 btf__resolve_size(const struct btf *btf, __u32 type_id); btf 79 tools/lib/bpf/btf.h LIBBPF_API int btf__resolve_type(const struct btf *btf, __u32 type_id); btf 80 tools/lib/bpf/btf.h LIBBPF_API int btf__fd(const struct btf *btf); btf 81 tools/lib/bpf/btf.h LIBBPF_API const void *btf__get_raw_data(const struct btf *btf, __u32 *size); btf 82 tools/lib/bpf/btf.h LIBBPF_API const char *btf__name_by_offset(const struct btf *btf, __u32 offset); btf 83 tools/lib/bpf/btf.h LIBBPF_API int btf__get_from_id(__u32 id, struct btf **btf); btf 84 tools/lib/bpf/btf.h LIBBPF_API int btf__get_map_kv_tids(const struct btf *btf, const char *map_name, btf 93 tools/lib/bpf/btf.h LIBBPF_API int btf_ext__reloc_func_info(const struct btf *btf, btf 97 tools/lib/bpf/btf.h LIBBPF_API int btf_ext__reloc_line_info(const struct btf *btf, btf 109 tools/lib/bpf/btf.h LIBBPF_API int btf__dedup(struct btf *btf, struct btf_ext *btf_ext, btf 120 tools/lib/bpf/btf.h LIBBPF_API struct btf_dump *btf_dump__new(const struct btf *btf, btf 56 tools/lib/bpf/btf_dump.c const struct btf *btf; btf 107 tools/lib/bpf/btf_dump.c return btf__name_by_offset(d->btf, name_off); btf 119 tools/lib/bpf/btf_dump.c struct btf_dump *btf_dump__new(const struct btf *btf, btf 131 tools/lib/bpf/btf_dump.c d->btf = btf; btf 164 tools/lib/bpf/btf_dump.c for (i = 0, cnt = btf__get_nr_types(d->btf); i <= cnt; i++) { btf 202 tools/lib/bpf/btf_dump.c if (id > btf__get_nr_types(d->btf)) btf 207 tools/lib/bpf/btf_dump.c d->type_states = calloc(1 + btf__get_nr_types(d->btf), btf 211 tools/lib/bpf/btf_dump.c d->cached_names = calloc(1 + btf__get_nr_types(d->btf), btf 251 tools/lib/bpf/btf_dump.c int i, j, n = btf__get_nr_types(d->btf); btf 256 tools/lib/bpf/btf_dump.c t = btf__type_by_id(d->btf, i); btf 425 tools/lib/bpf/btf_dump.c t = btf__type_by_id(d->btf, id); btf 581 tools/lib/bpf/btf_dump.c const struct btf_type *t = btf__type_by_id(d->btf, id); btf 622 tools/lib/bpf/btf_dump.c t = btf__type_by_id(d->btf, id); btf 755 tools/lib/bpf/btf_dump.c static int btf_align_of(const struct btf *btf, __u32 id) btf 757 tools/lib/bpf/btf_dump.c const struct btf_type *t = btf__type_by_id(btf, id); btf 770 tools/lib/bpf/btf_dump.c return btf_align_of(btf, t->type); btf 772 tools/lib/bpf/btf_dump.c return btf_align_of(btf, btf_array(t)->type); btf 780 tools/lib/bpf/btf_dump.c align = max(align, btf_align_of(btf, m->type)); btf 790 tools/lib/bpf/btf_dump.c static bool btf_is_struct_packed(const struct btf *btf, __u32 id, btf 797 tools/lib/bpf/btf_dump.c align = btf_align_of(btf, id); btf 806 tools/lib/bpf/btf_dump.c align = btf_align_of(btf, m->type); btf 878 tools/lib/bpf/btf_dump.c packed = is_struct ? btf_is_struct_packed(d->btf, id, t) : 0; btf 892 tools/lib/bpf/btf_dump.c align = packed ? 1 : btf_align_of(d->btf, m->type); btf 902 tools/lib/bpf/btf_dump.c m_sz = max(0, btf__resolve_size(d->btf, m->type)); btf 910 tools/lib/bpf/btf_dump.c align = packed ? 1 : btf_align_of(d->btf, id); btf 1068 tools/lib/bpf/btf_dump.c t = btf__type_by_id(d->btf, id); btf 1125 tools/lib/bpf/btf_dump.c t = btf__type_by_id(d->btf, id); btf 1181 tools/lib/bpf/btf_dump.c t = btf__type_by_id(d->btf, id); btf 1244 tools/lib/bpf/btf_dump.c next_t = btf__type_by_id(d->btf, next_id); btf 1258 tools/lib/bpf/btf_dump.c next_t = btf__type_by_id(d->btf, next_id); btf 1343 tools/lib/bpf/btf_dump.c const struct btf_type *t = btf__type_by_id(d->btf, id); btf 286 tools/lib/bpf/libbpf.c struct btf *btf; btf 1019 tools/lib/bpf/libbpf.c skip_mods_and_typedefs(const struct btf *btf, __u32 id, __u32 *res_id) btf 1021 tools/lib/bpf/libbpf.c const struct btf_type *t = btf__type_by_id(btf, id); btf 1029 tools/lib/bpf/libbpf.c t = btf__type_by_id(btf, t->type); btf 1042 tools/lib/bpf/libbpf.c static bool get_map_field_int(const char *map_name, const struct btf *btf, btf 1045 tools/lib/bpf/libbpf.c const struct btf_type *t = skip_mods_and_typedefs(btf, m->type, NULL); btf 1046 tools/lib/bpf/libbpf.c const char *name = btf__name_by_offset(btf, m->name_off); btf 1056 tools/lib/bpf/libbpf.c arr_t = btf__type_by_id(btf, t->type); btf 1086 tools/lib/bpf/libbpf.c var = btf__type_by_id(obj->btf, vi->type); btf 1088 tools/lib/bpf/libbpf.c map_name = btf__name_by_offset(obj->btf, var->name_off); btf 1111 tools/lib/bpf/libbpf.c def = skip_mods_and_typedefs(obj->btf, var->type, NULL); btf 1140 tools/lib/bpf/libbpf.c const char *name = btf__name_by_offset(obj->btf, m->name_off); btf 1148 tools/lib/bpf/libbpf.c if (!get_map_field_int(map_name, obj->btf, def, m, btf 1154 tools/lib/bpf/libbpf.c if (!get_map_field_int(map_name, obj->btf, def, m, btf 1160 tools/lib/bpf/libbpf.c if (!get_map_field_int(map_name, obj->btf, def, m, btf 1168 tools/lib/bpf/libbpf.c if (!get_map_field_int(map_name, obj->btf, def, m, btf 1182 tools/lib/bpf/libbpf.c t = btf__type_by_id(obj->btf, m->type); btf 1193 tools/lib/bpf/libbpf.c sz = btf__resolve_size(obj->btf, t->type); btf 1211 tools/lib/bpf/libbpf.c if (!get_map_field_int(map_name, obj->btf, def, m, btf 1225 tools/lib/bpf/libbpf.c t = btf__type_by_id(obj->btf, m->type); btf 1236 tools/lib/bpf/libbpf.c sz = btf__resolve_size(obj->btf, t->type); btf 1291 tools/lib/bpf/libbpf.c nr_types = btf__get_nr_types(obj->btf); btf 1293 tools/lib/bpf/libbpf.c t = btf__type_by_id(obj->btf, i); btf 1296 tools/lib/bpf/libbpf.c name = btf__name_by_offset(obj->btf, t->name_off); btf 1366 tools/lib/bpf/libbpf.c struct btf *btf = obj->btf; btf 1370 tools/lib/bpf/libbpf.c if (!obj->btf || (has_func && has_datasec)) btf 1373 tools/lib/bpf/libbpf.c for (i = 1; i <= btf__get_nr_types(btf); i++) { btf 1374 tools/lib/bpf/libbpf.c t = (struct btf_type *)btf__type_by_id(btf, i); btf 1393 tools/lib/bpf/libbpf.c name = (char *)btf__name_by_offset(btf, t->name_off); btf 1407 tools/lib/bpf/libbpf.c vt = (void *)btf__type_by_id(btf, v->type); btf 1446 tools/lib/bpf/libbpf.c obj->btf = btf__new(btf_data->d_buf, btf_data->d_size); btf 1447 tools/lib/bpf/libbpf.c if (IS_ERR(obj->btf)) { btf 1452 tools/lib/bpf/libbpf.c err = btf__finalize_data(obj, obj->btf); btf 1460 tools/lib/bpf/libbpf.c if (!obj->btf) { btf 1475 tools/lib/bpf/libbpf.c if (err || IS_ERR(obj->btf)) { btf 1477 tools/lib/bpf/libbpf.c err = err ? : PTR_ERR(obj->btf); btf 1480 tools/lib/bpf/libbpf.c if (!IS_ERR_OR_NULL(obj->btf)) btf 1481 tools/lib/bpf/libbpf.c btf__free(obj->btf); btf 1482 tools/lib/bpf/libbpf.c obj->btf = NULL; btf 1484 tools/lib/bpf/libbpf.c if (btf_required && !obj->btf) { btf 1495 tools/lib/bpf/libbpf.c if (!obj->btf) btf 1501 tools/lib/bpf/libbpf.c err = btf__load(obj->btf); btf 1505 tools/lib/bpf/libbpf.c btf__free(obj->btf); btf 1506 tools/lib/bpf/libbpf.c obj->btf = NULL; btf 1864 tools/lib/bpf/libbpf.c ret = btf__get_map_kv_tids(obj->btf, map->name, def->key_size, btf 1872 tools/lib/bpf/libbpf.c ret = btf__find_by_name(obj->btf, btf 2188 tools/lib/bpf/libbpf.c if (obj->btf && !bpf_map_find_btf_info(obj, map)) { btf 2189 tools/lib/bpf/libbpf.c create_attr.btf_fd = btf__fd(obj->btf); btf 2277 tools/lib/bpf/libbpf.c err = btf_ext__reloc_func_info(obj->btf, obj->btf_ext, btf 2290 tools/lib/bpf/libbpf.c err = btf_ext__reloc_line_info(obj->btf, obj->btf_ext, btf 2315 tools/lib/bpf/libbpf.c const struct btf *btf; btf 2364 tools/lib/bpf/libbpf.c static int bpf_core_spec_parse(const struct btf *btf, btf 2379 tools/lib/bpf/libbpf.c spec->btf = btf; btf 2397 tools/lib/bpf/libbpf.c t = skip_mods_and_typedefs(btf, type_id, &id); btf 2406 tools/lib/bpf/libbpf.c sz = btf__resolve_size(btf, id); btf 2412 tools/lib/bpf/libbpf.c t = skip_mods_and_typedefs(btf, id, &id); btf 2434 tools/lib/bpf/libbpf.c name = btf__name_by_offset(btf, m->name_off); btf 2448 tools/lib/bpf/libbpf.c t = skip_mods_and_typedefs(btf, a->type, &id); btf 2456 tools/lib/bpf/libbpf.c sz = btf__resolve_size(btf, id); btf 2506 tools/lib/bpf/libbpf.c static struct ids_vec *bpf_core_find_cands(const struct btf *local_btf, btf 2508 tools/lib/bpf/libbpf.c const struct btf *targ_btf) btf 2574 tools/lib/bpf/libbpf.c static int bpf_core_fields_are_compat(const struct btf *local_btf, btf 2576 tools/lib/bpf/libbpf.c const struct btf *targ_btf, btf 2630 tools/lib/bpf/libbpf.c static int bpf_core_match_member(const struct btf *local_btf, btf 2632 tools/lib/bpf/libbpf.c const struct btf *targ_btf, btf 2712 tools/lib/bpf/libbpf.c const struct btf *targ_btf, __u32 targ_id, btf 2721 tools/lib/bpf/libbpf.c targ_spec->btf = targ_btf; btf 2727 tools/lib/bpf/libbpf.c targ_type = skip_mods_and_typedefs(targ_spec->btf, targ_id, btf 2733 tools/lib/bpf/libbpf.c matched = bpf_core_match_member(local_spec->btf, btf 2824 tools/lib/bpf/libbpf.c static struct btf *btf_load_raw(const char *path) btf 2826 tools/lib/bpf/libbpf.c struct btf *btf; btf 2841 tools/lib/bpf/libbpf.c btf = ERR_PTR(-errno); btf 2848 tools/lib/bpf/libbpf.c btf = ERR_PTR(-EBADF); btf 2852 tools/lib/bpf/libbpf.c btf = btf__new(data, read_cnt); btf 2856 tools/lib/bpf/libbpf.c return btf; btf 2863 tools/lib/bpf/libbpf.c static struct btf *bpf_core_find_kernel_btf(void) btf 2882 tools/lib/bpf/libbpf.c struct btf *btf; btf 2894 tools/lib/bpf/libbpf.c btf = btf_load_raw(path); btf 2896 tools/lib/bpf/libbpf.c btf = btf__parse_elf(path, NULL); btf 2899 tools/lib/bpf/libbpf.c path, IS_ERR(btf) ? PTR_ERR(btf) : 0); btf 2900 tools/lib/bpf/libbpf.c if (IS_ERR(btf)) btf 2903 tools/lib/bpf/libbpf.c return btf; btf 2922 tools/lib/bpf/libbpf.c t = btf__type_by_id(spec->btf, type_id); btf 2923 tools/lib/bpf/libbpf.c s = btf__name_by_offset(spec->btf, t->name_off); btf 3009 tools/lib/bpf/libbpf.c const struct btf *local_btf, btf 3010 tools/lib/bpf/libbpf.c const struct btf *targ_btf, btf 3124 tools/lib/bpf/libbpf.c struct btf *targ_btf; btf 3146 tools/lib/bpf/libbpf.c sec_name = btf__name_by_offset(obj->btf, sec->sec_name_off); btf 3163 tools/lib/bpf/libbpf.c err = bpf_core_reloc_offset(prog, rec, i, obj->btf, btf 4199 tools/lib/bpf/libbpf.c btf__free(obj->btf); btf 4255 tools/lib/bpf/libbpf.c struct btf *bpf_object__btf(const struct bpf_object *obj) btf 4257 tools/lib/bpf/libbpf.c return obj ? obj->btf : NULL; btf 4262 tools/lib/bpf/libbpf.c return obj->btf ? btf__fd(obj->btf) : -1; btf 105 tools/lib/bpf/libbpf.h struct btf; btf 106 tools/lib/bpf/libbpf.h LIBBPF_API struct btf *bpf_object__btf(const struct bpf_object *obj); btf 1725 tools/perf/util/annotate.c struct btf *btf = NULL; btf 1779 tools/perf/util/annotate.c btf = btf__new((__u8 *)(node->data), btf 1811 tools/perf/util/annotate.c if (linfo && btf) { btf 1812 tools/perf/util/annotate.c srcline = btf__name_by_offset(btf, linfo->line_off); btf 1847 tools/perf/util/annotate.c free(btf); btf 95 tools/perf/util/bpf-event.c struct btf *btf) btf 101 tools/perf/util/bpf-event.c data = btf__get_raw_data(btf, &data_size); btf 117 tools/perf/util/bpf-event.c struct btf *btf, btf 131 tools/perf/util/bpf-event.c if (btf) { btf 133 tools/perf/util/bpf-event.c t = btf__type_by_id(btf, finfo->type_id); btf 134 tools/perf/util/bpf-event.c short_name = btf__name_by_offset(btf, t->name_off); btf 170 tools/perf/util/bpf-event.c struct btf *btf = NULL; btf 218 tools/perf/util/bpf-event.c if (btf__get_from_id(info->btf_id, &btf)) { btf 221 tools/perf/util/bpf-event.c btf = NULL; btf 224 tools/perf/util/bpf-event.c perf_env__fetch_btf(env, info->btf_id, btf); btf 245 tools/perf/util/bpf-event.c KSYM_NAME_LEN, info, btf, i); btf 291 tools/perf/util/bpf-event.c free(btf); btf 348 tools/perf/util/bpf-event.c struct btf *btf = NULL; btf 383 tools/perf/util/bpf-event.c if (btf__get_from_id(btf_id, &btf)) { btf 388 tools/perf/util/bpf-event.c perf_env__fetch_btf(env, btf_id, btf); btf 391 tools/perf/util/bpf-event.c free(btf); btf 449 tools/perf/util/bpf-event.c struct btf *btf = NULL; btf 462 tools/perf/util/bpf-event.c btf = btf__new((__u8 *)(node->data), btf 467 tools/perf/util/bpf-event.c synthesize_bpf_prog_name(name, KSYM_NAME_LEN, info, btf, 0); btf 475 tools/perf/util/bpf-event.c synthesize_bpf_prog_name(name, KSYM_NAME_LEN, info, btf, i); btf 3826 tools/testing/selftests/bpf/test_btf.c info->btf = ptr_to_u64(user_btf); btf 3894 tools/testing/selftests/bpf/test_btf.c info[i].btf = ptr_to_u64(user_btf[i]); btf 4047 tools/testing/selftests/bpf/test_btf.c info.btf = ptr_to_u64(user_btf); btf 4125 tools/testing/selftests/bpf/test_btf.c struct btf *btf = NULL; btf 4133 tools/testing/selftests/bpf/test_btf.c btf = btf__parse_elf(test->file, &btf_ext); btf 4134 tools/testing/selftests/bpf/test_btf.c if (IS_ERR(btf)) { btf 4135 tools/testing/selftests/bpf/test_btf.c if (PTR_ERR(btf) == -ENOENT) { btf 4140 tools/testing/selftests/bpf/test_btf.c return PTR_ERR(btf); btf 4142 tools/testing/selftests/bpf/test_btf.c btf__free(btf); btf 4237 tools/testing/selftests/bpf/test_btf.c err = btf__get_from_id(info.btf_id, &btf); btf 4247 tools/testing/selftests/bpf/test_btf.c t = btf__type_by_id(btf, finfo->type_id); btf 4254 tools/testing/selftests/bpf/test_btf.c fname = btf__name_by_offset(btf, t->name_off); btf 6724 tools/testing/selftests/bpf/test_btf.c struct btf *test_btf = NULL, *expect_btf = NULL; btf 36 tools/testing/selftests/bpf/test_btf_dump.c static int btf_dump_all_types(const struct btf *btf, btf 39 tools/testing/selftests/bpf/test_btf_dump.c size_t type_cnt = btf__get_nr_types(btf); btf 43 tools/testing/selftests/bpf/test_btf_dump.c d = btf_dump__new(btf, NULL, opts, btf_dump_printf); btf 61 tools/testing/selftests/bpf/test_btf_dump.c struct btf *btf = NULL; btf 69 tools/testing/selftests/bpf/test_btf_dump.c btf = btf__parse_elf(test_file, NULL); btf 70 tools/testing/selftests/bpf/test_btf_dump.c if (CHECK(IS_ERR(btf), btf 71 tools/testing/selftests/bpf/test_btf_dump.c "failed to load test BTF: %ld\n", PTR_ERR(btf))) { btf 72 tools/testing/selftests/bpf/test_btf_dump.c err = -PTR_ERR(btf); btf 73 tools/testing/selftests/bpf/test_btf_dump.c btf = NULL; btf 92 tools/testing/selftests/bpf/test_btf_dump.c err = btf_dump_all_types(btf, &test_case->opts); btf 130 tools/testing/selftests/bpf/test_btf_dump.c btf__free(btf);