Separate out ANSI-standard signals
authorGary Benson <gbenson@redhat.com>
Mon, 9 Jun 2014 09:34:33 +0000 (10:34 +0100)
committerGary Benson <gbenson@redhat.com>
Mon, 9 Jun 2014 09:34:33 +0000 (10:34 +0100)
This commit reorders various pieces of code to separate ANSI-standard
signals from other signals that need checking.  Comments are added to
document this, and to document the ordering of the signals.

gdb/
2014-06-09  Gary Benson  <gbenson@redhat.com>

* common/signals.c (gdb_signal_from_host): Reorder to separate
the always-available ANSI-standard signals from the signals that
require checking.
(do_gdb_signal_to_host): Likewise.
* proc-events.c (signal_table): Likewise.

gdb/testsuite/
2014-06-09  Gary Benson  <gbenson@redhat.com>

* gdb.base/sigall.c [Functions to send signals]: Reorder to
separate the always-available ANSI-standard signals from the
signals that require checking.
(main): Likewise.
* gdb.reverse/sigall-reverse.c [Functions to send signals]:
Likewise.
(main): Likewise.

gdb/ChangeLog
gdb/common/signals.c
gdb/proc-events.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/sigall.c
gdb/testsuite/gdb.reverse/sigall-reverse.c

index 79aded4bb2a6af941a723884f5f48712c8108d6a..efdf5b374ce586c79b0df84cc0368a59320daa1f 100644 (file)
@@ -1,3 +1,11 @@
+2014-06-09  Gary Benson  <gbenson@redhat.com>
+
+       * common/signals.c (gdb_signal_from_host): Reorder to separate
+       the always-available ANSI-standard signals from the signals that
+       require checking.
+       (do_gdb_signal_to_host): Likewise.
+       * proc-events.c (signal_table): Likewise.
+
 2014-06-08  Hui Zhu  <hui@codesourcery.com>
 
        * common/linux-ptrace.c (linux_disable_event_reporting): New
