Lines Matching refs:reloc

144 static inline struct reloc *insn_jump_table(struct instruction *insn)  in insn_jump_table()
547 struct reloc *reloc; in add_pv_ops() local
557 reloc = find_reloc_by_dest_range(file->elf, sym->sec, off, end - off); in add_pv_ops()
558 if (!reloc) in add_pv_ops()
561 func = reloc->sym; in add_pv_ops()
563 func = find_symbol_by_offset(reloc->sym->sec, in add_pv_ops()
564 reloc_addend(reloc)); in add_pv_ops()
566 idx = (reloc_offset(reloc) - sym->offset) / sizeof(unsigned long); in add_pv_ops()
570 off = reloc_offset(reloc) + 1; in add_pv_ops()
636 struct reloc *reloc; in add_dead_ends() local
647 for_each_reloc(rsec, reloc) { in add_dead_ends()
648 if (reloc->sym->type == STT_SECTION) { in add_dead_ends()
649 offset = reloc_addend(reloc); in add_dead_ends()
650 } else if (reloc->sym->local_label) { in add_dead_ends()
651 offset = reloc->sym->offset; in add_dead_ends()
657 insn = find_insn(file, reloc->sym->sec, offset); in add_dead_ends()
660 else if (offset == reloc->sym->sec->sh.sh_size) { in add_dead_ends()
661 insn = find_last_insn(file, reloc->sym->sec); in add_dead_ends()
664 reloc->sym->sec->name, offset); in add_dead_ends()
669 reloc->sym->sec->name, offset); in add_dead_ends()
687 for_each_reloc(rsec, reloc) { in add_dead_ends()
688 if (reloc->sym->type == STT_SECTION) { in add_dead_ends()
689 offset = reloc_addend(reloc); in add_dead_ends()
690 } else if (reloc->sym->local_label) { in add_dead_ends()
691 offset = reloc->sym->offset; in add_dead_ends()
697 insn = find_insn(file, reloc->sym->sec, offset); in add_dead_ends()
700 else if (offset == reloc->sym->sec->sh.sh_size) { in add_dead_ends()
701 insn = find_last_insn(file, reloc->sym->sec); in add_dead_ends()
704 reloc->sym->sec->name, offset); in add_dead_ends()
709 reloc->sym->sec->name, offset); in add_dead_ends()
1017 struct reloc *reloc; in create_mcount_loc_sections() local
1019 reloc = elf_init_reloc_text_sym(file->elf, sec, idx * addr_size, idx, in create_mcount_loc_sections()
1021 if (!reloc) in create_mcount_loc_sections()
1024 set_reloc_type(file->elf, reloc, addr_size == 8 ? R_ABS64 : R_ABS32); in create_mcount_loc_sections()
1079 struct reloc *reloc; in add_ignores() local
1085 for_each_reloc(rsec, reloc) { in add_ignores()
1086 switch (reloc->sym->type) { in add_ignores()
1088 func = reloc->sym; in add_ignores()
1092 func = find_func_by_offset(reloc->sym->sec, reloc_addend(reloc)); in add_ignores()
1099 rsec->name, reloc->sym->type); in add_ignores()
1321 struct reloc *reloc; in add_ignore_alternatives() local
1328 for_each_reloc(rsec, reloc) { in add_ignore_alternatives()
1329 if (reloc->sym->type != STT_SECTION) { in add_ignore_alternatives()
1334 insn = find_insn(file, reloc->sym->sec, reloc_addend(reloc)); in add_ignore_alternatives()
1373 static struct reloc *insn_reloc(struct objtool_file *file, struct instruction *insn) in insn_reloc()
1375 struct reloc *reloc; in insn_reloc() local
1383 reloc = find_reloc_by_dest_range(file->elf, insn->sec, in insn_reloc()
1385 if (!reloc) { in insn_reloc()
1390 return reloc; in insn_reloc()
1407 struct reloc *reloc = insn_reloc(file, insn); in annotate_call_site() local
1411 sym = reloc->sym; in annotate_call_site()
1438 if (reloc) in annotate_call_site()
1439 set_reloc_type(file->elf, reloc, R_NONE); in annotate_call_site()
1465 if (reloc) in annotate_call_site()
1466 set_reloc_type(file->elf, reloc, R_NONE); in annotate_call_site()
1602 struct reloc *reloc; in add_jump_destinations() local
1617 reloc = insn_reloc(file, insn); in add_jump_destinations()
1618 if (!reloc) { in add_jump_destinations()
1621 } else if (reloc->sym->type == STT_SECTION) { in add_jump_destinations()
1622 dest_sec = reloc->sym->sec; in add_jump_destinations()
1623 dest_off = arch_dest_reloc_offset(reloc_addend(reloc)); in add_jump_destinations()
1624 } else if (reloc->sym->retpoline_thunk) { in add_jump_destinations()
1627 } else if (reloc->sym->return_thunk) { in add_jump_destinations()
1635 add_call_dest(file, insn, reloc->sym, true); in add_jump_destinations()
1637 } else if (reloc->sym->sec->idx) { in add_jump_destinations()
1638 dest_sec = reloc->sym->sec; in add_jump_destinations()
1639 dest_off = reloc->sym->sym.st_value + in add_jump_destinations()
1640 arch_dest_reloc_offset(reloc_addend(reloc)); in add_jump_destinations()
1746 struct reloc *reloc; in add_call_destinations() local
1752 reloc = insn_reloc(file, insn); in add_call_destinations()
1753 if (!reloc) { in add_call_destinations()
1772 } else if (reloc->sym->type == STT_SECTION) { in add_call_destinations()
1773 dest_off = arch_dest_reloc_offset(reloc_addend(reloc)); in add_call_destinations()
1774 dest = find_call_destination(reloc->sym->sec, dest_off); in add_call_destinations()
1777 reloc->sym->sec->name, dest_off); in add_call_destinations()
1783 } else if (reloc->sym->retpoline_thunk) { in add_call_destinations()
1787 add_call_dest(file, insn, reloc->sym, false); in add_call_destinations()
1883 struct reloc *alt_reloc; in handle_group_alt()
1959 struct reloc *reloc = insn_reloc(file, orig_insn); in handle_jump_alt() local
1961 if (reloc) in handle_jump_alt()
1962 set_reloc_type(file->elf, reloc, R_NONE); in handle_jump_alt()
2074 struct reloc *next_table) in add_jump_table()
2077 struct reloc *table = insn_jump_table(insn); in add_jump_table()
2080 struct reloc *reloc = table; in add_jump_table() local
2087 for_each_reloc_from(table->sec, reloc) { in add_jump_table()
2090 if (reloc != table && reloc == next_table) in add_jump_table()
2094 if (prev_offset && reloc_offset(reloc) != prev_offset + 8) in add_jump_table()
2098 if (reloc->sym->sec == pfunc->sec && in add_jump_table()
2099 reloc_addend(reloc) == pfunc->offset) in add_jump_table()
2102 dest_insn = find_insn(file, reloc->sym->sec, reloc_addend(reloc)); in add_jump_table()
2119 prev_offset = reloc_offset(reloc); in add_jump_table()
2134 static struct reloc *find_jump_table(struct objtool_file *file, in find_jump_table()
2138 struct reloc *table_reloc; in find_jump_table()
2181 struct reloc *reloc; in mark_func_jump_tables() local
2204 reloc = find_jump_table(file, func, insn); in mark_func_jump_tables()
2205 if (reloc) in mark_func_jump_tables()
2206 insn->_jump_table = reloc; in mark_func_jump_tables()
2281 struct reloc *reloc; in read_unwind_hints() local
2304 reloc = find_reloc_by_dest(file->elf, sec, i * sizeof(*hint)); in read_unwind_hints()
2305 if (!reloc) { in read_unwind_hints()
2310 if (reloc->sym->type == STT_SECTION) { in read_unwind_hints()
2311 offset = reloc_addend(reloc); in read_unwind_hints()
2312 } else if (reloc->sym->local_label) { in read_unwind_hints()
2313 offset = reloc->sym->offset; in read_unwind_hints()
2319 insn = find_insn(file, reloc->sym->sec, offset); in read_unwind_hints()
2380 struct reloc *reloc; in read_noendbr_hints() local
2386 for_each_reloc(rsec, reloc) { in read_noendbr_hints()
2387 insn = find_insn(file, reloc->sym->sec, in read_noendbr_hints()
2388 reloc->sym->offset + reloc_addend(reloc)); in read_noendbr_hints()
2404 struct reloc *reloc; in read_retpoline_hints() local
2410 for_each_reloc(rsec, reloc) { in read_retpoline_hints()
2411 if (reloc->sym->type != STT_SECTION) { in read_retpoline_hints()
2416 insn = find_insn(file, reloc->sym->sec, reloc_addend(reloc)); in read_retpoline_hints()
2440 struct reloc *reloc; in read_instr_hints() local
2446 for_each_reloc(rsec, reloc) { in read_instr_hints()
2447 if (reloc->sym->type != STT_SECTION) { in read_instr_hints()
2452 insn = find_insn(file, reloc->sym->sec, reloc_addend(reloc)); in read_instr_hints()
2465 for_each_reloc(rsec, reloc) { in read_instr_hints()
2466 if (reloc->sym->type != STT_SECTION) { in read_instr_hints()
2471 insn = find_insn(file, reloc->sym->sec, reloc_addend(reloc)); in read_instr_hints()
2487 struct reloc *reloc; in read_validate_unret_hints() local
2493 for_each_reloc(rsec, reloc) { in read_validate_unret_hints()
2494 if (reloc->sym->type != STT_SECTION) { in read_validate_unret_hints()
2499 insn = find_insn(file, reloc->sym->sec, reloc_addend(reloc)); in read_validate_unret_hints()
2515 struct reloc *reloc; in read_intra_function_calls() local
2521 for_each_reloc(rsec, reloc) { in read_intra_function_calls()
2524 if (reloc->sym->type != STT_SECTION) { in read_intra_function_calls()
2530 insn = find_insn(file, reloc->sym->sec, reloc_addend(reloc)); in read_intra_function_calls()
3454 struct reloc *reloc; in call_dest_name() local
3460 reloc = insn_reloc(NULL, insn); in call_dest_name()
3461 if (reloc && !strcmp(reloc->sym->name, "pv_ops")) { in call_dest_name()
3462 idx = (reloc_addend(reloc) / sizeof(void *)); in call_dest_name()
3473 struct reloc *reloc; in pv_call_dest() local
3476 reloc = insn_reloc(file, insn); in pv_call_dest()
3477 if (!reloc || strcmp(reloc->sym->name, "pv_ops")) in pv_call_dest()
3480 idx = (arch_dest_reloc_offset(reloc_addend(reloc)) / sizeof(void *)); in pv_call_dest()
4398 struct reloc *reloc; in validate_ibt_insn() local
4420 for (reloc = insn_reloc(file, insn); in validate_ibt_insn()
4421 reloc; in validate_ibt_insn()
4422 reloc = find_reloc_by_dest_range(file->elf, insn->sec, in validate_ibt_insn()
4423 reloc_offset(reloc) + 1, in validate_ibt_insn()
4424 (insn->offset + insn->len) - (reloc_offset(reloc) + 1))) { in validate_ibt_insn()
4430 if (reloc->sym->static_call_tramp) in validate_ibt_insn()
4433 off = reloc->sym->offset; in validate_ibt_insn()
4434 if (reloc_type(reloc) == R_X86_64_PC32 || in validate_ibt_insn()
4435 reloc_type(reloc) == R_X86_64_PLT32) in validate_ibt_insn()
4436 off += arch_dest_reloc_offset(reloc_addend(reloc)); in validate_ibt_insn()
4438 off += reloc_addend(reloc); in validate_ibt_insn()
4440 dest = find_insn(file, reloc->sym->sec, off); in validate_ibt_insn()
4491 struct reloc *reloc) in validate_ibt_data_reloc() argument
4495 dest = find_insn(file, reloc->sym->sec, in validate_ibt_data_reloc()
4496 reloc->sym->offset + reloc_addend(reloc)); in validate_ibt_data_reloc()
4509 reloc->sec->base, reloc_offset(reloc), in validate_ibt_data_reloc()
4523 struct reloc *reloc; in validate_ibt() local
4563 for_each_reloc(sec->rsec, reloc) in validate_ibt()
4564 warnings += validate_ibt_data_reloc(file, reloc); in validate_ibt()