Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [rfa] gdbserver signal handling
@ 2002-02-27 20:12 Daniel Jacobowitz
  2002-02-28  7:01 ` Andrew Cagney
  0 siblings, 1 reply; 8+ messages in thread
From: Daniel Jacobowitz @ 2002-02-27 20:12 UTC (permalink / raw)
  To: gdb-patches

And here's the other patch I've been meaning to finish.  With this,
signals.exp now passes on a remote GDBserver, and we get the signal numbers
translated correctly.

OK?

-- 
Daniel Jacobowitz                           Carnegie Mellon University
MontaVista Software                         Debian GNU/Linux Developer

2002-02-27  Daniel Jacobowitz  <drow@mvista.com>

	* gdbserver/server.c (main): Call target_signal_to_host_p
	and target_signal_to_host on signals received from the remote.
	* gdbserver/remote-utils.c (prepare_resume_reply): Call
	target_signal_from_host on signals sent to the remote.
	* gdbserver/signals.c: New file.
	* gdbserver/server.h: Add prototypes.
	* gdbserver/Makefile.in: Add signals.o.

diff -uNr gdbserver.1/Makefile.in gdbserver/Makefile.in
--- gdbserver.1/Makefile.in	Wed Feb 27 21:47:26 2002
+++ gdbserver/Makefile.in	Wed Feb 27 22:05:05 2002
@@ -120,7 +120,7 @@
 SOURCES = $(SFILES)
 TAGFILES = $(SOURCES) ${HFILES} ${ALLPARAM} ${POSSLIBS} 
 
-OBS = utils.o $(DEPFILES) server.o remote-utils.o regcache.o
+OBS = utils.o $(DEPFILES) server.o remote-utils.o signals.o regcache.o
 
 # Prevent Sun make from putting in the machine type.  Setting
 # TARGET_ARCH to nothing works for SunOS 3, 4.0, but not for 4.1.
diff -uNr gdbserver.1/remote-utils.c gdbserver/remote-utils.c
--- gdbserver.1/remote-utils.c	Sun Feb 24 18:33:52 2002
+++ gdbserver/remote-utils.c	Wed Feb 27 22:04:39 2002
@@ -465,17 +465,15 @@
 void
 prepare_resume_reply (char *buf, char status, unsigned char signo)
 {
-  int nib;
+  int nib, sig;
 
   *buf++ = status;
 
-  /* FIXME!  Should be converting this signal number (numbered
-     according to the signal numbering of the system we are running on)
-     to the signal numbers used by the gdb protocol (see enum target_signal
-     in gdb/target.h).  */
-  nib = ((signo & 0xf0) >> 4);
+  sig = (int)target_signal_from_host (signo);
+
+  nib = ((sig & 0xf0) >> 4);
   *buf++ = tohex (nib);
-  nib = signo & 0x0f;
+  nib = sig & 0x0f;
   *buf++ = tohex (nib);
 
   if (status == 'T')
diff -uNr gdbserver.1/server.c gdbserver/server.c
--- gdbserver.1/server.c	Thu Feb 14 01:08:30 2002
+++ gdbserver/server.c	Wed Feb 27 22:04:39 2002
@@ -190,13 +190,21 @@
 	      break;
 	    case 'C':
 	      convert_ascii_to_int (own_buf + 1, &sig, 1);
-	      myresume (0, sig);
+	      if (target_signal_to_host_p (sig))
+		signal = target_signal_to_host (sig);
+	      else
+		signal = 0;
+	      myresume (0, signal);
 	      signal = mywait (&status);
 	      prepare_resume_reply (own_buf, status, signal);
 	      break;
 	    case 'S':
 	      convert_ascii_to_int (own_buf + 1, &sig, 1);
-	      myresume (1, sig);
+	      if (target_signal_to_host_p (sig))
+		signal = target_signal_to_host (sig);
+	      else
+		signal = 0;
+	      myresume (1, signal);
 	      signal = mywait (&status);
 	      prepare_resume_reply (own_buf, status, signal);
 	      break;
diff -uNr gdbserver.1/server.h gdbserver/server.h
--- gdbserver.1/server.h	Thu Feb 14 01:05:36 2002
+++ gdbserver/server.h	Wed Feb 27 22:18:52 2002
@@ -84,6 +84,10 @@
 void decode_M_packet (char *from, CORE_ADDR * mem_addr_ptr,
 		      unsigned int *len_ptr, char *to);
 
+/* Functions from ``signals.c''.  */
+int target_signal_from_host (int hostsig);
+int target_signal_to_host_p (int oursig);
+int target_signal_to_host (int oursig);
 
 /* Functions from utils.c */
 
diff -uNr gdbserver.1/signals.c gdbserver/signals.c
--- gdbserver.1/signals.c	Wed Dec 31 19:00:00 1969
+++ gdbserver/signals.c	Wed Feb 27 22:17:59 2002
@@ -0,0 +1,770 @@
+/* Functions to convert to and from the target signal protocol.
+   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+   2000, 2001, 2002 Free Software Foundation, Inc.
+   Contributed by Cygnus Support.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include "server.h"
+
+#include <signal.h>
+
+/* This enum defines a part of the GDB remote protocol.  It should be kept
+   in sync with the copy in "defs.h".  */
+
+enum target_signal
+  {
+    /* Used some places to record the concept that there is no signal.  */
+    TARGET_SIGNAL_0 = 0,
+    TARGET_SIGNAL_FIRST = 0,
+    TARGET_SIGNAL_HUP = 1,
+    TARGET_SIGNAL_INT = 2,
+    TARGET_SIGNAL_QUIT = 3,
+    TARGET_SIGNAL_ILL = 4,
+    TARGET_SIGNAL_TRAP = 5,
+    TARGET_SIGNAL_ABRT = 6,
+    TARGET_SIGNAL_EMT = 7,
+    TARGET_SIGNAL_FPE = 8,
+    TARGET_SIGNAL_KILL = 9,
+    TARGET_SIGNAL_BUS = 10,
+    TARGET_SIGNAL_SEGV = 11,
+    TARGET_SIGNAL_SYS = 12,
+    TARGET_SIGNAL_PIPE = 13,
+    TARGET_SIGNAL_ALRM = 14,
+    TARGET_SIGNAL_TERM = 15,
+    TARGET_SIGNAL_URG = 16,
+    TARGET_SIGNAL_STOP = 17,
+    TARGET_SIGNAL_TSTP = 18,
+    TARGET_SIGNAL_CONT = 19,
+    TARGET_SIGNAL_CHLD = 20,
+    TARGET_SIGNAL_TTIN = 21,
+    TARGET_SIGNAL_TTOU = 22,
+    TARGET_SIGNAL_IO = 23,
+    TARGET_SIGNAL_XCPU = 24,
+    TARGET_SIGNAL_XFSZ = 25,
+    TARGET_SIGNAL_VTALRM = 26,
+    TARGET_SIGNAL_PROF = 27,
+    TARGET_SIGNAL_WINCH = 28,
+    TARGET_SIGNAL_LOST = 29,
+    TARGET_SIGNAL_USR1 = 30,
+    TARGET_SIGNAL_USR2 = 31,
+    TARGET_SIGNAL_PWR = 32,
+    /* Similar to SIGIO.  Perhaps they should have the same number.  */
+    TARGET_SIGNAL_POLL = 33,
+    TARGET_SIGNAL_WIND = 34,
+    TARGET_SIGNAL_PHONE = 35,
+    TARGET_SIGNAL_WAITING = 36,
+    TARGET_SIGNAL_LWP = 37,
+    TARGET_SIGNAL_DANGER = 38,
+    TARGET_SIGNAL_GRANT = 39,
+    TARGET_SIGNAL_RETRACT = 40,
+    TARGET_SIGNAL_MSG = 41,
+    TARGET_SIGNAL_SOUND = 42,
+    TARGET_SIGNAL_SAK = 43,
+    TARGET_SIGNAL_PRIO = 44,
+    TARGET_SIGNAL_REALTIME_33 = 45,
+    TARGET_SIGNAL_REALTIME_34 = 46,
+    TARGET_SIGNAL_REALTIME_35 = 47,
+    TARGET_SIGNAL_REALTIME_36 = 48,
+    TARGET_SIGNAL_REALTIME_37 = 49,
+    TARGET_SIGNAL_REALTIME_38 = 50,
+    TARGET_SIGNAL_REALTIME_39 = 51,
+    TARGET_SIGNAL_REALTIME_40 = 52,
+    TARGET_SIGNAL_REALTIME_41 = 53,
+    TARGET_SIGNAL_REALTIME_42 = 54,
+    TARGET_SIGNAL_REALTIME_43 = 55,
+    TARGET_SIGNAL_REALTIME_44 = 56,
+    TARGET_SIGNAL_REALTIME_45 = 57,
+    TARGET_SIGNAL_REALTIME_46 = 58,
+    TARGET_SIGNAL_REALTIME_47 = 59,
+    TARGET_SIGNAL_REALTIME_48 = 60,
+    TARGET_SIGNAL_REALTIME_49 = 61,
+    TARGET_SIGNAL_REALTIME_50 = 62,
+    TARGET_SIGNAL_REALTIME_51 = 63,
+    TARGET_SIGNAL_REALTIME_52 = 64,
+    TARGET_SIGNAL_REALTIME_53 = 65,
+    TARGET_SIGNAL_REALTIME_54 = 66,
+    TARGET_SIGNAL_REALTIME_55 = 67,
+    TARGET_SIGNAL_REALTIME_56 = 68,
+    TARGET_SIGNAL_REALTIME_57 = 69,
+    TARGET_SIGNAL_REALTIME_58 = 70,
+    TARGET_SIGNAL_REALTIME_59 = 71,
+    TARGET_SIGNAL_REALTIME_60 = 72,
+    TARGET_SIGNAL_REALTIME_61 = 73,
+    TARGET_SIGNAL_REALTIME_62 = 74,
+    TARGET_SIGNAL_REALTIME_63 = 75,
+
+    /* Used internally by Solaris threads.  See signal(5) on Solaris.  */
+    TARGET_SIGNAL_CANCEL = 76,
+
+    /* Yes, this pains me, too.  But LynxOS didn't have SIG32, and now
+       GNU/Linux does, and we can't disturb the numbering, since it's
+       part of the remote protocol.  Note that in some GDB's
+       TARGET_SIGNAL_REALTIME_32 is number 76.  */
+    TARGET_SIGNAL_REALTIME_32,
+    /* Yet another pain, IRIX 6 has SIG64. */
+    TARGET_SIGNAL_REALTIME_64,
+    /* Yet another pain, GNU/Linux MIPS might go up to 128. */
+    TARGET_SIGNAL_REALTIME_65,
+    TARGET_SIGNAL_REALTIME_66,
+    TARGET_SIGNAL_REALTIME_67,
+    TARGET_SIGNAL_REALTIME_68,
+    TARGET_SIGNAL_REALTIME_69,
+    TARGET_SIGNAL_REALTIME_70,
+    TARGET_SIGNAL_REALTIME_71,
+    TARGET_SIGNAL_REALTIME_72,
+    TARGET_SIGNAL_REALTIME_73,
+    TARGET_SIGNAL_REALTIME_74,
+    TARGET_SIGNAL_REALTIME_75,
+    TARGET_SIGNAL_REALTIME_76,
+    TARGET_SIGNAL_REALTIME_77,
+    TARGET_SIGNAL_REALTIME_78,
+    TARGET_SIGNAL_REALTIME_79,
+    TARGET_SIGNAL_REALTIME_80,
+    TARGET_SIGNAL_REALTIME_81,
+    TARGET_SIGNAL_REALTIME_82,
+    TARGET_SIGNAL_REALTIME_83,
+    TARGET_SIGNAL_REALTIME_84,
+    TARGET_SIGNAL_REALTIME_85,
+    TARGET_SIGNAL_REALTIME_86,
+    TARGET_SIGNAL_REALTIME_87,
+    TARGET_SIGNAL_REALTIME_88,
+    TARGET_SIGNAL_REALTIME_89,
+    TARGET_SIGNAL_REALTIME_90,
+    TARGET_SIGNAL_REALTIME_91,
+    TARGET_SIGNAL_REALTIME_92,
+    TARGET_SIGNAL_REALTIME_93,
+    TARGET_SIGNAL_REALTIME_94,
+    TARGET_SIGNAL_REALTIME_95,
+    TARGET_SIGNAL_REALTIME_96,
+    TARGET_SIGNAL_REALTIME_97,
+    TARGET_SIGNAL_REALTIME_98,
+    TARGET_SIGNAL_REALTIME_99,
+    TARGET_SIGNAL_REALTIME_100,
+    TARGET_SIGNAL_REALTIME_101,
+    TARGET_SIGNAL_REALTIME_102,
+    TARGET_SIGNAL_REALTIME_103,
+    TARGET_SIGNAL_REALTIME_104,
+    TARGET_SIGNAL_REALTIME_105,
+    TARGET_SIGNAL_REALTIME_106,
+    TARGET_SIGNAL_REALTIME_107,
+    TARGET_SIGNAL_REALTIME_108,
+    TARGET_SIGNAL_REALTIME_109,
+    TARGET_SIGNAL_REALTIME_110,
+    TARGET_SIGNAL_REALTIME_111,
+    TARGET_SIGNAL_REALTIME_112,
+    TARGET_SIGNAL_REALTIME_113,
+    TARGET_SIGNAL_REALTIME_114,
+    TARGET_SIGNAL_REALTIME_115,
+    TARGET_SIGNAL_REALTIME_116,
+    TARGET_SIGNAL_REALTIME_117,
+    TARGET_SIGNAL_REALTIME_118,
+    TARGET_SIGNAL_REALTIME_119,
+    TARGET_SIGNAL_REALTIME_120,
+    TARGET_SIGNAL_REALTIME_121,
+    TARGET_SIGNAL_REALTIME_122,
+    TARGET_SIGNAL_REALTIME_123,
+    TARGET_SIGNAL_REALTIME_124,
+    TARGET_SIGNAL_REALTIME_125,
+    TARGET_SIGNAL_REALTIME_126,
+    TARGET_SIGNAL_REALTIME_127,
+
+    /* Mach exceptions */
+    TARGET_EXC_BAD_ACCESS,
+    TARGET_EXC_BAD_INSTRUCTION,
+    TARGET_EXC_ARITHMETIC,
+    TARGET_EXC_EMULATION,
+    TARGET_EXC_SOFTWARE,
+    TARGET_EXC_BREAKPOINT,
+
+    TARGET_SIGNAL_INFO,
+
+    /* Some signal we don't know about.  */
+    TARGET_SIGNAL_UNKNOWN,
+
+    /* Use whatever signal we use when one is not specifically specified
+       (for passing to proceed and so on).  */
+    TARGET_SIGNAL_DEFAULT,
+
+    /* Last and unused enum value, for sizing arrays, etc.  */
+    TARGET_SIGNAL_LAST
+  };
+
+/* Convert host signal to our signals.  */
+int
+target_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.  */
+
+  if (hostsig == 0)
+    return TARGET_SIGNAL_0;
+
+#if defined (SIGHUP)
+  if (hostsig == SIGHUP)
+    return TARGET_SIGNAL_HUP;
+#endif
+#if defined (SIGINT)
+  if (hostsig == SIGINT)
+    return TARGET_SIGNAL_INT;
+#endif
+#if defined (SIGQUIT)
+  if (hostsig == SIGQUIT)
+    return TARGET_SIGNAL_QUIT;
+#endif
+#if defined (SIGILL)
+  if (hostsig == SIGILL)
+    return TARGET_SIGNAL_ILL;
+#endif
+#if defined (SIGTRAP)
+  if (hostsig == SIGTRAP)
+    return TARGET_SIGNAL_TRAP;
+#endif
+#if defined (SIGABRT)
+  if (hostsig == SIGABRT)
+    return TARGET_SIGNAL_ABRT;
+#endif
+#if defined (SIGEMT)
+  if (hostsig == SIGEMT)
+    return TARGET_SIGNAL_EMT;
+#endif
+#if defined (SIGFPE)
+  if (hostsig == SIGFPE)
+    return TARGET_SIGNAL_FPE;
+#endif
+#if defined (SIGKILL)
+  if (hostsig == SIGKILL)
+    return TARGET_SIGNAL_KILL;
+#endif
+#if defined (SIGBUS)
+  if (hostsig == SIGBUS)
+    return TARGET_SIGNAL_BUS;
+#endif
+#if defined (SIGSEGV)
+  if (hostsig == SIGSEGV)
+    return TARGET_SIGNAL_SEGV;
+#endif
+#if defined (SIGSYS)
+  if (hostsig == SIGSYS)
+    return TARGET_SIGNAL_SYS;
+#endif
+#if defined (SIGPIPE)
+  if (hostsig == SIGPIPE)
+    return TARGET_SIGNAL_PIPE;
+#endif
+#if defined (SIGALRM)
+  if (hostsig == SIGALRM)
+    return TARGET_SIGNAL_ALRM;
+#endif
+#if defined (SIGTERM)
+  if (hostsig == SIGTERM)
+    return TARGET_SIGNAL_TERM;
+#endif
+#if defined (SIGUSR1)
+  if (hostsig == SIGUSR1)
+    return TARGET_SIGNAL_USR1;
+#endif
+#if defined (SIGUSR2)
+  if (hostsig == SIGUSR2)
+    return TARGET_SIGNAL_USR2;
+#endif
+#if defined (SIGCLD)
+  if (hostsig == SIGCLD)
+    return TARGET_SIGNAL_CHLD;
+#endif
+#if defined (SIGCHLD)
+  if (hostsig == SIGCHLD)
+    return TARGET_SIGNAL_CHLD;
+#endif
+#if defined (SIGPWR)
+  if (hostsig == SIGPWR)
+    return TARGET_SIGNAL_PWR;
+#endif
+#if defined (SIGWINCH)
+  if (hostsig == SIGWINCH)
+    return TARGET_SIGNAL_WINCH;
+#endif
+#if defined (SIGURG)
+  if (hostsig == SIGURG)
+    return TARGET_SIGNAL_URG;
+#endif
+#if defined (SIGIO)
+  if (hostsig == SIGIO)
+    return TARGET_SIGNAL_IO;
+#endif
+#if defined (SIGPOLL)
+  if (hostsig == SIGPOLL)
+    return TARGET_SIGNAL_POLL;
+#endif
+#if defined (SIGSTOP)
+  if (hostsig == SIGSTOP)
+    return TARGET_SIGNAL_STOP;
+#endif
+#if defined (SIGTSTP)
+  if (hostsig == SIGTSTP)
+    return TARGET_SIGNAL_TSTP;
+#endif
+#if defined (SIGCONT)
+  if (hostsig == SIGCONT)
+    return TARGET_SIGNAL_CONT;
+#endif
+#if defined (SIGTTIN)
+  if (hostsig == SIGTTIN)
+    return TARGET_SIGNAL_TTIN;
+#endif
+#if defined (SIGTTOU)
+  if (hostsig == SIGTTOU)
+    return TARGET_SIGNAL_TTOU;
+#endif
+#if defined (SIGVTALRM)
+  if (hostsig == SIGVTALRM)
+    return TARGET_SIGNAL_VTALRM;
+#endif
+#if defined (SIGPROF)
+  if (hostsig == SIGPROF)
+    return TARGET_SIGNAL_PROF;
+#endif
+#if defined (SIGXCPU)
+  if (hostsig == SIGXCPU)
+    return TARGET_SIGNAL_XCPU;
+#endif
+#if defined (SIGXFSZ)
+  if (hostsig == SIGXFSZ)
+    return TARGET_SIGNAL_XFSZ;
+#endif
+#if defined (SIGWIND)
+  if (hostsig == SIGWIND)
+    return TARGET_SIGNAL_WIND;
+#endif
+#if defined (SIGPHONE)
+  if (hostsig == SIGPHONE)
+    return TARGET_SIGNAL_PHONE;
+#endif
+#if defined (SIGLOST)
+  if (hostsig == SIGLOST)
+    return TARGET_SIGNAL_LOST;
+#endif
+#if defined (SIGWAITING)
+  if (hostsig == SIGWAITING)
+    return TARGET_SIGNAL_WAITING;
+#endif
+#if defined (SIGCANCEL)
+  if (hostsig == SIGCANCEL)
+    return TARGET_SIGNAL_CANCEL;
+#endif
+#if defined (SIGLWP)
+  if (hostsig == SIGLWP)
+    return TARGET_SIGNAL_LWP;
+#endif
+#if defined (SIGDANGER)
+  if (hostsig == SIGDANGER)
+    return TARGET_SIGNAL_DANGER;
+#endif
+#if defined (SIGGRANT)
+  if (hostsig == SIGGRANT)
+    return TARGET_SIGNAL_GRANT;
+#endif
+#if defined (SIGRETRACT)
+  if (hostsig == SIGRETRACT)
+    return TARGET_SIGNAL_RETRACT;
+#endif
+#if defined (SIGMSG)
+  if (hostsig == SIGMSG)
+    return TARGET_SIGNAL_MSG;
+#endif
+#if defined (SIGSOUND)
+  if (hostsig == SIGSOUND)
+    return TARGET_SIGNAL_SOUND;
+#endif
+#if defined (SIGSAK)
+  if (hostsig == SIGSAK)
+    return TARGET_SIGNAL_SAK;
+#endif
+#if defined (SIGPRIO)
+  if (hostsig == SIGPRIO)
+    return TARGET_SIGNAL_PRIO;
+#endif
+
+  /* Mach exceptions.  Assumes that the values for EXC_ are positive! */
+#if defined (EXC_BAD_ACCESS) && defined (_NSIG)
+  if (hostsig == _NSIG + EXC_BAD_ACCESS)
+    return TARGET_EXC_BAD_ACCESS;
+#endif
+#if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG)
+  if (hostsig == _NSIG + EXC_BAD_INSTRUCTION)
+    return TARGET_EXC_BAD_INSTRUCTION;
+#endif
+#if defined (EXC_ARITHMETIC) && defined (_NSIG)
+  if (hostsig == _NSIG + EXC_ARITHMETIC)
+    return TARGET_EXC_ARITHMETIC;
+#endif
+#if defined (EXC_EMULATION) && defined (_NSIG)
+  if (hostsig == _NSIG + EXC_EMULATION)
+    return TARGET_EXC_EMULATION;
+#endif
+#if defined (EXC_SOFTWARE) && defined (_NSIG)
+  if (hostsig == _NSIG + EXC_SOFTWARE)
+    return TARGET_EXC_SOFTWARE;
+#endif
+#if defined (EXC_BREAKPOINT) && defined (_NSIG)
+  if (hostsig == _NSIG + EXC_BREAKPOINT)
+    return TARGET_EXC_BREAKPOINT;
+#endif
+
+#if defined (SIGINFO)
+  if (hostsig == SIGINFO)
+    return TARGET_SIGNAL_INFO;
+#endif
+
+#if defined (REALTIME_LO)
+  if (hostsig >= REALTIME_LO && hostsig < REALTIME_HI)
+    {
+      /* 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
+
+#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 == 64)
+	return TARGET_SIGNAL_REALTIME_64;
+      else
+	error ("GDB bug: target.c (target_signal_from_host): unrecognized real-time signal");
+    }
+#endif
+  return TARGET_SIGNAL_UNKNOWN;
+}
+
+/* Convert a OURSIG (an enum target_signal) to the form used by the
+   target operating system (refered to as the ``host'') or zero if the
+   equivalent host signal is not available.  Set/clear OURSIG_OK
+   accordingly. */
+
+static int
+do_target_signal_to_host (enum target_signal oursig,
+			  int *oursig_ok)
+{
+  *oursig_ok = 1;
+  switch (oursig)
+    {
+    case TARGET_SIGNAL_0:
+      return 0;
+
+#if defined (SIGHUP)
+    case TARGET_SIGNAL_HUP:
+      return SIGHUP;
+#endif
+#if defined (SIGINT)
+    case TARGET_SIGNAL_INT:
+      return SIGINT;
+#endif
+#if defined (SIGQUIT)
+    case TARGET_SIGNAL_QUIT:
+      return SIGQUIT;
+#endif
+#if defined (SIGILL)
+    case TARGET_SIGNAL_ILL:
+      return SIGILL;
+#endif
+#if defined (SIGTRAP)
+    case TARGET_SIGNAL_TRAP:
+      return SIGTRAP;
+#endif
+#if defined (SIGABRT)
+    case TARGET_SIGNAL_ABRT:
+      return SIGABRT;
+#endif
+#if defined (SIGEMT)
+    case TARGET_SIGNAL_EMT:
+      return SIGEMT;
+#endif
+#if defined (SIGFPE)
+    case TARGET_SIGNAL_FPE:
+      return SIGFPE;
+#endif
+#if defined (SIGKILL)
+    case TARGET_SIGNAL_KILL:
+      return SIGKILL;
+#endif
+#if defined (SIGBUS)
+    case TARGET_SIGNAL_BUS:
+      return SIGBUS;
+#endif
+#if defined (SIGSEGV)
+    case TARGET_SIGNAL_SEGV:
+      return SIGSEGV;
+#endif
+#if defined (SIGSYS)
+    case TARGET_SIGNAL_SYS:
+      return SIGSYS;
+#endif
+#if defined (SIGPIPE)
+    case TARGET_SIGNAL_PIPE:
+      return SIGPIPE;
+#endif
+#if defined (SIGALRM)
+    case TARGET_SIGNAL_ALRM:
+      return SIGALRM;
+#endif
+#if defined (SIGTERM)
+    case TARGET_SIGNAL_TERM:
+      return SIGTERM;
+#endif
+#if defined (SIGUSR1)
+    case TARGET_SIGNAL_USR1:
+      return SIGUSR1;
+#endif
+#if defined (SIGUSR2)
+    case TARGET_SIGNAL_USR2:
+      return SIGUSR2;
+#endif
+#if defined (SIGCHLD) || defined (SIGCLD)
+    case TARGET_SIGNAL_CHLD:
+#if defined (SIGCHLD)
+      return SIGCHLD;
+#else
+      return SIGCLD;
+#endif
+#endif /* SIGCLD or SIGCHLD */
+#if defined (SIGPWR)
+    case TARGET_SIGNAL_PWR:
+      return SIGPWR;
+#endif
+#if defined (SIGWINCH)
+    case TARGET_SIGNAL_WINCH:
+      return SIGWINCH;
+#endif
+#if defined (SIGURG)
+    case TARGET_SIGNAL_URG:
+      return SIGURG;
+#endif
+#if defined (SIGIO)
+    case TARGET_SIGNAL_IO:
+      return SIGIO;
+#endif
+#if defined (SIGPOLL)
+    case TARGET_SIGNAL_POLL:
+      return SIGPOLL;
+#endif
+#if defined (SIGSTOP)
+    case TARGET_SIGNAL_STOP:
+      return SIGSTOP;
+#endif
+#if defined (SIGTSTP)
+    case TARGET_SIGNAL_TSTP:
+      return SIGTSTP;
+#endif
+#if defined (SIGCONT)
+    case TARGET_SIGNAL_CONT:
+      return SIGCONT;
+#endif
+#if defined (SIGTTIN)
+    case TARGET_SIGNAL_TTIN:
+      return SIGTTIN;
+#endif
+#if defined (SIGTTOU)
+    case TARGET_SIGNAL_TTOU:
+      return SIGTTOU;
+#endif
+#if defined (SIGVTALRM)
+    case TARGET_SIGNAL_VTALRM:
+      return SIGVTALRM;
+#endif
+#if defined (SIGPROF)
+    case TARGET_SIGNAL_PROF:
+      return SIGPROF;
+#endif
+#if defined (SIGXCPU)
+    case TARGET_SIGNAL_XCPU:
+      return SIGXCPU;
+#endif
+#if defined (SIGXFSZ)
+    case TARGET_SIGNAL_XFSZ:
+      return SIGXFSZ;
+#endif
+#if defined (SIGWIND)
+    case TARGET_SIGNAL_WIND:
+      return SIGWIND;
+#endif
+#if defined (SIGPHONE)
+    case TARGET_SIGNAL_PHONE:
+      return SIGPHONE;
+#endif
+#if defined (SIGLOST)
+    case TARGET_SIGNAL_LOST:
+      return SIGLOST;
+#endif
+#if defined (SIGWAITING)
+    case TARGET_SIGNAL_WAITING:
+      return SIGWAITING;
+#endif
+#if defined (SIGCANCEL)
+    case TARGET_SIGNAL_CANCEL:
+      return SIGCANCEL;
+#endif
+#if defined (SIGLWP)
+    case TARGET_SIGNAL_LWP:
+      return SIGLWP;
+#endif
+#if defined (SIGDANGER)
+    case TARGET_SIGNAL_DANGER:
+      return SIGDANGER;
+#endif
+#if defined (SIGGRANT)
+    case TARGET_SIGNAL_GRANT:
+      return SIGGRANT;
+#endif
+#if defined (SIGRETRACT)
+    case TARGET_SIGNAL_RETRACT:
+      return SIGRETRACT;
+#endif
+#if defined (SIGMSG)
+    case TARGET_SIGNAL_MSG:
+      return SIGMSG;
+#endif
+#if defined (SIGSOUND)
+    case TARGET_SIGNAL_SOUND:
+      return SIGSOUND;
+#endif
+#if defined (SIGSAK)
+    case TARGET_SIGNAL_SAK:
+      return SIGSAK;
+#endif
+#if defined (SIGPRIO)
+    case TARGET_SIGNAL_PRIO:
+      return SIGPRIO;
+#endif
+
+      /* Mach exceptions.  Assumes that the values for EXC_ are positive! */
+#if defined (EXC_BAD_ACCESS) && defined (_NSIG)
+    case TARGET_EXC_BAD_ACCESS:
+      return _NSIG + EXC_BAD_ACCESS;
+#endif
+#if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG)
+    case TARGET_EXC_BAD_INSTRUCTION:
+      return _NSIG + EXC_BAD_INSTRUCTION;
+#endif
+#if defined (EXC_ARITHMETIC) && defined (_NSIG)
+    case TARGET_EXC_ARITHMETIC:
+      return _NSIG + EXC_ARITHMETIC;
+#endif
+#if defined (EXC_EMULATION) && defined (_NSIG)
+    case TARGET_EXC_EMULATION:
+      return _NSIG + EXC_EMULATION;
+#endif
+#if defined (EXC_SOFTWARE) && defined (_NSIG)
+    case TARGET_EXC_SOFTWARE:
+      return _NSIG + EXC_SOFTWARE;
+#endif
+#if defined (EXC_BREAKPOINT) && defined (_NSIG)
+    case TARGET_EXC_BREAKPOINT:
+      return _NSIG + EXC_BREAKPOINT;
+#endif
+
+#if defined (SIGINFO)
+    case TARGET_SIGNAL_INFO:
+      return SIGINFO;
+#endif
+
+    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)
+	{
+	  /* 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;
+	}
+      
+#endif
+#endif
+
+#if defined (SIGRTMIN)
+      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 >= SIGRTMIN && retsig <= SIGRTMAX)
+	    return retsig;
+	}
+      else if (oursig == TARGET_SIGNAL_REALTIME_64)
+	return 64;
+#endif
+      *oursig_ok = 0;
+      return 0;
+    }
+}
+
+int
+target_signal_to_host_p (int oursig)
+{
+  int oursig_ok;
+  do_target_signal_to_host ((enum target_signal) oursig, &oursig_ok);
+  return oursig_ok;
+}
+
+int
+target_signal_to_host (int oursig)
+{
+  int oursig_ok;
+  int targ_signo = do_target_signal_to_host ((enum target_signal) oursig,
+					     &oursig_ok);
+  if (!oursig_ok)
+    return 0;
+  else
+    return targ_signo;
+}


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

* Re: [rfa] gdbserver signal handling
  2002-02-27 20:12 [rfa] gdbserver signal handling Daniel Jacobowitz
@ 2002-02-28  7:01 ` Andrew Cagney
  2002-02-28  8:55   ` Daniel Jacobowitz
  0 siblings, 1 reply; 8+ messages in thread
From: Andrew Cagney @ 2002-02-28  7:01 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: gdb-patches

> 2002-02-27  Daniel Jacobowitz  <drow@mvista.com>
> 
> * gdbserver/server.c (main): Call target_signal_to_host_p
> 	and target_signal_to_host on signals received from the remote.
> 	* gdbserver/remote-utils.c (prepare_resume_reply): Call
> 	target_signal_from_host on signals sent to the remote.
> 	* gdbserver/signals.c: New file.
> 	* gdbserver/server.h: Add prototypes.
> 	* gdbserver/Makefile.in: Add signals.o.
> 
> 

Er, why did you create src/gdb/signals.c?

enjoy,
Andrew




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

* Re: [rfa] gdbserver signal handling
  2002-02-28  7:01 ` Andrew Cagney
