Lines Matching refs:btf
77 skip_mods_and_typedefs(const struct btf *btf, __u32 id, __u32 *res_id);
464 struct btf *btf; member
468 struct btf *btf_vmlinux;
703 find_member_by_name(const struct btf *btf, const struct btf_type *t, in find_member_by_name() argument
710 if (!strcmp(btf__name_by_offset(btf, m->name_off), name)) in find_member_by_name()
718 static int find_btf_by_prefix_kind(const struct btf *btf, const char *prefix,
722 find_struct_ops_kern_types(const struct btf *btf, const char *tname, in find_struct_ops_kern_types() argument
732 kern_type_id = btf__find_by_name_kind(btf, tname, BTF_KIND_STRUCT); in find_struct_ops_kern_types()
738 kern_type = btf__type_by_id(btf, kern_type_id); in find_struct_ops_kern_types()
745 kern_vtype_id = find_btf_by_prefix_kind(btf, STRUCT_OPS_VALUE_PREFIX, in find_struct_ops_kern_types()
752 kern_vtype = btf__type_by_id(btf, kern_vtype_id); in find_struct_ops_kern_types()
787 const struct btf *btf, in bpf_map__init_kern_struct_ops() argument
788 const struct btf *kern_btf) in bpf_map__init_kern_struct_ops()
832 mname = btf__name_by_offset(btf, member->name_off); in bpf_map__init_kern_struct_ops()
854 mtype = skip_mods_and_typedefs(btf, member->type, &mtype_id); in bpf_map__init_kern_struct_ops()
868 mtype = skip_mods_and_typedefs(btf, mtype->type, &mtype_id); in bpf_map__init_kern_struct_ops()
898 msize = btf__resolve_size(btf, mtype_id); in bpf_map__init_kern_struct_ops()
928 err = bpf_map__init_kern_struct_ops(map, obj->btf, in bpf_object__init_kern_struct_ops_maps()
944 const struct btf *btf; in bpf_object__init_struct_ops_maps() local
951 btf = obj->btf; in bpf_object__init_struct_ops_maps()
952 datasec_id = btf__find_by_name_kind(btf, STRUCT_OPS_SEC, in bpf_object__init_struct_ops_maps()
960 datasec = btf__type_by_id(btf, datasec_id); in bpf_object__init_struct_ops_maps()
963 type = btf__type_by_id(obj->btf, vsi->type); in bpf_object__init_struct_ops_maps()
964 var_name = btf__name_by_offset(obj->btf, type->name_off); in bpf_object__init_struct_ops_maps()
966 type_id = btf__resolve_type(obj->btf, vsi->type); in bpf_object__init_struct_ops_maps()
973 type = btf__type_by_id(obj->btf, type_id); in bpf_object__init_struct_ops_maps()
974 tname = btf__name_by_offset(obj->btf, type->name_off); in bpf_object__init_struct_ops_maps()
1870 skip_mods_and_typedefs(const struct btf *btf, __u32 id, __u32 *res_id) in skip_mods_and_typedefs() argument
1872 const struct btf_type *t = btf__type_by_id(btf, id); in skip_mods_and_typedefs()
1880 t = btf__type_by_id(btf, t->type); in skip_mods_and_typedefs()
1887 resolve_func_ptr(const struct btf *btf, __u32 id, __u32 *res_id) in resolve_func_ptr() argument
1891 t = skip_mods_and_typedefs(btf, id, NULL); in resolve_func_ptr()
1895 t = skip_mods_and_typedefs(btf, t->type, res_id); in resolve_func_ptr()
1930 static bool get_map_field_int(const char *map_name, const struct btf *btf, in get_map_field_int() argument
1933 const struct btf_type *t = skip_mods_and_typedefs(btf, m->type, NULL); in get_map_field_int()
1934 const char *name = btf__name_by_offset(btf, m->name_off); in get_map_field_int()
1944 arr_t = btf__type_by_id(btf, t->type); in get_map_field_int()
1991 const char *name = btf__name_by_offset(obj->btf, m->name_off); in parse_btf_map_def()
1998 if (!get_map_field_int(map->name, obj->btf, m, in parse_btf_map_def()
2004 if (!get_map_field_int(map->name, obj->btf, m, in parse_btf_map_def()
2010 if (!get_map_field_int(map->name, obj->btf, m, in parse_btf_map_def()
2016 if (!get_map_field_int(map->name, obj->btf, m, &map->numa_node)) in parse_btf_map_def()
2022 if (!get_map_field_int(map->name, obj->btf, m, &sz)) in parse_btf_map_def()
2035 t = btf__type_by_id(obj->btf, m->type); in parse_btf_map_def()
2046 sz = btf__resolve_size(obj->btf, t->type); in parse_btf_map_def()
2064 if (!get_map_field_int(map->name, obj->btf, m, &sz)) in parse_btf_map_def()
2077 t = btf__type_by_id(obj->btf, m->type); in parse_btf_map_def()
2088 sz = btf__resolve_size(obj->btf, t->type); in parse_btf_map_def()
2128 t = btf__type_by_id(obj->btf, m->type); in parse_btf_map_def()
2139 t = skip_mods_and_typedefs(obj->btf, btf_array(t)->type, in parse_btf_map_def()
2146 t = skip_mods_and_typedefs(obj->btf, t->type, NULL); in parse_btf_map_def()
2176 if (!get_map_field_int(map->name, obj->btf, m, &val)) in parse_btf_map_def()
2227 var = btf__type_by_id(obj->btf, vi->type); in bpf_object__init_user_btf_map()
2229 map_name = btf__name_by_offset(obj->btf, var->name_off); in bpf_object__init_user_btf_map()
2251 def = skip_mods_and_typedefs(obj->btf, var->type, NULL); in bpf_object__init_user_btf_map()
2302 nr_types = btf__get_nr_types(obj->btf); in bpf_object__init_user_btf_maps()
2304 t = btf__type_by_id(obj->btf, i); in bpf_object__init_user_btf_maps()
2307 name = btf__name_by_offset(obj->btf, t->name_off); in bpf_object__init_user_btf_maps()
2373 static void bpf_object__sanitize_btf(struct bpf_object *obj, struct btf *btf) in bpf_object__sanitize_btf() argument
2381 for (i = 1; i <= btf__get_nr_types(btf); i++) { in bpf_object__sanitize_btf()
2382 t = (struct btf_type *)btf__type_by_id(btf, i); in bpf_object__sanitize_btf()
2401 name = (char *)btf__name_by_offset(btf, t->name_off); in bpf_object__sanitize_btf()
2415 vt = (void *)btf__type_by_id(btf, v->type); in bpf_object__sanitize_btf()
2452 obj->btf = btf__new(btf_data->d_buf, btf_data->d_size); in bpf_object__init_btf()
2453 if (IS_ERR(obj->btf)) { in bpf_object__init_btf()
2454 err = PTR_ERR(obj->btf); in bpf_object__init_btf()
2455 obj->btf = NULL; in bpf_object__init_btf()
2461 btf__set_pointer_size(obj->btf, 8); in bpf_object__init_btf()
2465 if (!obj->btf) { in bpf_object__init_btf()
2491 if (!obj->btf) in bpf_object__finalize_btf()
2494 err = btf__finalize_data(obj, obj->btf); in bpf_object__finalize_btf()
2563 struct btf *kern_btf = obj->btf; in bpf_object__sanitize_and_load_btf()
2567 if (!obj->btf) in bpf_object__sanitize_and_load_btf()
2585 raw_data = btf__get_raw_data(obj->btf, &sz); in bpf_object__sanitize_and_load_btf()
2591 btf__set_pointer_size(obj->btf, 8); in bpf_object__sanitize_and_load_btf()
2599 btf__set_fd(obj->btf, btf__fd(kern_btf)); in bpf_object__sanitize_and_load_btf()
2952 static int find_extern_btf_id(const struct btf *btf, const char *ext_name) in find_extern_btf_id() argument
2958 if (!btf) in find_extern_btf_id()
2961 n = btf__get_nr_types(btf); in find_extern_btf_id()
2963 t = btf__type_by_id(btf, i); in find_extern_btf_id()
2968 var_name = btf__name_by_offset(btf, t->name_off); in find_extern_btf_id()
2981 static int find_extern_sec_btf_id(struct btf *btf, int ext_btf_id) { in find_extern_sec_btf_id() argument
2986 if (!btf) in find_extern_sec_btf_id()
2989 n = btf__get_nr_types(btf); in find_extern_sec_btf_id()
2991 t = btf__type_by_id(btf, i); in find_extern_sec_btf_id()
3006 static enum kcfg_type find_kcfg_type(const struct btf *btf, int id, in find_kcfg_type() argument
3012 t = skip_mods_and_typedefs(btf, id, NULL); in find_kcfg_type()
3013 name = btf__name_by_offset(btf, t->name_off); in find_kcfg_type()
3040 if (find_kcfg_type(btf, btf_array(t)->type, NULL) != KCFG_CHAR) in find_kcfg_type()
3069 static int find_int_btf_id(const struct btf *btf) in find_int_btf_id() argument
3074 n = btf__get_nr_types(btf); in find_int_btf_id()
3076 t = btf__type_by_id(btf, i); in find_int_btf_id()
3125 ext->btf_id = find_extern_btf_id(obj->btf, ext_name); in bpf_object__collect_externs()
3131 t = btf__type_by_id(obj->btf, ext->btf_id); in bpf_object__collect_externs()
3132 ext->name = btf__name_by_offset(obj->btf, t->name_off); in bpf_object__collect_externs()
3136 ext->sec_btf_id = find_extern_sec_btf_id(obj->btf, ext->btf_id); in bpf_object__collect_externs()
3142 sec = (void *)btf__type_by_id(obj->btf, ext->sec_btf_id); in bpf_object__collect_externs()
3143 sec_name = btf__name_by_offset(obj->btf, sec->name_off); in bpf_object__collect_externs()
3148 ext->kcfg.sz = btf__resolve_size(obj->btf, t->type); in bpf_object__collect_externs()
3154 ext->kcfg.align = btf__align_of(obj->btf, t->type); in bpf_object__collect_externs()
3160 ext->kcfg.type = find_kcfg_type(obj->btf, t->type, in bpf_object__collect_externs()
3169 skip_mods_and_typedefs(obj->btf, t->type, in bpf_object__collect_externs()
3192 int int_btf_id = find_int_btf_id(obj->btf); in bpf_object__collect_externs()
3208 vt = (void *)btf__type_by_id(obj->btf, vs->type); in bpf_object__collect_externs()
3209 ext_name = btf__name_by_offset(obj->btf, vt->name_off); in bpf_object__collect_externs()
3243 t = btf__type_by_id(obj->btf, vs->type); in bpf_object__collect_externs()
3244 ext_name = btf__name_by_offset(obj->btf, t->name_off); in bpf_object__collect_externs()
3595 ret = btf__get_map_kv_tids(obj->btf, map->name, def->key_size, in bpf_map_find_btf_info()
3603 ret = btf__find_by_name(obj->btf, in bpf_map_find_btf_info()
4159 if (obj->btf && btf__fd(obj->btf) >= 0 && !bpf_map_find_btf_info(obj, map)) { in bpf_object__create_map()
4160 create_attr.btf_fd = btf__fd(obj->btf); in bpf_object__create_map()
4319 const struct btf *btf; member
4341 static bool is_flex_arr(const struct btf *btf, in is_flex_arr() argument
4352 t = btf__type_by_id(btf, acc->type_id); in is_flex_arr()
4451 static int bpf_core_parse_spec(const struct btf *btf, in bpf_core_parse_spec() argument
4468 spec->btf = btf; in bpf_core_parse_spec()
4494 t = skip_mods_and_typedefs(btf, type_id, &id); in bpf_core_parse_spec()
4509 acc->name = btf__name_by_offset(btf, btf_enum(t)[access_idx].name_off); in bpf_core_parse_spec()
4516 sz = btf__resolve_size(btf, id); in bpf_core_parse_spec()
4522 t = skip_mods_and_typedefs(btf, id, &id); in bpf_core_parse_spec()
4541 name = btf__name_by_offset(btf, m->name_off); in bpf_core_parse_spec()
4556 t = skip_mods_and_typedefs(btf, a->type, &id); in bpf_core_parse_spec()
4560 flex = is_flex_arr(btf, acc - 1, a); in bpf_core_parse_spec()
4568 sz = btf__resolve_size(btf, id); in bpf_core_parse_spec()
4618 static struct ids_vec *bpf_core_find_cands(const struct btf *local_btf, in bpf_core_find_cands()
4620 const struct btf *targ_btf) in bpf_core_find_cands()
4693 static int bpf_core_fields_are_compat(const struct btf *local_btf, in bpf_core_fields_are_compat()
4695 const struct btf *targ_btf, in bpf_core_fields_are_compat()
4762 static int bpf_core_match_member(const struct btf *local_btf, in bpf_core_match_member()
4764 const struct btf *targ_btf, in bpf_core_match_member()
4853 static int bpf_core_types_are_compat(const struct btf *local_btf, __u32 local_id, in bpf_core_types_are_compat()
4854 const struct btf *targ_btf, __u32 targ_id) in bpf_core_types_are_compat()
4933 const struct btf *targ_btf, __u32 targ_id, in bpf_core_spec_match()
4942 targ_spec->btf = targ_btf; in bpf_core_spec_match()
4947 return bpf_core_types_are_compat(local_spec->btf, in bpf_core_spec_match()
4961 targ_type = skip_mods_and_typedefs(targ_spec->btf, targ_id, &targ_id); in bpf_core_spec_match()
4968 targ_name = btf__name_by_offset(targ_spec->btf, e->name_off); in bpf_core_spec_match()
4989 targ_type = skip_mods_and_typedefs(targ_spec->btf, targ_id, in bpf_core_spec_match()
4995 matched = bpf_core_match_member(local_spec->btf, in bpf_core_spec_match()
5068 t = btf__type_by_id(spec->btf, acc->type_id); in bpf_core_calc_field_relo()
5075 sz = btf__resolve_size(spec->btf, acc->type_id); in bpf_core_calc_field_relo()
5081 sz = btf__resolve_size(spec->btf, acc->type_id); in bpf_core_calc_field_relo()
5096 mt = skip_mods_and_typedefs(spec->btf, m->type, &field_type_id); in bpf_core_calc_field_relo()
5116 sz = btf__resolve_size(spec->btf, field_type_id); in bpf_core_calc_field_relo()
5189 sz = btf__resolve_size(spec->btf, spec->root_type_id); in bpf_core_calc_type_relo()
5217 t = btf__type_by_id(spec->btf, spec->spec[0].type_id); in bpf_core_calc_enumval_relo()
5293 orig_t = btf__type_by_id(local_spec->btf, res->orig_type_id); in bpf_core_calc_relo()
5294 new_t = btf__type_by_id(targ_spec->btf, res->new_type_id); in bpf_core_calc_relo()
5560 t = btf__type_by_id(spec->btf, type_id); in bpf_core_dump_spec()
5561 s = btf__name_by_offset(spec->btf, t->name_off); in bpf_core_dump_spec()
5569 t = skip_mods_and_typedefs(spec->btf, type_id, NULL); in bpf_core_dump_spec()
5571 s = btf__name_by_offset(spec->btf, e->name_off); in bpf_core_dump_spec()
5666 const struct btf *local_btf, in bpf_core_apply_relo()
5667 const struct btf *targ_btf, in bpf_core_apply_relo()
5840 struct btf *targ_btf; in bpf_object__relocate_core()
5864 sec_name = btf__name_by_offset(obj->btf, sec->sec_name_off); in bpf_object__relocate_core()
5905 err = bpf_core_apply_relo(prog, rec, i, obj->btf, in bpf_object__relocate_core()
5999 sec_name = btf__name_by_offset(obj->btf, sec->sec_name_off); in adjust_prog_btf_ext_info()
6433 if (!obj->efile.btf_maps_sec_btf_id || !obj->btf) in bpf_object__collect_map_relos()
6435 sec = btf__type_by_id(obj->btf, obj->efile.btf_maps_sec_btf_id); in bpf_object__collect_map_relos()
6491 var = btf__type_by_id(obj->btf, vi->type); in bpf_object__collect_map_relos()
6492 def = skip_mods_and_typedefs(obj->btf, var->type, NULL); in bpf_object__collect_map_relos()
6496 mname = btf__name_by_offset(obj->btf, member->name_off); in bpf_object__collect_map_relos()
7134 ret = bpf_core_types_are_compat(obj->btf, local_type_id, in bpf_object__resolve_ksyms_btf_id()
7140 local_type = btf__type_by_id(obj->btf, local_type_id); in bpf_object__resolve_ksyms_btf_id()
7141 local_name = btf__name_by_offset(obj->btf, in bpf_object__resolve_ksyms_btf_id()
7880 btf__free(obj->btf); in bpf_object__close()
7932 struct btf *bpf_object__btf(const struct bpf_object *obj) in bpf_object__btf()
7934 return obj ? obj->btf : NULL; in bpf_object__btf()
7939 return obj->btf ? btf__fd(obj->btf) : -1; in bpf_object__btf_fd()
8480 const struct btf *btf; in bpf_object__collect_st_ops_relos() local
8491 btf = obj->btf; in bpf_object__collect_st_ops_relos()
8542 name = btf__name_by_offset(btf, member->name_off); in bpf_object__collect_st_ops_relos()
8544 if (!resolve_func_ptr(btf, member->type, NULL)) { in bpf_object__collect_st_ops_relos()
8593 static int find_btf_by_prefix_kind(const struct btf *btf, const char *prefix, in find_btf_by_prefix_kind() argument
8607 return btf__find_by_name_kind(btf, btf_type_name, kind); in find_btf_by_prefix_kind()
8610 static inline int __find_vmlinux_btf_id(struct btf *btf, const char *name, in __find_vmlinux_btf_id() argument
8616 err = find_btf_by_prefix_kind(btf, BTF_TRACE_PREFIX, name, in __find_vmlinux_btf_id()
8619 err = find_btf_by_prefix_kind(btf, BTF_LSM_PREFIX, name, in __find_vmlinux_btf_id()
8622 err = find_btf_by_prefix_kind(btf, BTF_ITER_PREFIX, name, in __find_vmlinux_btf_id()
8625 err = btf__find_by_name_kind(btf, name, BTF_KIND_FUNC); in __find_vmlinux_btf_id()
8636 struct btf *btf; in libbpf_find_vmlinux_btf_id() local
8639 btf = libbpf_find_kernel_btf(); in libbpf_find_vmlinux_btf_id()
8640 if (IS_ERR(btf)) { in libbpf_find_vmlinux_btf_id()
8645 err = __find_vmlinux_btf_id(btf, name, attach_type); in libbpf_find_vmlinux_btf_id()
8646 btf__free(btf); in libbpf_find_vmlinux_btf_id()
8654 struct btf *btf = NULL; in libbpf_find_prog_btf_id() local
8668 if (btf__get_from_id(info->btf_id, &btf)) { in libbpf_find_prog_btf_id()
8672 err = btf__find_by_name_kind(btf, name, BTF_KIND_FUNC); in libbpf_find_prog_btf_id()
8673 btf__free(btf); in libbpf_find_prog_btf_id()