Lines Matching refs:sec
33 struct section *sec, unsigned long offset) in find_insn() argument
38 if (insn->sec == sec && insn->offset == offset) in find_insn()
49 if (!next || &next->list == &file->insn_list || next->sec != insn->sec) in next_insn_same_sec()
72 return find_insn(file, func->cfunc->sec, func->cfunc->offset); in next_insn_same_func()
76 for (insn = find_insn(file, func->sec, func->offset); \
81 for (insn = find_insn(file, func->sec, func->offset); \
83 insn->sec == func->sec && \
90 insn->sec == func->sec && insn->offset >= func->offset; \
163 insn = find_insn(file, func->sec, func->offset); in __dead_end_function()
232 struct section *sec; in decode_instructions() local
238 for_each_sec(file, sec) { in decode_instructions()
240 if (!(sec->sh.sh_flags & SHF_EXECINSTR)) in decode_instructions()
243 if (strcmp(sec->name, ".altinstr_replacement") && in decode_instructions()
244 strcmp(sec->name, ".altinstr_aux") && in decode_instructions()
245 strncmp(sec->name, ".discard.", 9)) in decode_instructions()
246 sec->text = true; in decode_instructions()
248 for (offset = 0; offset < sec->len; offset += insn->len) { in decode_instructions()
258 insn->sec = sec; in decode_instructions()
261 ret = arch_decode_instruction(file->elf, sec, offset, in decode_instructions()
262 sec->len - offset, in decode_instructions()
273 list_for_each_entry(func, &sec->symbol_list, list) { in decode_instructions()
277 if (!find_insn(file, sec, func->offset)) { in decode_instructions()
300 struct section *sec; in add_dead_ends() local
316 sec = find_section_by_name(file->elf, ".rela.discard.unreachable"); in add_dead_ends()
317 if (!sec) in add_dead_ends()
320 list_for_each_entry(rela, &sec->rela_list, list) { in add_dead_ends()
322 WARN("unexpected relocation symbol type in %s", sec->name); in add_dead_ends()
325 insn = find_insn(file, rela->sym->sec, rela->addend); in add_dead_ends()
328 else if (rela->addend == rela->sym->sec->len) { in add_dead_ends()
331 if (insn->sec == rela->sym->sec) { in add_dead_ends()
339 rela->sym->sec->name, rela->addend); in add_dead_ends()
344 rela->sym->sec->name, rela->addend); in add_dead_ends()
358 sec = find_section_by_name(file->elf, ".rela.discard.reachable"); in add_dead_ends()
359 if (!sec) in add_dead_ends()
362 list_for_each_entry(rela, &sec->rela_list, list) { in add_dead_ends()
364 WARN("unexpected relocation symbol type in %s", sec->name); in add_dead_ends()
367 insn = find_insn(file, rela->sym->sec, rela->addend); in add_dead_ends()
370 else if (rela->addend == rela->sym->sec->len) { in add_dead_ends()
373 if (insn->sec == rela->sym->sec) { in add_dead_ends()
381 rela->sym->sec->name, rela->addend); in add_dead_ends()
386 rela->sym->sec->name, rela->addend); in add_dead_ends()
402 struct section *sec; in add_ignores() local
406 sec = find_section_by_name(file->elf, ".rela.discard.func_stack_frame_non_standard"); in add_ignores()
407 if (!sec) in add_ignores()
410 list_for_each_entry(rela, &sec->rela_list, list) { in add_ignores()
417 func = find_symbol_by_offset(rela->sym->sec, rela->addend); in add_ignores()
423 WARN("unexpected relocation symbol type in %s: %d", sec->name, rela->sym->type); in add_ignores()
517 struct section *sec; in add_ignore_alternatives() local
521 sec = find_section_by_name(file->elf, ".rela.discard.ignore_alts"); in add_ignore_alternatives()
522 if (!sec) in add_ignore_alternatives()
525 list_for_each_entry(rela, &sec->rela_list, list) { in add_ignore_alternatives()
527 WARN("unexpected relocation symbol type in %s", sec->name); in add_ignore_alternatives()
531 insn = find_insn(file, rela->sym->sec, rela->addend); in add_ignore_alternatives()
561 rela = find_rela_by_dest_range(insn->sec, insn->offset, in add_jump_destinations()
564 dest_sec = insn->sec; in add_jump_destinations()
567 dest_sec = rela->sym->sec; in add_jump_destinations()
569 } else if (rela->sym->sec->idx) { in add_jump_destinations()
570 dest_sec = rela->sym->sec; in add_jump_destinations()
598 if (!strcmp(insn->sec->name, ".altinstr_replacement")) in add_jump_destinations()
602 insn->sec, insn->offset, dest_sec->name, in add_jump_destinations()
658 rela = find_rela_by_dest_range(insn->sec, insn->offset, in add_call_destinations()
662 insn->call_dest = find_symbol_by_offset(insn->sec, in add_call_destinations()
667 insn->sec, insn->offset); in add_call_destinations()
674 insn->call_dest = find_symbol_by_offset(rela->sym->sec, in add_call_destinations()
679 insn->sec, insn->offset, in add_call_destinations()
680 rela->sym->sec->name, in add_call_destinations()
736 fake_jump->sec = special_alt->new_sec; in handle_group_alt()
784 insn->sec, insn->offset); in handle_group_alt()
816 orig_insn->sec, orig_insn->offset); in handle_jump_alt()
911 list_for_each_entry_from(rela, &table->sec->rela_list, list) { in add_jump_table()
922 if (rela->sym->sec == pfunc->sec && in add_jump_table()
926 dest_insn = find_insn(file, rela->sym->sec, rela->addend); in add_jump_table()
947 insn->sec, insn->offset); in add_jump_table()
1013 insn->sec == func->sec && in find_jump_table()
1029 text_rela = find_rela_by_dest_range(insn->sec, insn->offset, in find_jump_table()
1032 !text_rela->sym->sec->rodata) in find_jump_table()
1036 table_sec = text_rela->sym->sec; in find_jump_table()
1137 struct section *sec; in add_jump_table_alts() local
1144 for_each_sec(file, sec) { in add_jump_table_alts()
1145 list_for_each_entry(func, &sec->symbol_list, list) { in add_jump_table_alts()
1161 struct section *sec, *relasec; in read_unwind_hints() local
1168 sec = find_section_by_name(file->elf, ".discard.unwind_hints"); in read_unwind_hints()
1169 if (!sec) in read_unwind_hints()
1172 relasec = sec->rela; in read_unwind_hints()
1178 if (sec->len % sizeof(struct unwind_hint)) { in read_unwind_hints()
1185 for (i = 0; i < sec->len / sizeof(struct unwind_hint); i++) { in read_unwind_hints()
1186 hint = (struct unwind_hint *)sec->data->d_buf + i; in read_unwind_hints()
1188 rela = find_rela_by_dest(sec, i * sizeof(*hint)); in read_unwind_hints()
1194 insn = find_insn(file, rela->sym->sec, rela->addend); in read_unwind_hints()
1241 insn->sec, insn->offset, hint->sp_reg); in read_unwind_hints()
1255 struct section *sec; in read_retpoline_hints() local
1259 sec = find_section_by_name(file->elf, ".rela.discard.retpoline_safe"); in read_retpoline_hints()
1260 if (!sec) in read_retpoline_hints()
1263 list_for_each_entry(rela, &sec->rela_list, list) { in read_retpoline_hints()
1265 WARN("unexpected relocation symbol type in %s", sec->name); in read_retpoline_hints()
1269 insn = find_insn(file, rela->sym->sec, rela->addend); in read_retpoline_hints()
1278 insn->sec, insn->offset); in read_retpoline_hints()
1290 struct section *sec; in mark_rodata() local
1303 for_each_sec(file, sec) { in mark_rodata()
1304 if ((!strncmp(sec->name, ".rodata", 7) && !strstr(sec->name, ".str1.")) || in mark_rodata()
1305 !strcmp(sec->name, C_JUMP_TABLE_SECTION)) { in mark_rodata()
1306 sec->rodata = true; in mark_rodata()
1504 WARN_FUNC("undefined stack state", insn->sec, insn->offset); in update_insn_state()
1642 insn->sec, insn->offset); in update_insn_state()
1653 insn->sec, insn->offset); in update_insn_state()
1730 insn->sec, insn->offset); in update_insn_state()
1811 insn->sec, insn->offset); in update_insn_state()
1830 insn->sec, insn->offset); in update_insn_state()
1843 insn->sec, insn->offset); in update_insn_state()
1857 insn->sec, insn->offset, in insn_state_match()
1868 insn->sec, insn->offset, in insn_state_match()
1876 insn->sec, insn->offset, state1->type, state2->type); in insn_state_match()
1882 insn->sec, insn->offset, in insn_state_match()
1912 insn->sec, insn->offset, call_dest_name(insn)); in validate_call()
1918 insn->sec, insn->offset, call_dest_name(insn)); in validate_call()
1929 insn->sec, insn->offset); in validate_sibling_call()
1947 struct section *sec; in validate_branch() local
1952 sec = insn->sec; in validate_branch()
1956 sec, insn->offset); in validate_branch()
1971 sec, insn->offset); in validate_branch()
1999 sec, insn->offset); in validate_branch()
2015 sec, insn->offset); in validate_branch()
2052 WARN_FUNC("return with UACCESS enabled", sec, insn->offset); in validate_branch()
2057 WARN_FUNC("return with UACCESS disabled from a UACCESS-safe function", sec, insn->offset); in validate_branch()
2062 WARN_FUNC("return with DF set", sec, insn->offset); in validate_branch()
2068 sec, insn->offset); in validate_branch()
2089 sec, insn->offset); in validate_branch()
2136 sec, insn->offset); in validate_branch()
2149 WARN_FUNC("PUSHF stack exhausted", sec, insn->offset); in validate_branch()
2169 WARN_FUNC("recursive UACCESS enable", sec, insn->offset); in validate_branch()
2178 WARN_FUNC("redundant UACCESS disable", sec, insn->offset); in validate_branch()
2183 WARN_FUNC("UACCESS-safe disables UACCESS", sec, insn->offset); in validate_branch()
2192 WARN_FUNC("recursive STD", sec, insn->offset); in validate_branch()
2199 WARN_FUNC("redundant CLD", sec, insn->offset); in validate_branch()
2214 WARN("%s: unexpected end of section", sec->name); in validate_branch()
2266 if (!strcmp(insn->sec->name, ".init.text") && !module) in validate_retpoline()
2270 insn->sec, insn->offset, in validate_retpoline()
2306 if (!strcmp(insn->sec->name, ".fixup") || in ignore_unreachable_insn()
2307 !strcmp(insn->sec->name, ".altinstr_replacement") || in ignore_unreachable_insn()
2308 !strcmp(insn->sec->name, ".altinstr_aux")) in ignore_unreachable_insn()
2345 struct section *sec; in validate_functions() local
2358 for_each_sec(file, sec) { in validate_functions()
2359 list_for_each_entry(func, &sec->symbol_list, list) { in validate_functions()
2372 insn = find_insn(file, sec, func->offset); in validate_functions()
2399 WARN_FUNC("unreachable instruction", insn->sec, insn->offset); in validate_reachable_instructions()