[PATCH] signals causing coredumps

Andries.Brouwer@cwi.nl
Sat, 13 Nov 1999 17:41:40 +0100 (MET)


The Single Unix Spec v2 specifies for 10 signals that they terminate
the process and cause a coredump.
(Or, to quote more carefully: "Implementation-defined abnormal
termination actions, such as creation of a core file, may occur".)

These 10 signals are

SIGABRT, SIGFPE, SIGILL, SIGQUIT, SIGSEGV, SIGTRAP,
SIGBUS, SIGSYS, SIGXCPU, SIGXFSZ.

Now presently we have in arch/i386/kernel/signal.c:

case SIGQUIT: case SIGILL: case SIGTRAP:
case SIGABRT: case SIGFPE: case SIGSEGV:
if (do_coredump(signr, regs))
exit_code |= 0x80;

and in arch/sparc/kernel/signal.c:

case SIGQUIT: case SIGILL: case SIGTRAP:
case SIGABRT: case SIGFPE: case SIGSEGV: case SIGBUS:
if (do_coredump(signr, regs))
exit_code |= 0x80;

So, it seems that SIGBUS, SIGSYS, SIGXCPU, SIGXFSZ should be
added here for all architectures where these are defined.

But the specification also says:

"The following signals are defined on all implementations."

so, even though the signals need not do anything special,
they should at least exist. However, SIGSYS is defined only
on mips/alpha/sparc* but not on i386 etc.

The patch below adds the definition of SIGSYS (made synonym of
SIGUNUSED in cases where it was unused so far - probably
SIGUNUSED has to disappear, but I don't know whether anyone
uses it :-)) and adds cases for coredump.

Andries

================================================================
diff -u --recursive --new-file ../linux-2.3.27/linux/arch/alpha/kernel/signal.c ./linux/arch/alpha/kernel/signal.c
--- ../linux-2.3.27/linux/arch/alpha/kernel/signal.c Thu Jul 22 18:47:55 1999
+++ ./linux/arch/alpha/kernel/signal.c Sat Nov 13 17:30:41 1999
@@ -688,6 +688,7 @@

case SIGQUIT: case SIGILL: case SIGTRAP:
case SIGABRT: case SIGFPE: case SIGSEGV:
+ case SIGBUS: case SIGSYS: case SIGXCPU: case SIGXFSZ:
if (do_coredump(signr, regs))
exit_code |= 0x80;
/* FALLTHRU */
diff -u --recursive --new-file ../linux-2.3.27/linux/arch/arm/kernel/signal.c ./linux/arch/arm/kernel/signal.c
--- ../linux-2.3.27/linux/arch/arm/kernel/signal.c Sat Oct 23 18:43:00 1999
+++ ./linux/arch/arm/kernel/signal.c Sat Nov 13 17:31:16 1999
@@ -545,6 +545,7 @@

case SIGQUIT: case SIGILL: case SIGTRAP:
case SIGABRT: case SIGFPE: case SIGSEGV:
+ case SIGBUS: case SIGSYS: case SIGXCPU: case SIGXFSZ:
if (do_coredump(signr, regs))
exit_code |= 0x80;
/* FALLTHRU */
diff -u --recursive --new-file ../linux-2.3.27/linux/arch/i386/kernel/signal.c ./linux/arch/i386/kernel/signal.c
--- ../linux-2.3.27/linux/arch/i386/kernel/signal.c Thu Jul 22 18:47:55 1999
+++ ./linux/arch/i386/kernel/signal.c Sat Nov 13 17:31:40 1999
@@ -687,6 +687,7 @@

case SIGQUIT: case SIGILL: case SIGTRAP:
case SIGABRT: case SIGFPE: case SIGSEGV:
+ case SIGBUS: case SIGSYS: case SIGXCPU: case SIGXFSZ:
if (do_coredump(signr, regs))
exit_code |= 0x80;
/* FALLTHRU */
diff -u --recursive --new-file ../linux-2.3.27/linux/arch/m68k/kernel/signal.c ./linux/arch/m68k/kernel/signal.c
--- ../linux-2.3.27/linux/arch/m68k/kernel/signal.c Sun Aug 15 20:47:29 1999
+++ ./linux/arch/m68k/kernel/signal.c Sat Nov 13 17:31:56 1999
@@ -1093,6 +1093,7 @@

case SIGQUIT: case SIGILL: case SIGTRAP:
case SIGIOT: case SIGFPE: case SIGSEGV:
+ case SIGBUS: case SIGSYS: case SIGXCPU: case SIGXFSZ:
if (do_coredump(signr, regs))
exit_code |= 0x80;
/* FALLTHRU */
diff -u --recursive --new-file ../linux-2.3.27/linux/arch/mips/kernel/signal.c ./linux/arch/mips/kernel/signal.c
--- ../linux-2.3.27/linux/arch/mips/kernel/signal.c Thu Jul 22 18:47:55 1999
+++ ./linux/arch/mips/kernel/signal.c Sat Nov 13 17:32:09 1999
@@ -492,7 +492,7 @@

case SIGQUIT: case SIGILL: case SIGTRAP:
case SIGABRT: case SIGFPE: case SIGSEGV:
- case SIGBUS:
+ case SIGBUS: case SIGSYS: case SIGXCPU: case SIGXFSZ:
if (do_coredump(signr, regs))
exit_code |= 0x80;
/* FALLTHRU */
diff -u --recursive --new-file ../linux-2.3.27/linux/arch/ppc/kernel/signal.c ./linux/arch/ppc/kernel/signal.c
--- ../linux-2.3.27/linux/arch/ppc/kernel/signal.c Tue Oct 12 23:33:02 1999
+++ ./linux/arch/ppc/kernel/signal.c Sat Nov 13 17:32:23 1999
@@ -444,6 +444,7 @@