@ 2002-02-28  8:55   ` Daniel Jacobowitz
  2002-02-28  9:25     ` Andrew Cagney
  0 siblings, 1 reply; 8+ messages in thread
From: Daniel Jacobowitz @ 2002-02-28  8:55 UTC (permalink / raw)
  To: Andrew Cagney; +Cc: gdb-patches

On Thu, Feb 28, 2002 at 10:01:00AM -0500, Andrew Cagney wrote:
> >2002-02-27  Daniel Jacobowitz  <drow@mvista.com>
> >
> >* gdbserver/server.c (main): Call target_signal_to_host_p
> >	and target_signal_to_host on signals received from the remote.
> >	* gdbserver/remote-utils.c (prepare_resume_reply): Call
> >	target_signal_from_host on signals sent to the remote.
> >	* gdbserver/signals.c: New file.
> >	* gdbserver/server.h: Add prototypes.
> >	* gdbserver/Makefile.in: Add signals.o.
> >
> >
> 
> Er, why did you create src/gdb/signals.c?

The reason to create src/gdb/signals.c has nothing to do with
gdbserver; it has to do with:
  - the cleanup I never got to of removing <signal.h> from target.c,
  since <signal.h> is a host header but used for target information.

  - the eventual moving of signals.c to be in NATDEPFILES.

