Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* PATCH: Fix SIGRTMIN problems with glibc 2.3 [1/2]
@ 2003-03-26 16:32 Daniel Jacobowitz
  2003-03-26 17:17 ` Andreas Schwab
  0 siblings, 1 reply; 3+ messages in thread
From: Daniel Jacobowitz @ 2003-03-26 16:32 UTC (permalink / raw)
  To: gdb-patches

SIGRTMIN is (theoretically) the lowest _available_ real-time signal.  Up to
now, GNU libc hasn't reserved any realtime signals for applications not
linked to a threads library (like gdb and gdbserver).  However, the newest
release starts SIGRTMIN at 35 or so instead of 32.  We need to use
__SIGRTMIN instead in a couple of places.  This takes care of
signals/signals.c and cleans up some duplicated code while I'm there.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer

2003-03-26  Daniel Jacobowitz  <drow@mvista.com>

	* signals/signals.c (REALTIME_LO, REALTIME_HI): Define if
	not already defined.  Use __SIGRTMIN if available.
	(target_signal_from_host): Remove SIGRTMIN block.
	(do_target_signal_to_host): Remove SIGRTMIN block; check that
	the signal is within the realtime range.

Index: signals.c
===================================================================
RCS file: /cvs/src/src/gdb/signals/signals.c,v
retrieving revision 1.5
diff -u -p -r1.5 signals.c
--- signals.c	27 Aug 2002 22:37:14 -0000	1.5
+++ signals.c	26 Mar 2003 16:25:51 -0000
@@ -30,6 +30,20 @@
 
 #include <signal.h>
 
+/* Always use __SIGRTMIN if it's available.  SIGRTMIN is the lowest
+   _available_ realtime signal, not the lowest supported; glibc takes
+   several for its own use.  */
+
+#ifndef REALTIME_LO
+# if defined(__SIGRTMIN)
+#  define REALTIME_LO __SIGRTMIN
+#  define REALTIME_HI __SIGRTMAX
+# elif defined(SIGRTMIN)
+#  define REALTIME_LO __SIGRTMIN
+#  define REALTIME_HI __SIGRTMAX
+# endif
+#endif
+
 /* This table must match in order and size the signals in enum target_signal
    in target.h.  */
 /* *INDENT-OFF* */
@@ -492,22 +506,6 @@ target_signal_from_host (int hostsig)
     }
 #endif
 
-#if defined (SIGRTMIN)
-  if (hostsig >= SIGRTMIN && hostsig <= SIGRTMAX)
-    {
-      /* This block of TARGET_SIGNAL_REALTIME value is in order.  */
-      if (33 <= hostsig && hostsig <= 63)
-	return (enum target_signal)
-	  (hostsig - 33 + (int) TARGET_SIGNAL_REALTIME_33);
-      else if (hostsig == 32)
-	return TARGET_SIGNAL_REALTIME_32;
-      else if (64 <= hostsig && hostsig <= 127)
-	return (enum target_signal)
-	  (hostsig - 64 + (int) TARGET_SIGNAL_REALTIME_64);
-      else
-	error ("GDB bug: target.c (target_signal_from_host): unrecognized real-time signal");
-    }
-#endif
   return TARGET_SIGNAL_UNKNOWN;
 }
 
@@ -744,40 +742,12 @@ do_target_signal_to_host (enum target_si
 
     default:
 #if defined (REALTIME_LO)
-      if (oursig >= TARGET_SIGNAL_REALTIME_33
-	  && oursig <= TARGET_SIGNAL_REALTIME_63)
-	{
-	  /* This block of signals is continuous, and
-             TARGET_SIGNAL_REALTIME_33 is 33 by definition.  */
-	  int retsig =
-	    (int) oursig - (int) TARGET_SIGNAL_REALTIME_33 + 33;
-	  if (retsig >= REALTIME_LO && retsig < REALTIME_HI)
-	    return retsig;
-	}
-#if (REALTIME_LO < 33)
-      else if (oursig == TARGET_SIGNAL_REALTIME_32)
-	{
-	  /* TARGET_SIGNAL_REALTIME_32 isn't contiguous with
-             TARGET_SIGNAL_REALTIME_33.  It is 32 by definition.  */
-	  return 32;
-	}
-#endif
-#if (REALTIME_HI > 64)
-      if (oursig >= TARGET_SIGNAL_REALTIME_64
-	  && oursig <= TARGET_SIGNAL_REALTIME_127)
+      if (oursig < REALTIME_LO || oursig >= REALTIME_HI)
 	{
-	  /* This block of signals is continuous, and
-             TARGET_SIGNAL_REALTIME_64 is 64 by definition.  */
-	  int retsig =
-	    (int) oursig - (int) TARGET_SIGNAL_REALTIME_64 + 64;
-	  if (retsig >= REALTIME_LO && retsig < REALTIME_HI)
-	    return retsig;
+	  *oursig_ok = 0;
+	  return 0;
 	}
-      
-#endif
-#endif
 
-#if defined (SIGRTMIN)
       if (oursig >= TARGET_SIGNAL_REALTIME_33
 	  && oursig <= TARGET_SIGNAL_REALTIME_63)
 	{
@@ -785,8 +755,7 @@ do_target_signal_to_host (enum target_si
              TARGET_SIGNAL_REALTIME_33 is 33 by definition.  */
 	  int retsig =
 	    (int) oursig - (int) TARGET_SIGNAL_REALTIME_33 + 33;
-	  if (retsig >= SIGRTMIN && retsig <= SIGRTMAX)
-	    return retsig;
+	  return retsig;
 	}
       else if (oursig == TARGET_SIGNAL_REALTIME_32)
 	{
@@ -804,6 +773,7 @@ do_target_signal_to_host (enum target_si
 	  return retsig;
 	}
 #endif
+
       *oursig_ok = 0;
       return 0;
     }


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2003-03-26 17:21 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-03-26 16:32 PATCH: Fix SIGRTMIN problems with glibc 2.3 [1/2] Daniel Jacobowitz
2003-03-26 17:17 ` Andreas Schwab
2003-03-26 17:21   ` Daniel Jacobowitz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox