• Home
  • Raw
  • Download

Lines Matching refs:func

68 	struct symbol *func = insn_func(insn);  in next_insn_same_func()  local
70 if (!func) in next_insn_same_func()
73 if (next && insn_func(next) == func) in next_insn_same_func()
77 if (func == func->cfunc) in next_insn_same_func()
81 return find_insn(file, func->cfunc->sec, func->cfunc->offset); in next_insn_same_func()
113 #define func_for_each_insn(file, func, insn) \ argument
114 for (insn = find_insn(file, func->sec, func->offset); \
197 static bool is_rust_noreturn(const struct symbol *func) in is_rust_noreturn() argument
202 if (strncmp(func->name, "_R", 2)) in is_rust_noreturn()
211 return str_ends_with(func->name, "_4core5sliceSp15copy_from_slice17len_mismatch_fail") || in is_rust_noreturn()
212 str_ends_with(func->name, "_4core6option13unwrap_failed") || in is_rust_noreturn()
213 str_ends_with(func->name, "_4core6result13unwrap_failed") || in is_rust_noreturn()
214 str_ends_with(func->name, "_4core9panicking5panic") || in is_rust_noreturn()
215 str_ends_with(func->name, "_4core9panicking9panic_fmt") || in is_rust_noreturn()
216 str_ends_with(func->name, "_4core9panicking14panic_explicit") || in is_rust_noreturn()
217 str_ends_with(func->name, "_4core9panicking14panic_nounwind") || in is_rust_noreturn()
218 str_ends_with(func->name, "_4core9panicking18panic_bounds_check") || in is_rust_noreturn()
219 str_ends_with(func->name, "_4core9panicking18panic_nounwind_fmt") || in is_rust_noreturn()
220 str_ends_with(func->name, "_4core9panicking19assert_failed_inner") || in is_rust_noreturn()
221 str_ends_with(func->name, "_4core9panicking30panic_null_pointer_dereference") || in is_rust_noreturn()
222 str_ends_with(func->name, "_4core9panicking36panic_misaligned_pointer_dereference") || in is_rust_noreturn()
223 str_ends_with(func->name, "_7___rustc17rust_begin_unwind") || in is_rust_noreturn()
224 strstr(func->name, "_4core9panicking13assert_failed") || in is_rust_noreturn()
225 strstr(func->name, "_4core9panicking11panic_const24panic_const_") || in is_rust_noreturn()
226 (strstr(func->name, "_4core5slice5index") && in is_rust_noreturn()
227 strstr(func->name, "slice_") && in is_rust_noreturn()
228 str_ends_with(func->name, "_fail")); in is_rust_noreturn()
240 static bool __dead_end_function(struct objtool_file *file, struct symbol *func, in __dead_end_function() argument
247 #define NORETURN(func) __stringify(func), in __dead_end_function() argument
253 if (!func) in __dead_end_function()
256 if (func->bind == STB_GLOBAL || func->bind == STB_WEAK) { in __dead_end_function()
257 if (is_rust_noreturn(func)) in __dead_end_function()
261 if (!strcmp(func->name, global_noreturns[i])) in __dead_end_function()
265 if (func->bind == STB_WEAK) in __dead_end_function()
268 if (!func->len) in __dead_end_function()
271 insn = find_insn(file, func->sec, func->offset); in __dead_end_function()
275 func_for_each_insn(file, func, insn) { in __dead_end_function()
290 func_for_each_insn(file, func, insn) { in __dead_end_function()
315 static bool dead_end_function(struct objtool_file *file, struct symbol *func) in dead_end_function() argument
317 return __dead_end_function(file, func, 0); in dead_end_function()
427 struct symbol *func; in decode_instructions() local
501 sec_for_each_sym(sec, func) { in decode_instructions()
502 if (func->type != STT_NOTYPE && func->type != STT_FUNC) in decode_instructions()
505 if (func->offset == sec->sh.sh_size) { in decode_instructions()
507 if (func->type == STT_NOTYPE) in decode_instructions()
510 func->name); in decode_instructions()
514 if (func->embedded_insn || func->alias != func) in decode_instructions()
517 if (!find_insn(file, sec, func->offset)) { in decode_instructions()
519 func->name); in decode_instructions()
523 sym_for_each_insn(file, func, insn) { in decode_instructions()
524 insn->sym = func; in decode_instructions()
525 if (func->type == STT_FUNC && in decode_instructions()
528 if (insn->offset == func->offset) { in decode_instructions()
550 struct symbol *sym, *func; in add_pv_ops() local
566 func = reloc->sym; in add_pv_ops()
567 if (func->type == STT_SECTION) in add_pv_ops()
568 func = find_symbol_by_offset(reloc->sym->sec, in add_pv_ops()
573 objtool_pv_add(file, idx, func); in add_pv_ops()
1044 struct symbol *func; in add_ignores() local
1054 func = reloc->sym; in add_ignores()
1058 func = find_func_by_offset(reloc->sym->sec, reloc_addend(reloc)); in add_ignores()
1059 if (!func) in add_ignores()
1069 func_for_each_insn(file, func, insn) in add_ignores()
1266 struct symbol *func; in add_uaccess_safe() local
1273 func = find_symbol_by_name(file->elf, *name); in add_uaccess_safe()
1274 if (!func) in add_uaccess_safe()
1277 func->uaccess_safe = true; in add_uaccess_safe()
1576 struct symbol *func = insn_func(insn); in add_jump_destinations() local
1601 } else if (func) { in add_jump_destinations()
1638 if (file->ignore_unreachables && func && in add_jump_destinations()
1640 dest_off == func->offset + func->len) in add_jump_destinations()
1667 if (func && insn_func(jump_dest) && func != insn_func(jump_dest)) { in add_jump_destinations()
1684 if (!strstr(func->name, ".cold") && in add_jump_destinations()
1686 func->cfunc = insn_func(jump_dest); in add_jump_destinations()
1687 insn_func(jump_dest)->pfunc = func; in add_jump_destinations()
2123 struct symbol *func, in find_jump_table() argument
2135 insn && insn_func(insn) && insn_func(insn)->pfunc == func; in find_jump_table()
2152 if (!dest_insn || !insn_func(dest_insn) || insn_func(dest_insn)->pfunc != func) in find_jump_table()
2166 struct symbol *func) in mark_func_jump_tables() argument
2171 func_for_each_insn(file, func, insn) { in mark_func_jump_tables()
2192 reloc = find_jump_table(file, func, insn); in mark_func_jump_tables()
2199 struct symbol *func) in add_func_jump_tables() argument
2204 func_for_each_insn(file, func, insn) { in add_func_jump_tables()
2235 struct symbol *func; in add_jump_table_alts() local
2241 for_each_sym(file, func) { in add_jump_table_alts()
2242 if (func->type != STT_FUNC) in add_jump_table_alts()
2245 mark_func_jump_tables(file, func); in add_jump_table_alts()
2246 ret = add_func_jump_tables(file, func); in add_jump_table_alts()
2575 struct symbol *func; in classify_symbols() local
2577 for_each_sym(file, func) { in classify_symbols()
2578 if (func->type == STT_NOTYPE && strstarts(func->name, ".L")) in classify_symbols()
2579 func->local_label = true; in classify_symbols()
2581 if (func->bind != STB_GLOBAL) in classify_symbols()
2584 if (!strncmp(func->name, STATIC_CALL_TRAMP_PREFIX_STR, in classify_symbols()
2586 func->static_call_tramp = true; in classify_symbols()
2588 if (arch_is_retpoline(func)) in classify_symbols()
2589 func->retpoline_thunk = true; in classify_symbols()
2591 if (arch_is_rethunk(func)) in classify_symbols()
2592 func->return_thunk = true; in classify_symbols()
2594 if (arch_is_embedded_insn(func)) in classify_symbols()
2595 func->embedded_insn = true; in classify_symbols()
2597 if (arch_ftrace_match(func->name)) in classify_symbols()
2598 func->fentry = true; in classify_symbols()
2600 if (is_profiling_func(func->name)) in classify_symbols()
2601 func->profiling_func = true; in classify_symbols()
3432 static inline bool func_uaccess_safe(struct symbol *func) in func_uaccess_safe() argument
3434 if (func) in func_uaccess_safe()
3435 return func->uaccess_safe; in func_uaccess_safe()
3488 struct symbol *func) in noinstr_call_dest() argument
3494 if (!func) { in noinstr_call_dest()
3504 if (func->sec->noinstr) in noinstr_call_dest()
3510 if (func->static_call_tramp) in noinstr_call_dest()
3518 if (!strncmp(func->name, "__ubsan_handle_", 15)) in noinstr_call_dest()
3559 static int validate_return(struct symbol *func, struct instruction *insn, struct insn_state *state) in validate_return() argument
3566 if (state->uaccess && !func_uaccess_safe(func)) { in validate_return()
3571 if (!state->uaccess && func_uaccess_safe(func)) { in validate_return()
3581 if (func && has_modified_stack_frame(insn, state)) { in validate_return()
3633 static int validate_branch(struct objtool_file *file, struct symbol *func, in validate_branch() argument
3647 if (func && insn_func(insn) && func != insn_func(insn)->pfunc) { in validate_branch()
3649 if (!strncmp(func->name, "__cfi_", 6) || in validate_branch()
3650 !strncmp(func->name, "__pfx_", 6)) in validate_branch()
3657 func->name, insn_func(insn)->name); in validate_branch()
3661 if (func && insn->ignore) { in validate_branch()
3687 sym_for_each_insn_continue_reverse(file, func, i) { in validate_branch()
3744 ret = validate_branch(file, func, alt->insn, state); in validate_branch()
3761 return validate_return(func, insn, &state); in validate_branch()
3769 if (opts.stackval && func && !is_special_call(insn) && in validate_branch()
3788 ret = validate_branch(file, func, in validate_branch()
3815 if (func) { in validate_branch()
3840 if (!state.uaccess && func) { in validate_branch()
3845 if (func_uaccess_safe(func) && !state.uaccess_stack) { in validate_branch()
3863 if (!state.df && func) { in validate_branch()
4229 static int add_prefix_symbol(struct objtool_file *file, struct symbol *func) in add_prefix_symbol() argument
4234 insn = find_insn(file, func->sec, func->offset); in add_prefix_symbol()
4246 offset = func->offset - prev->offset; in add_prefix_symbol()
4254 elf_create_prefix_symbol(file->elf, func, opts.prefix); in add_prefix_symbol()
4280 struct symbol *func; in add_prefix_symbols() local
4286 sec_for_each_sym(sec, func) { in add_prefix_symbols()
4287 if (func->type != STT_FUNC) in add_prefix_symbols()
4290 add_prefix_symbol(file, func); in add_prefix_symbols()
4327 struct symbol *func; in validate_section() local
4330 sec_for_each_sym(sec, func) { in validate_section()
4331 if (func->type != STT_FUNC) in validate_section()
4337 warnings += validate_symbol(file, sec, func, &state); in validate_section()