Lines Matching refs:reloc
190 struct reloc *reloc; in read_sym_checksums() local
195 reloc = find_reloc_by_dest(elf, sec, i * sizeof(*sym_checksum)); in read_sym_checksums()
196 if (!reloc) { in read_sym_checksums()
201 sym = reloc->sym; in read_sym_checksums()
754 static bool is_reloc_allowed(struct reloc *reloc) in is_reloc_allowed() argument
756 return section_reference_needed(reloc->sym->sec) == is_sec_sym(reloc->sym); in is_reloc_allowed()
826 static bool klp_reloc_needed(struct reloc *patched_reloc) in klp_reloc_needed()
867 static int convert_reloc_sym_to_secsym(struct elf *elf, struct reloc *reloc) in convert_reloc_sym_to_secsym() argument
869 struct symbol *sym = reloc->sym; in convert_reloc_sym_to_secsym()
875 reloc->sym = sec->sym; in convert_reloc_sym_to_secsym()
876 set_reloc_sym(elf, reloc, sym->idx); in convert_reloc_sym_to_secsym()
877 set_reloc_addend(elf, reloc, sym->offset + reloc_addend(reloc)); in convert_reloc_sym_to_secsym()
881 static int convert_reloc_secsym_to_sym(struct elf *elf, struct reloc *reloc) in convert_reloc_secsym_to_sym() argument
883 struct symbol *sym = reloc->sym; in convert_reloc_secsym_to_sym()
892 sym = find_symbol_containing(sec, arch_adjusted_addend(reloc)); in convert_reloc_secsym_to_sym()
902 reloc->sym = sym; in convert_reloc_secsym_to_sym()
903 set_reloc_sym(elf, reloc, sym->idx); in convert_reloc_secsym_to_sym()
904 set_reloc_addend(elf, reloc, reloc_addend(reloc) - sym->offset); in convert_reloc_secsym_to_sym()
912 static int convert_reloc_sym(struct elf *elf, struct reloc *reloc) in convert_reloc_sym() argument
914 if (is_reloc_allowed(reloc)) in convert_reloc_sym()
917 if (section_reference_needed(reloc->sym->sec)) in convert_reloc_sym()
918 return convert_reloc_sym_to_secsym(elf, reloc); in convert_reloc_sym()
920 return convert_reloc_secsym_to_sym(elf, reloc); in convert_reloc_sym()
926 static int clone_reloc_klp(struct elfs *e, struct reloc *patched_reloc, in clone_reloc_klp()
1056 static int clone_reloc(struct elfs *e, struct reloc *patched_reloc, in clone_reloc()
1125 struct reloc *patched_reloc; in clone_sym_relocs()
1241 struct reloc *reloc; in create_fake_symbols() local
1251 for_each_reloc(sec->rsec, reloc) { in create_fake_symbols()
1253 struct reloc *next_reloc; in create_fake_symbols()
1255 if (annotype(elf, sec, reloc) != ANNOTYPE_DATA_SPECIAL) in create_fake_symbols()
1258 offset = reloc_addend(reloc); in create_fake_symbols()
1261 next_reloc = reloc; in create_fake_symbols()
1264 next_reloc->sym->sec != reloc->sym->sec) in create_fake_symbols()
1272 size = sec_size(reloc->sym->sec) - offset; in create_fake_symbols()
1274 if (create_fake_symbol(elf, reloc->sym->sec, offset, size)) in create_fake_symbols()
1315 struct reloc *reloc; in should_keep_special_sym() local
1320 sym_for_each_reloc(elf, sym, reloc) { in should_keep_special_sym()
1321 if (convert_reloc_sym(elf, reloc)) in should_keep_special_sym()
1324 if (is_func_sym(reloc->sym) && reloc->sym->included) in should_keep_special_sym()
1357 struct reloc *reloc; in validate_special_section_klp_reloc() local
1363 sym_for_each_reloc(e->patched, sym, reloc) { in validate_special_section_klp_reloc()
1368 if (reloc->sym->type != STT_OBJECT) { in validate_special_section_klp_reloc()
1371 if (reloc->sym->type == STT_FUNC && !code_sym) { in validate_special_section_klp_reloc()
1372 code_sym = reloc->sym; in validate_special_section_klp_reloc()
1373 code_offset = reloc_addend(reloc); in validate_special_section_klp_reloc()
1379 if (!klp_reloc_needed(reloc)) in validate_special_section_klp_reloc()
1382 export = find_export(reloc->sym); in validate_special_section_klp_reloc()
1396 if (strstarts(reloc->sym->name, "__tracepoint_")) { in validate_special_section_klp_reloc()
1398 code_sym->name, reloc->sym->name + 13); in validate_special_section_klp_reloc()
1404 code_sym->name, code_offset, reloc->sym->name); in validate_special_section_klp_reloc()
1409 if (strstarts(reloc->sym->name, "__SCK__tp_func_")) { in validate_special_section_klp_reloc()
1415 code_sym->name, code_offset, reloc->sym->name); in validate_special_section_klp_reloc()
1590 struct reloc *reloc; in create_klp_sections() local
1592 reloc = find_reloc_by_dest(e->out, sym->sec, sym->offset); in create_klp_sections()
1597 reloc->sym, reloc_addend(reloc), R_ABS64)) in create_klp_sections()
1606 struct reloc *reloc; in create_klp_sections() local
1608 reloc = find_reloc_by_dest(e->out, sym->sec, sym->offset); in create_klp_sections()
1613 reloc->sym, reloc_addend(reloc), R_ABS64)) in create_klp_sections()
1622 struct reloc *reloc; in create_klp_sections() local
1624 reloc = find_reloc_by_dest(e->out, sym->sec, sym->offset); in create_klp_sections()
1629 reloc->sym, reloc_addend(reloc), R_ABS64)) in create_klp_sections()
1638 struct reloc *reloc; in create_klp_sections() local
1640 reloc = find_reloc_by_dest(e->out, sym->sec, sym->offset); in create_klp_sections()
1645 reloc->sym, reloc_addend(reloc), R_ABS64)) in create_klp_sections()