index ea0c19a0c2ab52496f7937c7a2b8d39829164de1..3c9cd41c571aa3912737cf01bc28813b6151955b 100644 (file)
@@ -121,36 +121,47 @@ gdb_signal_from_name (const char *name)
 enum gdb_signal
 gdb_signal_from_host (int hostsig)
 {
-  /* A switch statement would make sense but would require special kludges
-     to deal with the cases where more than one signal has the same number.  */
+  /* A switch statement would make sense but would require special
+     kludges to deal with the cases where more than one signal has the
+     same number.  Signals are ordered ANSI-standard signals first,
+     other signals second, with signals in each block ordered by their
+     numerical values on a typical POSIX platform.  */
 
   if (hostsig == 0)
     return GDB_SIGNAL_0;
 
+  /* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
+     are ANSI-standard signals and are always available.  */
+  if (hostsig == SIGINT)
+    return GDB_SIGNAL_INT;
+  if (hostsig == SIGILL)
+    return GDB_SIGNAL_ILL;
+  if (hostsig == SIGABRT)
+    return GDB_SIGNAL_ABRT;
+  if (hostsig == SIGFPE)
+    return GDB_SIGNAL_FPE;
+  if (hostsig == SIGSEGV)
+    return GDB_SIGNAL_SEGV;
+  if (hostsig == SIGTERM)
+    return GDB_SIGNAL_TERM;
+
+  /* All other signals need preprocessor conditionals.  */
 #if defined (SIGHUP)
   if (hostsig == SIGHUP)
     return GDB_SIGNAL_HUP;
 #endif
-  if (hostsig == SIGINT)
-    return GDB_SIGNAL_INT;
 #if defined (SIGQUIT)
   if (hostsig == SIGQUIT)
     return GDB_SIGNAL_QUIT;
 #endif
-  if (hostsig == SIGILL)
-    return GDB_SIGNAL_ILL;
 #if defined (SIGTRAP)
   if (hostsig == SIGTRAP)
     return GDB_SIGNAL_TRAP;
 #endif
-  if (hostsig == SIGABRT)
-    return GDB_SIGNAL_ABRT;
 #if defined (SIGEMT)
   if (hostsig == SIGEMT)
     return GDB_SIGNAL_EMT;
 #endif
-  if (hostsig == SIGFPE)
-    return GDB_SIGNAL_FPE;
 #if defined (SIGKILL)
   if (hostsig == SIGKILL)
     return GDB_SIGNAL_KILL;
@@ -159,8 +170,6 @@ gdb_signal_from_host (int hostsig)
   if (hostsig == SIGBUS)
     return GDB_SIGNAL_BUS;
 #endif
-  if (hostsig == SIGSEGV)
-    return GDB_SIGNAL_SEGV;
 #if defined (SIGSYS)
   if (hostsig == SIGSYS)
     return GDB_SIGNAL_SYS;
@@ -173,8 +182,6 @@ gdb_signal_from_host (int hostsig)
   if (hostsig == SIGALRM)
     return GDB_SIGNAL_ALRM;
 #endif
-  if (hostsig == SIGTERM)
-    return GDB_SIGNAL_TERM;
 #if defined (SIGUSR1)
   if (hostsig == SIGUSR1)
     return GDB_SIGNAL_USR1;
@@ -366,36 +373,48 @@ do_gdb_signal_to_host (enum gdb_signal oursig,
      do not support signals.  */
   (void) retsig;
 
+  /* Signals are ordered ANSI-standard signals first, other signals
+     second, with signals in each block ordered by their numerical
+     values on a typical POSIX platform.  */
+
   *oursig_ok = 1;
   switch (oursig)
     {
     case GDB_SIGNAL_0:
       return 0;
 
+      /* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
+        are ANSI-standard signals and are always available.  */
+    case GDB_SIGNAL_INT:
+      return SIGINT;
+    case GDB_SIGNAL_ILL:
+      return SIGILL;
+    case GDB_SIGNAL_ABRT:
+      return SIGABRT;
+    case GDB_SIGNAL_FPE:
+      return SIGFPE;
+    case GDB_SIGNAL_SEGV:
+      return SIGSEGV;
+    case GDB_SIGNAL_TERM:
+      return SIGTERM;
+
+      /* All other signals need preprocessor conditionals.  */
 #if defined (SIGHUP)
     case GDB_SIGNAL_HUP:
       return SIGHUP;
 #endif
-    case GDB_SIGNAL_INT:
-      return SIGINT;
 #if defined (SIGQUIT)
     case GDB_SIGNAL_QUIT:
       return SIGQUIT;
 #endif
-    case GDB_SIGNAL_ILL:
-      return SIGILL;
 #if defined (SIGTRAP)
     case GDB_SIGNAL_TRAP:
       return SIGTRAP;
 #endif
-    case GDB_SIGNAL_ABRT:
-      return SIGABRT;
 #if defined (SIGEMT)
     case GDB_SIGNAL_EMT:
       return SIGEMT;
 #endif
-    case GDB_SIGNAL_FPE:
-      return SIGFPE;
 #if defined (SIGKILL)
     case GDB_SIGNAL_KILL:
       return SIGKILL;
@@ -404,8 +423,6 @@ do_gdb_signal_to_host (enum gdb_signal oursig,
     case GDB_SIGNAL_BUS:
       return SIGBUS;
 #endif
-    case GDB_SIGNAL_SEGV:
-      return SIGSEGV;
 #if defined (SIGSYS)
     case GDB_SIGNAL_SYS:
       return SIGSYS;
@@ -418,8 +435,6 @@ do_gdb_signal_to_host (enum gdb_signal oursig,
     case GDB_SIGNAL_ALRM:
       return SIGALRM;
 #endif
-    case GDB_SIGNAL_TERM:
-      return SIGTERM;
 #if defined (SIGUSR1)
     case GDB_SIGNAL_USR1:
       return SIGUSR1;
index 9bd7b311f7f07ae0e4c0bd9cb70d027c3f3f6dd2..68f004f32d1d09e6af49201a17575c904925a545 100644 (file)
@@ -1396,37 +1396,47 @@ proc_prettyprint_syscalls (sysset_t *sysset, int verbose)
 \f
 /* Prettyprint signals.  */
 
-/* Signal translation table.  */
+/* Signal translation table, ordered ANSI-standard signals first,
+   other signals second, with signals in each block ordered by their
+   numerical values on a typical POSIX platform.  */
 
 static struct trans signal_table[] = 
 {
   { 0,      "<no signal>", "no signal" }, 
+
+  /* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
+     are ANSI-standard signals and are always available.  */
+
+  { SIGINT, "SIGINT", "Interrupt (rubout)" },
+  { SIGILL, "SIGILL", "Illegal instruction" }, /* not reset when caught */
+  { SIGABRT, "SIGABRT", "used by abort()" },   /* replaces SIGIOT */
+  { SIGFPE, "SIGFPE", "Floating point exception" },
+  { SIGSEGV, "SIGSEGV", "Segmentation violation" },
+  { SIGTERM, "SIGTERM", "Software termination signal from kill" },
+
+  /* All other signals need preprocessor conditionals.  */
+
 #ifdef SIGHUP
   { SIGHUP, "SIGHUP", "Hangup" },
 #endif
-  { SIGINT, "SIGINT", "Interrupt (rubout)" },
 #ifdef SIGQUIT
   { SIGQUIT, "SIGQUIT", "Quit (ASCII FS)" },
 #endif
-  { SIGILL, "SIGILL", "Illegal instruction" }, /* not reset when caught */
 #ifdef SIGTRAP
   { SIGTRAP, "SIGTRAP", "Trace trap" },                /* not reset when caught */
 #endif
-  { SIGABRT, "SIGABRT", "used by abort()" },   /* replaces SIGIOT */
 #ifdef SIGIOT
   { SIGIOT, "SIGIOT", "IOT instruction" },
 #endif
 #ifdef SIGEMT
   { SIGEMT, "SIGEMT", "EMT instruction" },
 #endif
-  { SIGFPE, "SIGFPE", "Floating point exception" },
 #ifdef SIGKILL
   { SIGKILL, "SIGKILL", "Kill" },      /* Solaris: cannot be caught/ignored */
 #endif
 #ifdef SIGBUS
   { SIGBUS, "SIGBUS", "Bus error" },
 #endif
-  { SIGSEGV, "SIGSEGV", "Segmentation violation" },
 #ifdef SIGSYS
   { SIGSYS, "SIGSYS", "Bad argument to system call" },
 #endif
@@ -1436,7 +1446,6 @@ static struct trans signal_table[] =
 #ifdef SIGALRM
   { SIGALRM, "SIGALRM", "Alarm clock" },
 #endif
-  { SIGTERM, "SIGTERM", "Software termination signal from kill" },
 #ifdef SIGUSR1
   { SIGUSR1, "SIGUSR1", "User defined signal 1" },
 #endif
index 35ff0b2a4708531cad67b6ac65003e5e015d1e17..2b5cca3df72bdba6d0816c41bddba289dc82db11 100644 (file)
@@ -1,3 +1,13 @@
+2014-06-09  Gary Benson  <gbenson@redhat.com>
+
+       * gdb.base/sigall.c [Functions to send signals]: Reorder to
+       separate the always-available ANSI-standard signals from the
+       signals that require checking.
+       (main): Likewise.
+       * gdb.reverse/sigall-reverse.c [Functions to send signals]:
+       Likewise.
+       (main): Likewise.
+
 2014-06-07  Keith Seitz  <keiths@redhat.com>
 
        Revert:
index 7a7610e15f01b195c64c3369b21b5adaec880742..283cef3dd4a2c928bdf9d9e72e802d630256dd2b 100644 (file)
@@ -786,7 +786,21 @@ handle_TERM (sig)
 {
 }
 \f
-/* Functions to send signals.  These also serve as markers.  */
+/* Functions to send signals.  These also serve as markers.
+   Ordered ANSI-standard signals first, other signals second,
+   with signals in each block ordered by their numerical values
+   on a typical POSIX platform.  */
+
+/* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
+   are ANSI-standard signals and are always available.  */
+
+int
+gen_ILL ()
+{
+  kill (getpid (), SIGILL);
+  return 0;
+}
+
 int
 gen_ABRT ()
 {
@@ -794,6 +808,44 @@ gen_ABRT ()
   return 0;
 }  
 
+int x;
+
+int
+gen_FPE ()
+{
+  /* The intent behind generating SIGFPE this way is to check the mapping
+     from the CPU exception itself to the signals.  It would be nice to
+     do the same for SIGBUS, SIGSEGV, etc., but I suspect that even this
+     test might turn out to be insufficiently portable.  */
+
+#if 0
+  /* Loses on the PA because after the signal handler executes we try to
+     re-execute the failing instruction again.  Perhaps we could siglongjmp
+     out of the signal handler?  */
+  /* The expect script looks for the word "kill"; don't delete it.  */
+  return 5 / x; /* and we both started jumping up and down yelling kill */
+#else
+  kill (getpid (), SIGFPE);
+#endif
+  return 0;
+}
+
+int
+gen_SEGV ()
+{
+  kill (getpid (), SIGSEGV);
+  return 0;
+}
+
+int
+gen_TERM ()
+{
+  kill (getpid (), SIGTERM);
+  return 0;
+}
+
+/* All other signals need preprocessor conditionals.  */
+
 int
 gen_HUP ()
 {
@@ -816,13 +868,6 @@ gen_QUIT ()
 return 0;
 }
 
-int
-gen_ILL ()
-{
-  kill (getpid (), SIGILL);
-return 0;
-}
-
 int
 gen_EMT ()
 {
@@ -834,28 +879,6 @@ gen_EMT ()
 return 0;
 }
 
-int x;
-
-int
-gen_FPE ()
-{
-  /* The intent behind generating SIGFPE this way is to check the mapping
-     from the CPU exception itself to the signals.  It would be nice to
-     do the same for SIGBUS, SIGSEGV, etc., but I suspect that even this
-     test might turn out to be insufficiently portable.  */
-
-#if 0
-  /* Loses on the PA because after the signal handler executes we try to
-     re-execute the failing instruction again.  Perhaps we could siglongjmp
-     out of the signal handler?  */
-  /* The expect script looks for the word "kill"; don't delete it.  */
-  return 5 / x; /* and we both started jumping up and down yelling kill */
-#else
-  kill (getpid (), SIGFPE);
-#endif
-return 0;
-}
-
 int
 gen_BUS ()
 {
@@ -867,13 +890,6 @@ gen_BUS ()
 return 0;
 }
 
-int
-gen_SEGV ()
-{
-  kill (getpid (), SIGSEGV);
-return 0;
-}
-
 int
 gen_SYS ()
 {
@@ -1555,13 +1571,6 @@ gen_63 ()
 #endif
 return 0;
 }
-
-int
-gen_TERM ()
-{
-  kill (getpid (), SIGTERM);
-return 0;
-}  
 \f
 int
 main ()
@@ -1578,22 +1587,31 @@ main ()
   }
 #endif
 
+  /* Signals are ordered ANSI-standard signals first, other signals
+     second, with signals in each block ordered by their numerical
+     values on a typical POSIX platform.  */
+
+  /* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
+     are ANSI-standard signals and are always available.  */
+  signal (SIGILL, handle_ILL);
   signal (SIGABRT, handle_ABRT);
+  signal (SIGFPE, handle_FPE);
+  signal (SIGSEGV, handle_SEGV);
+  signal (SIGTERM, handle_TERM);
+
+  /* All other signals need preprocessor conditionals.  */
 #ifdef SIGHUP
   signal (SIGHUP, handle_HUP);
 #endif
 #ifdef SIGQUIT
   signal (SIGQUIT, handle_QUIT);
 #endif
-  signal (SIGILL, handle_ILL);
 #ifdef SIGEMT
   signal (SIGEMT, handle_EMT);
 #endif
-  signal (SIGFPE, handle_FPE);
 #ifdef SIGBUS
   signal (SIGBUS, handle_BUS);
 #endif
-  signal (SIGSEGV, handle_SEGV);
 #ifdef SIGSYS
   signal (SIGSYS, handle_SYS);
 #endif
@@ -1721,7 +1739,6 @@ main ()
   signal (62, handle_62);
   signal (63, handle_63);
 #endif /* lynx */
-  signal (SIGTERM, handle_TERM);
 
   x = 0;
 
index 6ccea424b65043ebf2119a3d9c6f85b3a252e4a4..9053163c9cdd267aef1f8585a3a684712a408bc0 100644 (file)
@@ -377,7 +377,21 @@ handle_TERM (int sig)
 {
 }
 \f
-/* Functions to send signals.  These also serve as markers.  */
+/* Functions to send signals.  These also serve as markers.
+   Ordered ANSI-standard signals first, other signals second,
+   with signals in each block ordered by their numerical values
+   on a typical POSIX platform.  */
+
+/* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
+   are ANSI-standard signals and are always available.  */
+
+int
+gen_ILL (void)
+{
+  kill (getpid (), SIGILL);
+  return 0;
+}
+
 int
 gen_ABRT (void)
 {
@@ -385,6 +399,44 @@ gen_ABRT (void)
   return 0;
 }  
 
+int x;
+
+int
+gen_FPE (void)
+{
+  /* The intent behind generating SIGFPE this way is to check the mapping
+     from the CPU exception itself to the signals.  It would be nice to
+     do the same for SIGBUS, SIGSEGV, etc., but I suspect that even this
+     test might turn out to be insufficiently portable.  */
+
+#if 0
+  /* Loses on the PA because after the signal handler executes we try to
+     re-execute the failing instruction again.  Perhaps we could siglongjmp
+     out of the signal handler?  */
+  /* The expect script looks for the word "kill"; don't delete it.  */
+  return 5 / x; /* and we both started jumping up and down yelling kill */
+#else
+  kill (getpid (), SIGFPE);
+#endif
+  return 0;
+}
+
+int
+gen_SEGV (void)
+{
+  kill (getpid (), SIGSEGV);
+  return 0;
+}
+
+int
+gen_TERM (void)
+{
+  kill (getpid (), SIGTERM);
+  return 0;
+}
+
+/* All other signals need preprocessor conditionals.  */
+
 int
 gen_HUP (void)
 {
@@ -407,13 +459,6 @@ gen_QUIT (void)
 return 0;
 }
 
-int
-gen_ILL (void)
-{
-  kill (getpid (), SIGILL);
-return 0;
-}
-
 int
 gen_EMT (void)
 {
@@ -425,28 +470,6 @@ gen_EMT (void)
 return 0;
 }
 
-int x;
-
-int
-gen_FPE (void)
-{
-  /* The intent behind generating SIGFPE this way is to check the mapping
-     from the CPU exception itself to the signals.  It would be nice to
-     do the same for SIGBUS, SIGSEGV, etc., but I suspect that even this
-     test might turn out to be insufficiently portable.  */
-
-#if 0
-  /* Loses on the PA because after the signal handler executes we try to
-     re-execute the failing instruction again.  Perhaps we could siglongjmp
-     out of the signal handler?  */
-  /* The expect script looks for the word "kill"; don't delete it.  */
-  return 5 / x; /* and we both started jumping up and down yelling kill */
-#else
-  kill (getpid (), SIGFPE);
-#endif
-return 0;
-}
-
 int
 gen_BUS (void)
 {
@@ -458,13 +481,6 @@ gen_BUS (void)
 return 0;
 }
 
-int
-gen_SEGV (void)
-{
-  kill (getpid (), SIGSEGV);
-return 0;
-}
-
 int
 gen_SYS (void)
 {
@@ -1146,13 +1162,6 @@ gen_63 (void)
 #endif
 return 0;
 }
-
-int
-gen_TERM (void)
-{
-  kill (getpid (), SIGTERM);
-return 0;
-}  
 \f
 int
 main ()
@@ -1168,22 +1177,31 @@ main ()
   }
 #endif
 
+  /* Signals are ordered ANSI-standard signals first, other signals
+     second, with signals in each block ordered by their numerical
+     values on a typical POSIX platform.  */
+
+  /* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
+     are ANSI-standard signals and are always available.  */
+  signal (SIGILL, handle_ILL);
   signal (SIGABRT, handle_ABRT);
+  signal (SIGFPE, handle_FPE);
+  signal (SIGSEGV, handle_SEGV);
+  signal (SIGTERM, handle_TERM);
+
+  /* All other signals need preprocessor conditionals.  */
 #ifdef SIGHUP
   signal (SIGHUP, handle_HUP);
 #endif
 #ifdef SIGQUIT
   signal (SIGQUIT, handle_QUIT);
 #endif
-  signal (SIGILL, handle_ILL);
 #ifdef SIGEMT
   signal (SIGEMT, handle_EMT);
 #endif
-  signal (SIGFPE, handle_FPE);
 #ifdef SIGBUS
   signal (SIGBUS, handle_BUS);
 #endif
-  signal (SIGSEGV, handle_SEGV);
 #ifdef SIGSYS
   signal (SIGSYS, handle_SYS);
 #endif
@@ -1311,7 +1329,6 @@ main ()
   signal (62, handle_62);
   signal (63, handle_63);
 #endif /* lynx */
-  signal (SIGTERM, handle_TERM);
 
   x = 0;