Lines Matching refs:sec

39 			      struct section *sec, unsigned long offset)  in find_insn()  argument
43 hash_for_each_possible(file->insn_hash, insn, hash, sec_offset_hash(sec, offset)) { in find_insn()
44 if (insn->sec == sec && insn->offset == offset) in find_insn()
55 return find_insn(file, insn->sec, insn->offset + insn->len); in next_insn_same_sec()
81 return find_insn(file, func->cfunc->sec, func->cfunc->offset); in next_insn_same_func()
89 return find_insn(file, insn->sec, insn->offset - insn->prev_len); in prev_insn_same_sec()
114 for (insn = find_insn(file, func->sec, func->offset); \
119 for (insn = find_insn(file, sym->sec, sym->offset); \
266 insn = find_insn(file, func->sec, func->offset); in __dead_end_function()
329 struct section *sec) in init_insn_state() argument
339 if (opts.link && opts.noinstr && sec) in init_insn_state()
340 state->noinstr = sec->noinstr; in init_insn_state()
421 struct section *sec; in decode_instructions() local
427 for_each_sec(file, sec) { in decode_instructions()
432 if (!(sec->sh.sh_flags & SHF_EXECINSTR)) in decode_instructions()
435 if (strcmp(sec->name, ".altinstr_replacement") && in decode_instructions()
436 strcmp(sec->name, ".altinstr_aux") && in decode_instructions()
437 strncmp(sec->name, ".discard.", 9)) in decode_instructions()
438 sec->text = true; in decode_instructions()
440 if (!strcmp(sec->name, ".noinstr.text") || in decode_instructions()
441 !strcmp(sec->name, ".entry.text") || in decode_instructions()
442 !strcmp(sec->name, ".cpuidle.text") || in decode_instructions()
443 !strncmp(sec->name, ".text..__x86.", 13)) in decode_instructions()
444 sec->noinstr = true; in decode_instructions()
452 if (!strcmp(sec->name, ".init.text") && !opts.module) in decode_instructions()
453 sec->init = true; in decode_instructions()
455 for (offset = 0; offset < sec->sh.sh_size; offset += insn->len) { in decode_instructions()
470 insn->sec = sec; in decode_instructions()
474 ret = arch_decode_instruction(file, sec, offset, in decode_instructions()
475 sec->sh.sh_size - offset, in decode_instructions()
490 hash_add(file->insn_hash, &insn->hash, sec_offset_hash(sec, insn->offset)); in decode_instructions()
496 sec_for_each_sym(sec, func) { in decode_instructions()
500 if (func->offset == sec->sh.sh_size) { in decode_instructions()
512 if (!find_insn(file, sec, func->offset)) { in decode_instructions()
557 reloc = find_reloc_by_dest_range(file->elf, sym->sec, off, end - off); in add_pv_ops()
563 func = find_symbol_by_offset(reloc->sym->sec, in add_pv_ops()
618 struct section *sec) in find_last_insn() argument
622 unsigned int end = (sec->sh.sh_size > 10) ? sec->sh.sh_size - 10 : 0; in find_last_insn()
624 for (offset = sec->sh.sh_size - 1; offset >= end && !insn; offset--) in find_last_insn()
625 insn = find_insn(file, sec, offset); in find_last_insn()
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()
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()
722 struct section *sec; in create_static_call_sections() local
728 sec = find_section_by_name(file->elf, ".static_call_sites"); in create_static_call_sections()
729 if (sec) { in create_static_call_sections()
742 sec = elf_create_section_pair(file->elf, ".static_call_sites", in create_static_call_sections()
744 if (!sec) in create_static_call_sections()
748 sec->sh.sh_flags |= SHF_WRITE; in create_static_call_sections()
754 if (!elf_init_reloc_text_sym(file->elf, sec, in create_static_call_sections()
756 insn->sec, insn->offset)) in create_static_call_sections()
796 if (!elf_init_reloc_data_sym(file->elf, sec, in create_static_call_sections()
811 struct section *sec; in create_retpoline_sites_sections() local
814 sec = find_section_by_name(file->elf, ".retpoline_sites"); in create_retpoline_sites_sections()
815 if (sec) { in create_retpoline_sites_sections()
827 sec = elf_create_section_pair(file->elf, ".retpoline_sites", in create_retpoline_sites_sections()
829 if (!sec) in create_retpoline_sites_sections()
835 if (!elf_init_reloc_text_sym(file->elf, sec, in create_retpoline_sites_sections()
837 insn->sec, insn->offset)) in create_retpoline_sites_sections()
849 struct section *sec; in create_return_sites_sections() local
852 sec = find_section_by_name(file->elf, ".return_sites"); in create_return_sites_sections()
853 if (sec) { in create_return_sites_sections()
865 sec = elf_create_section_pair(file->elf, ".return_sites", in create_return_sites_sections()
867 if (!sec) in create_return_sites_sections()
873 if (!elf_init_reloc_text_sym(file->elf, sec, in create_return_sites_sections()
875 insn->sec, insn->offset)) in create_return_sites_sections()
887 struct section *sec; in create_ibt_endbr_seal_sections() local
890 sec = find_section_by_name(file->elf, ".ibt_endbr_seal"); in create_ibt_endbr_seal_sections()
891 if (sec) { in create_ibt_endbr_seal_sections()
909 sec = elf_create_section_pair(file->elf, ".ibt_endbr_seal", in create_ibt_endbr_seal_sections()
911 if (!sec) in create_ibt_endbr_seal_sections()
917 int *site = (int *)sec->data->d_buf + idx; in create_ibt_endbr_seal_sections()
927 if (!elf_init_reloc_text_sym(file->elf, sec, in create_ibt_endbr_seal_sections()
929 insn->sec, insn->offset)) in create_ibt_endbr_seal_sections()
940 struct section *sec; in create_cfi_sections() local
944 sec = find_section_by_name(file->elf, ".cfi_sites"); in create_cfi_sections()
945 if (sec) { in create_cfi_sections()
962 sec = elf_create_section_pair(file->elf, ".cfi_sites", in create_cfi_sections()
964 if (!sec) in create_cfi_sections()
975 if (!elf_init_reloc_text_sym(file->elf, sec, in create_cfi_sections()
977 sym->sec, sym->offset)) in create_cfi_sections()
990 struct section *sec; in create_mcount_loc_sections() local
993 sec = find_section_by_name(file->elf, "__mcount_loc"); in create_mcount_loc_sections()
994 if (sec) { in create_mcount_loc_sections()
1007 sec = elf_create_section_pair(file->elf, "__mcount_loc", addr_size, in create_mcount_loc_sections()
1009 if (!sec) in create_mcount_loc_sections()
1012 sec->sh.sh_addralign = addr_size; in create_mcount_loc_sections()
1019 reloc = elf_init_reloc_text_sym(file->elf, sec, idx * addr_size, idx, in create_mcount_loc_sections()
1020 insn->sec, insn->offset); in create_mcount_loc_sections()
1035 struct section *sec; in create_direct_call_sections() local
1038 sec = find_section_by_name(file->elf, ".call_sites"); in create_direct_call_sections()
1039 if (sec) { in create_direct_call_sections()
1052 sec = elf_create_section_pair(file->elf, ".call_sites", in create_direct_call_sections()
1054 if (!sec) in create_direct_call_sections()
1060 if (!elf_init_reloc_text_sym(file->elf, sec, in create_direct_call_sections()
1062 insn->sec, insn->offset)) in create_direct_call_sections()
1092 func = find_func_by_offset(reloc->sym->sec, reloc_addend(reloc)); in add_ignores()
1334 insn = find_insn(file, reloc->sym->sec, reloc_addend(reloc)); in add_ignore_alternatives()
1383 reloc = find_reloc_by_dest_range(file->elf, insn->sec, in insn_reloc()
1419 if (!strcmp(insn->sec->name, ".altinstr_replacement")) in annotate_call_site()
1437 if (opts.hack_noinstr && insn->sec->noinstr && sym->profiling_func) { in annotate_call_site()
1441 elf_write_insn(file->elf, insn->sec, in annotate_call_site()
1468 elf_write_insn(file->elf, insn->sec, in annotate_call_site()
1479 if (insn->type == INSN_CALL && !insn->sec->init) in annotate_call_site()
1619 dest_sec = insn->sec; in add_jump_destinations()
1622 dest_sec = reloc->sym->sec; 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()
1727 static struct symbol *find_call_destination(struct section *sec, unsigned long offset) in find_call_destination() argument
1731 call_dest = find_func_by_offset(sec, offset); in find_call_destination()
1733 call_dest = find_symbol_by_offset(sec, offset); in find_call_destination()
1755 dest = find_call_destination(insn->sec, dest_off); 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()
1867 nop->sec = special_alt->new_sec; in handle_group_alt()
1963 elf_write_insn(file->elf, orig_insn->sec, in handle_jump_alt()
2087 for_each_reloc_from(table->sec, reloc) { in add_jump_table()
2098 if (reloc->sym->sec == pfunc->sec && in add_jump_table()
2102 dest_insn = find_insn(file, reloc->sym->sec, reloc_addend(reloc)); in add_jump_table()
2163 dest_insn = find_insn(file, table_reloc->sym->sec, reloc_addend(table_reloc)); in find_jump_table()
2278 struct section *sec; in read_unwind_hints() local
2285 sec = find_section_by_name(file->elf, ".discard.unwind_hints"); in read_unwind_hints()
2286 if (!sec) in read_unwind_hints()
2289 if (!sec->rsec) { in read_unwind_hints()
2294 if (sec->sh.sh_size % sizeof(struct unwind_hint)) { in read_unwind_hints()
2301 for (i = 0; i < sec->sh.sh_size / sizeof(struct unwind_hint); i++) { in read_unwind_hints()
2302 hint = (struct unwind_hint *)sec->data->d_buf + i; in read_unwind_hints()
2304 reloc = find_reloc_by_dest(file->elf, sec, i * sizeof(*hint)); in read_unwind_hints()
2315 WARN("unexpected relocation symbol type in %s", sec->rsec->name); in read_unwind_hints()
2319 insn = find_insn(file, reloc->sym->sec, offset); in read_unwind_hints()
2344 struct symbol *sym = find_symbol_by_offset(insn->sec, insn->offset); in read_unwind_hints()
2387 insn = find_insn(file, reloc->sym->sec, in read_noendbr_hints()
2416 insn = find_insn(file, reloc->sym->sec, reloc_addend(reloc)); in read_retpoline_hints()
2452 insn = find_insn(file, reloc->sym->sec, reloc_addend(reloc)); in read_instr_hints()
2471 insn = find_insn(file, reloc->sym->sec, reloc_addend(reloc)); in read_instr_hints()
2499 insn = find_insn(file, reloc->sym->sec, reloc_addend(reloc)); in read_validate_unret_hints()
2530 insn = find_insn(file, reloc->sym->sec, reloc_addend(reloc)); in read_intra_function_calls()
2549 insn->jump_dest = find_insn(file, insn->sec, dest_off); in read_intra_function_calls()
2552 insn->sec->name, dest_off); in read_intra_function_calls()
2621 struct section *sec; in mark_rodata() local
2634 for_each_sec(file, sec) { in mark_rodata()
2635 if (!strncmp(sec->name, ".rodata", 7) && in mark_rodata()
2636 !strstr(sec->name, ".str1.")) { in mark_rodata()
2637 sec->rodata = true; in mark_rodata()
3348 char *where = offstr(insn->sec, insn->offset); in propagate_alt_cfi()
3488 if (!target->sec->noinstr) { in pv_call_dest()
3515 if (func->sec->noinstr) in noinstr_call_dest()
3649 struct section *sec; in validate_branch() local
3653 sec = insn->sec; in validate_branch()
3880 WARN("%s: unexpected end of section", sec->name); in validate_branch()
3905 static int validate_unwind_hints(struct objtool_file *file, struct section *sec) in validate_unwind_hints() argument
3914 init_insn_state(file, &state, sec); in validate_unwind_hints()
3916 if (sec) { in validate_unwind_hints()
3917 sec_for_each_insn(file, sec, insn) in validate_unwind_hints()
3995 dest = find_insn(file, insn_call_dest(insn)->sec, in validate_unret()
4075 if (insn->sec->init) in validate_retpoline()
4119 if (!strcmp(insn->sec->name, ".altinstr_replacement") || in ignore_unreachable_insn()
4120 !strcmp(insn->sec->name, ".altinstr_aux")) in ignore_unreachable_insn()
4132 int size = find_symbol_hole_containing(insn->sec, insn->offset); in ignore_unreachable_insn()
4222 insn = find_insn(file, func->sec, func->offset); in add_prefix_symbol()
4267 struct section *sec; in add_prefix_symbols() local
4270 for_each_sec(file, sec) { in add_prefix_symbols()
4271 if (!(sec->sh.sh_flags & SHF_EXECINSTR)) in add_prefix_symbols()
4274 sec_for_each_sym(sec, func) { in add_prefix_symbols()
4285 static int validate_symbol(struct objtool_file *file, struct section *sec, in validate_symbol() argument
4299 insn = find_insn(file, sec, sym->offset); in validate_symbol()
4311 static int validate_section(struct objtool_file *file, struct section *sec) in validate_section() argument
4317 sec_for_each_sym(sec, func) { in validate_section()
4321 init_insn_state(file, &state, sec); in validate_section()
4324 warnings += validate_symbol(file, sec, func, &state); in validate_section()
4332 struct section *sec; in validate_noinstr_sections() local
4335 sec = find_section_by_name(file->elf, ".noinstr.text"); in validate_noinstr_sections()
4336 if (sec) { in validate_noinstr_sections()
4337 warnings += validate_section(file, sec); in validate_noinstr_sections()
4338 warnings += validate_unwind_hints(file, sec); in validate_noinstr_sections()
4341 sec = find_section_by_name(file->elf, ".entry.text"); in validate_noinstr_sections()
4342 if (sec) { in validate_noinstr_sections()
4343 warnings += validate_section(file, sec); in validate_noinstr_sections()
4344 warnings += validate_unwind_hints(file, sec); in validate_noinstr_sections()
4347 sec = find_section_by_name(file->elf, ".cpuidle.text"); in validate_noinstr_sections()
4348 if (sec) { in validate_noinstr_sections()
4349 warnings += validate_section(file, sec); in validate_noinstr_sections()
4350 warnings += validate_unwind_hints(file, sec); in validate_noinstr_sections()
4358 struct section *sec; in validate_functions() local
4361 for_each_sec(file, sec) { in validate_functions()
4362 if (!(sec->sh.sh_flags & SHF_EXECINSTR)) in validate_functions()
4365 warnings += validate_section(file, sec); in validate_functions()
4379 struct symbol *sym = find_symbol_containing(insn->sec, insn->offset-1); in noendbr_range()
4385 first = find_insn(file, sym->sec, sym->offset); in noendbr_range()
4422 reloc = find_reloc_by_dest_range(file->elf, insn->sec, in validate_ibt_insn()
4440 dest = find_insn(file, reloc->sym->sec, off); in validate_ibt_insn()
4482 WARN_INSN(insn, "relocation to !ENDBR: %s", offstr(dest->sec, dest->offset)); in validate_ibt_insn()
4495 dest = find_insn(file, reloc->sym->sec, in validate_ibt_data_reloc()
4509 reloc->sec->base, reloc_offset(reloc), in validate_ibt_data_reloc()
4510 offstr(dest->sec, dest->offset)); in validate_ibt_data_reloc()
4522 struct section *sec; in validate_ibt() local
4530 for_each_sec(file, sec) { in validate_ibt()
4533 if (sec->sh.sh_flags & SHF_EXECINSTR) in validate_ibt()
4536 if (!sec->rsec) in validate_ibt()
4543 if ((!strncmp(sec->name, ".discard", 8) && in validate_ibt()
4544 strcmp(sec->name, ".discard.ibt_endbr_noseal")) || in validate_ibt()
4545 !strncmp(sec->name, ".debug", 6) || in validate_ibt()
4546 !strcmp(sec->name, ".altinstructions") || in validate_ibt()
4547 !strcmp(sec->name, ".ibt_endbr_seal") || in validate_ibt()
4548 !strcmp(sec->name, ".orc_unwind_ip") || in validate_ibt()
4549 !strcmp(sec->name, ".parainstructions") || in validate_ibt()
4550 !strcmp(sec->name, ".retpoline_sites") || in validate_ibt()
4551 !strcmp(sec->name, ".smp_locks") || in validate_ibt()
4552 !strcmp(sec->name, ".static_call_sites") || in validate_ibt()
4553 !strcmp(sec->name, "_error_injection_whitelist") || in validate_ibt()
4554 !strcmp(sec->name, "_kprobe_blacklist") || in validate_ibt()
4555 !strcmp(sec->name, "__bug_table") || in validate_ibt()
4556 !strcmp(sec->name, "__ex_table") || in validate_ibt()
4557 !strcmp(sec->name, "__jump_table") || in validate_ibt()
4558 !strcmp(sec->name, "__mcount_loc") || in validate_ibt()
4559 !strcmp(sec->name, ".kcfi_traps") || in validate_ibt()
4560 strstr(sec->name, "__patchable_function_entries")) in validate_ibt()
4563 for_each_reloc(sec->rsec, reloc) in validate_ibt()