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);