Lines Matching refs:reloc

143 static inline struct reloc *insn_jump_table(struct instruction *insn)  in insn_jump_table()
551 struct reloc *reloc; in add_pv_ops() local
561 reloc = find_reloc_by_dest_range(file->elf, sym->sec, off, end - off); in add_pv_ops()
562 if (!reloc) in add_pv_ops()
565 idx = (reloc_offset(reloc) - sym->offset) / sizeof(unsigned long); in add_pv_ops()
567 func = reloc->sym; in add_pv_ops()
569 func = find_symbol_by_offset(reloc->sym->sec, in add_pv_ops()
570 reloc_addend(reloc)); in add_pv_ops()
572 ERROR_FUNC(reloc->sym->sec, reloc_addend(reloc), in add_pv_ops()
580 off = reloc_offset(reloc) + 1; in add_pv_ops()
930 struct reloc *reloc; in create_mcount_loc_sections() local
932 reloc = elf_init_reloc_text_sym(file->elf, sec, idx * addr_size, idx, in create_mcount_loc_sections()
934 if (!reloc) in create_mcount_loc_sections()
937 set_reloc_type(file->elf, reloc, addr_size == 8 ? R_ABS64 : R_ABS32); in create_mcount_loc_sections()
991 struct reloc *reloc; in add_ignores() local
997 for_each_reloc(rsec, reloc) { in add_ignores()
998 switch (reloc->sym->type) { in add_ignores()
1000 func = reloc->sym; in add_ignores()
1004 func = find_func_by_offset(reloc->sym->sec, reloc_addend(reloc)); in add_ignores()
1011 rsec->name, reloc->sym->type); in add_ignores()
1257 static struct reloc *insn_reloc(struct objtool_file *file, struct instruction *insn) in insn_reloc()
1259 struct reloc *reloc; in insn_reloc() local
1267 reloc = find_reloc_by_dest_range(file->elf, insn->sec, in insn_reloc()
1269 if (!reloc) { in insn_reloc()
1274 return reloc; in insn_reloc()
1291 struct reloc *reloc = insn_reloc(file, insn); in annotate_call_site() local
1295 sym = reloc->sym; in annotate_call_site()
1313 if (reloc) in annotate_call_site()
1314 set_reloc_type(file->elf, reloc, R_NONE); in annotate_call_site()
1342 if (reloc) in annotate_call_site()
1343 set_reloc_type(file->elf, reloc, R_NONE); in annotate_call_site()
1484 struct reloc *reloc; in add_jump_destinations() local
1502 reloc = insn_reloc(file, insn); in add_jump_destinations()
1503 if (!reloc) { in add_jump_destinations()
1506 } else if (reloc->sym->type == STT_SECTION) { in add_jump_destinations()
1507 dest_sec = reloc->sym->sec; in add_jump_destinations()
1508 dest_off = arch_dest_reloc_offset(reloc_addend(reloc)); in add_jump_destinations()
1509 } else if (reloc->sym->retpoline_thunk) { in add_jump_destinations()
1514 } else if (reloc->sym->return_thunk) { in add_jump_destinations()
1522 ret = add_call_dest(file, insn, reloc->sym, true); in add_jump_destinations()
1526 } else if (reloc->sym->sec->idx) { in add_jump_destinations()
1527 dest_sec = reloc->sym->sec; in add_jump_destinations()
1528 dest_off = reloc->sym->sym.st_value + in add_jump_destinations()
1529 arch_dest_reloc_offset(reloc_addend(reloc)); in add_jump_destinations()
1647 struct reloc *reloc; in add_call_destinations() local
1655 reloc = insn_reloc(file, insn); in add_call_destinations()
1656 if (!reloc) { in add_call_destinations()
1677 } else if (reloc->sym->type == STT_SECTION) { in add_call_destinations()
1678 dest_off = arch_dest_reloc_offset(reloc_addend(reloc)); in add_call_destinations()
1679 dest = find_call_destination(reloc->sym->sec, dest_off); in add_call_destinations()
1682 reloc->sym->sec->name, dest_off); in add_call_destinations()
1690 } else if (reloc->sym->retpoline_thunk) { in add_call_destinations()
1696 ret = add_call_dest(file, insn, reloc->sym, false); in add_call_destinations()
1795 struct reloc *alt_reloc; in handle_group_alt()
1871 struct reloc *reloc = insn_reloc(file, orig_insn); in handle_jump_alt() local
1873 if (reloc) in handle_jump_alt()
1874 set_reloc_type(file->elf, reloc, R_NONE); in handle_jump_alt()
1982 __weak unsigned long arch_jump_table_sym_offset(struct reloc *reloc, struct reloc *table) in arch_jump_table_sym_offset() argument
1984 return reloc->sym->offset + reloc_addend(reloc); in arch_jump_table_sym_offset()
1991 struct reloc *table = insn_jump_table(insn); in add_jump_table()
1994 struct reloc *reloc = table; in add_jump_table() local
2002 for_each_reloc_from(table->sec, reloc) { in add_jump_table()
2005 if (table_size && reloc_offset(reloc) - reloc_offset(table) >= table_size) in add_jump_table()
2007 if (reloc != table && is_jump_table(reloc)) in add_jump_table()
2011 if (prev_offset && reloc_offset(reloc) != prev_offset + arch_reloc_size(reloc)) in add_jump_table()
2014 sym_offset = arch_jump_table_sym_offset(reloc, table); in add_jump_table()
2017 if (reloc->sym->sec == pfunc->sec && sym_offset == pfunc->offset) in add_jump_table()
2024 if (reloc->sym->sec == pfunc->sec && in add_jump_table()
2028 dest_insn = find_insn(file, reloc->sym->sec, sym_offset); in add_jump_table()
2046 prev_offset = reloc_offset(reloc); in add_jump_table()
2064 struct reloc *table_reloc; in find_jump_table()
2199 struct reloc *reloc; in read_unwind_hints() local
2222 reloc = find_reloc_by_dest(file->elf, sec, i * sizeof(*hint)); in read_unwind_hints()
2223 if (!reloc) { in read_unwind_hints()
2228 if (reloc->sym->type == STT_SECTION) { in read_unwind_hints()
2229 offset = reloc_addend(reloc); in read_unwind_hints()
2230 } else if (reloc->sym->local_label) { in read_unwind_hints()
2231 offset = reloc->sym->offset; in read_unwind_hints()
2237 insn = find_insn(file, reloc->sym->sec, offset); in read_unwind_hints()
2300 struct reloc *reloc; in read_annotate() local
2320 for_each_reloc(sec->rsec, reloc) { in read_annotate()
2321 type = *(u32 *)(sec->data->d_buf + (reloc_idx(reloc) * sec->sh.sh_entsize) + 4); in read_annotate()
2324 offset = reloc->sym->offset + reloc_addend(reloc); in read_annotate()
2325 insn = find_insn(file, reloc->sym->sec, offset); in read_annotate()
2328 ERROR("bad .discard.annotate_insn entry: %d of type %d", reloc_idx(reloc), type); in read_annotate()
3329 struct reloc *reloc; in call_dest_name() local
3335 reloc = insn_reloc(NULL, insn); in call_dest_name()
3336 if (reloc && !strcmp(reloc->sym->name, "pv_ops")) { in call_dest_name()
3337 idx = (reloc_addend(reloc) / sizeof(void *)); in call_dest_name()
3348 struct reloc *reloc; in pv_call_dest() local
3351 reloc = insn_reloc(file, insn); in pv_call_dest()
3352 if (!reloc || strcmp(reloc->sym->name, "pv_ops")) in pv_call_dest()
3355 idx = (arch_dest_reloc_offset(reloc_addend(reloc)) / sizeof(void *)); in pv_call_dest()
4357 struct reloc *reloc; in validate_ibt_insn() local
4397 for (reloc = insn_reloc(file, insn); in validate_ibt_insn()
4398 reloc; in validate_ibt_insn()
4399 reloc = find_reloc_by_dest_range(file->elf, insn->sec, in validate_ibt_insn()
4400 reloc_offset(reloc) + 1, in validate_ibt_insn()
4401 (insn->offset + insn->len) - (reloc_offset(reloc) + 1))) { in validate_ibt_insn()
4403 off = reloc->sym->offset; in validate_ibt_insn()
4404 if (reloc_type(reloc) == R_X86_64_PC32 || in validate_ibt_insn()
4405 reloc_type(reloc) == R_X86_64_PLT32) in validate_ibt_insn()
4406 off += arch_dest_reloc_offset(reloc_addend(reloc)); in validate_ibt_insn()
4408 off += reloc_addend(reloc); in validate_ibt_insn()
4410 dest = find_insn(file, reloc->sym->sec, off); in validate_ibt_insn()
4421 struct reloc *reloc) in validate_ibt_data_reloc() argument
4425 dest = find_insn(file, reloc->sym->sec, in validate_ibt_data_reloc()
4426 reloc->sym->offset + reloc_addend(reloc)); in validate_ibt_data_reloc()
4438 WARN_FUNC(reloc->sec->base, reloc_offset(reloc), in validate_ibt_data_reloc()
4452 struct reloc *reloc; in validate_ibt() local
4495 for_each_reloc(sec->rsec, reloc) in validate_ibt()
4496 warnings += validate_ibt_data_reloc(file, reloc); in validate_ibt()