Lines Matching +full:kconfig +full:- +full:ext
1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
50 if (str[n1 - i - 1] != suffix[n2 - i - 1]) in str_has_suffix()
60 strncpy(name, basename(file), MAX_OBJ_NAME_LEN - 1); in get_obj_name()
61 name[MAX_OBJ_NAME_LEN - 1] = '\0'; in get_obj_name()
63 name[strlen(name) - 2] = '\0'; in get_obj_name()
78 static const char *sfxs[] = { ".data", ".rodata", ".bss", ".kconfig" }; in get_map_ident()
103 static const char *pfxs[] = { ".data", ".rodata", ".bss", ".kconfig" }; in get_datasec_ident()
130 const char *sec_name = btf__name_by_offset(btf, sec->name_off); in codegen_datasec_def()
139 if (strcmp(sec_name, ".kconfig") != 0) in codegen_datasec_def()
144 const struct btf_type *var = btf__type_by_id(btf, sec_var->type); in codegen_datasec_def()
145 const char *var_name = btf__name_by_offset(btf, var->name_off); in codegen_datasec_def()
151 int need_off = sec_var->offset, align_off, align; in codegen_datasec_def()
152 __u32 var_type_id = var->type; in codegen_datasec_def()
155 if (btf_var(var)->linkage == BTF_VAR_STATIC) in codegen_datasec_def()
161 return -EINVAL; in codegen_datasec_def()
164 align = btf__align_of(btf, var->type); in codegen_datasec_def()
168 return -EINVAL; in codegen_datasec_def()
170 /* Assume 32-bit architectures when generating data section in codegen_datasec_def()
173 * conservative and assume 32-bit one to ensure enough padding in codegen_datasec_def()
175 * still work correctly for 64-bit architectures, because in in codegen_datasec_def()
177 * which on 64-bit architectures is not strictly necessary and in codegen_datasec_def()
178 * would be handled by natural 8-byte alignment. But it still in codegen_datasec_def()
185 align_off = (off + align - 1) / align * align; in codegen_datasec_def()
188 pad_cnt, need_off - off); in codegen_datasec_def()
197 strncat(var_ident, var_name, sizeof(var_ident) - 1); in codegen_datasec_def()
206 off = sec_var->offset + sec_var->size; in codegen_datasec_def()
224 name = btf__str_by_offset(btf, t->name_off); in find_type_for_map()
256 return -errno; in codegen_datasecs()
259 /* only generate definitions for memory-mapped internal maps */ in codegen_datasecs()
269 * map. It will still be memory-mapped and its contents in codegen_datasecs()
270 * accessible from user-space through BPF skeleton. in codegen_datasecs()
291 return btf_is_ptr(v) && btf_is_func_proto(btf__type_by_id(btf, v->type)); in btf_is_ptr_to_func_proto()
309 return -errno; in codegen_subskel_datasecs()
312 /* only generate definitions for memory-mapped internal maps */ in codegen_subskel_datasecs()
320 sec_name = btf__name_by_offset(btf, sec->name_off); in codegen_subskel_datasecs()
324 strip_mods = strcmp(sec_name, ".kconfig") != 0; in codegen_subskel_datasecs()
337 var = btf__type_by_id(btf, sec_var->type); in codegen_subskel_datasecs()
338 var_name = btf__name_by_offset(btf, var->name_off); in codegen_subskel_datasecs()
339 var_type_id = var->type; in codegen_subskel_datasecs()
342 if (btf_var(var)->linkage == BTF_VAR_STATIC) in codegen_subskel_datasecs()
348 var = skip_mods_and_typedefs(btf, var->type, NULL); in codegen_subskel_datasecs()
389 exit(-1); in codegen()
401 src - template - 1, template, c); in codegen()
403 exit(-1); in codegen()
409 for (n = skip_tabs; n > 0; n--, src++) { in codegen()
412 src - template - 1, template); in codegen()
414 exit(-1); in codegen()
419 for (n = end - src; n > 0 && isspace(src[n - 1]); n--) in codegen()
466 /* Emit type size asserts for all top-level fields in memory-mapped internal maps. */
503 const struct btf_type *var = btf__type_by_id(btf, sec_var->type); in codegen_asserts()
504 const char *var_name = btf__name_by_offset(btf, var->name_off); in codegen_asserts()
508 if (btf_var(var)->linkage == BTF_VAR_STATIC) in codegen_asserts()
511 var_size = btf__resolve_size(btf, var->type); in codegen_asserts()
516 strncat(var_ident, var_name, sizeof(var_ident) - 1); in codegen_asserts()
519 printf("\t_Static_assert(sizeof(s->%s->%s) == %ld, \"unexpected size of '%s'\");\n", in codegen_asserts()
545 int prog_fd = skel->progs.%2$s.prog_fd; \n\ in codegen_attach_detach()
561 printf("\tint fd = ((void)prog_fd, 0); /* auto-attach not supported */\n"); in codegen_attach_detach()
568 skel->links.%1$s_fd = fd; \n\ in codegen_attach_detach()
604 skel_closenz(skel->links.%1$s_fd); \n\ in codegen_attach_detach()
634 skel_closenz(skel->progs.%1$s.prog_fd); \n\ in codegen_destroy()
643 printf("\tskel_free_map_data(skel->%1$s, skel->maps.%1$s.initial_value, %2$zd);\n", in codegen_destroy()
647 skel_closenz(skel->maps.%1$s.map_fd); \n\ in codegen_destroy()
699 skel->ctx.sz = (void *)&skel->links - (void *)skel; \n\ in gen_trace()
711 skel->%1$s = skel_prep_map_data((void *)\"\\ \n\ in gen_trace()
718 if (!skel->%3$s) \n\ in gen_trace()
720 skel->maps.%3$s.initial_value = (__u64) (long) skel->%3$s;\n\ in gen_trace()
775 skel->%1$s = skel_finalize_map_data(&skel->maps.%1$s.initial_value, \n\ in gen_trace()
776 %2$zd, %3$s, skel->maps.%1$s.map_fd);\n\ in gen_trace()
777 if (!skel->%1$s) \n\ in gen_trace()
778 return -ENOMEM; \n\ in gen_trace()
831 s->map_cnt = %zu; \n\ in codegen_maps_skeleton()
832 s->map_skel_sz = sizeof(*s->maps); \n\ in codegen_maps_skeleton()
833 s->maps = (struct bpf_map_skeleton *)calloc(s->map_cnt, s->map_skel_sz);\n\ in codegen_maps_skeleton()
834 if (!s->maps) { \n\ in codegen_maps_skeleton()
835 err = -ENOMEM; \n\ in codegen_maps_skeleton()
849 s->maps[%zu].name = \"%s\"; \n\ in codegen_maps_skeleton()
850 s->maps[%zu].map = &obj->maps.%s; \n\ in codegen_maps_skeleton()
853 /* memory-mapped internal maps */ in codegen_maps_skeleton()
855 printf("\ts->maps[%zu].mmaped = (void **)&obj->%s;\n", in codegen_maps_skeleton()
875 s->prog_cnt = %zu; \n\ in codegen_progs_skeleton()
876 s->prog_skel_sz = sizeof(*s->progs); \n\ in codegen_progs_skeleton()
877 s->progs = (struct bpf_prog_skeleton *)calloc(s->prog_cnt, s->prog_skel_sz);\n\ in codegen_progs_skeleton()
878 if (!s->progs) { \n\ in codegen_progs_skeleton()
879 err = -ENOMEM; \n\ in codegen_progs_skeleton()
890 s->progs[%1$zu].name = \"%2$s\"; \n\ in codegen_progs_skeleton()
891 s->progs[%1$zu].prog = &obj->progs.%2$s;\n\ in codegen_progs_skeleton()
898 s->progs[%1$zu].link = &obj->links.%2$s;\n\ in codegen_progs_skeleton()
916 int fd, err = -1; in do_skeleton()
923 return -1; in do_skeleton()
929 return -1; in do_skeleton()
936 return -1; in do_skeleton()
939 strncpy(obj_name, *argv, MAX_OBJ_NAME_LEN - 1); in do_skeleton()
940 obj_name[MAX_OBJ_NAME_LEN - 1] = '\0'; in do_skeleton()
943 return -1; in do_skeleton()
951 return -1; in do_skeleton()
956 return -1; in do_skeleton()
963 return -1; in do_skeleton()
981 err = -errno; in do_skeleton()
1003 /* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */ \n\ in do_skeleton()
1018 /* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */ \n\ in do_skeleton()
1102 if (obj->skeleton) \n\ in do_skeleton()
1103 bpf_object__destroy_skeleton(obj->skeleton);\n\ in do_skeleton()
1126 err = bpf_object__open_skeleton(obj->skeleton, opts);\n\ in do_skeleton()
1133 errno = -err; \n\ in do_skeleton()
1146 return bpf_object__load_skeleton(obj->skeleton); \n\ in do_skeleton()
1161 errno = -err; \n\ in do_skeleton()
1170 return bpf_object__attach_skeleton(obj->skeleton); \n\ in do_skeleton()
1176 bpf_object__detach_skeleton(obj->skeleton); \n\ in do_skeleton()
1195 err = -ENOMEM; \n\ in do_skeleton()
1199 s->sz = sizeof(*s); \n\ in do_skeleton()
1200 s->name = \"%1$s\"; \n\ in do_skeleton()
1201 s->obj = &obj->obj; \n\ in do_skeleton()
1212 s->data = %2$s__elf_bytes(&s->data_sz); \n\ in do_skeleton()
1214 obj->skeleton = s; \n\ in do_skeleton()
1271 * This allows for library-like BPF objects to have userspace counterparts
1284 int fd, err = -1, map_type_id; in do_subskeleton()
1294 return -1; in do_subskeleton()
1300 return -1; in do_subskeleton()
1307 return -1; in do_subskeleton()
1310 strncpy(obj_name, *argv, MAX_OBJ_NAME_LEN - 1); in do_subskeleton()
1311 obj_name[MAX_OBJ_NAME_LEN - 1] = '\0'; in do_subskeleton()
1314 return -1; in do_subskeleton()
1322 return -1; in do_subskeleton()
1327 return -1; in do_subskeleton()
1332 return -1; in do_subskeleton()
1339 return -1; in do_subskeleton()
1366 err = -1; in do_subskeleton()
1399 var_type = btf__type_by_id(btf, var->type); in do_subskeleton()
1401 if (btf_var(var_type)->linkage == BTF_VAR_STATIC) in do_subskeleton()
1411 /* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */ \n\ in do_subskeleton()
1464 if (skel->subskel) \n\ in do_subskeleton()
1465 bpf_object__destroy_subskeleton(skel->subskel);\n\ in do_subskeleton()
1478 err = -ENOMEM; \n\ in do_subskeleton()
1483 err = -ENOMEM; \n\ in do_subskeleton()
1486 s->sz = sizeof(*s); \n\ in do_subskeleton()
1487 s->obj = src; \n\ in do_subskeleton()
1488 s->var_skel_sz = sizeof(*s->vars); \n\ in do_subskeleton()
1489 obj->subskel = s; \n\ in do_subskeleton()
1492 s->var_cnt = %2$d; \n\ in do_subskeleton()
1493 s->vars = (struct bpf_var_skeleton *)calloc(%2$d, sizeof(*s->vars));\n\ in do_subskeleton()
1494 if (!s->vars) { \n\ in do_subskeleton()
1495 err = -ENOMEM; \n\ in do_subskeleton()
1516 var_type = btf__type_by_id(btf, var->type); in do_subskeleton()
1517 var_name = btf__name_by_offset(btf, var_type->name_off); in do_subskeleton()
1519 if (btf_var(var_type)->linkage == BTF_VAR_STATIC) in do_subskeleton()
1528 s->vars[%3$d].name = \"%1$s\"; \n\ in do_subskeleton()
1529 s->vars[%3$d].map = &obj->maps.%2$s; \n\ in do_subskeleton()
1530 s->vars[%3$d].addr = (void **) &obj->%2$s.%1$s;\n\ in do_subskeleton()
1550 errno = -err; \n\ in do_subskeleton()
1579 return -1; in do_object()
1587 return -1; in do_object()
1627 " {-L|--use-loader} }\n" in do_help()
1643 return -ENOMEM; in btf_save_raw()
1647 return -errno; in btf_save_raw()
1650 err = -errno; in btf_save_raw()
1676 btf__free(info->src_btf); in btfgen_free_info()
1677 btf__free(info->marked_btf); in btfgen_free_info()
1692 info->src_btf = btf__parse(targ_btf_path, NULL); in btfgen_new_info()
1693 if (!info->src_btf) { in btfgen_new_info()
1694 err = -errno; in btfgen_new_info()
1699 info->marked_btf = btf__parse(targ_btf_path, NULL); in btfgen_new_info()
1700 if (!info->marked_btf) { in btfgen_new_info()
1701 err = -errno; in btfgen_new_info()
1710 errno = -err; in btfgen_new_info()
1718 const struct btf_type *t = btf__type_by_id(info->marked_btf, type_id); in btfgen_mark_member()
1721 m->name_off = MARKED; in btfgen_mark_member()
1727 const struct btf_type *btf_type = btf__type_by_id(info->src_btf, type_id); in btfgen_mark_type()
1737 cloned_type = (struct btf_type *) btf__type_by_id(info->marked_btf, type_id); in btfgen_mark_type()
1738 cloned_type->name_off = MARKED; in btfgen_mark_type()
1752 err = btfgen_mark_type(info, btf_type->type, follow_pointers); in btfgen_mark_type()
1761 err = btfgen_mark_type(info, btf_type->type, follow_pointers); in btfgen_mark_type()
1769 err = btfgen_mark_type(info, array->type, follow_pointers); in btfgen_mark_type()
1771 err = err ? : btfgen_mark_type(info, array->index_type, follow_pointers); in btfgen_mark_type()
1777 err = btfgen_mark_type(info, btf_type->type, follow_pointers); in btfgen_mark_type()
1784 err = btfgen_mark_type(info, param->type, follow_pointers); in btfgen_mark_type()
1793 return -EINVAL; in btfgen_mark_type()
1801 struct btf *btf = info->src_btf; in btfgen_record_field_relo()
1805 unsigned int type_id = targ_spec->root_type_id; in btfgen_record_field_relo()
1815 for (int i = 1; i < targ_spec->raw_len; i++) { in btfgen_record_field_relo()
1818 type_id = btf_type->type; in btfgen_record_field_relo()
1825 idx = targ_spec->raw_spec[i]; in btfgen_record_field_relo()
1832 type_id = btf_member->type; in btfgen_record_field_relo()
1840 type_id = array->type; in btfgen_record_field_relo()
1845 btf_kind_str(btf_type), btf_type->type); in btfgen_record_field_relo()
1846 return -EINVAL; in btfgen_record_field_relo()
1864 struct btf *btf = info->src_btf; in btfgen_mark_type_match()
1873 cloned_type = (struct btf_type *)btf__type_by_id(info->marked_btf, type_id); in btfgen_mark_type_match()
1874 cloned_type->name_off = MARKED; in btfgen_mark_type_match()
1896 err = btfgen_mark_type_match(info, m->type, false); in btfgen_mark_type_match()
1907 return btfgen_mark_type_match(info, btf_type->type, behind_ptr); in btfgen_mark_type_match()
1909 return btfgen_mark_type_match(info, btf_type->type, true); in btfgen_mark_type_match()
1915 err = btfgen_mark_type_match(info, array->type, false); in btfgen_mark_type_match()
1917 err = err ? : btfgen_mark_type_match(info, array->index_type, false); in btfgen_mark_type_match()
1927 err = btfgen_mark_type_match(info, btf_type->type, false); in btfgen_mark_type_match()
1934 err = btfgen_mark_type_match(info, param->type, false); in btfgen_mark_type_match()
1944 return -EINVAL; in btfgen_mark_type_match()
1956 return btfgen_mark_type_match(info, targ_spec->root_type_id, false); in btfgen_record_type_match_relo()
1961 return btfgen_mark_type(info, targ_spec->root_type_id, true); in btfgen_record_type_relo()
1966 return btfgen_mark_type(info, targ_spec->root_type_id, false); in btfgen_record_enumval_relo()
1971 switch (res->relo_kind) { in btfgen_record_reloc()
1991 return -EINVAL; in btfgen_record_reloc()
2010 err = -EINVAL; in btfgen_find_cands()
2014 local_name = btf__name_by_offset(local_btf, local_type->name_off); in btfgen_find_cands()
2016 err = -EINVAL; in btfgen_find_cands()
2033 errno = -err; in btfgen_find_cands()
2053 err = -errno; in btfgen_record_obj()
2061 err = -EINVAL; in btfgen_record_obj()
2065 if (btf_ext->core_relo_info.len == 0) { in btfgen_record_obj()
2076 seg = &btf_ext->core_relo_info; in btfgen_record_obj()
2082 const char *sec_name = btf__name_by_offset(btf, sec->sec_name_off); in btfgen_record_obj()
2084 if (relo->kind != BPF_CORE_TYPE_ID_LOCAL && in btfgen_record_obj()
2085 !hashmap__find(cand_cache, relo->type_id, &cands)) { in btfgen_record_obj()
2086 cands = btfgen_find_cands(btf, info->src_btf, relo->type_id); in btfgen_record_obj()
2088 err = -errno; in btfgen_record_obj()
2092 err = hashmap__set(cand_cache, relo->type_id, cands, in btfgen_record_obj()
2116 bpf_core_free_cands(entry->pvalue); in btfgen_record_obj()
2138 unsigned int i, n = btf__type_cnt(info->marked_btf); in btfgen_get_btf()
2143 err = -errno; in btfgen_get_btf()
2149 err = -errno; in btfgen_get_btf()
2159 cloned_type = btf__type_by_id(info->marked_btf, i); in btfgen_get_btf()
2161 if (cloned_type->name_off != MARKED) in btfgen_get_btf()
2164 type = btf__type_by_id(info->src_btf, i); in btfgen_get_btf()
2172 name = btf__str_by_offset(info->src_btf, type->name_off); in btfgen_get_btf()
2175 err = btf__add_struct(btf_new, name, type->size); in btfgen_get_btf()
2177 err = btf__add_union(btf_new, name, type->size); in btfgen_get_btf()
2188 if (cloned_m->name_off != MARKED) in btfgen_get_btf()
2191 name = btf__str_by_offset(info->src_btf, m->name_off); in btfgen_get_btf()
2192 err = btf__add_field(btf_new, name, m->type, in btfgen_get_btf()
2199 err = btf__add_type(btf_new, info->src_btf, type); in btfgen_get_btf()
2224 errno = -err; in btfgen_get_btf()
2235 * the BTF and BTF.ext sections of the BPF objects and use
2240 * relocation. For field-based relocations only the members that are
2242 * BTF file. For type-based relocations empty struct / unions are
2243 * generated and for enum-based relocations the whole type is saved.
2259 err = -errno; in minimize_btf()
2275 err = -errno; in minimize_btf()
2300 return -1; in do_min_core_btf()
2309 return -ENOMEM; in do_min_core_btf()