I don't want to move it to gdbserver, because I've finally reached no
code sharing.  And because of something you said once, which is now
true:
> I think, in terms of better splitting up gdbserver and gdb it is pretty
> much a requirement.  I can but dream of the day when GDBSERVER stops
> including defs.h :-)


That's why I wanted to do it the above way.

-- 
Daniel Jacobowitz                           Carnegie Mellon University
MontaVista Software                         Debian GNU/Linux Developer


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

* Re: [rfa] gdbserver signal handling
  2002-02-28  8:55   ` Daniel Jacobowitz
@ 2002-02-28  9:25     ` Andrew Cagney
  2002-02-28  9:43       ` Daniel Jacobowitz
  0 siblings, 1 reply; 8+ messages in thread
From: Andrew Cagney @ 2002-02-28  9:25 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: gdb-patches

> Er, why did you create src/gdb/signals.c?
> 
> 
> The reason to create src/gdb/signals.c has nothing to do with
> gdbserver; it has to do with:
>   - the cleanup I never got to of removing <signal.h> from target.c,
>   since <signal.h> is a host header but used for target information.
> 
>   - the eventual moving of signals.c to be in NATDEPFILES.
> 
> I don't want to move it to gdbserver, because I've finally reached no
> code sharing.  And because of something you said once, which is now
> true:
> 
>> I think, in terms of better splitting up gdbserver and gdb it is pretty
>> much a requirement.  I can but dream of the day when GDBSERVER stops
>> including defs.h :-)
> 
> 
> 
> That's why I wanted to do it the above way.

I suspect there is a difference between not including defs.h and 
unnecessarily duplicating common code.  My memory was that the signal 
enums were to be moved to their own header file (so things like 
gdbserver could include them).

This gdb/gdbserver/signals.c looks largely like a copy of big chunks of 
gdb/signals.c and other similar code.  I don't know that gdb developers 
want to take on responsability for maintaining such duplication.

Again, I think this can be cleaned up properly, but after the 5.2 branch 
goes through.

enjoy,
Andrew



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

* Re: [rfa] gdbserver signal handling
  2002-02-28  9:25     ` Andrew Cagney
