Lines Matching defs:reloc
180 ERROR("missing reloc section for .discard.sym_checksum");
191 struct reloc *reloc;
196 reloc = find_reloc_by_dest(elf, sec, i * sizeof(*sym_checksum));
197 if (!reloc) {
198 ERROR("can't find reloc for sym_checksum[%d]", i);
202 sym = reloc->sym;
842 static bool is_reloc_allowed(struct reloc *reloc)
844 return section_reference_needed(reloc->sym->sec) == is_sec_sym(reloc->sym);
914 static bool klp_reloc_needed(struct reloc *patched_reloc)
923 /* For included functions, a regular reloc will do. */
928 * If exported by a module, it has to be a klp reloc. Thanks to the
932 * If exported by vmlinux, a normal reloc will do.
955 static int convert_reloc_sym_to_secsym(struct elf *elf, struct reloc *reloc)
957 struct symbol *sym = reloc->sym;
963 reloc->sym = sec->sym;
964 set_reloc_sym(elf, reloc, sym->idx);
965 set_reloc_addend(elf, reloc, sym->offset + reloc_addend(reloc));
969 static int convert_reloc_secsym_to_sym(struct elf *elf, struct reloc *reloc)
971 struct symbol *sym = reloc->sym;
980 sym = find_symbol_containing(sec, arch_adjusted_addend(reloc));
990 reloc->sym = sym;
991 set_reloc_sym(elf, reloc, sym->idx);
992 set_reloc_addend(elf, reloc, reloc_addend(reloc) - sym->offset);
1000 static int convert_reloc_sym(struct elf *elf, struct reloc *reloc)
1002 if (is_reloc_allowed(reloc))
1005 if (section_reference_needed(reloc->sym->sec))
1006 return convert_reloc_sym_to_secsym(elf, reloc);
1008 return convert_reloc_secsym_to_sym(elf, reloc);
1014 static int clone_reloc_klp(struct elfs *e, struct reloc *patched_reloc,
1029 ERROR("unexpected klp reloc for new symbol %s", patched_sym->name);
1034 * Keep the original reloc intact for now to avoid breaking objtool run
1143 /* Copy a reloc and its symbol to the output object */
1144 static int clone_reloc(struct elfs *e, struct reloc *patched_reloc,
1213 struct reloc *patched_reloc;
1248 * Skip any reloc referencing .altinstr_aux. Its code is
1257 "failed to convert reloc sym '%s' to its proper format",
1329 struct reloc *reloc;
1339 for_each_reloc(sec->rsec, reloc) {
1341 struct reloc *next_reloc;
1343 if (annotype(elf, sec, reloc) != ANNOTYPE_DATA_SPECIAL)
1346 offset = reloc_addend(reloc);
1349 next_reloc = reloc;
1352 next_reloc->sym->sec != reloc->sym->sec)
1360 size = sec_size(reloc->sym->sec) - offset;
1362 if (create_fake_symbol(elf, reloc->sym->sec, offset, size))
1403 struct reloc *reloc;
1408 sym_for_each_reloc(elf, sym, reloc) {
1409 if (convert_reloc_sym(elf, reloc))
1412 if (is_func_sym(reloc->sym) && reloc->sym->included)
1445 struct reloc *reloc;
1451 sym_for_each_reloc(e->patched, sym, reloc) {
1455 if (convert_reloc_sym(e->patched, reloc))
1459 if (reloc->sym->type != STT_OBJECT) {
1462 if (reloc->sym->type == STT_FUNC && !code_sym) {
1463 code_sym = reloc->sym->name;
1464 code_offset = reloc_addend(reloc);
1470 if (!klp_reloc_needed(reloc))
1473 export = find_export(reloc->sym);
1490 if (strstarts(reloc->sym->name, "__tracepoint_")) {
1492 code_sym, reloc->sym->name + 13);
1497 if (strstr(reloc->sym->name, "__UNIQUE_ID_ddebug_")) {
1505 code_sym, code_offset, reloc->sym->name);
1510 if (strstarts(reloc->sym->name, "__SCK__tp_func_")) {
1516 code_sym, code_offset, reloc->sym->name);
1691 struct reloc *reloc;
1693 reloc = find_reloc_by_dest(e->out, sym->sec, sym->offset);
1698 reloc->sym, reloc_addend(reloc), R_ABS64))
1707 struct reloc *reloc;
1709 reloc = find_reloc_by_dest(e->out, sym->sec, sym->offset);
1714 reloc->sym, reloc_addend(reloc), R_ABS64))
1723 struct reloc *reloc;
1725 reloc = find_reloc_by_dest(e->out, sym->sec, sym->offset);
1730 reloc->sym, reloc_addend(reloc), R_ABS64))
1739 struct reloc *reloc;
1741 reloc = find_reloc_by_dest(e->out, sym->sec, sym->offset);
1746 reloc->sym, reloc_addend(reloc), R_ABS64))