objtool: Move noreturn function list to separate file
This makes it a little cleaner and easier to maintain. Suggested-by: Peter Zijlstra <peterz@infradead.org> Reviewed-by: Miroslav Benes <mbenes@suse.cz> Link: https://lore.kernel.org/r/cecacf07a69a244c74474c18b7652627de67a528.1681853186.git.jpoimboe@kernel.org Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
This commit is contained in:
parent
d59fec29b1
commit
6245ce4ab6
@ -306,9 +306,8 @@ the objtool maintainers.
|
||||
3. file.o: warning: objtool: foo+0x48c: bar() is missing a __noreturn annotation
|
||||
|
||||
The call from foo() to bar() doesn't return, but bar() is missing the
|
||||
__noreturn annotation. NOTE: In addition to adding the __noreturn
|
||||
annotation, the function name also needs to be added to
|
||||
'global_noreturns' in tools/objtool/check.c.
|
||||
__noreturn annotation. NOTE: In addition to annotating the function
|
||||
with __noreturn, please also add it to tools/objtool/noreturns.h.
|
||||
|
||||
4. file.o: warning: objtool: func(): can't find starting instruction
|
||||
or
|
||||
|
@ -192,49 +192,11 @@ static bool __dead_end_function(struct objtool_file *file, struct symbol *func,
|
||||
struct instruction *insn;
|
||||
bool empty = true;
|
||||
|
||||
/*
|
||||
* Unfortunately these have to be hard coded because the noreturn
|
||||
* attribute isn't provided in ELF data. Keep 'em sorted.
|
||||
*/
|
||||
#define NORETURN(func) __stringify(func),
|
||||
static const char * const global_noreturns[] = {
|
||||
"__invalid_creds",
|
||||
"__module_put_and_kthread_exit",
|
||||
"__reiserfs_panic",
|
||||
"__stack_chk_fail",
|
||||
"__ubsan_handle_builtin_unreachable",
|
||||
"arch_call_rest_init",
|
||||
"arch_cpu_idle_dead",
|
||||
"btrfs_assertfail",
|
||||
"cpu_bringup_and_idle",
|
||||
"cpu_startup_entry",
|
||||
"do_exit",
|
||||
"do_group_exit",
|
||||
"do_task_dead",
|
||||
"ex_handler_msr_mce",
|
||||
"fortify_panic",
|
||||
"hlt_play_dead",
|
||||
"hv_ghcb_terminate",
|
||||
"kthread_complete_and_exit",
|
||||
"kthread_exit",
|
||||
"kunit_try_catch_throw",
|
||||
"machine_real_restart",
|
||||
"make_task_dead",
|
||||
"mpt_halt_firmware",
|
||||
"nmi_panic_self_stop",
|
||||
"panic",
|
||||
"panic_smp_self_stop",
|
||||
"rest_init",
|
||||
"rewind_stack_and_make_dead",
|
||||
"sev_es_terminate",
|
||||
"snp_abort",
|
||||
"start_kernel",
|
||||
"stop_this_cpu",
|
||||
"usercopy_abort",
|
||||
"x86_64_start_kernel",
|
||||
"x86_64_start_reservations",
|
||||
"xen_cpu_bringup_again",
|
||||
"xen_start_kernel",
|
||||
#include "noreturns.h"
|
||||
};
|
||||
#undef NORETURN
|
||||
|
||||
if (!func)
|
||||
return false;
|
||||
|
45
tools/objtool/noreturns.h
Normal file
45
tools/objtool/noreturns.h
Normal file
@ -0,0 +1,45 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
|
||||
/*
|
||||
* This is a (sorted!) list of all known __noreturn functions in the kernel.
|
||||
* It's needed for objtool to properly reverse-engineer the control flow graph.
|
||||
*
|
||||
* Yes, this is unfortunate. A better solution is in the works.
|
||||
*/
|
||||
NORETURN(__invalid_creds)
|
||||
NORETURN(__module_put_and_kthread_exit)
|
||||
NORETURN(__reiserfs_panic)
|
||||
NORETURN(__stack_chk_fail)
|
||||
NORETURN(__ubsan_handle_builtin_unreachable)
|
||||
NORETURN(arch_call_rest_init)
|
||||
NORETURN(arch_cpu_idle_dead)
|
||||
NORETURN(btrfs_assertfail)
|
||||
NORETURN(cpu_bringup_and_idle)
|
||||
NORETURN(cpu_startup_entry)
|
||||
NORETURN(do_exit)
|
||||
NORETURN(do_group_exit)
|
||||
NORETURN(do_task_dead)
|
||||
NORETURN(ex_handler_msr_mce)
|
||||
NORETURN(fortify_panic)
|
||||
NORETURN(hlt_play_dead)
|
||||
NORETURN(hv_ghcb_terminate)
|
||||
NORETURN(kthread_complete_and_exit)
|
||||
NORETURN(kthread_exit)
|
||||
NORETURN(kunit_try_catch_throw)
|
||||
NORETURN(machine_real_restart)
|
||||
NORETURN(make_task_dead)
|
||||
NORETURN(mpt_halt_firmware)
|
||||
NORETURN(nmi_panic_self_stop)
|
||||
NORETURN(panic)
|
||||
NORETURN(panic_smp_self_stop)
|
||||
NORETURN(rest_init)
|
||||
NORETURN(rewind_stack_and_make_dead)
|
||||
NORETURN(sev_es_terminate)
|
||||
NORETURN(snp_abort)
|
||||
NORETURN(start_kernel)
|
||||
NORETURN(stop_this_cpu)
|
||||
NORETURN(usercopy_abort)
|
||||
NORETURN(x86_64_start_kernel)
|
||||
NORETURN(x86_64_start_reservations)
|
||||
NORETURN(xen_cpu_bringup_again)
|
||||
NORETURN(xen_start_kernel)
|
Loading…
Reference in New Issue
Block a user