@ 2002-02-28  9:43       ` Daniel Jacobowitz
  2002-02-28 11:29         ` Andrew Cagney
  0 siblings, 1 reply; 8+ messages in thread
From: Daniel Jacobowitz @ 2002-02-28  9:43 UTC (permalink / raw)
  To: Andrew Cagney; +Cc: gdb-patches

On Thu, Feb 28, 2002 at 12:25:10PM -0500, Andrew Cagney wrote:
> >Er, why did you create src/gdb/signals.c?
> >
> >
> >The reason to create src/gdb/signals.c has nothing to do with
> >gdbserver; it has to do with:
> >  - the cleanup I never got to of removing <signal.h> from target.c,
> >  since <signal.h> is a host header but used for target information.
> >
> >  - the eventual moving of signals.c to be in NATDEPFILES.
> >
> >I don't want to move it to gdbserver, because I've finally reached no
> >code sharing.  And because of something you said once, which is now
> >true:
> >
> >>I think, in terms of better splitting up gdbserver and gdb it is pretty
> >>much a requirement.  I can but dream of the day when GDBSERVER stops
> >>including defs.h :-)
> >
> >
> >
> >That's why I wanted to do it the above way.
> 
> I suspect there is a difference between not including defs.h and 
> unnecessarily duplicating common code.  My memory was that the signal 
> enums were to be moved to their own header file (so things like 
> gdbserver could include them).
> 
> This gdb/gdbserver/signals.c looks largely like a copy of big chunks of 
> gdb/signals.c and other similar code.  I don't know that gdb developers 
> want to take on responsability for maintaining such duplication.
> 
> Again, I think this can be cleaned up properly, but after the 5.2 branch 
> goes through.

