Lines Matching refs:sec

37 			      struct section *sec, unsigned long offset)
41 hash_for_each_possible(file->insn_hash, insn, hash, sec_offset_hash(sec, offset)) {
42 if (insn->sec == sec && insn->offset == offset)
54 if (!next || &next->list == &file->insn_list || next->sec != insn->sec)
77 return find_insn(file, func->cfunc->sec, func->cfunc->offset);
92 for (insn = find_insn(file, func->sec, func->offset); \
97 for (insn = find_insn(file, sym->sec, sym->offset); \
99 insn->sec == sym->sec && \
106 insn->sec == sym->sec && insn->offset >= sym->offset; \
200 insn = find_insn(file, func->sec, func->offset);
262 static void init_insn_state(struct insn_state *state, struct section *sec)
269 * not correctly determine insn->call_dest->sec (external symbols do
272 if (vmlinux && sec)
273 state->noinstr = sec->noinstr;
354 struct section *sec;
360 for_each_sec(file, sec) {
362 if (!(sec->sh.sh_flags & SHF_EXECINSTR))
365 if (strcmp(sec->name, ".altinstr_replacement") &&
366 strcmp(sec->name, ".altinstr_aux") &&
367 strncmp(sec->name, ".discard.", 9))
368 sec->text = true;
370 if (!strcmp(sec->name, ".noinstr.text") ||
371 !strcmp(sec->name, ".entry.text") ||
372 !strncmp(sec->name, ".text..__x86.", 13))
373 sec->noinstr = true;
375 for (offset = 0; offset < sec->len; offset += insn->len) {
385 insn->sec = sec;
388 ret = arch_decode_instruction(file->elf, sec, offset,
389 sec->len - offset,
396 hash_add(file->insn_hash, &insn->hash, sec_offset_hash(sec, insn->offset));
401 list_for_each_entry(func, &sec->symbol_list, list) {
405 if (!find_insn(file, sec, func->offset)) {
427 struct section *sec)
431 unsigned int end = (sec->len > 10) ? sec->len - 10 : 0;
433 for (offset = sec->len - 1; offset >= end && !insn; offset--)
434 insn = find_insn(file, sec, offset);
444 struct section *sec;
459 sec = find_section_by_name(file->elf, ".rela.discard.unreachable");
460 if (!sec)
463 list_for_each_entry(reloc, &sec->reloc_list, list) {
465 WARN("unexpected relocation symbol type in %s", sec->name);
468 insn = find_insn(file, reloc->sym->sec, reloc->addend);
471 else if (reloc->addend == reloc->sym->sec->len) {
472 insn = find_last_insn(file, reloc->sym->sec);
475 reloc->sym->sec->name, reloc->addend);
480 reloc->sym->sec->name, reloc->addend);
494 sec = find_section_by_name(file->elf, ".rela.discard.reachable");
495 if (!sec)
498 list_for_each_entry(reloc, &sec->reloc_list, list) {
500 WARN("unexpected relocation symbol type in %s", sec->name);
503 insn = find_insn(file, reloc->sym->sec, reloc->addend);
506 else if (reloc->addend == reloc->sym->sec->len) {
507 insn = find_last_insn(file, reloc->sym->sec);
510 reloc->sym->sec->name, reloc->addend);
515 reloc->sym->sec->name, reloc->addend);
527 struct section *sec;
534 sec = find_section_by_name(file->elf, ".static_call_sites");
535 if (sec) {
548 sec = elf_create_section(file->elf, ".static_call_sites", SHF_WRITE,
550 if (!sec)
556 site = (struct static_call_site *)sec->data->d_buf + idx;
560 if (elf_add_reloc_to_insn(file->elf, sec,
563 insn->sec, insn->offset))
603 if (elf_add_reloc(file->elf, sec,
618 struct section *sec;
621 sec = find_section_by_name(file->elf, ".retpoline_sites");
622 if (sec) {
634 sec = elf_create_section(file->elf, ".retpoline_sites", 0,
636 if (!sec) {
644 int *site = (int *)sec->data->d_buf + idx;
647 if (elf_add_reloc_to_insn(file->elf, sec,
650 insn->sec, insn->offset)) {
664 struct section *sec;
667 sec = find_section_by_name(file->elf, ".return_sites");
668 if (sec) {
680 sec = elf_create_section(file->elf, ".return_sites", 0,
682 if (!sec) {
690 int *site = (int *)sec->data->d_buf + idx;
693 if (elf_add_reloc_to_insn(file->elf, sec,
696 insn->sec, insn->offset)) {
713 struct section *sec;
717 sec = find_section_by_name(file->elf, ".rela.discard.func_stack_frame_non_standard");
718 if (!sec)
721 list_for_each_entry(reloc, &sec->reloc_list, list) {
728 func = find_func_by_offset(reloc->sym->sec, reloc->addend);
734 WARN("unexpected relocation symbol type in %s: %d", sec->name, reloc->sym->type);
923 struct section *sec;
927 sec = find_section_by_name(file->elf, ".rela.discard.ignore_alts");
928 if (!sec)
931 list_for_each_entry(reloc, &sec->reloc_list, list) {
933 WARN("unexpected relocation symbol type in %s", sec->name);
937 insn = find_insn(file, reloc->sym->sec, reloc->addend);
984 insn->reloc = find_reloc_by_dest_range(file->elf, insn->sec,
1020 if (!strcmp(insn->sec->name, ".altinstr_replacement"))
1038 if (insn->sec->noinstr && sym->kcov) {
1044 elf_write_insn(file->elf, insn->sec,
1128 if (add && insn->sec->text)
1148 dest_sec = insn->sec;
1151 dest_sec = reloc->sym->sec;
1163 } else if (reloc->sym->sec->idx) {
1164 dest_sec = reloc->sym->sec;
1181 if (!strcmp(insn->sec->name, ".altinstr_replacement"))
1198 insn->sec, insn->offset, dest_sec->name,
1240 static struct symbol *find_call_destination(struct section *sec, unsigned long offset)
1244 call_dest = find_func_by_offset(sec, offset);
1246 call_dest = find_symbol_by_offset(sec, offset);
1268 dest = find_call_destination(insn->sec, dest_off);
1276 WARN_FUNC("unannotated intra-function call", insn->sec, insn->offset);
1282 insn->sec, insn->offset);
1288 dest = find_call_destination(reloc->sym->sec, dest_off);
1291 insn->sec, insn->offset,
1292 reloc->sym->sec->name,
1372 nop->sec = special_alt->new_sec;
1412 insn->sec, insn->offset);
1428 insn->sec, insn->offset);
1464 orig_insn->sec, orig_insn->offset);
1517 orig_insn->sec, orig_insn->offset);
1565 list_for_each_entry_from(reloc, &table->sec->reloc_list, list) {
1576 if (reloc->sym->sec == pfunc->sec &&
1580 dest_insn = find_insn(file, reloc->sym->sec, reloc->addend);
1601 insn->sec, insn->offset);
1641 dest_insn = find_insn(file, table_reloc->sym->sec, table_reloc->addend);
1715 struct section *sec;
1722 for_each_sec(file, sec) {
1723 list_for_each_entry(func, &sec->symbol_list, list) {
1748 struct section *sec, *relocsec;
1754 sec = find_section_by_name(file->elf, ".discard.unwind_hints");
1755 if (!sec)
1758 relocsec = sec->reloc;
1764 if (sec->len % sizeof(struct unwind_hint)) {
1771 for (i = 0; i < sec->len / sizeof(struct unwind_hint); i++) {
1772 hint = (struct unwind_hint *)sec->data->d_buf + i;
1774 reloc = find_reloc_by_dest(file->elf, sec, i * sizeof(*hint));
1780 insn = find_insn(file, reloc->sym->sec, reloc->addend);
1800 struct symbol *sym = find_symbol_by_offset(insn->sec, insn->offset);
1822 insn->sec, insn->offset, hint->sp_reg);
1838 struct section *sec;
1842 sec = find_section_by_name(file->elf, ".rela.discard.retpoline_safe");
1843 if (!sec)
1846 list_for_each_entry(reloc, &sec->reloc_list, list) {
1848 WARN("unexpected relocation symbol type in %s", sec->name);
1852 insn = find_insn(file, reloc->sym->sec, reloc->addend);
1863 insn->sec, insn->offset);
1875 struct section *sec;
1879 sec = find_section_by_name(file->elf, ".rela.discard.instr_end");
1880 if (!sec)
1883 list_for_each_entry(reloc, &sec->reloc_list, list) {
1885 WARN("unexpected relocation symbol type in %s", sec->name);
1889 insn = find_insn(file, reloc->sym->sec, reloc->addend);
1898 sec = find_section_by_name(file->elf, ".rela.discard.instr_begin");
1899 if (!sec)
1902 list_for_each_entry(reloc, &sec->reloc_list, list) {
1904 WARN("unexpected relocation symbol type in %s", sec->name);
1908 insn = find_insn(file, reloc->sym->sec, reloc->addend);
1923 struct section *sec;
1926 sec = find_section_by_name(file->elf, ".rela.discard.intra_function_calls");
1927 if (!sec)
1930 list_for_each_entry(reloc, &sec->reloc_list, list) {
1935 sec->name);
1939 insn = find_insn(file, reloc->sym->sec, reloc->addend);
1947 insn->sec, insn->offset);
1959 insn->jump_dest = find_insn(file, insn->sec, dest_off);
1962 insn->sec, insn->offset,
1963 insn->sec->name, dest_off);
1973 struct section *sec;
1976 for_each_sec(file, sec) {
1977 list_for_each_entry(func, &sec->symbol_list, list) {
2007 struct section *sec;
2020 for_each_sec(file, sec) {
2021 if (!strncmp(sec->name, ".rodata", 7) &&
2022 !strstr(sec->name, ".str1.")) {
2023 sec->rodata = true;
2256 WARN_FUNC("undefined stack state", insn->sec, insn->offset);
2395 insn->sec, insn->offset);
2406 insn->sec, insn->offset);
2481 insn->sec, insn->offset);
2560 insn->sec, insn->offset);
2579 insn->sec, insn->offset);
2592 insn->sec, insn->offset);
2629 insn->sec, insn->offset);
2651 insn->sec, insn->offset);
2684 insn->sec, insn->offset,
2695 insn->sec, insn->offset,
2704 insn->sec, insn->offset, cfi1->type, cfi2->type);
2711 insn->sec, insn->offset,
2749 if (func->sec->noinstr)
2768 insn->sec, insn->offset, call_dest_name(insn));
2774 insn->sec, insn->offset, call_dest_name(insn));
2780 insn->sec, insn->offset, call_dest_name(insn));
2791 insn->sec, insn->offset);
2802 insn->sec, insn->offset);
2808 insn->sec, insn->offset);
2814 insn->sec, insn->offset);
2820 insn->sec, insn->offset);
2826 insn->sec, insn->offset);
2832 insn->sec, insn->offset);
2866 struct section *sec;
2870 sec = insn->sec;
2883 sec, insn->offset);
2917 sec, insn->offset);
2923 sec, insn->offset);
2976 insn->sec, insn->offset);
2989 sec, insn->offset);
3024 insn->sec, insn->offset);
3043 sec, insn->offset);
3050 WARN_FUNC("recursive UACCESS enable", sec, insn->offset);
3059 WARN_FUNC("redundant UACCESS disable", sec, insn->offset);
3064 WARN_FUNC("UACCESS-safe disables UACCESS", sec, insn->offset);
3073 WARN_FUNC("recursive STD", sec, insn->offset);
3082 WARN_FUNC("redundant CLD", sec, insn->offset);
3099 WARN("%s: unexpected end of section", sec->name);
3110 static int validate_unwind_hints(struct objtool_file *file, struct section *sec)
3119 init_insn_state(&state, sec);
3121 if (sec) {
3122 insn = find_insn(file, sec, 0);
3129 while (&insn->list != &file->insn_list && (!sec || insn->sec == sec)) {
3187 WARN_FUNC("early indirect call", insn->sec, insn->offset);
3195 insn->sec, insn->offset);
3215 dest = find_insn(file, insn->call_dest->sec,
3236 WARN_FUNC("RET before UNTRAIN", insn->sec, insn->offset);
3249 WARN_FUNC("teh end!", insn->sec, insn->offset);
3273 WARN_FUNC("Failed UNRET validation", insn->sec, insn->offset);
3302 if (!strcmp(insn->sec->name, ".init.text") && !module)
3308 insn->sec, insn->offset);
3313 insn->sec, insn->offset,
3351 if (!strcmp(insn->sec->name, ".fixup") ||
3352 !strcmp(insn->sec->name, ".altinstr_replacement") ||
3353 !strcmp(insn->sec->name, ".altinstr_aux"))
3404 static int validate_symbol(struct objtool_file *file, struct section *sec,
3418 insn = find_insn(file, sec, sym->offset);
3430 static int validate_section(struct objtool_file *file, struct section *sec)
3436 list_for_each_entry(func, &sec->symbol_list, list) {
3440 init_insn_state(&state, sec);
3443 warnings += validate_symbol(file, sec, func, &state);
3451 struct section *sec;
3454 sec = find_section_by_name(file->elf, ".noinstr.text");
3455 if (sec) {
3456 warnings += validate_section(file, sec);
3457 warnings += validate_unwind_hints(file, sec);
3460 sec = find_section_by_name(file->elf, ".entry.text");
3461 if (sec) {
3462 warnings += validate_section(file, sec);
3463 warnings += validate_unwind_hints(file, sec);
3471 struct section *sec;
3474 for_each_sec(file, sec) {
3475 if (!(sec->sh.sh_flags & SHF_EXECINSTR))
3478 warnings += validate_section(file, sec);
3495 WARN_FUNC("unreachable instruction", insn->sec, insn->offset);