This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Separate out ANSI-standard signals


Hi all,

This patch reorders various pieces of code to separate ANSI-standard
signals from other signals that need checking.  Comments are added to
document this.

Built and regtested on RHEL6.5 x86_64.

Ok to commit?

Cheers,
Gary

--
gdb/
2014-06-06  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-06  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.

diff --git a/gdb/common/signals.c b/gdb/common/signals.c
index ea0c19a..6ca7d35 100644
--- a/gdb/common/signals.c
+++ b/gdb/common/signals.c
@@ -127,30 +127,38 @@ gdb_signal_from_host (int hostsig)
   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 +167,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 +179,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;
@@ -372,30 +376,38 @@ do_gdb_signal_to_host (enum gdb_signal 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 +416,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 +428,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;
diff --git a/gdb/proc-events.c b/gdb/proc-events.c
index 9bd7b31..fb5d98a 100644
--- a/gdb/proc-events.c
+++ b/gdb/proc-events.c
@@ -1401,32 +1401,40 @@ proc_prettyprint_syscalls (sysset_t *sysset, int verbose)
 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 +1444,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
diff --git a/gdb/testsuite/gdb.base/sigall.c b/gdb/testsuite/gdb.base/sigall.c
index 7a7610e..93ff844 100644
--- a/gdb/testsuite/gdb.base/sigall.c
+++ b/gdb/testsuite/gdb.base/sigall.c
@@ -787,6 +787,17 @@ handle_TERM (sig)
 }
 
 /* Functions to send signals.  These also serve as markers.  */
+
+/* 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 +805,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 ()
 {
@@ -817,13 +866,6 @@ return 0;
 }
 
 int
-gen_ILL ()
-{
-  kill (getpid (), SIGILL);
-return 0;
-}
-
-int
 gen_EMT ()
 {
 #ifdef SIGEMT
@@ -834,28 +876,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 ()
 {
@@ -868,13 +888,6 @@ return 0;
 }
 
 int
-gen_SEGV ()
-{
-  kill (getpid (), SIGSEGV);
-return 0;
-}
-
-int
 gen_SYS ()
 {
 #ifdef SIGSYS
@@ -1555,13 +1568,6 @@ gen_63 ()
 #endif
 return 0;
 }
-
-int
-gen_TERM ()
-{
-  kill (getpid (), SIGTERM);
-return 0;
-}  
 
 int
 main ()
@@ -1578,22 +1584,27 @@ main ()
   }
 #endif
 
+  /* 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 +1732,6 @@ main ()
   signal (62, handle_62);
   signal (63, handle_63);
 #endif /* lynx */
-  signal (SIGTERM, handle_TERM);
 
   x = 0;
 
diff --git a/gdb/testsuite/gdb.reverse/sigall-reverse.c b/gdb/testsuite/gdb.reverse/sigall-reverse.c
index 6ccea42..aed0a8a 100644
--- a/gdb/testsuite/gdb.reverse/sigall-reverse.c
+++ b/gdb/testsuite/gdb.reverse/sigall-reverse.c
@@ -378,6 +378,17 @@ handle_TERM (int sig)
 }
 
 /* Functions to send signals.  These also serve as markers.  */
+
+/* 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 +396,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)
 {
@@ -408,13 +457,6 @@ return 0;
 }
 
 int
-gen_ILL (void)
-{
-  kill (getpid (), SIGILL);
-return 0;
-}
-
-int
 gen_EMT (void)
 {
 #ifdef SIGEMT
@@ -425,28 +467,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)
 {
@@ -459,13 +479,6 @@ return 0;
 }
 
 int
-gen_SEGV (void)
-{
-  kill (getpid (), SIGSEGV);
-return 0;
-}
-
-int
 gen_SYS (void)
 {
 #ifdef SIGSYS
@@ -1146,13 +1159,6 @@ gen_63 (void)
 #endif
 return 0;
 }
-
-int
-gen_TERM (void)
-{
-  kill (getpid (), SIGTERM);
-return 0;
-}  
 
 int
 main ()
@@ -1168,22 +1174,27 @@ main ()
   }
 #endif
 
+  /* 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 +1322,6 @@ main ()
   signal (62, handle_62);
   signal (63, handle_63);
 #endif /* lynx */
-  signal (SIGTERM, handle_TERM);
 
   x = 0;
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]