What do you consider "properly", then?  For one minor thing, GDB wants
the conversion functions to return an `enum target_signal' whereas
gdbserver has no need to include "signals.h" in every file and only
wants an `int' back to send to the remote client.

For another, the important reason in that paragraph was not the include
of "defs.h" but the no code sharing.  I've gone to great lengths now
to see that changes to GDB will not break gdbserver.  And these
functions have been updated only perhaps once a year for new signals,
so the duplication does not convern me overmuch.


Since you seem to strongly prefer sharing it, though, I suppose I could
do this instead:
  - create a new directory (``common''?) for files with well-defined
interfaces.
  - Move signals.c in there.   Create signals.h in there.
  - Add that directory to the search paths for both GDB and gdbserver.

This would probably mean picking up the big signal to name conversion
table in gdbserver, which I wanted to avoid but no one else seemed
concerned about.


Meanwhile?  Just leave signal handling in gdbserver crippled for the
upcoming branch?  OK, I guess.

-- 
Daniel Jacobowitz                           Carnegie Mellon University
MontaVista Software                         Debian GNU/Linux Developer


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

* Re: [rfa] gdbserver signal handling
  2002-02-28  9:43       ` Daniel Jacobowitz
@ 2002-02-28 11:29         ` Andrew Cagney
  2002-02-28 12:30           ` Daniel Jacobowitz
  0 siblings, 1 reply; 8+ messages in thread
From: Andrew Cagney @ 2002-02-28 11:29 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: gdb-patches


>> I suspect there is a difference between not including defs.h and 
>> unnecessarily duplicating common code.  My memory was that the signal 
>> enums were to be moved to their own header file (so things like 
>> gdbserver could include them).
>> 
>> This gdb/gdbserver/signals.c looks largely like a copy of big chunks of 
>> gdb/signals.c and other similar code.  I don't know that gdb developers 
>> want to take on responsability for maintaining such duplication.
>> 
>> Again, I think this can be cleaned up properly, but after the 5.2 branch 
>> goes through.
> 
> 
> What do you consider "properly", then?  For one minor thing, GDB wants
> the conversion functions to return an `enum target_signal' whereas
> gdbserver has no need to include "signals.h" in every file and only
> wants an `int' back to send to the remote client.

I don't understand.  Presumably any file that needs to use one of the 
signal conversion routines would include "signals.h" and get both the 
enum and the function signature.  Beyond that, I don't think anyone is 
going to notice if the code assigning the result to an int.  (I'm still 
working on a -Wassign-enum flag for GCC :-^).

> For another, the important reason in that paragraph was not the include
> of "defs.h" but the no code sharing.  I've gone to great lengths now
> to see that changes to GDB will not break gdbserver.  And these
> functions have been updated only perhaps once a year for new signals,
> so the duplication does not convern me overmuch.

I wish :-)  What I suspect will actually happens is that people will 
forget to up date one of the two copies eventuating in bitrot :-(

> Since you seem to strongly prefer sharing it, though, I suppose I could
> do this instead:
>   - create a new directory (``common''?) for files with well-defined
> interfaces.
>   - Move signals.c in there.   Create signals.h in there.
>   - Add that directory to the search paths for both GDB and gdbserver.
> 
> This would probably mean picking up the big signal to name conversion
> table in gdbserver, which I wanted to avoid but no one else seemed
> concerned about.

Not to long ago I suggested splitting up utils.c into smaller more 
independant files and a directory (gdb/utils/).

We could do similar to signals.c.  We could even split the string 
functions off from the conversion functions so that gdbserver didn't get 
bloated by them.

However, not in the next three days :-)

> Meanwhile?  Just leave signal handling in gdbserver crippled for the
> upcoming branch?  OK, I guess.

Yes.  It isn't as bad as it sounds though.  The problem has always been 
there so we're not exactly fixing a regression.  Besides, the next 
release is only 22 weeks away.

enjoy,
Andrew


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

* Re: [rfa] gdbserver signal handling
  2002-02-28 11:29         ` Andrew Cagney
