Lines Matching defs:src_sec

26 struct src_sec {
62 struct src_sec *secs;
164 static int linker_sanity_check_elf_symtab(struct src_obj *obj, struct src_sec *sec);
165 static int linker_sanity_check_elf_relos(struct src_obj *obj, struct src_sec *sec);
479 static bool is_ignored_sec(struct src_sec *sec)
516 static struct src_sec *add_src_sec(struct src_obj *obj, const char *sec_name)
518 struct src_sec *secs = obj->secs, *sec;
554 struct src_sec *sec;
702 struct src_sec *sec;
782 static int linker_sanity_check_elf_symtab(struct src_obj *obj, struct src_sec *sec)
784 struct src_sec *link_sec;
856 static int linker_sanity_check_elf_relos(struct src_obj *obj, struct src_sec *sec)
858 struct src_sec *link_sec, *sym_sec;
997 static int init_sec(struct bpf_linker *linker, struct dst_sec *dst_sec, struct src_sec *src_sec)
1006 dst_sec->ephemeral = src_sec->ephemeral;
1009 if (src_sec->ephemeral)
1027 name_off = strset__add_str(linker->strtab_strs, src_sec->sec_name);
1032 shdr->sh_type = src_sec->shdr->sh_type;
1033 shdr->sh_flags = src_sec->shdr->sh_flags;
1041 shdr->sh_addralign = src_sec->shdr->sh_addralign;
1042 shdr->sh_entsize = src_sec->shdr->sh_entsize;
1044 data->d_type = src_sec->data->d_type;
1047 data->d_align = src_sec->data->d_align;
1068 static bool secs_match(struct dst_sec *dst, struct src_sec *src)
1089 static bool sec_content_is_same(struct dst_sec *dst_sec, struct src_sec *src_sec)
1091 if (dst_sec->sec_sz != src_sec->shdr->sh_size)
1093 if (memcmp(dst_sec->raw_data, src_sec->data->d_buf, dst_sec->sec_sz) != 0)
1098 static int extend_sec(struct bpf_linker *linker, struct dst_sec *dst, struct src_sec *src)
1171 static bool is_data_sec(struct src_sec *sec)
1181 static bool is_relo_sec(struct src_sec *sec)
1193 struct src_sec *src_sec;
1196 src_sec = &obj->secs[i];
1197 if (!is_data_sec(src_sec))
1200 dst_sec = find_dst_sec_by_name(linker, src_sec->sec_name);
1202 dst_sec = add_dst_sec(linker, src_sec->sec_name);
1205 err = init_sec(linker, dst_sec, src_sec);
1207 pr_warn("failed to init section '%s'\n", src_sec->sec_name);
1211 if (!secs_match(dst_sec, src_sec)) {
1212 pr_warn("ELF sections %s are incompatible\n", src_sec->sec_name);
1217 if (strcmp(src_sec->sec_name, "license") == 0
1218 || strcmp(src_sec->sec_name, "version") == 0) {
1219 if (!sec_content_is_same(dst_sec, src_sec)) {
1220 pr_warn("non-identical contents of section '%s' are not supported\n", src_sec->sec_name);
1223 src_sec->skipped = true;
1224 src_sec->dst_id = dst_sec->id;
1230 src_sec->dst_id = dst_sec->id;
1232 err = extend_sec(linker, dst_sec, src_sec);
1242 struct src_sec *symtab = &obj->secs[obj->symtab_sec_idx];
1746 static struct src_sec *find_src_sec_by_name(struct src_obj *obj, const char *sec_name)
1748 struct src_sec *sec;
1833 struct src_sec *src_sec = NULL;
1853 src_sec = &obj->secs[sym->st_shndx];
1854 if (src_sec->skipped)
1856 dst_sec = &linker->secs[src_sec->dst_id];
1884 * Those don't have associated src_sec/dst_sec.
1887 src_sec = find_src_sec_by_name(obj, sec_name);
1888 if (!src_sec) {
1892 dst_sec = &linker->secs[src_sec->dst_id];
1964 dst_sym->st_value = src_sec->dst_off + sym->st_value;
1995 dst_sym->st_value = (src_sec ? src_sec->dst_off : 0) + sym->st_value;
2030 struct src_sec *src_symtab = &obj->secs[obj->symtab_sec_idx];
2034 struct src_sec *src_sec, *src_linked_sec;
2039 src_sec = &obj->secs[i];
2040 if (!is_relo_sec(src_sec))
2044 src_linked_sec = &obj->secs[src_sec->shdr->sh_info];
2048 dst_sec = find_dst_sec_by_name(linker, src_sec->sec_name);
2050 dst_sec = add_dst_sec(linker, src_sec->sec_name);
2053 err = init_sec(linker, dst_sec, src_sec);
2055 pr_warn("failed to init section '%s'\n", src_sec->sec_name);
2058 } else if (!secs_match(dst_sec, src_sec)) {
2059 pr_warn("sections %s are not compatible\n", src_sec->sec_name);
2070 src_sec->dst_id = dst_sec->id;
2071 err = extend_sec(linker, dst_sec, src_sec);
2075 src_rel = src_sec->data->d_buf;
2076 dst_rel = dst_sec->raw_data + src_sec->dst_off;
2077 n = src_sec->shdr->sh_size / src_sec->shdr->sh_entsize;
2091 struct src_sec *sec = &obj->secs[src_sym->st_shndx];
2124 struct src_sec *symtab = &obj->secs[obj->symtab_sec_idx];
2152 struct src_sec *sec;
2350 struct src_sec *src_sec;
2355 src_sec = &obj->secs[i];
2356 if (!src_sec->sec_type_id || src_sec->skipped)
2358 dst_sec = &linker->secs[src_sec->dst_id];
2370 t = btf__type_by_id(obj->btf, src_sec->sec_type_id);
2424 dst_var->offset = src_sec->dst_off + src_var->offset;
2455 struct src_sec *src_sec;
2467 src_sec = find_src_sec_by_name(obj, sec_name);
2468 if (!src_sec) {
2472 dst_sec = &linker->secs[src_sec->dst_id];
2486 dst_rec->insn_off += src_sec->dst_off;
2496 src_sec = find_src_sec_by_name(obj, sec_name);
2497 if (!src_sec) {
2501 dst_sec = &linker->secs[src_sec->dst_id];
2515 dst_rec->insn_off += src_sec->dst_off;
2538 src_sec = find_src_sec_by_name(obj, sec_name);
2539 if (!src_sec) {
2543 dst_sec = &linker->secs[src_sec->dst_id];
2557 dst_rec->insn_off += src_sec->dst_off;