Lines Matching refs:reloc

143 static inline struct reloc *insn_jump_table(struct instruction *insn)  in insn_jump_table()
496 struct reloc *reloc; in add_pv_ops() local
506 reloc = find_reloc_by_dest_range(file->elf, sym->sec, off, end - off); in add_pv_ops()
507 if (!reloc) in add_pv_ops()
510 func = reloc->sym; in add_pv_ops()
512 func = find_symbol_by_offset(reloc->sym->sec, in add_pv_ops()
513 reloc_addend(reloc)); in add_pv_ops()
515 idx = (reloc_offset(reloc) - sym->offset) / sizeof(unsigned long); in add_pv_ops()
519 off = reloc_offset(reloc) + 1; in add_pv_ops()
585 struct reloc *reloc; in add_dead_ends() local
596 for_each_reloc(rsec, reloc) { in add_dead_ends()
598 if (reloc->sym->type != STT_SECTION) { in add_dead_ends()
603 addend = reloc_addend(reloc); in add_dead_ends()
605 insn = find_insn(file, reloc->sym->sec, addend); in add_dead_ends()
608 else if (addend == reloc->sym->sec->sh.sh_size) { in add_dead_ends()
609 insn = find_last_insn(file, reloc->sym->sec); in add_dead_ends()
612 reloc->sym->sec->name, addend); in add_dead_ends()
617 reloc->sym->sec->name, addend); in add_dead_ends()
635 for_each_reloc(rsec, reloc) { in add_dead_ends()
637 if (reloc->sym->type != STT_SECTION) { in add_dead_ends()
642 addend = reloc_addend(reloc); in add_dead_ends()
644 insn = find_insn(file, reloc->sym->sec, addend); in add_dead_ends()
647 else if (addend == reloc->sym->sec->sh.sh_size) { in add_dead_ends()
648 insn = find_last_insn(file, reloc->sym->sec); in add_dead_ends()
651 reloc->sym->sec->name, addend); in add_dead_ends()
656 reloc->sym->sec->name, addend); in add_dead_ends()
964 struct reloc *reloc; in create_mcount_loc_sections() local
966 reloc = elf_init_reloc_text_sym(file->elf, sec, idx * addr_size, idx, in create_mcount_loc_sections()
968 if (!reloc) in create_mcount_loc_sections()
971 set_reloc_type(file->elf, reloc, addr_size == 8 ? R_ABS64 : R_ABS32); in create_mcount_loc_sections()
1026 struct reloc *reloc; in add_ignores() local
1032 for_each_reloc(rsec, reloc) { in add_ignores()
1033 switch (reloc->sym->type) { in add_ignores()
1035 func = reloc->sym; in add_ignores()
1039 func = find_func_by_offset(reloc->sym->sec, reloc_addend(reloc)); in add_ignores()
1046 rsec->name, reloc->sym->type); in add_ignores()
1266 struct reloc *reloc; in add_ignore_alternatives() local
1273 for_each_reloc(rsec, reloc) { in add_ignore_alternatives()
1274 if (reloc->sym->type != STT_SECTION) { in add_ignore_alternatives()
1279 insn = find_insn(file, reloc->sym->sec, reloc_addend(reloc)); in add_ignore_alternatives()
1318 static struct reloc *insn_reloc(struct objtool_file *file, struct instruction *insn) in insn_reloc()
1320 struct reloc *reloc; in insn_reloc() local
1328 reloc = find_reloc_by_dest_range(file->elf, insn->sec, in insn_reloc()
1330 if (!reloc) { in insn_reloc()
1335 return reloc; in insn_reloc()
1352 struct reloc *reloc = insn_reloc(file, insn); in annotate_call_site() local
1356 sym = reloc->sym; in annotate_call_site()
1383 if (reloc) in annotate_call_site()
1384 set_reloc_type(file->elf, reloc, R_NONE); in annotate_call_site()
1410 if (reloc) in annotate_call_site()
1411 set_reloc_type(file->elf, reloc, R_NONE); in annotate_call_site()
1547 struct reloc *reloc; in add_jump_destinations() local
1562 reloc = insn_reloc(file, insn); in add_jump_destinations()
1563 if (!reloc) { in add_jump_destinations()
1566 } else if (reloc->sym->type == STT_SECTION) { in add_jump_destinations()
1567 dest_sec = reloc->sym->sec; in add_jump_destinations()
1568 dest_off = arch_dest_reloc_offset(reloc_addend(reloc)); in add_jump_destinations()
1569 } else if (reloc->sym->retpoline_thunk) { in add_jump_destinations()
1572 } else if (reloc->sym->return_thunk) { in add_jump_destinations()
1580 add_call_dest(file, insn, reloc->sym, true); in add_jump_destinations()
1582 } else if (reloc->sym->sec->idx) { in add_jump_destinations()
1583 dest_sec = reloc->sym->sec; in add_jump_destinations()
1584 dest_off = reloc->sym->sym.st_value + in add_jump_destinations()
1585 arch_dest_reloc_offset(reloc_addend(reloc)); in add_jump_destinations()
1675 struct reloc *reloc; in add_call_destinations() local
1681 reloc = insn_reloc(file, insn); in add_call_destinations()
1682 if (!reloc) { in add_call_destinations()
1701 } else if (reloc->sym->type == STT_SECTION) { in add_call_destinations()
1702 dest_off = arch_dest_reloc_offset(reloc_addend(reloc)); in add_call_destinations()
1703 dest = find_call_destination(reloc->sym->sec, dest_off); in add_call_destinations()
1706 reloc->sym->sec->name, dest_off); in add_call_destinations()
1712 } else if (reloc->sym->retpoline_thunk) { in add_call_destinations()
1716 add_call_dest(file, insn, reloc->sym, false); in add_call_destinations()
1812 struct reloc *alt_reloc; in handle_group_alt()
1888 struct reloc *reloc = insn_reloc(file, orig_insn); in handle_jump_alt() local
1890 if (reloc) in handle_jump_alt()
1891 set_reloc_type(file->elf, reloc, R_NONE); in handle_jump_alt()
2003 struct reloc *next_table) in add_jump_table()
2006 struct reloc *table = insn_jump_table(insn); in add_jump_table()
2009 struct reloc *reloc = table; in add_jump_table() local
2016 for_each_reloc_from(table->sec, reloc) { in add_jump_table()
2019 if (reloc != table && reloc == next_table) in add_jump_table()
2023 if (prev_offset && reloc_offset(reloc) != prev_offset + 8) in add_jump_table()
2027 if (reloc->sym->sec == pfunc->sec && in add_jump_table()
2028 reloc_addend(reloc) == pfunc->offset) in add_jump_table()
2031 dest_insn = find_insn(file, reloc->sym->sec, reloc_addend(reloc)); in add_jump_table()
2048 prev_offset = reloc_offset(reloc); in add_jump_table()
2063 static struct reloc *find_jump_table(struct objtool_file *file, in find_jump_table()
2067 struct reloc *table_reloc; in find_jump_table()
2110 struct reloc *reloc; in mark_func_jump_tables() local
2133 reloc = find_jump_table(file, func, insn); in mark_func_jump_tables()
2134 if (reloc) in mark_func_jump_tables()
2135 insn->_jump_table = reloc; in mark_func_jump_tables()
2210 struct reloc *reloc; in read_unwind_hints() local
2232 reloc = find_reloc_by_dest(file->elf, sec, i * sizeof(*hint)); in read_unwind_hints()
2233 if (!reloc) { in read_unwind_hints()
2238 insn = find_insn(file, reloc->sym->sec, reloc_addend(reloc)); in read_unwind_hints()
2299 struct reloc *reloc; in read_noendbr_hints() local
2305 for_each_reloc(rsec, reloc) { in read_noendbr_hints()
2306 insn = find_insn(file, reloc->sym->sec, in read_noendbr_hints()
2307 reloc->sym->offset + reloc_addend(reloc)); in read_noendbr_hints()
2323 struct reloc *reloc; in read_retpoline_hints() local
2329 for_each_reloc(rsec, reloc) { in read_retpoline_hints()
2330 if (reloc->sym->type != STT_SECTION) { in read_retpoline_hints()
2335 insn = find_insn(file, reloc->sym->sec, reloc_addend(reloc)); in read_retpoline_hints()
2359 struct reloc *reloc; in read_instr_hints() local
2365 for_each_reloc(rsec, reloc) { in read_instr_hints()
2366 if (reloc->sym->type != STT_SECTION) { in read_instr_hints()
2371 insn = find_insn(file, reloc->sym->sec, reloc_addend(reloc)); in read_instr_hints()
2384 for_each_reloc(rsec, reloc) { in read_instr_hints()
2385 if (reloc->sym->type != STT_SECTION) { in read_instr_hints()
2390 insn = find_insn(file, reloc->sym->sec, reloc_addend(reloc)); in read_instr_hints()
2406 struct reloc *reloc; in read_validate_unret_hints() local
2412 for_each_reloc(rsec, reloc) { in read_validate_unret_hints()
2413 if (reloc->sym->type != STT_SECTION) { in read_validate_unret_hints()
2418 insn = find_insn(file, reloc->sym->sec, reloc_addend(reloc)); in read_validate_unret_hints()
2434 struct reloc *reloc; in read_intra_function_calls() local
2440 for_each_reloc(rsec, reloc) { in read_intra_function_calls()
2443 if (reloc->sym->type != STT_SECTION) { in read_intra_function_calls()
2449 insn = find_insn(file, reloc->sym->sec, reloc_addend(reloc)); in read_intra_function_calls()
3353 struct reloc *reloc; in call_dest_name() local
3359 reloc = insn_reloc(NULL, insn); in call_dest_name()
3360 if (reloc && !strcmp(reloc->sym->name, "pv_ops")) { in call_dest_name()
3361 idx = (reloc_addend(reloc) / sizeof(void *)); in call_dest_name()
3372 struct reloc *reloc; in pv_call_dest() local
3375 reloc = insn_reloc(file, insn); in pv_call_dest()
3376 if (!reloc || strcmp(reloc->sym->name, "pv_ops")) in pv_call_dest()
3379 idx = (arch_dest_reloc_offset(reloc_addend(reloc)) / sizeof(void *)); in pv_call_dest()
4285 struct reloc *reloc; in validate_ibt_insn() local
4307 for (reloc = insn_reloc(file, insn); in validate_ibt_insn()
4308 reloc; in validate_ibt_insn()
4309 reloc = find_reloc_by_dest_range(file->elf, insn->sec, in validate_ibt_insn()
4310 reloc_offset(reloc) + 1, in validate_ibt_insn()
4311 (insn->offset + insn->len) - (reloc_offset(reloc) + 1))) { in validate_ibt_insn()
4317 if (reloc->sym->static_call_tramp) in validate_ibt_insn()
4320 off = reloc->sym->offset; in validate_ibt_insn()
4321 if (reloc_type(reloc) == R_X86_64_PC32 || in validate_ibt_insn()
4322 reloc_type(reloc) == R_X86_64_PLT32) in validate_ibt_insn()
4323 off += arch_dest_reloc_offset(reloc_addend(reloc)); in validate_ibt_insn()
4325 off += reloc_addend(reloc); in validate_ibt_insn()
4327 dest = find_insn(file, reloc->sym->sec, off); in validate_ibt_insn()
4378 struct reloc *reloc) in validate_ibt_data_reloc() argument
4382 dest = find_insn(file, reloc->sym->sec, in validate_ibt_data_reloc()
4383 reloc->sym->offset + reloc_addend(reloc)); in validate_ibt_data_reloc()
4396 reloc->sec->base, reloc_offset(reloc), in validate_ibt_data_reloc()
4410 struct reloc *reloc; in validate_ibt() local
4450 for_each_reloc(sec->rsec, reloc) in validate_ibt()
4451 warnings += validate_ibt_data_reloc(file, reloc); in validate_ibt()