Lines Matching +full:kconfig +full:- +full:ext
1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
51 if (str[n1 - i - 1] != suffix[n2 - i - 1]) in str_has_suffix()
67 t = skip_mods_and_typedefs(btf, t->type, res_id); in resolve_func_ptr()
77 strncpy(file_copy, file, PATH_MAX - 1)[PATH_MAX - 1] = '\0'; in get_obj_name()
78 strncpy(name, basename(file_copy), MAX_OBJ_NAME_LEN - 1)[MAX_OBJ_NAME_LEN - 1] = '\0'; in get_obj_name()
80 name[strlen(name) - 2] = '\0'; in get_obj_name()
95 static const char *sfxs[] = { ".data", ".rodata", ".bss", ".kconfig" }; in get_map_ident()
120 static const char *pfxs[] = { ".data", ".rodata", ".bss", ".kconfig" }; in get_datasec_ident()
153 const char *sec_name = btf__name_by_offset(btf, sec->name_off); in codegen_datasec_def()
162 if (strcmp(sec_name, ".kconfig") != 0) in codegen_datasec_def()
167 const struct btf_type *var = btf__type_by_id(btf, sec_var->type); in codegen_datasec_def()
168 const char *var_name = btf__name_by_offset(btf, var->name_off); in codegen_datasec_def()
174 int need_off = sec_var->offset, align_off, align; in codegen_datasec_def()
175 __u32 var_type_id = var->type; in codegen_datasec_def()
178 if (btf_var(var)->linkage == BTF_VAR_STATIC) in codegen_datasec_def()
184 return -EINVAL; in codegen_datasec_def()
187 align = btf__align_of(btf, var->type); in codegen_datasec_def()
191 return -EINVAL; in codegen_datasec_def()
193 /* Assume 32-bit architectures when generating data section in codegen_datasec_def()
196 * conservative and assume 32-bit one to ensure enough padding in codegen_datasec_def()
198 * still work correctly for 64-bit architectures, because in in codegen_datasec_def()
200 * which on 64-bit architectures is not strictly necessary and in codegen_datasec_def()
201 * would be handled by natural 8-byte alignment. But it still in codegen_datasec_def()
208 align_off = (off + align - 1) / align * align; in codegen_datasec_def()
211 pad_cnt, need_off - off); in codegen_datasec_def()
220 strncat(var_ident, var_name, sizeof(var_ident) - 1); in codegen_datasec_def()
229 off = sec_var->offset + sec_var->size; in codegen_datasec_def()
247 name = btf__str_by_offset(btf, t->name_off); in find_type_for_map()
286 return -errno; in codegen_datasecs()
289 /* only generate definitions for memory-mapped internal maps */ in codegen_datasecs()
299 * map. It will still be memory-mapped and its contents in codegen_datasecs()
300 * accessible from user-space through BPF skeleton. in codegen_datasecs()
321 return btf_is_ptr(v) && btf_is_func_proto(btf__type_by_id(btf, v->type)); in btf_is_ptr_to_func_proto()
339 return -errno; in codegen_subskel_datasecs()
342 /* only generate definitions for memory-mapped internal maps */ in codegen_subskel_datasecs()
350 sec_name = btf__name_by_offset(btf, sec->name_off); in codegen_subskel_datasecs()
354 strip_mods = strcmp(sec_name, ".kconfig") != 0; in codegen_subskel_datasecs()
367 var = btf__type_by_id(btf, sec_var->type); in codegen_subskel_datasecs()
368 var_name = btf__name_by_offset(btf, var->name_off); in codegen_subskel_datasecs()
369 var_type_id = var->type; in codegen_subskel_datasecs()
372 if (btf_var(var)->linkage == BTF_VAR_STATIC) in codegen_subskel_datasecs()
378 var = skip_mods_and_typedefs(btf, var->type, NULL); in codegen_subskel_datasecs()
419 exit(-1); in codegen()
431 src - template - 1, template, c); in codegen()
433 exit(-1); in codegen()
439 for (n = skip_tabs; n > 0; n--, src++) { in codegen()
442 src - template - 1, template); in codegen()
444 exit(-1); in codegen()
449 for (n = end - src; n > 0 && isspace(src[n - 1]); n--) in codegen()
496 /* Emit type size asserts for all top-level fields in memory-mapped internal maps. */
533 const struct btf_type *var = btf__type_by_id(btf, sec_var->type); in codegen_asserts()
534 const char *var_name = btf__name_by_offset(btf, var->name_off); in codegen_asserts()
538 if (btf_var(var)->linkage == BTF_VAR_STATIC) in codegen_asserts()
541 var_size = btf__resolve_size(btf, var->type); in codegen_asserts()
546 strncat(var_ident, var_name, sizeof(var_ident) - 1); in codegen_asserts()
549 printf("\t_Static_assert(sizeof(s->%s->%s) == %ld, \"unexpected size of '%s'\");\n", in codegen_asserts()
575 int prog_fd = skel->progs.%2$s.prog_fd; \n\ in codegen_attach_detach()
591 printf("\tint fd = ((void)prog_fd, 0); /* auto-attach not supported */\n"); in codegen_attach_detach()
598 skel->links.%1$s_fd = fd; \n\ in codegen_attach_detach()
634 skel_closenz(skel->links.%1$s_fd); \n\ in codegen_attach_detach()
664 skel_closenz(skel->progs.%1$s.prog_fd); \n\ in codegen_destroy()
673 printf("\tskel_free_map_data(skel->%1$s, skel->maps.%1$s.initial_value, %2$zd);\n", in codegen_destroy()
677 skel_closenz(skel->maps.%1$s.map_fd); \n\ in codegen_destroy()
729 skel->ctx.sz = (void *)&skel->links - (void *)skel; \n\ in gen_trace()
750 skel->%1$s = skel_prep_map_data((void *)data, %2$zd,\n\ in gen_trace()
751 sizeof(data) - 1);\n\ in gen_trace()
752 if (!skel->%1$s) \n\ in gen_trace()
754 skel->maps.%1$s.initial_value = (__u64) (long) skel->%1$s;\n\ in gen_trace()
786 opts.data_sz = sizeof(opts_data) - 1; \n\ in gen_trace()
788 opts.insns_sz = sizeof(opts_insn) - 1; \n\ in gen_trace()
808 skel->%1$s = skel_finalize_map_data(&skel->maps.%1$s.initial_value, \n\ in gen_trace()
809 %2$zd, %3$s, skel->maps.%1$s.map_fd);\n\ in gen_trace()
810 if (!skel->%1$s) \n\ in gen_trace()
811 return -ENOMEM; \n\ in gen_trace()
864 s->map_cnt = %zu; \n\ in codegen_maps_skeleton()
865 s->map_skel_sz = sizeof(*s->maps); \n\ in codegen_maps_skeleton()
866 s->maps = (struct bpf_map_skeleton *)calloc(s->map_cnt, s->map_skel_sz);\n\ in codegen_maps_skeleton()
867 if (!s->maps) { \n\ in codegen_maps_skeleton()
868 err = -ENOMEM; \n\ in codegen_maps_skeleton()
882 s->maps[%zu].name = \"%s\"; \n\ in codegen_maps_skeleton()
883 s->maps[%zu].map = &obj->maps.%s; \n\ in codegen_maps_skeleton()
886 /* memory-mapped internal maps */ in codegen_maps_skeleton()
888 printf("\ts->maps[%zu].mmaped = (void **)&obj->%s;\n", in codegen_maps_skeleton()
908 s->prog_cnt = %zu; \n\ in codegen_progs_skeleton()
909 s->prog_skel_sz = sizeof(*s->progs); \n\ in codegen_progs_skeleton()
910 s->progs = (struct bpf_prog_skeleton *)calloc(s->prog_cnt, s->prog_skel_sz);\n\ in codegen_progs_skeleton()
911 if (!s->progs) { \n\ in codegen_progs_skeleton()
912 err = -ENOMEM; \n\ in codegen_progs_skeleton()
923 s->progs[%1$zu].name = \"%2$s\"; \n\ in codegen_progs_skeleton()
924 s->progs[%1$zu].prog = &obj->progs.%2$s;\n\ in codegen_progs_skeleton()
931 s->progs[%1$zu].link = &obj->links.%2$s;\n\ in codegen_progs_skeleton()
954 return -errno; in walk_st_ops_shadow_vars()
958 member_type = skip_mods_and_typedefs(btf, m->type, &member_type_id); in walk_st_ops_shadow_vars()
959 member_name = btf__name_by_offset(btf, m->name_off); in walk_st_ops_shadow_vars()
961 offset = m->offset / 8; in walk_st_ops_shadow_vars()
963 printf("\t\t\tchar __padding_%d[%d];\n", i, offset - next_offset); in walk_st_ops_shadow_vars()
991 if (resolve_func_ptr(btf, m->type, NULL)) { in walk_st_ops_shadow_vars()
1031 printf("\t\t\tchar __padding_end[%d];\n", size - next_offset); in walk_st_ops_shadow_vars()
1064 return -EINVAL; in gen_st_ops_shadow_type()
1067 return -EINVAL; in gen_st_ops_shadow_type()
1069 type_name = btf__name_by_offset(btf, map_type->name_off); in gen_st_ops_shadow_type()
1134 obj->struct_ops.%1$s = (typeof(obj->struct_ops.%1$s))\n\ in gen_st_ops_shadow_init()
1135 bpf_map__initial_value(obj->maps.%1$s, NULL);\n\ in gen_st_ops_shadow_init()
1151 int fd, err = -1; in do_skeleton()
1158 return -1; in do_skeleton()
1164 return -1; in do_skeleton()
1171 return -1; in do_skeleton()
1174 strncpy(obj_name, *argv, MAX_OBJ_NAME_LEN - 1); in do_skeleton()
1175 obj_name[MAX_OBJ_NAME_LEN - 1] = '\0'; in do_skeleton()
1178 return -1; in do_skeleton()
1186 return -1; in do_skeleton()
1191 return -1; in do_skeleton()
1198 return -1; in do_skeleton()
1216 err = -errno; in do_skeleton()
1238 /* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */ \n\ in do_skeleton()
1253 /* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */ \n\ in do_skeleton()
1341 if (obj->skeleton) \n\ in do_skeleton()
1342 bpf_object__destroy_skeleton(obj->skeleton);\n\ in do_skeleton()
1365 err = bpf_object__open_skeleton(obj->skeleton, opts);\n\ in do_skeleton()
1378 errno = -err; \n\ in do_skeleton()
1391 return bpf_object__load_skeleton(obj->skeleton); \n\ in do_skeleton()
1406 errno = -err; \n\ in do_skeleton()
1415 return bpf_object__attach_skeleton(obj->skeleton); \n\ in do_skeleton()
1421 bpf_object__detach_skeleton(obj->skeleton); \n\ in do_skeleton()
1440 err = -ENOMEM; \n\ in do_skeleton()
1444 s->sz = sizeof(*s); \n\ in do_skeleton()
1445 s->name = \"%1$s\"; \n\ in do_skeleton()
1446 s->obj = &obj->obj; \n\ in do_skeleton()
1457 s->data = %1$s__elf_bytes(&s->data_sz); \n\ in do_skeleton()
1459 obj->skeleton = s; \n\ in do_skeleton()
1480 *sz = sizeof(data) - 1; \n\ in do_skeleton()
1519 * This allows for library-like BPF objects to have userspace counterparts
1532 int fd, err = -1, map_type_id; in do_subskeleton()
1542 return -1; in do_subskeleton()
1548 return -1; in do_subskeleton()
1555 return -1; in do_subskeleton()
1558 strncpy(obj_name, *argv, MAX_OBJ_NAME_LEN - 1); in do_subskeleton()
1559 obj_name[MAX_OBJ_NAME_LEN - 1] = '\0'; in do_subskeleton()
1562 return -1; in do_subskeleton()
1570 return -1; in do_subskeleton()
1575 return -1; in do_subskeleton()
1580 return -1; in do_subskeleton()
1587 return -1; in do_subskeleton()
1614 err = -1; in do_subskeleton()
1647 var_type = btf__type_by_id(btf, var->type); in do_subskeleton()
1649 if (btf_var(var_type)->linkage == BTF_VAR_STATIC) in do_subskeleton()
1659 /* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */ \n\ in do_subskeleton()
1716 if (skel->subskel) \n\ in do_subskeleton()
1717 bpf_object__destroy_subskeleton(skel->subskel);\n\ in do_subskeleton()
1730 err = -ENOMEM; \n\ in do_subskeleton()
1735 err = -ENOMEM; \n\ in do_subskeleton()
1738 s->sz = sizeof(*s); \n\ in do_subskeleton()
1739 s->obj = src; \n\ in do_subskeleton()
1740 s->var_skel_sz = sizeof(*s->vars); \n\ in do_subskeleton()
1741 obj->subskel = s; \n\ in do_subskeleton()
1744 s->var_cnt = %2$d; \n\ in do_subskeleton()
1745 s->vars = (struct bpf_var_skeleton *)calloc(%2$d, sizeof(*s->vars));\n\ in do_subskeleton()
1746 if (!s->vars) { \n\ in do_subskeleton()
1747 err = -ENOMEM; \n\ in do_subskeleton()
1768 var_type = btf__type_by_id(btf, var->type); in do_subskeleton()
1769 var_name = btf__name_by_offset(btf, var_type->name_off); in do_subskeleton()
1771 if (btf_var(var_type)->linkage == BTF_VAR_STATIC) in do_subskeleton()
1780 s->vars[%3$d].name = \"%1$s\"; \n\ in do_subskeleton()
1781 s->vars[%3$d].map = &obj->maps.%2$s; \n\ in do_subskeleton()
1782 s->vars[%3$d].addr = (void **) &obj->%2$s.%1$s;\n\ in do_subskeleton()
1808 errno = -err; \n\ in do_subskeleton()
1837 return -1; in do_object()
1845 return -1; in do_object()
1885 " {-L|--use-loader} }\n" in do_help()
1901 return -ENOMEM; in btf_save_raw()
1905 return -errno; in btf_save_raw()
1908 err = -errno; in btf_save_raw()
1934 btf__free(info->src_btf); in btfgen_free_info()
1935 btf__free(info->marked_btf); in btfgen_free_info()
1950 info->src_btf = btf__parse(targ_btf_path, NULL); in btfgen_new_info()
1951 if (!info->src_btf) { in btfgen_new_info()
1952 err = -errno; in btfgen_new_info()
1957 info->marked_btf = btf__parse(targ_btf_path, NULL); in btfgen_new_info()
1958 if (!info->marked_btf) { in btfgen_new_info()
1959 err = -errno; in btfgen_new_info()
1968 errno = -err; in btfgen_new_info()
1976 const struct btf_type *t = btf__type_by_id(info->marked_btf, type_id); in btfgen_mark_member()
1979 m->name_off = MARKED; in btfgen_mark_member()
1985 const struct btf_type *btf_type = btf__type_by_id(info->src_btf, type_id); in btfgen_mark_type()
1995 cloned_type = (struct btf_type *) btf__type_by_id(info->marked_btf, type_id); in btfgen_mark_type()
1996 cloned_type->name_off = MARKED; in btfgen_mark_type()
2010 err = btfgen_mark_type(info, btf_type->type, follow_pointers); in btfgen_mark_type()
2019 err = btfgen_mark_type(info, btf_type->type, follow_pointers); in btfgen_mark_type()
2027 err = btfgen_mark_type(info, array->type, follow_pointers); in btfgen_mark_type()
2029 err = err ? : btfgen_mark_type(info, array->index_type, follow_pointers); in btfgen_mark_type()
2035 err = btfgen_mark_type(info, btf_type->type, follow_pointers); in btfgen_mark_type()
2042 err = btfgen_mark_type(info, param->type, follow_pointers); in btfgen_mark_type()
2051 return -EINVAL; in btfgen_mark_type()
2059 struct btf *btf = info->src_btf; in btfgen_record_field_relo()
2063 unsigned int type_id = targ_spec->root_type_id; in btfgen_record_field_relo()
2073 for (int i = 1; i < targ_spec->raw_len; i++) { in btfgen_record_field_relo()
2076 type_id = btf_type->type; in btfgen_record_field_relo()
2083 idx = targ_spec->raw_spec[i]; in btfgen_record_field_relo()
2090 type_id = btf_member->type; in btfgen_record_field_relo()
2098 type_id = array->type; in btfgen_record_field_relo()
2103 btf_kind_str(btf_type), btf_type->type); in btfgen_record_field_relo()
2104 return -EINVAL; in btfgen_record_field_relo()
2122 struct btf *btf = info->src_btf; in btfgen_mark_type_match()
2131 cloned_type = (struct btf_type *)btf__type_by_id(info->marked_btf, type_id); in btfgen_mark_type_match()
2132 cloned_type->name_off = MARKED; in btfgen_mark_type_match()
2154 err = btfgen_mark_type_match(info, m->type, false); in btfgen_mark_type_match()
2165 return btfgen_mark_type_match(info, btf_type->type, behind_ptr); in btfgen_mark_type_match()
2167 return btfgen_mark_type_match(info, btf_type->type, true); in btfgen_mark_type_match()
2173 err = btfgen_mark_type_match(info, array->type, false); in btfgen_mark_type_match()
2175 err = err ? : btfgen_mark_type_match(info, array->index_type, false); in btfgen_mark_type_match()
2185 err = btfgen_mark_type_match(info, btf_type->type, false); in btfgen_mark_type_match()
2192 err = btfgen_mark_type_match(info, param->type, false); in btfgen_mark_type_match()
2202 return -EINVAL; in btfgen_mark_type_match()
2214 return btfgen_mark_type_match(info, targ_spec->root_type_id, false); in btfgen_record_type_match_relo()
2219 return btfgen_mark_type(info, targ_spec->root_type_id, true); in btfgen_record_type_relo()
2224 return btfgen_mark_type(info, targ_spec->root_type_id, false); in btfgen_record_enumval_relo()
2229 switch (res->relo_kind) { in btfgen_record_reloc()
2249 return -EINVAL; in btfgen_record_reloc()
2268 err = -EINVAL; in btfgen_find_cands()
2272 local_name = btf__name_by_offset(local_btf, local_type->name_off); in btfgen_find_cands()
2274 err = -EINVAL; in btfgen_find_cands()
2291 errno = -err; in btfgen_find_cands()
2311 err = -errno; in btfgen_record_obj()
2319 err = -EINVAL; in btfgen_record_obj()
2323 if (btf_ext->core_relo_info.len == 0) { in btfgen_record_obj()
2334 seg = &btf_ext->core_relo_info; in btfgen_record_obj()
2340 const char *sec_name = btf__name_by_offset(btf, sec->sec_name_off); in btfgen_record_obj()
2342 if (relo->kind != BPF_CORE_TYPE_ID_LOCAL && in btfgen_record_obj()
2343 !hashmap__find(cand_cache, relo->type_id, &cands)) { in btfgen_record_obj()
2344 cands = btfgen_find_cands(btf, info->src_btf, relo->type_id); in btfgen_record_obj()
2346 err = -errno; in btfgen_record_obj()
2350 err = hashmap__set(cand_cache, relo->type_id, cands, in btfgen_record_obj()
2374 bpf_core_free_cands(entry->pvalue); in btfgen_record_obj()
2396 unsigned int i, n = btf__type_cnt(info->marked_btf); in btfgen_get_btf()
2401 err = -errno; in btfgen_get_btf()
2407 err = -errno; in btfgen_get_btf()
2417 cloned_type = btf__type_by_id(info->marked_btf, i); in btfgen_get_btf()
2419 if (cloned_type->name_off != MARKED) in btfgen_get_btf()
2422 type = btf__type_by_id(info->src_btf, i); in btfgen_get_btf()
2430 name = btf__str_by_offset(info->src_btf, type->name_off); in btfgen_get_btf()
2433 err = btf__add_struct(btf_new, name, type->size); in btfgen_get_btf()
2435 err = btf__add_union(btf_new, name, type->size); in btfgen_get_btf()
2446 if (cloned_m->name_off != MARKED) in btfgen_get_btf()
2449 name = btf__str_by_offset(info->src_btf, m->name_off); in btfgen_get_btf()
2450 err = btf__add_field(btf_new, name, m->type, in btfgen_get_btf()
2457 err = btf__add_type(btf_new, info->src_btf, type); in btfgen_get_btf()
2482 errno = -err; in btfgen_get_btf()
2493 * the BTF and BTF.ext sections of the BPF objects and use
2498 * relocation. For field-based relocations only the members that are
2500 * BTF file. For type-based relocations empty struct / unions are
2501 * generated and for enum-based relocations the whole type is saved.
2517 err = -errno; in minimize_btf()
2533 err = -errno; in minimize_btf()
2558 return -1; in do_min_core_btf()
2567 return -ENOMEM; in do_min_core_btf()