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;
763 static int linker_sanity_check_elf_symtab(struct src_obj *obj, struct src_sec *sec)
765 struct src_sec *link_sec;
837 static int linker_sanity_check_elf_relos(struct src_obj *obj, struct src_sec *sec)
839 struct src_sec *link_sec, *sym_sec;
978 static int init_sec(struct bpf_linker *linker, struct dst_sec *dst_sec, struct src_sec *src_sec)
987 dst_sec->ephemeral = src_sec->ephemeral;
990 if (src_sec->ephemeral)
1008 name_off = strset__add_str(linker->strtab_strs, src_sec->sec_name);
1013 shdr->sh_type = src_sec->shdr->sh_type;
1014 shdr->sh_flags = src_sec->shdr->sh_flags;
1022 shdr->sh_addralign = src_sec->shdr->sh_addralign;
1023 shdr->sh_entsize = src_sec->shdr->sh_entsize;
1025 data->d_type = src_sec->data->d_type;
1028 data->d_align = src_sec->data->d_align;
1049 static bool secs_match(struct dst_sec *dst, struct src_sec *src)
1070 static bool sec_content_is_same(struct dst_sec *dst_sec, struct src_sec *src_sec)
1072 if (dst_sec->sec_sz != src_sec->shdr->sh_size)
1074 if (memcmp(dst_sec->raw_data, src_sec->data->d_buf, dst_sec->sec_sz) != 0)
1079 static int extend_sec(struct bpf_linker *linker, struct dst_sec *dst, struct src_sec *src)
1152 static bool is_data_sec(struct src_sec *sec)
1162 static bool is_relo_sec(struct src_sec *sec)
1174 struct src_sec *src_sec;
1177 src_sec = &obj->secs[i];
1178 if (!is_data_sec(src_sec))
1181 dst_sec = find_dst_sec_by_name(linker, src_sec->sec_name);
1183 dst_sec = add_dst_sec(linker, src_sec->sec_name);
1186 err = init_sec(linker, dst_sec, src_sec);
1188 pr_warn("failed to init section '%s'\n", src_sec->sec_name);
1192 if (!secs_match(dst_sec, src_sec)) {
1193 pr_warn("ELF sections %s are incompatible\n", src_sec->sec_name);
1198 if (strcmp(src_sec->sec_name, "license") == 0
1199 || strcmp(src_sec->sec_name, "version") == 0) {
1200 if (!sec_content_is_same(dst_sec, src_sec)) {
1201 pr_warn("non-identical contents of section '%s' are not supported\n", src_sec->sec_name);
1204 src_sec->skipped = true;
1205 src_sec->dst_id = dst_sec->id;
1211 src_sec->dst_id = dst_sec->id;
1213 err = extend_sec(linker, dst_sec, src_sec);
1223 struct src_sec *symtab = &obj->secs[obj->symtab_sec_idx];
1727 static struct src_sec *find_src_sec_by_name(struct src_obj *obj, const char *sec_name)
1729 struct src_sec *sec;
1814 struct src_sec *src_sec = NULL;
1834 src_sec = &obj->secs[sym->st_shndx];
1835 if (src_sec->skipped)
1837 dst_sec = &linker->secs[src_sec->dst_id];
1865 * Those don't have associated src_sec/dst_sec.
1868 src_sec = find_src_sec_by_name(obj, sec_name);
1869 if (!src_sec) {
1873 dst_sec = &linker->secs[src_sec->dst_id];
1945 dst_sym->st_value = src_sec->dst_off + sym->st_value;
1976 dst_sym->st_value = (src_sec ? src_sec->dst_off : 0) + sym->st_value;
2011 struct src_sec *src_symtab = &obj->secs[obj->symtab_sec_idx];
2015 struct src_sec *src_sec, *src_linked_sec;
2020 src_sec = &obj->secs[i];
2021 if (!is_relo_sec(src_sec))
2025 src_linked_sec = &obj->secs[src_sec->shdr->sh_info];
2029 dst_sec = find_dst_sec_by_name(linker, src_sec->sec_name);
2031 dst_sec = add_dst_sec(linker, src_sec->sec_name);
2034 err = init_sec(linker, dst_sec, src_sec);
2036 pr_warn("failed to init section '%s'\n", src_sec->sec_name);
2039 } else if (!secs_match(dst_sec, src_sec)) {
2040 pr_warn("sections %s are not compatible\n", src_sec->sec_name);
2051 src_sec->dst_id = dst_sec->id;
2052 err = extend_sec(linker, dst_sec, src_sec);
2056 src_rel = src_sec->data->d_buf;
2057 dst_rel = dst_sec->raw_data + src_sec->dst_off;
2058 n = src_sec->shdr->sh_size / src_sec->shdr->sh_entsize;
2072 struct src_sec *sec = &obj->secs[src_sym->st_shndx];
2105 struct src_sec *symtab = &obj->secs[obj->symtab_sec_idx];
2133 struct src_sec *sec;
2331 struct src_sec *src_sec;
2336 src_sec = &obj->secs[i];
2337 if (!src_sec->sec_type_id || src_sec->skipped)
2339 dst_sec = &linker->secs[src_sec->dst_id];
2351 t = btf__type_by_id(obj->btf, src_sec->sec_type_id);
2405 dst_var->offset = src_sec->dst_off + src_var->offset;
2436 struct src_sec *src_sec;
2448 src_sec = find_src_sec_by_name(obj, sec_name);
2449 if (!src_sec) {
2453 dst_sec = &linker->secs[src_sec->dst_id];
2467 dst_rec->insn_off += src_sec->dst_off;
2477 src_sec = find_src_sec_by_name(obj, sec_name);
2478 if (!src_sec) {
2482 dst_sec = &linker->secs[src_sec->dst_id];
2496 dst_rec->insn_off += src_sec->dst_off;
2519 src_sec = find_src_sec_by_name(obj, sec_name);
2520 if (!src_sec) {
2524 dst_sec = &linker->secs[src_sec->dst_id];
2538 dst_rec->insn_off += src_sec->dst_off;