• Home
  • Raw
  • Download

Lines Matching defs:btf

32 #include <linux/btf.h>
55 #include "btf.h"
473 /* e.g. struct tcp_congestion_ops in bpf_prog's btf format */
595 struct btf *btf;
676 struct btf *btf;
682 struct btf *btf_vmlinux;
688 struct btf *btf_vmlinux_override;
978 find_member_by_name(const struct btf *btf, const struct btf_type *t,
985 if (!strcmp(btf__name_by_offset(btf, m->name_off), name))
993 static int find_btf_by_prefix_kind(const struct btf *btf, const char *prefix,
997 find_struct_ops_kern_types(const struct btf *btf, const char *tname,
1007 kern_type_id = btf__find_by_name_kind(btf, tname, BTF_KIND_STRUCT);
1013 kern_type = btf__type_by_id(btf, kern_type_id);
1020 kern_vtype_id = find_btf_by_prefix_kind(btf, STRUCT_OPS_VALUE_PREFIX,
1027 kern_vtype = btf__type_by_id(btf, kern_vtype_id);
1062 const struct btf *btf,
1063 const struct btf *kern_btf)
1107 mname = btf__name_by_offset(btf, member->name_off);
1129 mtype = skip_mods_and_typedefs(btf, member->type, &mtype_id);
1173 msize = btf__resolve_size(btf, mtype_id);
1203 err = bpf_map__init_kern_struct_ops(map, obj->btf,
1219 const struct btf *btf;
1226 btf = obj->btf;
1227 datasec_id = btf__find_by_name_kind(btf, STRUCT_OPS_SEC,
1235 datasec = btf__type_by_id(btf, datasec_id);
1238 type = btf__type_by_id(obj->btf, vsi->type);
1239 var_name = btf__name_by_offset(obj->btf, type->name_off);
1241 type_id = btf__resolve_type(obj->btf, vsi->type);
1248 type = btf__type_by_id(obj->btf, type_id);
1249 tname = btf__name_by_offset(obj->btf, type->name_off);
1692 t = btf__type_by_id(obj->btf, map->btf_value_type_id);
1698 vt = btf__type_by_id(obj->btf, vsi->type);
2149 skip_mods_and_typedefs(const struct btf *btf, __u32 id, __u32 *res_id)
2151 const struct btf_type *t = btf__type_by_id(btf, id);
2159 t = btf__type_by_id(btf, t->type);
2166 resolve_func_ptr(const struct btf *btf, __u32 id, __u32 *res_id)
2170 t = skip_mods_and_typedefs(btf, id, NULL);
2174 t = skip_mods_and_typedefs(btf, t->type, res_id);
2218 static bool get_map_field_int(const char *map_name, const struct btf *btf,
2221 const struct btf_type *t = skip_mods_and_typedefs(btf, m->type, NULL);
2222 const char *name = btf__name_by_offset(btf, m->name_off);
2232 arr_t = btf__type_by_id(btf, t->type);
2283 int parse_btf_map_def(const char *map_name, struct btf *btf,
2295 const char *name = btf__name_by_offset(btf, m->name_off);
2302 if (!get_map_field_int(map_name, btf, m, &map_def->map_type))
2306 if (!get_map_field_int(map_name, btf, m, &map_def->max_entries))
2310 if (!get_map_field_int(map_name, btf, m, &map_def->map_flags))
2314 if (!get_map_field_int(map_name, btf, m, &map_def->numa_node))
2320 if (!get_map_field_int(map_name, btf, m, &sz))
2332 t = btf__type_by_id(btf, m->type);
2343 sz = btf__resolve_size(btf, t->type);
2360 if (!get_map_field_int(map_name, btf, m, &sz))
2372 t = btf__type_by_id(btf, m->type);
2383 sz = btf__resolve_size(btf, t->type);
2426 t = btf__type_by_id(btf, m->type);
2437 t = skip_mods_and_typedefs(btf, btf_array(t)->type, NULL);
2443 t = skip_mods_and_typedefs(btf, t->type, NULL);
2459 err = parse_btf_map_def(inner_map_name, btf, t, strict, inner_def, NULL);
2471 if (!get_map_field_int(map_name, btf, m, &val))
2483 if (!get_map_field_int(map_name, btf, m, &map_extra))
2614 var = btf__type_by_id(obj->btf, vi->type);
2616 map_name = btf__name_by_offset(obj->btf, var->name_off);
2637 def = skip_mods_and_typedefs(obj->btf, var->type, NULL);
2664 err = parse_btf_map_def(map->name, obj->btf, def, strict, &map_def, &inner_def);
2727 nr_types = btf__type_cnt(obj->btf);
2729 t = btf__type_by_id(obj->btf, i);
2732 name = btf__name_by_offset(obj->btf, t->name_off);
2805 static int bpf_object__sanitize_btf(struct bpf_object *obj, struct btf *btf)
2818 for (i = 1; i < btf__type_cnt(btf); i++) {
2819 t = (struct btf_type *)btf__type_by_id(btf, i);
2838 name = (char *)btf__name_by_offset(btf, t->name_off);
2852 vt = (void *)btf__type_by_id(btf, v->type);
2885 enum64_placeholder_id = btf__add_int(btf, "enum64_placeholder", 1, 0);
2889 t = (struct btf_type *)btf__type_by_id(btf, i);
2924 obj->btf = btf__new(btf_data->d_buf, btf_data->d_size);
2925 err = libbpf_get_error(obj->btf);
2927 obj->btf = NULL;
2932 btf__set_pointer_size(obj->btf, 8);
2938 if (!obj->btf) {
2982 sec_name = btf__name_by_offset(obj->btf, sec->sec_name_off);
3019 static int btf_fixup_datasec(struct bpf_object *obj, struct btf *btf,
3023 const char *sec_name = btf__name_by_offset(btf, t->name_off);
3068 t_var = btf__type_by_id(btf, vsi->type);
3078 var_name = btf__name_by_offset(btf, t_var->name_off);
3116 if (!obj->btf)
3119 n = btf__type_cnt(obj->btf);
3121 struct btf_type *t = btf_type_by_id(obj->btf, i);
3129 err = btf_fixup_datasec(obj, obj->btf, t);
3206 struct btf *kern_btf = obj->btf;
3210 if (!obj->btf)
3239 n = btf__type_cnt(obj->btf);
3241 t = btf_type_by_id(obj->btf, j);
3245 name = btf__str_by_offset(obj->btf, t->name_off);
3260 raw_data = btf__raw_data(obj->btf, &sz);
3267 btf__set_pointer_size(obj->btf, 8);
3292 btf__set_fd(obj->btf, btf__fd(kern_btf));
3873 static int find_extern_btf_id(const struct btf *btf, const char *ext_name)
3879 if (!btf)
3882 n = btf__type_cnt(btf);
3884 t = btf__type_by_id(btf, i);
3889 tname = btf__name_by_offset(btf, t->name_off);
3906 static int find_extern_sec_btf_id(struct btf *btf, int ext_btf_id) {
3911 if (!btf)
3914 n = btf__type_cnt(btf);
3916 t = btf__type_by_id(btf, i);
3931 static enum kcfg_type find_kcfg_type(const struct btf *btf, int id,
3937 t = skip_mods_and_typedefs(btf, id, NULL);
3938 name = btf__name_by_offset(btf, t->name_off);
3969 if (find_kcfg_type(btf, btf_array(t)->type, NULL) != KCFG_CHAR)
3998 static int find_int_btf_id(const struct btf *btf)
4003 n = btf__type_cnt(btf);
4005 t = btf__type_by_id(btf, i);
4014 static int add_dummy_ksym_var(struct btf *btf)
4020 if (!btf)
4023 sec_btf_id = btf__find_by_name_kind(btf, KSYMS_SEC,
4028 sec = btf__type_by_id(btf, sec_btf_id);
4033 vt = btf__type_by_id(btf, vs->type);
4042 int_btf_id = find_int_btf_id(btf);
4043 dummy_var_btf_id = btf__add_var(btf,
4080 dummy_var_btf_id = add_dummy_ksym_var(obj->btf);
4107 ext->btf_id = find_extern_btf_id(obj->btf, ext_name);
4113 t = btf__type_by_id(obj->btf, ext->btf_id);
4114 ext->name = btf__name_by_offset(obj->btf, t->name_off);
4118 ext->sec_btf_id = find_extern_sec_btf_id(obj->btf, ext->btf_id);
4124 sec = (void *)btf__type_by_id(obj->btf, ext->sec_btf_id);
4125 sec_name = btf__name_by_offset(obj->btf, sec->name_off);
4135 ext->kcfg.sz = btf__resolve_size(obj->btf, t->type);
4141 ext->kcfg.align = btf__align_of(obj->btf, t->type);
4147 ext->kcfg.type = find_kcfg_type(obj->btf, t->type,
4156 skip_mods_and_typedefs(obj->btf, t->type,
4179 int int_btf_id = find_int_btf_id(obj->btf);
4187 dummy_var = btf__type_by_id(obj->btf, dummy_var_btf_id);
4202 vt = (void *)btf__type_by_id(obj->btf, vs->type);
4203 ext_name = btf__name_by_offset(obj->btf, vt->name_off);
4215 func_proto = btf__type_by_id(obj->btf,
4257 t = btf__type_by_id(obj->btf, vs->type);
4258 ext_name = btf__name_by_offset(obj->btf, t->name_off);
4641 if (!obj->btf)
4658 id = btf__find_by_name(obj->btf, map->real_name);
5384 if (obj->btf && btf__fd(obj->btf) >= 0) {
5385 create_attr.btf_fd = btf__fd(obj->btf);
5722 const struct btf *targ_btf,
5733 local_t = btf__type_by_id(local_cand->btf, local_cand->id);
5734 local_name = btf__str_by_offset(local_cand->btf, local_t->name_off);
5763 cand->btf = targ_btf;
5776 struct btf *btf;
5831 btf = btf_get_from_fd(fd, obj->btf_vmlinux);
5832 err = libbpf_get_error(btf);
5846 mod_btf->btf = btf;
5865 bpf_core_find_cands(struct bpf_object *obj, const struct btf *local_btf, __u32 local_type_id)
5869 const struct btf *main_btf;
5875 local_cand.btf = local_btf;
5911 obj->btf_modules[i].btf,
5944 int bpf_core_types_are_compat(const struct btf *local_btf, __u32 local_id,
5945 const struct btf *targ_btf, __u32 targ_id)
5950 int bpf_core_types_match(const struct btf *local_btf, __u32 local_id,
5951 const struct btf *targ_btf, __u32 targ_id)
6003 const struct btf *local_btf,
6083 sec_name = btf__name_by_offset(obj->btf, sec->sec_name_off);
6134 err = bpf_core_resolve_relo(prog, rec, i, obj->btf, cand_cache, &targ_res);
6851 if (!obj->efile.btf_maps_sec_btf_id || !obj->btf)
6853 sec = btf__type_by_id(obj->btf, obj->efile.btf_maps_sec_btf_id);
6932 var = btf__type_by_id(obj->btf, vi->type);
6933 def = skip_mods_and_typedefs(obj->btf, var->type, NULL);
6937 mname = btf__name_by_offset(obj->btf, member->name_off);
7364 err = bpf_core_parse_spec(prog->name, prog->obj->btf, relo, &spec);
7759 t = btf__type_by_id(obj->btf, ext->btf_id);
7782 __u16 kind, struct btf **res_btf,
7786 struct btf *btf;
7789 btf = obj->btf_vmlinux;
7791 id = btf__find_by_name_kind(btf, ksym_name, kind);
7801 btf = mod_btf->btf;
7802 id = btf__find_by_name_kind_own(btf, ksym_name, kind);
7810 *res_btf = btf;
7822 struct btf *btf = NULL;
7825 id = find_ksym_btf_id(obj, ext->name, BTF_KIND_VAR, &btf, &mod_btf);
7838 targ_var = btf__type_by_id(btf, id);
7839 targ_var_name = btf__name_by_offset(btf, targ_var->name_off);
7840 targ_type = skip_mods_and_typedefs(btf, targ_var->type, &targ_type_id);
7842 err = bpf_core_types_are_compat(obj->btf, local_type_id,
7843 btf, targ_type_id);
7848 local_type = btf__type_by_id(obj->btf, local_type_id);
7849 local_name = btf__name_by_offset(obj->btf, local_type->name_off);
7850 targ_name = btf__name_by_offset(btf, targ_type->name_off);
7874 struct btf *kern_btf = NULL;
7891 ret = bpf_core_types_are_compat(obj->btf, local_func_proto_id,
7946 t = btf__type_by_id(obj->btf, ext->btf_id);
8095 if (obj->btf)
8096 btf__set_fd(obj->btf, -1);
8109 btf__free(obj->btf_modules[i].btf);
8575 btf__free(obj->btf);
8608 struct btf *bpf_object__btf(const struct bpf_object *obj)
8610 return obj ? obj->btf : NULL;
8615 return obj->btf ? btf__fd(obj->btf) : -1;
9229 const struct btf *btf;
9238 btf = obj->btf;
9291 name = btf__name_by_offset(btf, member->name_off);
9293 if (!resolve_func_ptr(btf, member->type, NULL)) {
9367 static int find_btf_by_prefix_kind(const struct btf *btf, const char *prefix,
9381 return btf__find_by_name_kind(btf, btf_type_name, kind);
9384 static inline int find_attach_btf_id(struct btf *btf, const char *name,
9391 return find_btf_by_prefix_kind(btf, prefix, name, kind);
9397 struct btf *btf;
9400 btf = btf__load_vmlinux_btf();
9401 err = libbpf_get_error(btf);
9407 err = find_attach_btf_id(btf, name, attach_type);
9411 btf__free(btf);
9419 struct btf *btf;
9435 btf = btf__load_from_kernel_by_id(info.btf_id);
9436 err = libbpf_get_error(btf);
9441 err = btf__find_by_name_kind(btf, name, BTF_KIND_FUNC);
9442 btf__free(btf);
9473 ret = find_attach_btf_id(mod->btf, attach_name, attach_type);
12772 struct btf *btf;
12781 btf = bpf_object__btf(s->obj);
12782 if (!btf) {
12804 map_type = btf__type_by_id(btf, map_type_id);
12816 var_type = btf__type_by_id(btf, var->type);
12817 var_name = btf__name_by_offset(btf, var_type->name_off);