Lines Matching refs:reloc
143 static inline struct reloc *insn_jump_table(struct instruction *insn) in insn_jump_table()
523 struct reloc *rel; in add_pv_ops()
611 struct reloc *reloc; in add_dead_ends() local
621 list_for_each_entry(reloc, &sec->reloc_list, list) { in add_dead_ends()
622 if (reloc->sym->type != STT_SECTION) { in add_dead_ends()
626 insn = find_insn(file, reloc->sym->sec, reloc->addend); in add_dead_ends()
629 else if (reloc->addend == reloc->sym->sec->sh.sh_size) { in add_dead_ends()
630 insn = find_last_insn(file, reloc->sym->sec); in add_dead_ends()
633 reloc->sym->sec->name, reloc->addend); in add_dead_ends()
638 reloc->sym->sec->name, reloc->addend); in add_dead_ends()
656 list_for_each_entry(reloc, &sec->reloc_list, list) { in add_dead_ends()
657 if (reloc->sym->type != STT_SECTION) { in add_dead_ends()
661 insn = find_insn(file, reloc->sym->sec, reloc->addend); in add_dead_ends()
664 else if (reloc->addend == reloc->sym->sec->sh.sh_size) { in add_dead_ends()
665 insn = find_last_insn(file, reloc->sym->sec); in add_dead_ends()
668 reloc->sym->sec->name, reloc->addend); in add_dead_ends()
673 reloc->sym->sec->name, reloc->addend); in add_dead_ends()
1082 struct reloc *reloc; in add_ignores() local
1088 list_for_each_entry(reloc, &sec->reloc_list, list) { in add_ignores()
1089 switch (reloc->sym->type) { in add_ignores()
1091 func = reloc->sym; in add_ignores()
1095 func = find_func_by_offset(reloc->sym->sec, reloc->addend); in add_ignores()
1101 WARN("unexpected relocation symbol type in %s: %d", sec->name, reloc->sym->type); in add_ignores()
1319 struct reloc *reloc; in add_ignore_alternatives() local
1326 list_for_each_entry(reloc, &sec->reloc_list, list) { in add_ignore_alternatives()
1327 if (reloc->sym->type != STT_SECTION) { in add_ignore_alternatives()
1332 insn = find_insn(file, reloc->sym->sec, reloc->addend); in add_ignore_alternatives()
1354 static struct reloc *insn_reloc(struct objtool_file *file, struct instruction *insn) in insn_reloc()
1356 struct reloc *reloc; in insn_reloc() local
1364 reloc = find_reloc_by_dest_range(file->elf, insn->sec, in insn_reloc()
1366 if (!reloc) { in insn_reloc()
1371 return reloc; in insn_reloc()
1388 struct reloc *reloc = insn_reloc(file, insn); in annotate_call_site() local
1392 sym = reloc->sym; in annotate_call_site()
1419 if (reloc) { in annotate_call_site()
1420 reloc->type = R_NONE; in annotate_call_site()
1421 elf_write_reloc(file->elf, reloc); in annotate_call_site()
1448 if (reloc) { in annotate_call_site()
1449 reloc->type = R_NONE; in annotate_call_site()
1450 elf_write_reloc(file->elf, reloc); in annotate_call_site()
1587 struct reloc *reloc; in add_jump_destinations() local
1602 reloc = insn_reloc(file, insn); in add_jump_destinations()
1603 if (!reloc) { in add_jump_destinations()
1606 } else if (reloc->sym->type == STT_SECTION) { in add_jump_destinations()
1607 dest_sec = reloc->sym->sec; in add_jump_destinations()
1608 dest_off = arch_dest_reloc_offset(reloc->addend); in add_jump_destinations()
1609 } else if (reloc->sym->retpoline_thunk) { in add_jump_destinations()
1612 } else if (reloc->sym->return_thunk) { in add_jump_destinations()
1620 add_call_dest(file, insn, reloc->sym, true); in add_jump_destinations()
1622 } else if (reloc->sym->sec->idx) { in add_jump_destinations()
1623 dest_sec = reloc->sym->sec; in add_jump_destinations()
1624 dest_off = reloc->sym->sym.st_value + in add_jump_destinations()
1625 arch_dest_reloc_offset(reloc->addend); in add_jump_destinations()
1716 struct reloc *reloc; in add_call_destinations() local
1722 reloc = insn_reloc(file, insn); in add_call_destinations()
1723 if (!reloc) { in add_call_destinations()
1743 } else if (reloc->sym->type == STT_SECTION) { in add_call_destinations()
1744 dest_off = arch_dest_reloc_offset(reloc->addend); in add_call_destinations()
1745 dest = find_call_destination(reloc->sym->sec, dest_off); in add_call_destinations()
1749 reloc->sym->sec->name, in add_call_destinations()
1756 } else if (reloc->sym->retpoline_thunk) { in add_call_destinations()
1760 add_call_dest(file, insn, reloc->sym, false); in add_call_destinations()
1857 struct reloc *alt_reloc; in handle_group_alt()
1936 struct reloc *reloc = insn_reloc(file, orig_insn); in handle_jump_alt() local
1938 if (reloc) { in handle_jump_alt()
1939 reloc->type = R_NONE; in handle_jump_alt()
1940 elf_write_reloc(file->elf, reloc); in handle_jump_alt()
2054 struct reloc *table) in add_jump_table()
2056 struct reloc *reloc = table; in add_jump_table() local
2066 list_for_each_entry_from(reloc, &table->sec->reloc_list, list) { in add_jump_table()
2069 if (reloc != table && reloc->jump_table_start) in add_jump_table()
2073 if (prev_offset && reloc->offset != prev_offset + 8) in add_jump_table()
2077 if (reloc->sym->sec == pfunc->sec && in add_jump_table()
2078 reloc->addend == pfunc->offset) in add_jump_table()
2081 dest_insn = find_insn(file, reloc->sym->sec, reloc->addend); in add_jump_table()
2098 prev_offset = reloc->offset; in add_jump_table()
2114 static struct reloc *find_jump_table(struct objtool_file *file, in find_jump_table()
2118 struct reloc *table_reloc; in find_jump_table()
2161 struct reloc *reloc; in mark_func_jump_tables() local
2184 reloc = find_jump_table(file, func, insn); in mark_func_jump_tables()
2185 if (reloc) { in mark_func_jump_tables()
2186 reloc->jump_table_start = true; in mark_func_jump_tables()
2187 insn->_jump_table = reloc; in mark_func_jump_tables()
2253 struct reloc *reloc; in read_unwind_hints() local
2260 relocsec = sec->reloc; in read_unwind_hints()
2276 reloc = find_reloc_by_dest(file->elf, sec, i * sizeof(*hint)); in read_unwind_hints()
2277 if (!reloc) { in read_unwind_hints()
2282 insn = find_insn(file, reloc->sym->sec, reloc->addend); in read_unwind_hints()
2348 struct reloc *reloc; in read_noendbr_hints() local
2354 list_for_each_entry(reloc, &sec->reloc_list, list) { in read_noendbr_hints()
2355 insn = find_insn(file, reloc->sym->sec, reloc->sym->offset + reloc->addend); in read_noendbr_hints()
2371 struct reloc *reloc; in read_retpoline_hints() local
2377 list_for_each_entry(reloc, &sec->reloc_list, list) { in read_retpoline_hints()
2378 if (reloc->sym->type != STT_SECTION) { in read_retpoline_hints()
2383 insn = find_insn(file, reloc->sym->sec, reloc->addend); in read_retpoline_hints()
2408 struct reloc *reloc; in read_instr_hints() local
2414 list_for_each_entry(reloc, &sec->reloc_list, list) { in read_instr_hints()
2415 if (reloc->sym->type != STT_SECTION) { in read_instr_hints()
2420 insn = find_insn(file, reloc->sym->sec, reloc->addend); in read_instr_hints()
2433 list_for_each_entry(reloc, &sec->reloc_list, list) { in read_instr_hints()
2434 if (reloc->sym->type != STT_SECTION) { in read_instr_hints()
2439 insn = find_insn(file, reloc->sym->sec, reloc->addend); in read_instr_hints()
2455 struct reloc *reloc; in read_intra_function_calls() local
2461 list_for_each_entry(reloc, &sec->reloc_list, list) { in read_intra_function_calls()
2464 if (reloc->sym->type != STT_SECTION) { in read_intra_function_calls()
2470 insn = find_insn(file, reloc->sym->sec, reloc->addend); in read_intra_function_calls()
3384 struct reloc *rel; in call_dest_name()
3403 struct reloc *rel; in pv_call_dest()
4323 struct reloc *reloc; in validate_ibt_insn() local
4345 for (reloc = insn_reloc(file, insn); in validate_ibt_insn()
4346 reloc; in validate_ibt_insn()
4347 reloc = find_reloc_by_dest_range(file->elf, insn->sec, in validate_ibt_insn()
4348 reloc->offset + 1, in validate_ibt_insn()
4349 (insn->offset + insn->len) - (reloc->offset + 1))) { in validate_ibt_insn()
4355 if (reloc->sym->static_call_tramp) in validate_ibt_insn()
4358 off = reloc->sym->offset; in validate_ibt_insn()
4359 if (reloc->type == R_X86_64_PC32 || reloc->type == R_X86_64_PLT32) in validate_ibt_insn()
4360 off += arch_dest_reloc_offset(reloc->addend); in validate_ibt_insn()
4362 off += reloc->addend; in validate_ibt_insn()
4364 dest = find_insn(file, reloc->sym->sec, off); in validate_ibt_insn()
4416 struct reloc *reloc) in validate_ibt_data_reloc() argument
4420 dest = find_insn(file, reloc->sym->sec, in validate_ibt_data_reloc()
4421 reloc->sym->offset + reloc->addend); in validate_ibt_data_reloc()
4434 reloc->sec->base, reloc->offset, in validate_ibt_data_reloc()
4448 struct reloc *reloc; in validate_ibt() local
4461 if (!sec->reloc) in validate_ibt()
4488 list_for_each_entry(reloc, &sec->reloc->reloc_list, list) in validate_ibt()
4489 warnings += validate_ibt_data_reloc(file, reloc); in validate_ibt()