![Nick Piggin](/assets/img/avatar_default.png)
Get UML to use the generic bug support rather than arch specific one. If I insert an artificial bug right before loading init, I get this: Kernel panic - not syncing: Kernel mode signal 4 EIP: 0023:[<0819d501>] CPU: 0 Not tainted ESP: 002b:f7fd4fbc EFLAGS: 00000246 Not tainted EAX: 00000000 EBX: 00007870 ECX: 00000013 EDX: 00007870 ESI: 0000786d EDI: 00000011 EBP: f7fd4fd8 DS: 002b ES: 002b 08273bec: [<0806e814>] show_regs+0x104/0x106 08273c08: [<08058927>] panic_exit+0x2c/0x4b 08273c18: [<08080ee7>] notifier_call_chain+0x32/0x5b 08273c38: [<08080fbd>] __atomic_notifier_call_chain+0x30/0x32 08273c54: [<08080fee>] atomic_notifier_call_chain+0x2f/0x31 08273c70: [<08073b88>] panic+0x75/0x131 08273c94: [<080586c7>] relay_signal+0x87/0x95 08273cb0: [<0806b9ee>] sig_handler_common_skas+0x9e/0x120 08273cd8: [<08067738>] sig_handler+0x28/0x4f 08273cec: [<0806792e>] handle_signal+0x53/0x89 08273d0c: [<08069f60>] hard_handler+0x18/0x28 08273d1c: [<ffffe500>] transitions+0xf7d598b8/0xfffffff0 With this patch in place, this is how it looks: BUG: failure at init/main.c:779/init_post()! Kernel panic - not syncing: BUG! EIP: 0023:[<081a65d1>] CPU: 0 Not tainted ESP: 002b:f7f0dfbc EFLAGS: 00000246 Not tainted EAX: 00000000 EBX: 000069db ECX: 00000013 EDX: 000069db ESI: 000069d8 EDI: 00000011 EBP: f7f0dfd8 DS: 002b ES: 002b 098efedc: [<0806e9a4>] show_regs+0x104/0x106 098efef8: [<080589c7>] panic_exit+0x2c/0x4b 098eff08: [<080818d7>] notifier_call_chain+0x32/0x5b 098eff28: [<080819ad>] __atomic_notifier_call_chain+0x30/0x32 098eff44: [<080819de>] atomic_notifier_call_chain+0x2f/0x31 098eff60: [<08073f28>] panic+0x75/0x131 098eff84: [<080541d5>] init_post+0xcd/0xe8 098eff9c: [<08048ad4>] kernel_init+0x8e/0x9a 098effb4: [<08066dee>] run_kernel_thread+0x41/0x53 098effe0: [<08058e75>] new_thread_handler+0x62/0x8b 098efffc: [<a55a5a5a>] 0xa55a5a5a [ jdike - added BUG_TABLE to linker script ] Signed-off-by: Nick Piggin <npiggin@suse.de> Signed-off-by: Jeff Dike <jdike@linux.intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
101 lines
2.1 KiB
ArmAsm
101 lines
2.1 KiB
ArmAsm
#include <asm-generic/vmlinux.lds.h>
|
|
|
|
.fini : { *(.fini) } =0x9090
|
|
_etext = .;
|
|
PROVIDE (etext = .);
|
|
|
|
. = ALIGN(4096);
|
|
_sdata = .;
|
|
PROVIDE (sdata = .);
|
|
|
|
RODATA
|
|
|
|
.unprotected : { *(.unprotected) }
|
|
. = ALIGN(4096);
|
|
PROVIDE (_unprotected_end = .);
|
|
|
|
. = ALIGN(4096);
|
|
.note : { *(.note.*) }
|
|
__start___ex_table = .;
|
|
__ex_table : { *(__ex_table) }
|
|
__stop___ex_table = .;
|
|
|
|
BUG_TABLE
|
|
|
|
__uml_setup_start = .;
|
|
.uml.setup.init : { *(.uml.setup.init) }
|
|
__uml_setup_end = .;
|
|
|
|
__uml_help_start = .;
|
|
.uml.help.init : { *(.uml.help.init) }
|
|
__uml_help_end = .;
|
|
|
|
__uml_postsetup_start = .;
|
|
.uml.postsetup.init : { *(.uml.postsetup.init) }
|
|
__uml_postsetup_end = .;
|
|
|
|
__setup_start = .;
|
|
.init.setup : { *(.init.setup) }
|
|
__setup_end = .;
|
|
|
|
. = ALIGN(32);
|
|
__per_cpu_start = . ;
|
|
.data.percpu : { *(.data.percpu) }
|
|
__per_cpu_end = . ;
|
|
|
|
__initcall_start = .;
|
|
.initcall.init : {
|
|
INITCALLS
|
|
}
|
|
__initcall_end = .;
|
|
|
|
__con_initcall_start = .;
|
|
.con_initcall.init : { *(.con_initcall.init) }
|
|
__con_initcall_end = .;
|
|
|
|
__uml_initcall_start = .;
|
|
.uml.initcall.init : { *(.uml.initcall.init) }
|
|
__uml_initcall_end = .;
|
|
__init_end = .;
|
|
|
|
SECURITY_INIT
|
|
|
|
__exitcall_begin = .;
|
|
.exitcall : { *(.exitcall.exit) }
|
|
__exitcall_end = .;
|
|
|
|
__uml_exitcall_begin = .;
|
|
.uml.exitcall : { *(.uml.exitcall.exit) }
|
|
__uml_exitcall_end = .;
|
|
|
|
. = ALIGN(4);
|
|
__alt_instructions = .;
|
|
.altinstructions : { *(.altinstructions) }
|
|
__alt_instructions_end = .;
|
|
.altinstr_replacement : { *(.altinstr_replacement) }
|
|
/* .exit.text is discard at runtime, not link time, to deal with references
|
|
from .altinstructions and .eh_frame */
|
|
.exit.text : { *(.exit.text) }
|
|
.exit.data : { *(.exit.data) }
|
|
|
|
__preinit_array_start = .;
|
|
.preinit_array : { *(.preinit_array) }
|
|
__preinit_array_end = .;
|
|
__init_array_start = .;
|
|
.init_array : { *(.init_array) }
|
|
__init_array_end = .;
|
|
__fini_array_start = .;
|
|
.fini_array : { *(.fini_array) }
|
|
__fini_array_end = .;
|
|
|
|
. = ALIGN(4096);
|
|
__initramfs_start = .;
|
|
.init.ramfs : { *(.init.ramfs) }
|
|
__initramfs_end = .;
|
|
|
|
/* Sections to be discarded */
|
|
/DISCARD/ : {
|
|
*(.exitcall.exit)
|
|
}
|
|
|