case SIGQUIT: case SIGILL: case SIGTRAP:
case SIGABRT: case SIGFPE: case SIGSEGV:
+ case SIGBUS: case SIGSYS: case SIGXCPU: case SIGXFSZ:
if (do_coredump(signr, regs))
exit_code |= 0x80;
/* FALLTHRU */
diff -u --recursive --new-file ../linux-2.3.27/linux/arch/sh/kernel/signal.c ./linux/arch/sh/kernel/signal.c
--- ../linux-2.3.27/linux/arch/sh/kernel/signal.c Sat Oct 23 18:43:01 1999
+++ ./linux/arch/sh/kernel/signal.c Sat Nov 13 17:32:37 1999
@@ -566,6 +566,7 @@

case SIGQUIT: case SIGILL: case SIGTRAP:
case SIGABRT: case SIGFPE: case SIGSEGV:
+ case SIGBUS: case SIGSYS: case SIGXCPU: case SIGXFSZ:
if (do_coredump(signr, regs))
exit_code |= 0x80;
/* FALLTHRU */
diff -u --recursive --new-file ../linux-2.3.27/linux/arch/sparc/kernel/signal.c ./linux/arch/sparc/kernel/signal.c
--- ../linux-2.3.27/linux/arch/sparc/kernel/signal.c Thu Nov 11 14:09:50 1999
+++ ./linux/arch/sparc/kernel/signal.c Sat Nov 13 17:33:04 1999
@@ -1162,7 +1162,8 @@
continue;

case SIGQUIT: case SIGILL: case SIGTRAP:
- case SIGABRT: case SIGFPE: case SIGSEGV: case SIGBUS:
+ case SIGABRT: case SIGFPE: case SIGSEGV:
+ case SIGBUS: case SIGSYS: case SIGXCPU: case SIGXFSZ:
if (do_coredump(signr, regs))
exit_code |= 0x80;
#ifdef DEBUG_SIGNALS
diff -u --recursive --new-file ../linux-2.3.27/linux/arch/sparc64/kernel/signal.c ./linux/arch/sparc64/kernel/signal.c
--- ../linux-2.3.27/linux/arch/sparc64/kernel/signal.c Thu Nov 11 14:09:50 1999
+++ ./linux/arch/sparc64/kernel/signal.c Sat Nov 13 17:33:19 1999
@@ -726,7 +726,8 @@
continue;

case SIGQUIT: case SIGILL: case SIGTRAP:
- case SIGABRT: case SIGFPE: case SIGSEGV: case SIGBUS:
+ case SIGABRT: case SIGFPE: case SIGSEGV:
+ case SIGBUS: case SIGSYS: case SIGXCPU: case SIGXFSZ:
if (do_coredump(signr, regs))
exit_code |= 0x80;
#ifdef DEBUG_SIGNALS
diff -u --recursive --new-file ../linux-2.3.27/linux/include/asm-arm/signal.h ./linux/include/asm-arm/signal.h
--- ../linux-2.3.27/linux/include/asm-arm/signal.h Fri Jan 8 00:51:33 1999
+++ ./linux/include/asm-arm/signal.h Sat Nov 13 17:23:48 1999
@@ -63,6 +63,7 @@
#define SIGLOST 29
*/
#define SIGPWR 30
+#define SIGSYS 31
#define SIGUNUSED 31

/* These should not be considered constants from userland. */
diff -u --recursive --new-file ../linux-2.3.27/linux/include/asm-i386/signal.h ./linux/include/asm-i386/signal.h
--- ../linux-2.3.27/linux/include/asm-i386/signal.h Wed Jul 28 21:55:50 1999
+++ ./linux/include/asm-i386/signal.h Sat Nov 13 17:25:12 1999
@@ -63,6 +63,7 @@
#define SIGLOST 29
*/
#define SIGPWR 30
+#define SIGSYS 31
#define SIGUNUSED 31

/* These should not be considered constants from userland. */
diff -u --recursive --new-file ../linux-2.3.27/linux/include/asm-m68k/signal.h ./linux/include/asm-m68k/signal.h
--- ../linux-2.3.27/linux/include/asm-m68k/signal.h Thu Jul 30 20:08:20 1998
+++ ./linux/include/asm-m68k/signal.h Sat Nov 13 17:25:39 1999
@@ -63,6 +63,7 @@
#define SIGLOST 29
*/
#define SIGPWR 30
+#define SIGSYS 31
#define SIGUNUSED 31

/* These should not be considered constants from userland. */
diff -u --recursive --new-file ../linux-2.3.27/linux/include/asm-ppc/signal.h ./linux/include/asm-ppc/signal.h
--- ../linux-2.3.27/linux/include/asm-ppc/signal.h Wed Aug 5 01:06:36 1998
+++ ./linux/include/asm-ppc/signal.h Sat Nov 13 17:26:30 1999
@@ -54,6 +54,7 @@
#define SIGLOST 29
*/
#define SIGPWR 30
+#define SIGSYS 31
#define SIGUNUSED 31

/* These should not be considered constants from userland. */
diff -u --recursive --new-file ../linux-2.3.27/linux/include/asm-sh/signal.h ./linux/include/asm-sh/signal.h
--- ../linux-2.3.27/linux/include/asm-sh/signal.h Sat Oct 23 18:43:08 1999
+++ ./linux/include/asm-sh/signal.h Sat Nov 13 17:26:53 1999
@@ -51,6 +51,7 @@
#define SIGLOST 29
*/
#define SIGPWR 30
+#define SIGSYS 31
#define SIGUNUSED 31

/* These should not be considered constants from userland. */

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/