@ 2002-02-28 12:30           ` Daniel Jacobowitz
  2002-02-28 12:55             ` Andrew Cagney
  0 siblings, 1 reply; 8+ messages in thread
From: Daniel Jacobowitz @ 2002-02-28 12:30 UTC (permalink / raw)
  To: Andrew Cagney; +Cc: gdb-patches

On Thu, Feb 28, 2002 at 02:29:43PM -0500, Andrew Cagney wrote:
> >>I suspect there is a difference between not including defs.h and 
> >>unnecessarily duplicating common code.  My memory was that the signal 
> >>enums were to be moved to their own header file (so things like 
> >>gdbserver could include them).
> >>
> >>This gdb/gdbserver/signals.c looks largely like a copy of big chunks of 
> >>gdb/signals.c and other similar code.  I don't know that gdb developers 
> >>want to take on responsability for maintaining such duplication.
> >>
> >>Again, I think this can be cleaned up properly, but after the 5.2 branch 
> >>goes through.
> >
> >
> >What do you consider "properly", then?  For one minor thing, GDB wants
> >the conversion functions to return an `enum target_signal' whereas
> >gdbserver has no need to include "signals.h" in every file and only
> >wants an `int' back to send to the remote client.
> 
> I don't understand.  Presumably any file that needs to use one of the 
> signal conversion routines would include "signals.h" and get both the 
> enum and the function signature.  Beyond that, I don't think anyone is 
> going to notice if the code assigning the result to an int.  (I'm still 
> working on a -Wassign-enum flag for GCC :-^).

