Lines Matching refs:sec

170 	struct section *sec;  in read_sym_checksums()  local
172 sec = find_section_by_name(elf, ".discard.sym_checksum"); in read_sym_checksums()
173 if (!sec) { in read_sym_checksums()
179 if (!sec->rsec) { in read_sym_checksums()
184 if (sec_size(sec) % sizeof(struct sym_checksum)) { in read_sym_checksums()
189 for (int i = 0; i < sec_size(sec) / sizeof(struct sym_checksum); i++) { in read_sym_checksums()
194 sym_checksum = (struct sym_checksum *)sec->data->d_buf + i; in read_sym_checksums()
196 reloc = find_reloc_by_dest(elf, sec, i * sizeof(*sym_checksum)); in read_sym_checksums()
259 if (!strcmp(sym->sec->name, ".data.once")) in is_uncorrelated_static_local()
276 is_text_sec(sym->sec) && in is_clang_tmp_label()
281 static bool is_special_section(struct section *sec) in is_special_section() argument
305 if (is_text_sec(sec)) in is_special_section()
309 if (!strcmp(sec->name, specials[i])) in is_special_section()
315 if (!strcmp(sec->name, non_special_discards[i])) in is_special_section()
319 return strstarts(sec->name, ".discard."); in is_special_section()
326 static bool is_special_section_aux(struct section *sec) in is_special_section_aux() argument
334 if (!strcmp(sec->name, specials_aux[i])) in is_special_section_aux()
353 is_string_sec(sym->sec) || in dont_correlate()
354 is_special_section(sym->sec) || in dont_correlate()
355 is_special_section_aux(sym->sec) || in dont_correlate()
493 if (strstarts(s->sec->name, ".text.unlikely") && in find_sympos()
503 if (!strstarts(s->sec->name, ".text.unlikely") && in find_sympos()
542 struct section *patched_sec = patched_sym->sec; in __clone_symbol()
555 if (is_string_sec(patched_sym->sec)) { in __clone_symbol()
571 if (patched_sym->sec->data->d_buf) in __clone_symbol()
572 data = patched_sym->sec->data->d_buf + patched_sym->offset; in __clone_symbol()
575 size = sec_size(patched_sym->sec); in __clone_symbol()
731 static bool section_reference_needed(struct section *sec) in section_reference_needed() argument
737 if (is_string_sec(sec)) in section_reference_needed()
744 if (strstarts(sec->name, ".rodata")) in section_reference_needed()
748 if (strstarts(sec->name, ".data..Lubsan") || /* GCC */ in section_reference_needed()
749 strstarts(sec->name, ".data..L__unnamed_")) /* Clang */ in section_reference_needed()
757 return section_reference_needed(reloc->sym->sec) == is_sec_sym(reloc->sym); in is_reloc_allowed()
774 struct section *sec; in __find_modname() local
777 sec = find_section_by_name(e->orig, ".modinfo"); in __find_modname()
778 if (!sec) { in __find_modname()
783 name = memmem(sec->data->d_buf, sec_size(sec), "\0name=", 6); in __find_modname()
871 struct section *sec = sym->sec; in convert_reloc_sym_to_secsym() local
873 if (!sec->sym && !elf_create_section_symbol(elf, sec)) in convert_reloc_sym_to_secsym()
876 reloc->sym = sec->sym; in convert_reloc_sym_to_secsym()
885 struct section *sec = sym->sec; in convert_reloc_secsym_to_sym() local
888 sym = find_symbol_by_offset(sec, 0); in convert_reloc_secsym_to_sym()
889 if (sym && sym->len == sec_size(sec)) in convert_reloc_secsym_to_sym()
893 sym = find_symbol_containing(sec, arch_adjusted_addend(reloc)); in convert_reloc_secsym_to_sym()
918 if (section_reference_needed(reloc->sym->sec)) in convert_reloc_sym()
928 struct section *sec, unsigned long offset, in clone_reloc_klp() argument
966 if (!elf_create_reloc(e->out, sec, offset, sym, addend, reloc_type(patched_reloc))) in clone_reloc_klp()
1028 if (!sec->sym && !elf_create_section_symbol(e->out, sec)) in clone_reloc_klp()
1033 sec->sym, offset, R_ABS64)) in clone_reloc_klp()
1045 #define dbg_clone_reloc(sec, offset, patched_sym, addend, export, klp) \ argument
1047 sec->name, offset, patched_sym->name, \
1058 struct section *sec, unsigned long offset) in clone_reloc() argument
1067 ERROR_FUNC(patched_reloc->sec->base, reloc_offset(patched_reloc), in clone_reloc()
1075 dbg_clone_reloc(sec, offset, patched_sym, addend, export, klp); in clone_reloc()
1078 if (clone_reloc_klp(e, patched_reloc, sec, offset, export)) in clone_reloc()
1105 if (is_string_sec(patched_sym->sec)) { in clone_reloc()
1106 const char *str = patched_sym->sec->data->d_buf + addend; in clone_reloc()
1110 addend = elf_add_string(e->out, out_sym->sec, str); in clone_reloc()
1115 if (!elf_create_reloc(e->out, sec, offset, out_sym, addend, in clone_reloc()
1125 struct section *patched_rsec = patched_sym->sec->rsec; in clone_sym_relocs()
1142 if (is_string_sec(patched_sym->sec)) in clone_sym_relocs()
1147 end = sec_size(patched_sym->sec); in clone_sym_relocs()
1164 if (patched_reloc->sym->sec && in clone_sym_relocs()
1165 !strcmp(patched_reloc->sym->sec->name, ".altinstr_aux")) in clone_sym_relocs()
1177 if (clone_reloc(e, patched_reloc, out_sym->sec, offset)) in clone_sym_relocs()
1184 static int create_fake_symbol(struct elf *elf, struct section *sec, in create_fake_symbol() argument
1192 if (snprintf_check(name, SYM_NAME_LEN, "%s_%d", sec->name, ctr++)) in create_fake_symbol()
1203 type = is_text_sec(sec) ? STT_NOTYPE : STT_OBJECT; in create_fake_symbol()
1204 return elf_create_symbol(elf, name, sec, STB_LOCAL, type, offset, size) ? 0 : -1; in create_fake_symbol()
1241 struct section *sec; in create_fake_symbols() local
1248 sec = find_section_by_name(elf, ".discard.annotate_data"); in create_fake_symbols()
1249 if (!sec || !sec->rsec) in create_fake_symbols()
1252 for_each_reloc(sec->rsec, reloc) { in create_fake_symbols()
1256 if (annotype(elf, sec, reloc) != ANNOTYPE_DATA_SPECIAL) in create_fake_symbols()
1263 for_each_reloc_continue(sec->rsec, next_reloc) { in create_fake_symbols()
1264 if (annotype(elf, sec, next_reloc) != ANNOTYPE_DATA_SPECIAL || in create_fake_symbols()
1265 next_reloc->sym->sec != reloc->sym->sec) in create_fake_symbols()
1273 size = sec_size(reloc->sym->sec) - offset; in create_fake_symbols()
1275 if (create_fake_symbol(elf, reloc->sym->sec, offset, size)) in create_fake_symbols()
1283 for_each_sec(elf, sec) { in create_fake_symbols()
1287 if (!is_special_section(sec) || find_symbol_by_offset(sec, 0)) in create_fake_symbols()
1290 if (!sec->rsec) { in create_fake_symbols()
1291 ERROR("%s: missing special section relocations", sec->name); in create_fake_symbols()
1295 entry_size = sec->sh.sh_entsize; in create_fake_symbols()
1297 entry_size = arch_reloc_size(sec->rsec->relocs); in create_fake_symbols()
1298 if (sec_size(sec) != entry_size * sec_num_entries(sec->rsec)) { in create_fake_symbols()
1299 ERROR("%s: missing special section entsize or annotations", sec->name); in create_fake_symbols()
1304 for (offset = 0; offset < sec_size(sec); offset += entry_size) { in create_fake_symbols()
1305 if (create_fake_symbol(elf, sec, offset, entry_size)) in create_fake_symbols()
1318 if (is_sec_sym(sym) || !sym->sec->rsec) in should_keep_special_sym()
1354 bool static_branch = !strcmp(sym->sec->name, "__jump_table"); in validate_special_section_klp_reloc()
1355 bool static_call = !strcmp(sym->sec->name, ".static_call_sites"); in validate_special_section_klp_reloc()
1606 reloc = find_reloc_by_dest(e->out, sym->sec, sym->offset); in create_klp_sections()
1622 reloc = find_reloc_by_dest(e->out, sym->sec, sym->offset); in create_klp_sections()
1638 reloc = find_reloc_by_dest(e->out, sym->sec, sym->offset); in create_klp_sections()
1654 reloc = find_reloc_by_dest(e->out, sym->sec, sym->offset); in create_klp_sections()