summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorJeff Dike <jdike@addtoit.com>2007-05-06 14:51:39 -0700
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-05-07 12:13:03 -0700
commit63843c265fd0e0c7894f713e0db5777560e756ae (patch)
tree020eb5c523857f2485fd1ca4968245f7264a4cba /arch
parent990c55871b655156ffd7787af791be977d946ef6 (diff)
downloadlwn-63843c265fd0e0c7894f713e0db5777560e756ae.tar.gz
lwn-63843c265fd0e0c7894f713e0db5777560e756ae.zip
uml: dump core on panic
Dump core after a panic. This will provide better debugging information than is currently available. Signed-off-by: Jeff Dike <jdike@linux.intel.com> Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/um/include/os.h1
-rw-r--r--arch/um/kernel/um_arch.c2
-rw-r--r--arch/um/os-Linux/util.c6
3 files changed, 8 insertions, 1 deletions
diff --git a/arch/um/include/os.h b/arch/um/include/os.h
index b463170a5308..901804db3c35 100644
--- a/arch/um/include/os.h
+++ b/arch/um/include/os.h
@@ -279,6 +279,7 @@ extern int raw(int fd);
extern void setup_machinename(char *machine_out);
extern void setup_hostinfo(char *buf, int len);
extern int setjmp_wrapper(void (*proc)(void *, void *), ...);
+extern void os_dump_core(void);
/* time.c */
#define BILLION (1000 * 1000 * 1000)
diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c
index 9bf31533a8fd..1cf954a47fd7 100644
--- a/arch/um/kernel/um_arch.c
+++ b/arch/um/kernel/um_arch.c
@@ -474,7 +474,7 @@ static int panic_exit(struct notifier_block *self, unsigned long unused1,
show_regs(&(current->thread.regs));
bust_spinlocks(0);
uml_exitcode = 1;
- machine_halt();
+ os_dump_core();
return 0;
}
diff --git a/arch/um/os-Linux/util.c b/arch/um/os-Linux/util.c
index 48bc4927b996..c307a89ed259 100644
--- a/arch/um/os-Linux/util.c
+++ b/arch/um/os-Linux/util.c
@@ -119,3 +119,9 @@ int setjmp_wrapper(void (*proc)(void *, void *), ...)
va_end(args);
return n;
}
+
+void os_dump_core(void)
+{
+ signal(SIGSEGV, SIG_DFL);
+ abort();
+}