I'd rather have left the enum as opaque in gdbserver; nothing cares.  I
guess it doesn't matter at all.

> >Since you seem to strongly prefer sharing it, though, I suppose I could
> >do this instead:
> >  - create a new directory (``common''?) for files with well-defined
> >interfaces.
> >  - Move signals.c in there.   Create signals.h in there.
> >  - Add that directory to the search paths for both GDB and gdbserver.
> >
> >This would probably mean picking up the big signal to name conversion
> >table in gdbserver, which I wanted to avoid but no one else seemed
> >concerned about.
> 
> Not to long ago I suggested splitting up utils.c into smaller more 
> independant files and a directory (gdb/utils/).
> 
> We could do similar to signals.c.  We could even split the string 
> functions off from the conversion functions so that gdbserver didn't get 
> bloated by them.
> 
> However, not in the next three days :-)

OK, sounds good to me.  I'll discuss exactly where to split the files
after we branch.

> >Meanwhile?  Just leave signal handling in gdbserver crippled for the
> >upcoming branch?  OK, I guess.
> 
> Yes.  It isn't as bad as it sounds though.  The problem has always been 
> there so we're not exactly fixing a regression.  Besides, the next 
> release is only 22 weeks away.

My motivation to finish this before release was that this was the only
remaining set of tests which gdbserver should have been able to pass
and could not after my rewrite; it'll be built on a lot more platforms
now, and probably used more.  It didn't pass particularly many of
them beforehand.  This isn't terribly important to me, since I'm only
responsible for two distributions of GDB and both of them have patch
application mechanisms (:-)), but I suspect we'll see it reported
pretty frequently over the next 22 weeks.

