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()
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()
1871 skip_mods_and_typedefs(const struct btf *btf, __u32 id, __u32 *res_id) in skip_mods_and_typedefs() argument
1873 const struct btf_type *t = btf__type_by_id(btf, id); in skip_mods_and_typedefs()
1881 t = btf__type_by_id(btf, t->type); in skip_mods_and_typedefs()
1888 resolve_func_ptr(const struct btf *btf, __u32 id, __u32 *res_id) in resolve_func_ptr() argument
1892 t = skip_mods_and_typedefs(btf, id, NULL); in resolve_func_ptr()
1896 t = skip_mods_and_typedefs(btf, t->type, res_id); in resolve_func_ptr()
1931 static bool get_map_field_int(const char *map_name, const struct btf *btf, in get_map_field_int() argument
1934 const struct btf_type *t = skip_mods_and_typedefs(btf, m->type, NULL); in get_map_field_int()
1935 const char *name = btf__name_by_offset(btf, m->name_off); in get_map_field_int()
1945 arr_t = btf__type_by_id(btf, t->type); in get_map_field_int()
1992 const char *name = btf__name_by_offset(obj->btf, m->name_off); in parse_btf_map_def()
1999 if (!get_map_field_int(map->name, obj->btf, m, in parse_btf_map_def()
2005 if (!get_map_field_int(map->name, obj->btf, m, in parse_btf_map_def()
2011 if (!get_map_field_int(map->name, obj->btf, m, in parse_btf_map_def()
2017 if (!get_map_field_int(map->name, obj->btf, m, &map->numa_node)) in parse_btf_map_def()
2023 if (!get_map_field_int(map->name, obj->btf, m, &sz)) in parse_btf_map_def()
2036 t = btf__type_by_id(obj->btf, m->type); in parse_btf_map_def()
2047 sz = btf__resolve_size(obj->btf, t->type); in parse_btf_map_def()
2065 if (!get_map_field_int(map->name, obj->btf, m, &sz)) in parse_btf_map_def()
2078 t = btf__type_by_id(obj->btf, m->type); in parse_btf_map_def()
2089 sz = btf__resolve_size(obj->btf, t->type); in parse_btf_map_def()
2129 t = btf__type_by_id(obj->btf, m->type); in parse_btf_map_def()
2140 t = skip_mods_and_typedefs(obj->btf, btf_array(t)->type, in parse_btf_map_def()
2147 t = skip_mods_and_typedefs(obj->btf, t->type, NULL); in parse_btf_map_def()
2177 if (!get_map_field_int(map->name, obj->btf, m, &val)) in parse_btf_map_def()
2228 var = btf__type_by_id(obj->btf, vi->type); in bpf_object__init_user_btf_map()
2230 map_name = btf__name_by_offset(obj->btf, var->name_off); in bpf_object__init_user_btf_map()
2252 def = skip_mods_and_typedefs(obj->btf, var->type, NULL); in bpf_object__init_user_btf_map()
2303 nr_types = btf__get_nr_types(obj->btf); in bpf_object__init_user_btf_maps()
2305 t = btf__type_by_id(obj->btf, i); in bpf_object__init_user_btf_maps()
2308 name = btf__name_by_offset(obj->btf, t->name_off); in bpf_object__init_user_btf_maps()
2374 static void bpf_object__sanitize_btf(struct bpf_object *obj, struct btf *btf) in bpf_object__sanitize_btf() argument
2382 for (i = 1; i <= btf__get_nr_types(btf); i++) { in bpf_object__sanitize_btf()
2383 t = (struct btf_type *)btf__type_by_id(btf, i); in bpf_object__sanitize_btf()
2402 name = (char *)btf__name_by_offset(btf, t->name_off); in bpf_object__sanitize_btf()
2416 vt = (void *)btf__type_by_id(btf, v->type); in bpf_object__sanitize_btf()
2453 obj->btf = btf__new(btf_data->d_buf, btf_data->d_size); in bpf_object__init_btf()
2454 if (IS_ERR(obj->btf)) { in bpf_object__init_btf()
2455 err = PTR_ERR(obj->btf); in bpf_object__init_btf()
2456 obj->btf = NULL; in bpf_object__init_btf()
2462 btf__set_pointer_size(obj->btf, 8); in bpf_object__init_btf()
2466 if (!obj->btf) { in bpf_object__init_btf()
2492 if (!obj->btf) in bpf_object__finalize_btf()
2495 err = btf__finalize_data(obj, obj->btf); in bpf_object__finalize_btf()
2564 struct btf *kern_btf = obj->btf; in bpf_object__sanitize_and_load_btf()
2568 if (!obj->btf) in bpf_object__sanitize_and_load_btf()
2586 raw_data = btf__get_raw_data(obj->btf, &sz); in bpf_object__sanitize_and_load_btf()
2592 btf__set_pointer_size(obj->btf, 8); in bpf_object__sanitize_and_load_btf()
2600 btf__set_fd(obj->btf, btf__fd(kern_btf)); in bpf_object__sanitize_and_load_btf()
2953 static int find_extern_btf_id(const struct btf *btf, const char *ext_name) in find_extern_btf_id() argument
2959 if (!btf) in find_extern_btf_id()
2962 n = btf__get_nr_types(btf); in find_extern_btf_id()
2964 t = btf__type_by_id(btf, i); in find_extern_btf_id()
2969 var_name = btf__name_by_offset(btf, t->name_off); in find_extern_btf_id()
2982 static int find_extern_sec_btf_id(struct btf *btf, int ext_btf_id) { in find_extern_sec_btf_id() argument
2987 if (!btf) in find_extern_sec_btf_id()
2990 n = btf__get_nr_types(btf); in find_extern_sec_btf_id()
2992 t = btf__type_by_id(btf, i); in find_extern_sec_btf_id()
3007 static enum kcfg_type find_kcfg_type(const struct btf *btf, int id, in find_kcfg_type() argument
3013 t = skip_mods_and_typedefs(btf, id, NULL); in find_kcfg_type()
3014 name = btf__name_by_offset(btf, t->name_off); in find_kcfg_type()
3041 if (find_kcfg_type(btf, btf_array(t)->type, NULL) != KCFG_CHAR) in find_kcfg_type()
3070 static int find_int_btf_id(const struct btf *btf) in find_int_btf_id() argument
3075 n = btf__get_nr_types(btf); in find_int_btf_id()
3077 t = btf__type_by_id(btf, i); in find_int_btf_id()
3126 ext->btf_id = find_extern_btf_id(obj->btf, ext_name); in bpf_object__collect_externs()
3132 t = btf__type_by_id(obj->btf, ext->btf_id); in bpf_object__collect_externs()
3133 ext->name = btf__name_by_offset(obj->btf, t->name_off); in bpf_object__collect_externs()
3137 ext->sec_btf_id = find_extern_sec_btf_id(obj->btf, ext->btf_id); in bpf_object__collect_externs()
3143 sec = (void *)btf__type_by_id(obj->btf, ext->sec_btf_id); in bpf_object__collect_externs()
3144 sec_name = btf__name_by_offset(obj->btf, sec->name_off); in bpf_object__collect_externs()
3149 ext->kcfg.sz = btf__resolve_size(obj->btf, t->type); in bpf_object__collect_externs()
3155 ext->kcfg.align = btf__align_of(obj->btf, t->type); in bpf_object__collect_externs()
3161 ext->kcfg.type = find_kcfg_type(obj->btf, t->type, in bpf_object__collect_externs()
3170 skip_mods_and_typedefs(obj->btf, t->type, in bpf_object__collect_externs()
3193 int int_btf_id = find_int_btf_id(obj->btf); in bpf_object__collect_externs()
3209 vt = (void *)btf__type_by_id(obj->btf, vs->type); in bpf_object__collect_externs()
3210 ext_name = btf__name_by_offset(obj->btf, vt->name_off); in bpf_object__collect_externs()
3244 t = btf__type_by_id(obj->btf, vs->type); in bpf_object__collect_externs()
3245 ext_name = btf__name_by_offset(obj->btf, t->name_off); in bpf_object__collect_externs()
3599 ret = btf__get_map_kv_tids(obj->btf, map->name, def->key_size, in bpf_map_find_btf_info()
3607 ret = btf__find_by_name(obj->btf, in bpf_map_find_btf_info()
4211 if (obj->btf && btf__fd(obj->btf) >= 0 && !bpf_map_find_btf_info(obj, map)) { in bpf_object__create_map()
4212 create_attr.btf_fd = btf__fd(obj->btf); in bpf_object__create_map()
4381 const struct btf *btf; member
4403 static bool is_flex_arr(const struct btf *btf, in is_flex_arr() argument
4414 t = btf__type_by_id(btf, acc->type_id); in is_flex_arr()
4513 static int bpf_core_parse_spec(const struct btf *btf, in bpf_core_parse_spec() argument
4530 spec->btf = btf; in bpf_core_parse_spec()
4556 t = skip_mods_and_typedefs(btf, type_id, &id); in bpf_core_parse_spec()
4571 acc->name = btf__name_by_offset(btf, btf_enum(t)[access_idx].name_off); in bpf_core_parse_spec()
4578 sz = btf__resolve_size(btf, id); in bpf_core_parse_spec()
4584 t = skip_mods_and_typedefs(btf, id, &id); in bpf_core_parse_spec()
4603 name = btf__name_by_offset(btf, m->name_off); in bpf_core_parse_spec()
4618 t = skip_mods_and_typedefs(btf, a->type, &id); in bpf_core_parse_spec()
4622 flex = is_flex_arr(btf, acc - 1, a); in bpf_core_parse_spec()
4630 sz = btf__resolve_size(btf, id); in bpf_core_parse_spec()
4680 static struct ids_vec *bpf_core_find_cands(const struct btf *local_btf, in bpf_core_find_cands()
4682 const struct btf *targ_btf) in bpf_core_find_cands()
4755 static int bpf_core_fields_are_compat(const struct btf *local_btf, in bpf_core_fields_are_compat()
4757 const struct btf *targ_btf, in bpf_core_fields_are_compat()
4824 static int bpf_core_match_member(const struct btf *local_btf, in bpf_core_match_member()
4826 const struct btf *targ_btf, in bpf_core_match_member()
4915 static int bpf_core_types_are_compat(const struct btf *local_btf, __u32 local_id, in bpf_core_types_are_compat()
4916 const struct btf *targ_btf, __u32 targ_id) in bpf_core_types_are_compat()
4995 const struct btf *targ_btf, __u32 targ_id, in bpf_core_spec_match()
5004 targ_spec->btf = targ_btf; in bpf_core_spec_match()
5009 return bpf_core_types_are_compat(local_spec->btf, in bpf_core_spec_match()
5023 targ_type = skip_mods_and_typedefs(targ_spec->btf, targ_id, &targ_id); in bpf_core_spec_match()
5030 targ_name = btf__name_by_offset(targ_spec->btf, e->name_off); in bpf_core_spec_match()
5051 targ_type = skip_mods_and_typedefs(targ_spec->btf, targ_id, in bpf_core_spec_match()
5057 matched = bpf_core_match_member(local_spec->btf, in bpf_core_spec_match()
5130 t = btf__type_by_id(spec->btf, acc->type_id); in bpf_core_calc_field_relo()
5137 sz = btf__resolve_size(spec->btf, acc->type_id); in bpf_core_calc_field_relo()
5143 sz = btf__resolve_size(spec->btf, acc->type_id); in bpf_core_calc_field_relo()
5158 mt = skip_mods_and_typedefs(spec->btf, m->type, &field_type_id); in bpf_core_calc_field_relo()
5178 sz = btf__resolve_size(spec->btf, field_type_id); in bpf_core_calc_field_relo()
5251 sz = btf__resolve_size(spec->btf, spec->root_type_id); in bpf_core_calc_type_relo()
5279 t = btf__type_by_id(spec->btf, spec->spec[0].type_id); in bpf_core_calc_enumval_relo()
5355 orig_t = btf__type_by_id(local_spec->btf, res->orig_type_id); in bpf_core_calc_relo()
5356 new_t = btf__type_by_id(targ_spec->btf, res->new_type_id); in bpf_core_calc_relo()
5622 t = btf__type_by_id(spec->btf, type_id); in bpf_core_dump_spec()
5623 s = btf__name_by_offset(spec->btf, t->name_off); in bpf_core_dump_spec()
5631 t = skip_mods_and_typedefs(spec->btf, type_id, NULL); in bpf_core_dump_spec()
5633 s = btf__name_by_offset(spec->btf, e->name_off); in bpf_core_dump_spec()
5728 const struct btf *local_btf, in bpf_core_apply_relo()
5729 const struct btf *targ_btf, in bpf_core_apply_relo()
5902 struct btf *targ_btf; in bpf_object__relocate_core()
5926 sec_name = btf__name_by_offset(obj->btf, sec->sec_name_off); in bpf_object__relocate_core()
5975 err = bpf_core_apply_relo(prog, rec, i, obj->btf, in bpf_object__relocate_core()
6069 sec_name = btf__name_by_offset(obj->btf, sec->sec_name_off); in adjust_prog_btf_ext_info()
6503 if (!obj->efile.btf_maps_sec_btf_id || !obj->btf) in bpf_object__collect_map_relos()
6505 sec = btf__type_by_id(obj->btf, obj->efile.btf_maps_sec_btf_id); in bpf_object__collect_map_relos()
6561 var = btf__type_by_id(obj->btf, vi->type); in bpf_object__collect_map_relos()
6562 def = skip_mods_and_typedefs(obj->btf, var->type, NULL); in bpf_object__collect_map_relos()
6566 mname = btf__name_by_offset(obj->btf, member->name_off); in bpf_object__collect_map_relos()
7206 ret = bpf_core_types_are_compat(obj->btf, local_type_id, in bpf_object__resolve_ksyms_btf_id()
7212 local_type = btf__type_by_id(obj->btf, local_type_id); in bpf_object__resolve_ksyms_btf_id()
7213 local_name = btf__name_by_offset(obj->btf, in bpf_object__resolve_ksyms_btf_id()
7964 btf__free(obj->btf); in bpf_object__close()
8016 struct btf *bpf_object__btf(const struct bpf_object *obj) in bpf_object__btf()
8018 return obj ? obj->btf : NULL; in bpf_object__btf()
8023 return obj->btf ? btf__fd(obj->btf) : -1; in bpf_object__btf_fd()
8564 const struct btf *btf; in bpf_object__collect_st_ops_relos() local
8575 btf = obj->btf; in bpf_object__collect_st_ops_relos()
8626 name = btf__name_by_offset(btf, member->name_off); in bpf_object__collect_st_ops_relos()
8628 if (!resolve_func_ptr(btf, member->type, NULL)) { in bpf_object__collect_st_ops_relos()
8677 static int find_btf_by_prefix_kind(const struct btf *btf, const char *prefix, in find_btf_by_prefix_kind() argument
8691 return btf__find_by_name_kind(btf, btf_type_name, kind); in find_btf_by_prefix_kind()
8694 static inline int __find_vmlinux_btf_id(struct btf *btf, const char *name, in __find_vmlinux_btf_id() argument
8700 err = find_btf_by_prefix_kind(btf, BTF_TRACE_PREFIX, name, in __find_vmlinux_btf_id()
8703 err = find_btf_by_prefix_kind(btf, BTF_LSM_PREFIX, name, in __find_vmlinux_btf_id()
8706 err = find_btf_by_prefix_kind(btf, BTF_ITER_PREFIX, name, in __find_vmlinux_btf_id()
8709 err = btf__find_by_name_kind(btf, name, BTF_KIND_FUNC); in __find_vmlinux_btf_id()
8720 struct btf *btf; in libbpf_find_vmlinux_btf_id() local
8723 btf = libbpf_find_kernel_btf(); in libbpf_find_vmlinux_btf_id()
8724 if (IS_ERR(btf)) { in libbpf_find_vmlinux_btf_id()
8729 err = __find_vmlinux_btf_id(btf, name, attach_type); in libbpf_find_vmlinux_btf_id()
8730 btf__free(btf); in libbpf_find_vmlinux_btf_id()
8738 struct btf *btf = NULL; in libbpf_find_prog_btf_id() local
8752 if (btf__get_from_id(info->btf_id, &btf)) { in libbpf_find_prog_btf_id()
8756 err = btf__find_by_name_kind(btf, name, BTF_KIND_FUNC); in libbpf_find_prog_btf_id()
8757 btf__free(btf); in libbpf_find_prog_btf_id()