I agree that the patch isn't ideal; but if a proper fix goes in the
mainline can we put this on the branch?

-- 
Daniel Jacobowitz                           Carnegie Mellon University
MontaVista Software                         Debian GNU/Linux Developer


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

* Re: [rfa] gdbserver signal handling
  2002-02-28 12:30           ` Daniel Jacobowitz
@ 2002-02-28 12:55             ` Andrew Cagney
  0 siblings, 0 replies; 8+ messages in thread
From: Andrew Cagney @ 2002-02-28 12:55 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: gdb-patches

> Yes.  It isn't as bad as it sounds though.  The problem has always been 
>> there so we're not exactly fixing a regression.  Besides, the next 
>> release is only 22 weeks away.
> 
> 
> My motivation to finish this before release was that this was the only
> remaining set of tests which gdbserver should have been able to pass
> and could not after my rewrite; it'll be built on a lot more platforms
> now, and probably used more.  It didn't pass particularly many of
> them beforehand.  This isn't terribly important to me, since I'm only
> responsible for two distributions of GDB and both of them have patch
> application mechanisms (:-)), but I suspect we'll see it reported
> pretty frequently over the next 22 weeks.

I'm more worred by the far too frequent ``gdbserver isn't built'' 
e-mail.  If someone sends a bug report indicating a problem in 
gdbserver's signal handling (indicating they managed to build 
gdbserver), I'll be breaking out the bubbly! :-)
> I agree that the patch isn't ideal; but if a proper fix goes in the
> mainline can we put this on the branch?

I'll leave that decision to when the proper fix is in the trunk.

Andrew



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

end of thread, other threads:[~2002-02-28 20:55 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-02-27 20:12 [rfa] gdbserver signal handling Daniel Jacobowitz
2002-02-28  7:01 ` Andrew Cagney
2002-02-28  8:55   ` Daniel Jacobowitz
2002-02-28  9:25     ` Andrew Cagney
2002-02-28  9:43       ` Daniel Jacobowitz
2002-02-28 11:29         ` Andrew Cagney
2002-02-28 12:30           ` Daniel Jacobowitz
2002-02-28 12:55             ` Andrew Cagney

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