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]

Re: [patch 1/9]#2 Rename `enum target_signal' to target_signal_t


On Thu, 02 Sep 2010 03:54:47 +0200, Pedro Alves wrote:
> The rest of the idea remains.  A target_signal_o array to hold
> all the possible gdb signals, and a target_signal becomes:
> 
> typedef const struct target_signal_o * target_signal;

While trying to clean it up for a check-in I found it as a no-go.

The current GDB code assumes zeroed target_signal field is TARGET_SIGNAL_0.
Additionally literal `0' is also compatible with such target_signal type.

While sure one can try to find such places of implicit zeroed initializations
it may more destabilize the GDB codebase than what the code-neutral compile
time sanity checking goal should have reached.

5192	      resume (currently_stepping (ecs->event_thread),
5193		      ecs->event_thread->stop_signal);
->
#6  0x000000000069cc5e in resume (step=0, sig=0x0) at infrun.c:1743
(gdb) p sig
$9 = (gdb_target_signal_t) 0x0

The struct { } solution
	[patch 3/9]#2 Change target_signal_t to a struct
	http://sourceware.org/ml/gdb-patches/2010-08/msg00483.html
had (unintentionally?) TARGET_SIGNAL_0 equivalent to a zeroed memory block.

Another possibility would be to make it a `(type *) 0L', `(type *) 1L' etc.

But in general if TARGET_SIGNAL_EQ() etc. operators are not acceptable I find
mostly the compile-time sanity checks as not feasible for plain C.  Trying
further so hard to avoid all the C obstacles is becoming contraproductive.

This part has become a sanity-checking one only.  It is no longer
a pre-requisite for the (planned) siginfo fix.


Attaching the two patches (bare rename + the conversion) FYI.  They have
a regression at least on fork-child-threads.exp.  They are based on:
	Re: [patch 1/9]#2 Rename `enum target_signal' to target_signal_t
	http://sourceware.org/ml/gdb-patches/2010-09/msg00078.html
	From: Pedro Alves <pedro at codesourcery dot com>


Thanks,
Jan
--- a/gdb/aix-thread.c
+++ b/gdb/aix-thread.c
@@ -970,7 +970,7 @@ aix_thread_detach (struct target_ops *ops, char *args, int from_tty)
 
 static void
 aix_thread_resume (struct target_ops *ops,
-                   ptid_t ptid, int step, enum target_signal sig)
+                   ptid_t ptid, int step, gdb_target_signal_t sig)
 {
   struct thread_info *thread;
   pthdb_tid_t tid[2];
--- a/gdb/amd64-linux-tdep.c
+++ b/gdb/amd64-linux-tdep.c
@@ -1230,7 +1230,7 @@ amd64_linux_syscall_record (struct regcache *regcache)
 int
 amd64_linux_record_signal (struct gdbarch *gdbarch,
                            struct regcache *regcache,
-                           enum target_signal signal)
+                           gdb_target_signal_t signal)
 {
   ULONGEST rsp;
 
--- a/gdb/bsd-uthread.c
+++ b/gdb/bsd-uthread.c
@@ -397,7 +397,7 @@ bsd_uthread_wait (struct target_ops *ops,
 
 static void
 bsd_uthread_resume (struct target_ops *ops,
-		    ptid_t ptid, int step, enum target_signal sig)
+		    ptid_t ptid, int step, gdb_target_signal_t sig)
 {
   /* Pass the request to the layer beneath.  */
   struct target_ops *beneath = find_target_beneath (ops);
--- a/gdb/common/gdb_signals.h
+++ b/gdb/common/gdb_signals.h
@@ -28,29 +28,29 @@
    targ_signal SIGNO has an equivalent ``host'' representation.  */
 /* FIXME: cagney/1999-11-22: The name below was chosen in preference
    to the shorter target_signal_p() because it is far less ambigious.
-   In this context ``target_signal'' refers to GDB's internal
+   In this context ``gdb_target_signal_t'' refers to GDB's internal
    representation of the target's set of signals while ``host signal''
    refers to the target operating system's signal.  Confused?  */
-extern int target_signal_to_host_p (enum target_signal signo);
+extern int target_signal_to_host_p (gdb_target_signal_t signo);
 
-/* Convert between host signal numbers and enum target_signal's.
+/* Convert between host signal numbers and gdb_target_signal_t's.
    target_signal_to_host() returns 0 and prints a warning() on GDB's
    console if SIGNO has no equivalent host representation.  */
 /* FIXME: cagney/1999-11-22: Here ``host'' is used incorrectly, it is
    refering to the target operating system's signal numbering.
-   Similarly, ``enum target_signal'' is named incorrectly, ``enum
+   Similarly, ``gdb_target_signal_t'' is named incorrectly, ``enum
    gdb_signal'' would probably be better as it is refering to GDB's
    internal representation of a target operating system's signal.  */
-extern enum target_signal target_signal_from_host (int);
-extern int target_signal_to_host (enum target_signal);
+extern gdb_target_signal_t target_signal_from_host (int);
+extern int target_signal_to_host (gdb_target_signal_t);
 
 /* Return the string for a signal.  */
-extern const char *target_signal_to_string (enum target_signal);
+extern const char *target_signal_to_string (gdb_target_signal_t);
 
 /* Return the name (SIGHUP, etc.) for a signal.  */
-extern const char *target_signal_to_name (enum target_signal);
+extern const char *target_signal_to_name (gdb_target_signal_t);
 
 /* Given a name (SIGHUP, etc.), return its signal.  */
-enum target_signal target_signal_from_name (const char *);
+gdb_target_signal_t target_signal_from_name (const char *);
 
 #endif /* COMMON_GDB_SIGNALS_H */
--- a/gdb/common/signals.c
+++ b/gdb/common/signals.c
@@ -48,7 +48,8 @@ struct gdbarch;
 # endif
 #endif
 
-/* This table must match in order and size the signals in enum target_signal.  */
+/* This table must match in order and size the signals in gdb_target_signal_t.
+   */
 
 static const struct {
   const char *name;
@@ -63,7 +64,7 @@ static const struct {
 
 /* Return the string for a signal.  */
 const char *
-target_signal_to_string (enum target_signal sig)
+target_signal_to_string (gdb_target_signal_t sig)
 {
   if ((int) sig >= TARGET_SIGNAL_FIRST && (int) sig <= TARGET_SIGNAL_LAST)
     return signals[sig].string;
@@ -73,7 +74,7 @@ target_signal_to_string (enum target_signal sig)
 
 /* Return the name for a signal.  */
 const char *
-target_signal_to_name (enum target_signal sig)
+target_signal_to_name (gdb_target_signal_t sig)
 {
   if ((int) sig >= TARGET_SIGNAL_FIRST && (int) sig <= TARGET_SIGNAL_LAST
       && signals[sig].name != NULL)
@@ -85,10 +86,10 @@ target_signal_to_name (enum target_signal sig)
 }
 
 /* Given a name, return its signal.  */
-enum target_signal
+gdb_target_signal_t
 target_signal_from_name (const char *name)
 {
-  enum target_signal sig;
+  gdb_target_signal_t sig;
 
   /* It's possible we also should allow "SIGCLD" as well as "SIGCHLD"
      for TARGET_SIGNAL_SIGCHLD.  SIGIOT, on the other hand, is more
@@ -98,7 +99,7 @@ target_signal_from_name (const char *name)
   /* This ugly cast brought to you by the native VAX compiler.  */
   for (sig = TARGET_SIGNAL_HUP;
        sig < TARGET_SIGNAL_LAST;
-       sig = (enum target_signal) ((int) sig + 1))
+       sig = (gdb_target_signal_t) ((int) sig + 1))
     if (signals[sig].name != NULL
 	&& strcmp (name, signals[sig].name) == 0)
       return sig;
@@ -110,7 +111,7 @@ target_signal_from_name (const char *name)
    a file called native-utils.c or unixwaitstatus-utils.c or whatever.  */
 
 /* Convert host signal to our signals.  */
-enum target_signal
+gdb_target_signal_t
 target_signal_from_host (int hostsig)
 {
   /* A switch statement would make sense but would require special kludges
@@ -340,12 +341,12 @@ target_signal_from_host (int hostsig)
     {
       /* This block of TARGET_SIGNAL_REALTIME value is in order.  */
       if (33 <= hostsig && hostsig <= 63)
-	return (enum target_signal)
+	return (gdb_target_signal_t)
 	  (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)
+	return (gdb_target_signal_t)
 	  (hostsig - 64 + (int) TARGET_SIGNAL_REALTIME_64);
       else
 	error ("GDB bug: target.c (target_signal_from_host): unrecognized real-time signal");
@@ -355,13 +356,13 @@ target_signal_from_host (int hostsig)
   return TARGET_SIGNAL_UNKNOWN;
 }
 
-/* Convert a OURSIG (an enum target_signal) to the form used by the
+/* Convert a OURSIG (an gdb_target_signal_t) 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,
+do_target_signal_to_host (gdb_target_signal_t oursig,
 			  int *oursig_ok)
 {
   int retsig;
@@ -626,7 +627,7 @@ do_target_signal_to_host (enum target_signal oursig,
 }
 
 int
-target_signal_to_host_p (enum target_signal oursig)
+target_signal_to_host_p (gdb_target_signal_t oursig)
 {
   int oursig_ok;
   do_target_signal_to_host (oursig, &oursig_ok);
@@ -634,7 +635,7 @@ target_signal_to_host_p (enum target_signal oursig)
 }
 
 int
-target_signal_to_host (enum target_signal oursig)
+target_signal_to_host (gdb_target_signal_t oursig)
 {
   int oursig_ok;
   int targ_signo = do_target_signal_to_host (oursig, &oursig_ok);
@@ -660,11 +661,11 @@ target_signal_to_host (enum target_signal oursig)
    lenient and allow 1-15 which should match host signal numbers on
    most systems.  Use of symbolic signal names is strongly encouraged.  */
 
-enum target_signal
+gdb_target_signal_t
 target_signal_from_command (int num)
 {
   if (num >= 1 && num <= 15)
-    return (enum target_signal) num;
+    return (gdb_target_signal_t) num;
   error ("Only signals 1-15 are valid as numeric signals.\n\
 Use \"info signals\" for a list of symbolic signals.");
 }
@@ -679,12 +680,13 @@ _initialize_signals (void)
 }
 
 int
-default_target_signal_to_host (struct gdbarch *gdbarch, enum target_signal ts)
+default_target_signal_to_host (struct gdbarch *gdbarch,
+			       gdb_target_signal_t ts)
 {
   return target_signal_to_host (ts);
 }
 
-enum target_signal
+gdb_target_signal_t
 default_target_signal_from_host (struct gdbarch *gdbarch, int signo)
 {
   return target_signal_from_host (signo);
--- a/gdb/corelow.c
+++ b/gdb/corelow.c
@@ -432,9 +432,9 @@ core_open (char *filename, int from_tty)
     {
       /* NOTE: target_signal_from_host() converts a target signal value
 	 into gdb's internal signal value.  Unfortunately gdb's internal
-	 value is called ``target_signal'' and this function got the
+	 value is called ``gdb_target_signal_t'' and this function got the
 	 name ..._from_host(). */
-      enum target_signal sig = (core_gdbarch != NULL
+      gdb_target_signal_t sig = (core_gdbarch != NULL
 		       ? gdbarch_target_signal_from_host (core_gdbarch, siggy)
 		       : target_signal_from_host (siggy));
 
--- a/gdb/darwin-nat.c
+++ b/gdb/darwin-nat.c
@@ -89,9 +89,9 @@ extern boolean_t exc_server (mach_msg_header_t *in, mach_msg_header_t *out);
 static void darwin_stop (ptid_t);
 
 static void darwin_resume_to (struct target_ops *ops, ptid_t ptid, int step,
-                              enum target_signal signal);
+                              gdb_target_signal_t signal);
 static void darwin_resume (ptid_t ptid, int step,
-			   enum target_signal signal);
+			   gdb_target_signal_t signal);
 
 static ptid_t darwin_wait_to (struct target_ops *ops, ptid_t ptid,
                               struct target_waitstatus *status, int options);
@@ -767,7 +767,7 @@ darwin_suspend_inferior_threads (struct inferior *inf)
 }
 
 static void
-darwin_resume (ptid_t ptid, int step, enum target_signal signal)
+darwin_resume (ptid_t ptid, int step, gdb_target_signal_t signal)
 {
   struct target_waitstatus status;
   int pid;
@@ -833,7 +833,7 @@ darwin_resume (ptid_t ptid, int step, enum target_signal signal)
 
 static void
 darwin_resume_to (struct target_ops *ops, ptid_t ptid, int step,
-                  enum target_signal signal)
+                  gdb_target_signal_t signal)
 {
   return darwin_resume (ptid, step, signal);
 }
--- a/gdb/defs.h
+++ b/gdb/defs.h
@@ -64,7 +64,7 @@
 
 #include "gdb_wchar.h"
 
-/* For ``enum target_signal''.  */
+/* For ``gdb_target_signal_t''.  */
 #include "gdb/signals.h"
 
 /* Just in case they're not defined in stdio.h.  */
--- a/gdb/fbsd-nat.c
+++ b/gdb/fbsd-nat.c
@@ -150,7 +150,7 @@ find_signalled_thread (struct thread_info *info, void *data)
   return 0;
 }
 
-static enum target_signal
+static gdb_target_signal_t
 find_stop_signal (void)
 {
   struct thread_info *info =
--- a/gdb/fork-child.c
+++ b/gdb/fork-child.c
@@ -448,7 +448,7 @@ startup_inferior (int ntraps)
 
   while (1)
     {
-      enum target_signal resume_signal = TARGET_SIGNAL_0;
+      gdb_target_signal_t resume_signal = TARGET_SIGNAL_0;
       ptid_t event_ptid;
 
       struct target_waitstatus ws;
--- a/gdb/gdbarch.c
+++ b/gdb/gdbarch.c
@@ -3507,7 +3507,7 @@ gdbarch_process_record_signal_p (struct gdbarch *gdbarch)
 }
 
 int
-gdbarch_process_record_signal (struct gdbarch *gdbarch, struct regcache *regcache, enum target_signal signal)
+gdbarch_process_record_signal (struct gdbarch *gdbarch, struct regcache *regcache, gdb_target_signal_t signal)
 {
   gdb_assert (gdbarch != NULL);
   gdb_assert (gdbarch->process_record_signal != NULL);
@@ -3523,7 +3523,7 @@ set_gdbarch_process_record_signal (struct gdbarch *gdbarch,
   gdbarch->process_record_signal = process_record_signal;
 }
 
-enum target_signal
+gdb_target_signal_t
 gdbarch_target_signal_from_host (struct gdbarch *gdbarch, int signo)
 {
   gdb_assert (gdbarch != NULL);
@@ -3541,7 +3541,7 @@ set_gdbarch_target_signal_from_host (struct gdbarch *gdbarch,
 }
 
 int
-gdbarch_target_signal_to_host (struct gdbarch *gdbarch, enum target_signal ts)
+gdbarch_target_signal_to_host (struct gdbarch *gdbarch, gdb_target_signal_t ts)
 {
   gdb_assert (gdbarch != NULL);
   gdb_assert (gdbarch->target_signal_to_host != NULL);
--- a/gdb/gdbarch.h
+++ b/gdb/gdbarch.h
@@ -880,22 +880,22 @@ extern void set_gdbarch_process_record (struct gdbarch *gdbarch, gdbarch_process
 
 extern int gdbarch_process_record_signal_p (struct gdbarch *gdbarch);
 
-typedef int (gdbarch_process_record_signal_ftype) (struct gdbarch *gdbarch, struct regcache *regcache, enum target_signal signal);
-extern int gdbarch_process_record_signal (struct gdbarch *gdbarch, struct regcache *regcache, enum target_signal signal);
+typedef int (gdbarch_process_record_signal_ftype) (struct gdbarch *gdbarch, struct regcache *regcache, gdb_target_signal_t signal);
+extern int gdbarch_process_record_signal (struct gdbarch *gdbarch, struct regcache *regcache, gdb_target_signal_t signal);
 extern void set_gdbarch_process_record_signal (struct gdbarch *gdbarch, gdbarch_process_record_signal_ftype *process_record_signal);
 
 /* Signal translation: translate inferior's signal (host's) number into
    GDB's representation. */
 
-typedef enum target_signal (gdbarch_target_signal_from_host_ftype) (struct gdbarch *gdbarch, int signo);
-extern enum target_signal gdbarch_target_signal_from_host (struct gdbarch *gdbarch, int signo);
+typedef gdb_target_signal_t (gdbarch_target_signal_from_host_ftype) (struct gdbarch *gdbarch, int signo);
+extern gdb_target_signal_t gdbarch_target_signal_from_host (struct gdbarch *gdbarch, int signo);
 extern void set_gdbarch_target_signal_from_host (struct gdbarch *gdbarch, gdbarch_target_signal_from_host_ftype *target_signal_from_host);
 
 /* Signal translation: translate GDB's signal number into inferior's host
    signal number. */
 
-typedef int (gdbarch_target_signal_to_host_ftype) (struct gdbarch *gdbarch, enum target_signal ts);
-extern int gdbarch_target_signal_to_host (struct gdbarch *gdbarch, enum target_signal ts);
+typedef int (gdbarch_target_signal_to_host_ftype) (struct gdbarch *gdbarch, gdb_target_signal_t ts);
+extern int gdbarch_target_signal_to_host (struct gdbarch *gdbarch, gdb_target_signal_t ts);
 extern void set_gdbarch_target_signal_to_host (struct gdbarch *gdbarch, gdbarch_target_signal_to_host_ftype *target_signal_to_host);
 
 /* Extra signal info inspection.
--- a/gdb/gdbarch.sh
+++ b/gdb/gdbarch.sh
@@ -748,14 +748,14 @@ M:int:process_record:struct regcache *regcache, CORE_ADDR addr:regcache, addr
 
 # Save process state after a signal.
 # Return -1 if something goes wrong, 0 otherwise.
-M:int:process_record_signal:struct regcache *regcache, enum target_signal signal:regcache, signal
+M:int:process_record_signal:struct regcache *regcache, gdb_target_signal_t signal:regcache, signal
 
 # Signal translation: translate inferior's signal (host's) number into
 # GDB's representation.
-m:enum target_signal:target_signal_from_host:int signo:signo::default_target_signal_from_host::0
+m:gdb_target_signal_t:target_signal_from_host:int signo:signo::default_target_signal_from_host::0
 # Signal translation: translate GDB's signal number into inferior's host
 # signal number.
-m:int:target_signal_to_host:enum target_signal ts:ts::default_target_signal_to_host::0
+m:int:target_signal_to_host:gdb_target_signal_t ts:ts::default_target_signal_to_host::0
 
 # Extra signal info inspection.
 #
--- a/gdb/gdbserver/target.h
+++ b/gdb/gdbserver/target.h
@@ -54,7 +54,7 @@ struct thread_resume
      thread.  If stopping a thread, and this is 0, the target should
      stop the thread however it best decides to (e.g., SIGSTOP on
      linux; SuspendThread on win32).  This is a host signal value (not
-     enum target_signal).  */
+     gdb_target_signal_t).  */
   int sig;
 };
 
@@ -98,7 +98,7 @@ struct target_waitstatus
     union
       {
 	int integer;
-	enum target_signal sig;
+	gdb_target_signal_t sig;
 	ptid_t related_pid;
 	char *execd_pathname;
       }
--- a/gdb/gdbserver/win32-low.c
+++ b/gdb/gdbserver/win32-low.c
@@ -72,7 +72,7 @@ static int attaching = 0;
 static HANDLE current_process_handle = NULL;
 static DWORD current_process_id = 0;
 static DWORD main_thread_id = 0;
-static enum target_signal last_sig = TARGET_SIGNAL_0;
+static gdb_target_signal_t last_sig = TARGET_SIGNAL_0;
 
 /* The current debug event from WaitForDebugEvent.  */
 static DEBUG_EVENT current_event;
@@ -802,7 +802,7 @@ static void
 win32_resume (struct thread_resume *resume_info, size_t n)
 {
   DWORD tid;
-  enum target_signal sig;
+  gdb_target_signal_t sig;
   int step;
   win32_thread_info *th;
   DWORD continue_status = DBG_CONTINUE;
--- a/gdb/gdbthread.h
+++ b/gdb/gdbthread.h
@@ -176,7 +176,7 @@ struct thread_info
   struct target_waitstatus pending_follow;
 
   /* Last signal that the inferior received (why it stopped).  */
-  enum target_signal stop_signal;
+  gdb_target_signal_t stop_signal;
 
   /* Chain containing status of breakpoint(s) the thread stopped
      at.  */
--- a/gdb/gnu-nat.c
+++ b/gdb/gnu-nat.c
@@ -107,7 +107,7 @@ void inf_resume (struct inf *inf);
 void inf_set_step_thread (struct inf *inf, struct proc *proc);
 void inf_detach (struct inf *inf);
 void inf_attach (struct inf *inf, int pid);
-void inf_signal (struct inf *inf, enum target_signal sig);
+void inf_signal (struct inf *inf, gdb_target_signal_t sig);
 void inf_continue (struct inf *inf);
 
 #define inf_debug(_inf, msg, args...) \
@@ -1318,7 +1318,7 @@ inf_restore_exc_ports (struct inf *inf)
    signal 0, will continue it.  INF is assumed to be in a paused state, and
    the resume_sc's of INF's threads may be affected.  */
 void
-inf_signal (struct inf *inf, enum target_signal sig)
+inf_signal (struct inf *inf, gdb_target_signal_t sig)
 {
   error_t err = 0;
   int host_sig = target_signal_to_host (sig);
@@ -1965,7 +1965,7 @@ port_msgs_queued (mach_port_t port)
  */
 static void
 gnu_resume (struct target_ops *ops,
-	    ptid_t ptid, int step, enum target_signal sig)
+	    ptid_t ptid, int step, gdb_target_signal_t sig)
 {
   struct proc *step_thread = 0;
   int resume_all;
--- a/gdb/go32-nat.c
+++ b/gdb/go32-nat.c
@@ -238,7 +238,7 @@ static void go32_attach (struct target_ops *ops, char *args, int from_tty);
 static void go32_detach (struct target_ops *ops, char *args, int from_tty);
 static void go32_resume (struct target_ops *ops,
 			 ptid_t ptid, int step,
-			 enum target_signal siggnal);
+			 gdb_target_signal_t siggnal);
 static void go32_fetch_registers (struct target_ops *ops,
 				  struct regcache *, int regno);
 static void store_register (const struct regcache *, int regno);
@@ -309,7 +309,7 @@ regno_mapping[] =
 static struct
   {
     int go32_sig;
-    enum target_signal gdb_sig;
+    gdb_target_signal_t gdb_sig;
   }
 sig_map[] =
 {
@@ -343,7 +343,7 @@ sig_map[] =
 };
 
 static struct {
-  enum target_signal gdb_sig;
+  gdb_target_signal_t gdb_sig;
   int djgpp_excepno;
 } excepn_map[] = {
   {TARGET_SIGNAL_0, -1},
@@ -391,7 +391,7 @@ static int resume_signal = -1;
 
 static void
 go32_resume (struct target_ops *ops,
-	     ptid_t ptid, int step, enum target_signal siggnal)
+	     ptid_t ptid, int step, gdb_target_signal_t siggnal)
 {
   int i;
 
--- a/gdb/hpux-thread.c
+++ b/gdb/hpux-thread.c
@@ -169,7 +169,7 @@ hpux_thread_detach (struct target_ops *ops, char *args, int from_tty)
 
 static void
 hpux_thread_resume (struct target_ops *ops,
-		    ptid_t ptid, int step, enum target_signal signo)
+		    ptid_t ptid, int step, gdb_target_signal_t signo)
 {
   struct cleanup *old_chain;
 
--- a/gdb/i386-linux-nat.c
+++ b/gdb/i386-linux-nat.c
@@ -829,7 +829,7 @@ static const unsigned char linux_syscall[] = { 0xcd, 0x80 };
 
 static void
 i386_linux_resume (struct target_ops *ops,
-		   ptid_t ptid, int step, enum target_signal signal)
+		   ptid_t ptid, int step, gdb_target_signal_t signal)
 {
   int pid = PIDGET (ptid);
 
--- a/gdb/i386-linux-tdep.c
+++ b/gdb/i386-linux-tdep.c
@@ -463,7 +463,7 @@ i386_linux_intx80_sysenter_record (struct regcache *regcache)
 int
 i386_linux_record_signal (struct gdbarch *gdbarch,
                           struct regcache *regcache,
-                          enum target_signal signal)
+                          gdb_target_signal_t signal)
 {
   ULONGEST esp;
 
--- a/gdb/i386fbsd-nat.c
+++ b/gdb/i386fbsd-nat.c
@@ -37,7 +37,7 @@
 
 static void
 i386fbsd_resume (struct target_ops *ops,
-		 ptid_t ptid, int step, enum target_signal signal)
+		 ptid_t ptid, int step, gdb_target_signal_t signal)
 {
   pid_t pid = ptid_get_pid (ptid);
   int request = PT_STEP;
--- a/gdb/inf-ptrace.c
+++ b/gdb/inf-ptrace.c
@@ -350,7 +350,7 @@ inf_ptrace_stop (ptid_t ptid)
 
 static void
 inf_ptrace_resume (struct target_ops *ops,
-		   ptid_t ptid, int step, enum target_signal signal)
+		   ptid_t ptid, int step, gdb_target_signal_t signal)
 {
   pid_t pid = ptid_get_pid (ptid);
   int request;
--- a/gdb/inf-ttrace.c
+++ b/gdb/inf-ttrace.c
@@ -867,7 +867,7 @@ inf_ttrace_resume_callback (struct thread_info *info, void *arg)
 
 static void
 inf_ttrace_resume (struct target_ops *ops,
-		   ptid_t ptid, int step, enum target_signal signal)
+		   ptid_t ptid, int step, gdb_target_signal_t signal)
 {
   int resume_all;
   ttreq_t request = step ? TT_LWP_SINGLE : TT_LWP_CONTINUE;
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -1161,7 +1161,7 @@ go_command (char *line_no, int from_tty)
 static void
 signal_command (char *signum_exp, int from_tty)
 {
-  enum target_signal oursig;
+  gdb_target_signal_t oursig;
   int async_exec = 0;
 
   dont_repeat ();		/* Too dangerous.  */
--- a/gdb/inferior.h
+++ b/gdb/inferior.h
@@ -35,7 +35,7 @@ struct terminal_info;
 /* For bpstat.  */
 #include "breakpoint.h"
 
-/* For enum target_signal.  */
+/* For gdb_target_signal_t.  */
 #include "target.h"
 
 /* For struct frame_id.  */
@@ -143,7 +143,7 @@ extern int sync_execution;
 
 extern void clear_proceed_status (void);
 
-extern void proceed (CORE_ADDR, enum target_signal, int);
+extern void proceed (CORE_ADDR, gdb_target_signal_t, int);
 
 extern int sched_multi;
 
@@ -198,7 +198,7 @@ extern void reopen_exec_file (void);
 /* The `resume' routine should only be called in special circumstances.
    Normally, use `proceed', which handles a lot of bookkeeping.  */
 
-extern void resume (int, enum target_signal);
+extern void resume (int, gdb_target_signal_t);
 
 /* From misc files */
 
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -59,7 +59,7 @@ static void signals_info (char *, int);
 
 static void handle_command (char *, int);
 
-static void sig_print_info (enum target_signal);
+static void sig_print_info (gdb_target_signal_t);
 
 static void sig_print_header (void);
 
@@ -85,11 +85,11 @@ static int prepare_to_proceed (int);
 
 static void print_exited_reason (int exitstatus);
 
-static void print_signal_exited_reason (enum target_signal siggnal);
+static void print_signal_exited_reason (gdb_target_signal_t siggnal);
 
 static void print_no_history_reason (void);
 
-static void print_signal_received_reason (enum target_signal siggnal);
+static void print_signal_received_reason (gdb_target_signal_t siggnal);
 
 static void print_end_stepping_range_reason (void);
 
@@ -1307,7 +1307,7 @@ write_memory_ptid (ptid_t ptid, CORE_ADDR memaddr, const gdb_byte *myaddr, int l
 }
 
 static void
-displaced_step_fixup (ptid_t event_ptid, enum target_signal signal)
+displaced_step_fixup (ptid_t event_ptid, gdb_target_signal_t signal)
 {
   struct cleanup *old_cleanups;
   struct displaced_step_inferior_state *displaced
@@ -1548,7 +1548,7 @@ maybe_software_singlestep (struct gdbarch *gdbarch, CORE_ADDR pc)
    STEP nonzero if we should step (zero to continue instead).
    SIG is the signal to give the inferior (zero for none).  */
 void
-resume (int step, enum target_signal sig)
+resume (int step, gdb_target_signal_t sig)
 {
   int should_resume = 1;
   struct cleanup *old_cleanups = make_cleanup (resume_cleanups, 0);
@@ -1905,7 +1905,7 @@ prepare_to_proceed (int step)
    You should call clear_proceed_status before calling proceed.  */
 
 void
-proceed (CORE_ADDR addr, enum target_signal siggnal, int step)
+proceed (CORE_ADDR addr, gdb_target_signal_t siggnal, int step)
 {
   struct regcache *regcache;
   struct gdbarch *gdbarch;
@@ -3605,7 +3605,7 @@ targets should add new threads to the thread list themselves in non-stop mode.")
 
 	     if (new_singlestep_pc != singlestep_pc)
 	       {
-		 enum target_signal stop_signal;
+		 gdb_target_signal_t stop_signal;
 
 		 if (debug_infrun)
 		   fprintf_unfiltered (gdb_stdlog, "infrun: unexpected thread,"
@@ -5235,7 +5235,7 @@ print_end_stepping_range_reason (void)
 /* The inferior was terminated by a signal, print why it stopped.  */
 
 static void
-print_signal_exited_reason (enum target_signal siggnal)
+print_signal_exited_reason (gdb_target_signal_t siggnal)
 {
   annotate_signalled ();
   if (ui_out_is_mi_like_p (uiout))
@@ -5285,7 +5285,7 @@ print_exited_reason (int exitstatus)
    tells us to print about it. */
 
 static void
-print_signal_received_reason (enum target_signal siggnal)
+print_signal_received_reason (gdb_target_signal_t siggnal)
 {
   annotate_signal ();
 
@@ -5646,7 +5646,7 @@ Signal        Stop\tPrint\tPass to program\tDescription\n"));
 }
 
 static void
-sig_print_info (enum target_signal oursig)
+sig_print_info (gdb_target_signal_t oursig)
 {
   const char *name = target_signal_to_name (oursig);
   int name_padding = 13 - strlen (name);
@@ -5670,7 +5670,7 @@ handle_command (char *args, int from_tty)
   char **argv;
   int digits, wordlen;
   int sigfirst, signum, siglast;
-  enum target_signal oursig;
+  gdb_target_signal_t oursig;
   int allsigs;
   int nsigs;
   unsigned char *sigs;
@@ -5790,14 +5790,15 @@ handle_command (char *args, int from_tty)
 
       for (signum = sigfirst; signum >= 0 && signum <= siglast; signum++)
 	{
-	  switch ((enum target_signal) signum)
+	  switch ((gdb_target_signal_t) signum)
 	    {
 	    case TARGET_SIGNAL_TRAP:
 	    case TARGET_SIGNAL_INT:
 	      if (!allsigs && !sigs[signum])
 		{
 		  if (query (_("%s is used by the debugger.\n\
-Are you sure you want to change it? "), target_signal_to_name ((enum target_signal) signum)))
+Are you sure you want to change it? "),
+			target_signal_to_name ((gdb_target_signal_t) signum)))
 		    {
 		      sigs[signum] = 1;
 		    }
@@ -5865,7 +5866,7 @@ xdb_handle_command (char *args, int from_tty)
       if (argBuf)
 	{
 	  int validFlag = 1;
-	  enum target_signal oursig;
+	  gdb_target_signal_t oursig;
 
 	  oursig = target_signal_from_name (argv[0]);
 	  memset (argBuf, 0, bufLen);
@@ -5916,7 +5917,7 @@ xdb_handle_command (char *args, int from_tty)
 static void
 signals_info (char *signum_exp, int from_tty)
 {
-  enum target_signal oursig;
+  gdb_target_signal_t oursig;
 
   sig_print_header ();
 
@@ -5938,7 +5939,7 @@ signals_info (char *signum_exp, int from_tty)
   /* These ugly casts brought to you by the native VAX compiler.  */
   for (oursig = TARGET_SIGNAL_FIRST;
        (int) oursig < (int) TARGET_SIGNAL_LAST;
-       oursig = (enum target_signal) ((int) oursig + 1))
+       oursig = (gdb_target_signal_t) ((int) oursig + 1))
     {
       QUIT;
 
@@ -6034,7 +6035,7 @@ siginfo_make_value (struct gdbarch *gdbarch, struct internalvar *var)
 
 struct inferior_thread_state
 {
-  enum target_signal stop_signal;
+  gdb_target_signal_t stop_signal;
   CORE_ADDR stop_pc;
   struct regcache *registers;
 };
--- a/gdb/linux-nat.c
+++ b/gdb/linux-nat.c
@@ -1581,7 +1581,7 @@ linux_nat_attach (struct target_ops *ops, char *args, int from_tty)
 	}
       else if (WIFSIGNALED (status))
 	{
-	  enum target_signal signo;
+	  gdb_target_signal_t signo;
 
 	  target_terminal_ours ();
 	  target_mourn_inferior ();
@@ -1617,7 +1617,7 @@ linux_nat_attach (struct target_ops *ops, char *args, int from_tty)
 static int
 get_pending_status (struct lwp_info *lp, int *status)
 {
-  enum target_signal signo = TARGET_SIGNAL_0;
+  gdb_target_signal_t signo = TARGET_SIGNAL_0;
 
   /* If we paused threads momentarily, we may have stored pending
      events in lp->status or lp->waitstatus (see stop_wait_callback),
@@ -1863,7 +1863,7 @@ resume_set_callback (struct lwp_info *lp, void *data)
 
 static void
 linux_nat_resume (struct target_ops *ops,
-		  ptid_t ptid, int step, enum target_signal signo)
+		  ptid_t ptid, int step, gdb_target_signal_t signo)
 {
   sigset_t prev_mask;
   struct lwp_info *lp;
@@ -1908,7 +1908,7 @@ linux_nat_resume (struct target_ops *ops,
 
   if (lp->status && WIFSTOPPED (lp->status))
     {
-      enum target_signal saved_signo;
+      gdb_target_signal_t saved_signo;
       struct inferior *inf;
 
       inf = find_inferior_pid (ptid_get_pid (lp->ptid));
@@ -2268,7 +2268,7 @@ linux_handle_extended_wait (struct lwp_info *lp, int status,
 	     catchpoints.  */
 	  if (!stopping)
 	    {
-	      enum target_signal signo;
+	      gdb_target_signal_t signo;
 
 	      new_lp->stopped = 0;
 	      new_lp->resumed = 1;
@@ -3569,7 +3569,7 @@ retry:
 
   if (WIFSTOPPED (status))
     {
-      enum target_signal signo = target_signal_from_host (WSTOPSIG (status));
+      gdb_target_signal_t signo = target_signal_from_host (WSTOPSIG (status));
       struct inferior *inf;
 
       inf = find_inferior_pid (ptid_get_pid (lp->ptid));
@@ -4169,7 +4169,7 @@ find_signalled_thread (struct thread_info *info, void *data)
   return 0;
 }
 
-static enum target_signal
+static gdb_target_signal_t
 find_stop_signal (void)
 {
   struct thread_info *info =
@@ -4187,7 +4187,7 @@ find_stop_signal (void)
 static char *
 linux_nat_do_thread_registers (bfd *obfd, ptid_t ptid,
 			       char *note_data, int *note_size,
-			       enum target_signal stop_signal)
+			       gdb_target_signal_t stop_signal)
 {
   unsigned long lwp = ptid_get_lwp (ptid);
   struct gdbarch *gdbarch = target_gdbarch;
@@ -4280,7 +4280,7 @@ struct linux_nat_corefile_thread_data
   char *note_data;
   int *note_size;
   int num_notes;
-  enum target_signal stop_signal;
+  gdb_target_signal_t stop_signal;
 };
 
 /* Called by gdbthread.c once per thread.  Records the thread's
--- a/gdb/linux-thread-db.c
+++ b/gdb/linux-thread-db.c
@@ -1650,7 +1650,7 @@ thread_db_get_ada_task_ptid (long lwp, long thread)
 
 static void
 thread_db_resume (struct target_ops *ops,
-		  ptid_t ptid, int step, enum target_signal signo)
+		  ptid_t ptid, int step, gdb_target_signal_t signo)
 {
   struct target_ops *beneath = find_target_beneath (ops);
   struct thread_db_info *info;
--- a/gdb/monitor.c
+++ b/gdb/monitor.c
@@ -928,7 +928,7 @@ monitor_supply_register (struct regcache *regcache, int regno, char *valstr)
 
 static void
 monitor_resume (struct target_ops *ops,
-		ptid_t ptid, int step, enum target_signal sig)
+		ptid_t ptid, int step, gdb_target_signal_t sig)
 {
   /* Some monitors require a different command when starting a program */
   monitor_debug ("MON resume\n");
--- a/gdb/nto-procfs.c
+++ b/gdb/nto-procfs.c
@@ -952,7 +952,7 @@ procfs_remove_hw_breakpoint (struct gdbarch *gdbarch,
 
 static void
 procfs_resume (struct target_ops *ops,
-	       ptid_t ptid, int step, enum target_signal signo)
+	       ptid_t ptid, int step, gdb_target_signal_t signo)
 {
   int signal_to_pass;
   procfs_status status;
--- a/gdb/procfs.c
+++ b/gdb/procfs.c
@@ -113,7 +113,7 @@
 static void procfs_attach (struct target_ops *, char *, int);
 static void procfs_detach (struct target_ops *, char *, int);
 static void procfs_resume (struct target_ops *,
-			   ptid_t, int, enum target_signal);
+			   ptid_t, int, gdb_target_signal_t);
 static void procfs_stop (ptid_t);
 static void procfs_files_info (struct target_ops *);
 static void procfs_fetch_registers (struct target_ops *,
@@ -4380,7 +4380,7 @@ make_signal_thread_runnable (procinfo *process, procinfo *pi, void *ptr)
 
 static void
 procfs_resume (struct target_ops *ops,
-	       ptid_t ptid, int step, enum target_signal signo)
+	       ptid_t ptid, int step, gdb_target_signal_t signo)
 {
   procinfo *pi, *thread;
   int native_signo;
@@ -5616,7 +5616,7 @@ procfs_first_available (void)
 static char *
 procfs_do_thread_registers (bfd *obfd, ptid_t ptid,
 			    char *note_data, int *note_size,
-			    enum target_signal stop_signal)
+			    gdb_target_signal_t stop_signal)
 {
   struct regcache *regcache = get_thread_regcache (ptid);
   gdb_gregset_t gregs;
@@ -5667,7 +5667,7 @@ struct procfs_corefile_thread_data {
   bfd *obfd;
   char *note_data;
   int *note_size;
-  enum target_signal stop_signal;
+  gdb_target_signal_t stop_signal;
 };
 
 static int
@@ -5697,7 +5697,7 @@ find_signalled_thread (struct thread_info *info, void *data)
   return 0;
 }
 
-static enum target_signal
+static gdb_target_signal_t
 find_stop_signal (void)
 {
   struct thread_info *info =
@@ -5723,7 +5723,7 @@ procfs_make_note_section (bfd *obfd, int *note_size)
   struct procfs_corefile_thread_data thread_args;
   gdb_byte *auxv;
   int auxv_len;
-  enum target_signal stop_signal;
+  gdb_target_signal_t stop_signal;
 
   if (get_exec_file (0))
     {
--- a/gdb/record.c
+++ b/gdb/record.c
@@ -98,7 +98,7 @@ struct record_reg_entry
 
 struct record_end_entry
 {
-  enum target_signal sigval;
+  gdb_target_signal_t sigval;
   ULONGEST insn_num;
 };
 
@@ -207,7 +207,7 @@ static struct target_ops record_core_ops;
 /* The beneath function pointers.  */
 static struct target_ops *record_beneath_to_resume_ops;
 static void (*record_beneath_to_resume) (struct target_ops *, ptid_t, int,
-                                         enum target_signal);
+                                         gdb_target_signal_t);
 static struct target_ops *record_beneath_to_wait_ops;
 static ptid_t (*record_beneath_to_wait) (struct target_ops *, ptid_t,
 					 struct target_waitstatus *,
@@ -578,7 +578,7 @@ record_arch_list_cleanups (void *ignore)
    record_arch_list, and add it to record_list.  */
 
 static int
-record_message (struct regcache *regcache, enum target_signal signal)
+record_message (struct regcache *regcache, gdb_target_signal_t signal)
 {
   int ret;
   struct gdbarch *gdbarch = get_regcache_arch (regcache);
@@ -649,7 +649,7 @@ record_message (struct regcache *regcache, enum target_signal signal)
 
 struct record_message_args {
   struct regcache *regcache;
-  enum target_signal signal;
+  gdb_target_signal_t signal;
 };
 
 static int
@@ -662,7 +662,7 @@ record_message_wrapper (void *args)
 
 static int
 record_message_wrapper_safe (struct regcache *regcache,
-                             enum target_signal signal)
+                             gdb_target_signal_t signal)
 {
   struct record_message_args args;
 
@@ -783,7 +783,7 @@ record_exec_insn (struct regcache *regcache, struct gdbarch *gdbarch,
 
 static struct target_ops *tmp_to_resume_ops;
 static void (*tmp_to_resume) (struct target_ops *, ptid_t, int,
-			      enum target_signal);
+			      gdb_target_signal_t);
 static struct target_ops *tmp_to_wait_ops;
 static ptid_t (*tmp_to_wait) (struct target_ops *, ptid_t,
 			      struct target_waitstatus *,
@@ -1005,7 +1005,7 @@ static int record_resume_step = 0;
 
 static void
 record_resume (struct target_ops *ops, ptid_t ptid, int step,
-               enum target_signal signal)
+               gdb_target_signal_t signal)
 {
   record_resume_step = step;
 
@@ -1746,7 +1746,7 @@ init_record_ops (void)
 
 static void
 record_core_resume (struct target_ops *ops, ptid_t ptid, int step,
-                    enum target_signal signal)
+                    gdb_target_signal_t signal)
 {
   record_resume_step = step;
 }
--- a/gdb/remote-m32r-sdi.c
+++ b/gdb/remote-m32r-sdi.c
@@ -453,7 +453,7 @@ m32r_close (int quitting)
 
 static void
 m32r_resume (struct target_ops *ops,
-	     ptid_t ptid, int step, enum target_signal sig)
+	     ptid_t ptid, int step, gdb_target_signal_t sig)
 {
   unsigned long pc_addr, bp_addr, ab_addr;
   int ib_breakpoints;
--- a/gdb/remote-mips.c
+++ b/gdb/remote-mips.c
@@ -1744,7 +1744,7 @@ mips_detach (struct target_ops *ops, char *args, int from_tty)
 
 static void
 mips_resume (struct target_ops *ops,
-	     ptid_t ptid, int step, enum target_signal siggnal)
+	     ptid_t ptid, int step, gdb_target_signal_t siggnal)
 {
   int err;
 
@@ -1758,7 +1758,7 @@ mips_resume (struct target_ops *ops,
 /* Return the signal corresponding to SIG, where SIG is the number which
    the MIPS protocol uses for the signal.  */
 
-static enum target_signal
+static gdb_target_signal_t
 mips_signal_from_protocol (int sig)
 {
   /* We allow a few more signals than the IDT board actually returns, on
@@ -1772,7 +1772,7 @@ mips_signal_from_protocol (int sig)
      from MIPS signal numbers, not host ones.  Our internal numbers
      match the MIPS numbers for the signals the board can return, which
      are: SIGINT, SIGSEGV, SIGBUS, SIGILL, SIGFPE, SIGTRAP.  */
-  return (enum target_signal) sig;
+  return (gdb_target_signal_t) sig;
 }
 
 /* Set the register designated by REGNO to the value designated by VALUE.  */
--- a/gdb/remote-sim.c
+++ b/gdb/remote-sim.c
@@ -119,7 +119,7 @@ struct sim_inferior_data {
   ptid_t remote_sim_ptid;
 
   /* Signal with which to resume.  */
-  enum target_signal resume_siggnal;
+  gdb_target_signal_t resume_siggnal;
 
   /* Flag which indicates whether resume should step or not.  */
   int resume_step;
@@ -825,7 +825,7 @@ gdbsim_detach (struct target_ops *ops, char *args, int from_tty)
 
 struct resume_data
 {
-  enum target_signal siggnal;
+  gdb_target_signal_t siggnal;
   int step;
 };
 
@@ -854,7 +854,7 @@ gdbsim_resume_inferior (struct inferior *inf, void *arg)
 
 static void
 gdbsim_resume (struct target_ops *ops,
-	       ptid_t ptid, int step, enum target_signal siggnal)
+	       ptid_t ptid, int step, gdb_target_signal_t siggnal)
 {
   struct resume_data rd;
   struct sim_inferior_data *sim_data
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -4384,7 +4384,7 @@ remote_vcont_probe (struct remote_state *rs)
 
 static char *
 append_resumption (char *p, char *endp,
-		   ptid_t ptid, int step, enum target_signal siggnal)
+		   ptid_t ptid, int step, gdb_target_signal_t siggnal)
 {
   struct remote_state *rs = get_remote_state ();
 
@@ -4427,7 +4427,7 @@ append_resumption (char *p, char *endp,
    moment.  */
 
 static int
-remote_vcont_resume (ptid_t ptid, int step, enum target_signal siggnal)
+remote_vcont_resume (ptid_t ptid, int step, gdb_target_signal_t siggnal)
 {
   struct remote_state *rs = get_remote_state ();
   char *p;
@@ -4495,13 +4495,13 @@ remote_vcont_resume (ptid_t ptid, int step, enum target_signal siggnal)
 
 /* Tell the remote machine to resume.  */
 
-static enum target_signal last_sent_signal = TARGET_SIGNAL_0;
+static gdb_target_signal_t last_sent_signal = TARGET_SIGNAL_0;
 
 static int last_sent_step;
 
 static void
 remote_resume (struct target_ops *ops,
-	       ptid_t ptid, int step, enum target_signal siggnal)
+	       ptid_t ptid, int step, gdb_target_signal_t siggnal)
 {
   struct remote_state *rs = get_remote_state ();
   char *buf;
@@ -5155,7 +5155,7 @@ Packet: '%s'\n"),
       else
 	{
 	  event->ws.kind = TARGET_WAITKIND_STOPPED;
-	  event->ws.value.sig = (enum target_signal)
+	  event->ws.value.sig = (gdb_target_signal_t)
 	    (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
 	}
       break;
@@ -5181,7 +5181,7 @@ Packet: '%s'\n"),
 	  {
 	    /* The remote process exited with a signal.  */
 	    event->ws.kind = TARGET_WAITKIND_SIGNALLED;
-	    event->ws.value.sig = (enum target_signal) value;
+	    event->ws.value.sig = (gdb_target_signal_t) value;
 	  }
 
 	/* If no process is specified, assume inferior_ptid.  */
--- a/gdb/sol-thread.c
+++ b/gdb/sol-thread.c
@@ -348,7 +348,7 @@ sol_thread_detach (struct target_ops *ops, char *args, int from_tty)
 
 static void
 sol_thread_resume (struct target_ops *ops,
-		   ptid_t ptid, int step, enum target_signal signo)
+		   ptid_t ptid, int step, gdb_target_signal_t signo)
 {
   struct cleanup *old_chain;
   struct target_ops *beneath = find_target_beneath (ops);
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -2407,7 +2407,7 @@ target_pid_to_str (ptid_t ptid)
 }
 
 void
-target_resume (ptid_t ptid, int step, enum target_signal signal)
+target_resume (ptid_t ptid, int step, gdb_target_signal_t signal)
 {
   struct target_ops *t;
 
--- a/gdb/target.h
+++ b/gdb/target.h
@@ -162,7 +162,7 @@ struct target_waitstatus
     union
       {
 	int integer;
-	enum target_signal sig;
+	gdb_target_signal_t sig;
 	ptid_t related_pid;
 	char *execd_pathname;
 	int syscall_number;
@@ -401,7 +401,7 @@ struct target_ops
     void (*to_post_attach) (int);
     void (*to_detach) (struct target_ops *ops, char *, int);
     void (*to_disconnect) (struct target_ops *, char *, int);
-    void (*to_resume) (struct target_ops *, ptid_t, int, enum target_signal);
+    void (*to_resume) (struct target_ops *, ptid_t, int, gdb_target_signal_t);
     ptid_t (*to_wait) (struct target_ops *,
 		       ptid_t, struct target_waitstatus *, int);
     void (*to_fetch_registers) (struct target_ops *, struct regcache *, int);
@@ -797,7 +797,7 @@ extern void target_disconnect (char *, int);
    the target, or TARGET_SIGNAL_0 for no signal.  The caller may not
    pass TARGET_SIGNAL_DEFAULT.  */
 
-extern void target_resume (ptid_t ptid, int step, enum target_signal signal);
+extern void target_resume (ptid_t ptid, int step, gdb_target_signal_t signal);
 
 /* Wait for process pid to do something.  PTID = -1 to wait for any
    pid to do something.  Return pid of child, or -1 in case of error;
@@ -1585,13 +1585,13 @@ extern int remote_timeout;
 extern void store_waitstatus (struct target_waitstatus *, int);
 
 /* These are in common/signals.c, but they're only used by gdb.  */
-extern enum target_signal default_target_signal_from_host (struct gdbarch *,
+extern gdb_target_signal_t default_target_signal_from_host (struct gdbarch *,
 							   int);
 extern int default_target_signal_to_host (struct gdbarch *, 
-					  enum target_signal);
+					  gdb_target_signal_t);
 
-/* Convert from a number used in a GDB command to an enum target_signal.  */
-extern enum target_signal target_signal_from_command (int);
+/* Convert from a number used in a GDB command to an gdb_target_signal_t.  */
+extern gdb_target_signal_t target_signal_from_command (int);
 /* End of files in common/signals.c.  */
 
 /* Set the show memory breakpoints mode to show, and installs a cleanup
--- a/gdb/windows-nat.c
+++ b/gdb/windows-nat.c
@@ -185,7 +185,7 @@ static void cygwin_set_dr (int i, CORE_ADDR addr);
 static void cygwin_set_dr7 (unsigned long val);
 static unsigned long cygwin_get_dr6 (void);
 
-static enum target_signal last_sig = TARGET_SIGNAL_0;
+static gdb_target_signal_t last_sig = TARGET_SIGNAL_0;
 /* Set if a signal was received from the debugged process */
 
 /* Thread information structure used to track information that is
@@ -258,7 +258,7 @@ static const int *mappings;
 struct xlate_exception
   {
     int them;
-    enum target_signal us;
+    gdb_target_signal_t us;
   };
 
 static const struct xlate_exception
@@ -1282,7 +1282,7 @@ fake_create_process (void)
 
 static void
 windows_resume (struct target_ops *ops,
-		ptid_t ptid, int step, enum target_signal sig)
+		ptid_t ptid, int step, gdb_target_signal_t sig)
 {
   thread_info *th;
   DWORD continue_status = DBG_CONTINUE;
--- a/include/gdb/signals.h
+++ b/include/gdb/signals.h
@@ -49,12 +49,13 @@
 /* For an explanation of what each signal means, see
    target_signal_to_string.  */
 
-enum target_signal
+typedef enum
   {
 #define SET(symbol, constant, name, string) \
     symbol = constant,
 #include "gdb/signals.def"
 #undef SET
-  };
+  }
+gdb_target_signal_t;
 
 #endif /* #ifndef GDB_SIGNALS_H */
--- a/sim/common/sim-signal.c
+++ b/sim/common/sim-signal.c
@@ -94,7 +94,7 @@ sim_signal_to_host (SIM_DESC sd, SIM_SIGNAL sig)
 #endif
 }
 
-enum target_signal 
+gdb_target_signal_t 
 sim_signal_to_target (SIM_DESC sd, SIM_SIGNAL sig)
 {
   switch (sig)
--- a/sim/common/sim-signal.h
+++ b/sim/common/sim-signal.h
@@ -46,6 +46,6 @@ typedef enum {
 } SIM_SIGNAL;
 
 int sim_signal_to_host (SIM_DESC sd, SIM_SIGNAL);
-enum target_signal sim_signal_to_target (SIM_DESC sd, SIM_SIGNAL);
+gdb_target_signal_t sim_signal_to_target (SIM_DESC sd, SIM_SIGNAL);
 
 #endif /* SIM_SIGNAL_H */
--- a/gdb/common/gdb_signals.h
+++ b/gdb/common/gdb_signals.h
@@ -53,4 +53,6 @@ extern const char *target_signal_to_name (gdb_target_signal_t);
 /* Given a name (SIGHUP, etc.), return its signal.  */
 gdb_target_signal_t target_signal_from_name (const char *);
 
+extern gdb_target_signal_t target_signal_from_number (int signo);
+
 #endif /* COMMON_GDB_SIGNALS_H */
--- a/gdb/common/signals.c
+++ b/gdb/common/signals.c
@@ -51,34 +51,36 @@ struct gdbarch;
 /* This table must match in order and size the signals in gdb_target_signal_t.
    */
 
-static const struct {
-  const char *name;
-  const char *string;
-  } signals [] =
+static const struct target_signal_o signals[] =
 {
-#define SET(symbol, constant, name, string) { name, string },
+#define SET(symbol, constant, name, string) \
+    { constant, name, string },
 #include "gdb/signals.def"
 #undef SET
 };
 
+#define SET(symbol, constant, name, string) \
+    const gdb_target_signal_t symbol = &signals[constant];
+#include "gdb/signals.def"
+#undef SET
 
 /* Return the string for a signal.  */
 const char *
 target_signal_to_string (gdb_target_signal_t sig)
 {
-  if ((int) sig >= TARGET_SIGNAL_FIRST && (int) sig <= TARGET_SIGNAL_LAST)
-    return signals[sig].string;
+  if (sig >= TARGET_SIGNAL_FIRST && sig <= TARGET_SIGNAL_LAST)
+    return TARGET_SIGNAL_STRING (sig);
   else
-    return signals[TARGET_SIGNAL_UNKNOWN].string;
+    return TARGET_SIGNAL_STRING (TARGET_SIGNAL_UNKNOWN);
 }
 
 /* Return the name for a signal.  */
 const char *
 target_signal_to_name (gdb_target_signal_t sig)
 {
-  if ((int) sig >= TARGET_SIGNAL_FIRST && (int) sig <= TARGET_SIGNAL_LAST
-      && signals[sig].name != NULL)
-    return signals[sig].name;
+  if (sig >= TARGET_SIGNAL_FIRST && sig <= TARGET_SIGNAL_LAST
+      && TARGET_SIGNAL_NAME (sig) != NULL)
+    return TARGET_SIGNAL_NAME (sig);
   else
     /* I think the code which prints this will always print it along
        with the string, so no need to be verbose (very old comment).  */
@@ -97,15 +99,24 @@ target_signal_from_name (const char *name)
      instead.  */
 
   /* This ugly cast brought to you by the native VAX compiler.  */
-  for (sig = TARGET_SIGNAL_HUP;
-       sig < TARGET_SIGNAL_LAST;
-       sig = (gdb_target_signal_t) ((int) sig + 1))
-    if (signals[sig].name != NULL
-	&& strcmp (name, signals[sig].name) == 0)
+  for (sig = TARGET_SIGNAL_HUP; sig < TARGET_SIGNAL_LAST; sig++)
+    if (TARGET_SIGNAL_NAME (sig) != NULL
+	&& strcmp (name, TARGET_SIGNAL_NAME (sig)) == 0)
       return sig;
   return TARGET_SIGNAL_UNKNOWN;
 }
-
+
+/* Return the gdb_target_signal_t for a gdb signal.  */
+
+gdb_target_signal_t
+target_signal_from_number (int number)
+{
+  if (number < 0 || number > TARGET_SIGNAL_NUMBER (TARGET_SIGNAL_LAST))
+    return TARGET_SIGNAL_UNKNOWN;
+  else
+    return &signals[number];
+}
+
 /* The following functions are to help certain targets deal
    with the signal/waitstatus stuff.  They could just as well be in
    a file called native-utils.c or unixwaitstatus-utils.c or whatever.  */
@@ -341,13 +352,13 @@ target_signal_from_host (int hostsig)
     {
       /* This block of TARGET_SIGNAL_REALTIME value is in order.  */
       if (33 <= hostsig && hostsig <= 63)
-	return (gdb_target_signal_t)
-	  (hostsig - 33 + (int) TARGET_SIGNAL_REALTIME_33);
+	return target_signal_from_number
+	  (hostsig - 33 + TARGET_SIGNAL_NUMBER (TARGET_SIGNAL_REALTIME_33));
       else if (hostsig == 32)
 	return TARGET_SIGNAL_REALTIME_32;
       else if (64 <= hostsig && hostsig <= 127)
-	return (gdb_target_signal_t)
-	  (hostsig - 64 + (int) TARGET_SIGNAL_REALTIME_64);
+	return target_signal_from_number
+	  (hostsig - 64 + TARGET_SIGNAL_NUMBER (TARGET_SIGNAL_REALTIME_64));
       else
 	error ("GDB bug: target.c (target_signal_from_host): unrecognized real-time signal");
     }
@@ -371,81 +382,81 @@ do_target_signal_to_host (gdb_target_signal_t oursig,
   (void) retsig;
 
   *oursig_ok = 1;
-  switch (oursig)
+  switch (TARGET_SIGNAL_NUMBER (oursig))
     {
-    case TARGET_SIGNAL_0:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_0):
       return 0;
 
 #if defined (SIGHUP)
-    case TARGET_SIGNAL_HUP:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_HUP):
       return SIGHUP;
 #endif
 #if defined (SIGINT)
-    case TARGET_SIGNAL_INT:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_INT):
       return SIGINT;
 #endif
 #if defined (SIGQUIT)
-    case TARGET_SIGNAL_QUIT:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_QUIT):
       return SIGQUIT;
 #endif
 #if defined (SIGILL)
-    case TARGET_SIGNAL_ILL:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_ILL):
       return SIGILL;
 #endif
 #if defined (SIGTRAP)
-    case TARGET_SIGNAL_TRAP:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_TRAP):
       return SIGTRAP;
 #endif
 #if defined (SIGABRT)
-    case TARGET_SIGNAL_ABRT:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_ABRT):
       return SIGABRT;
 #endif
 #if defined (SIGEMT)
-    case TARGET_SIGNAL_EMT:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_EMT):
       return SIGEMT;
 #endif
 #if defined (SIGFPE)
-    case TARGET_SIGNAL_FPE:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_FPE):
       return SIGFPE;
 #endif
 #if defined (SIGKILL)
-    case TARGET_SIGNAL_KILL:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_KILL):
       return SIGKILL;
 #endif
 #if defined (SIGBUS)
-    case TARGET_SIGNAL_BUS:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_BUS):
       return SIGBUS;
 #endif
 #if defined (SIGSEGV)
-    case TARGET_SIGNAL_SEGV:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_SEGV):
       return SIGSEGV;
 #endif
 #if defined (SIGSYS)
-    case TARGET_SIGNAL_SYS:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_SYS):
       return SIGSYS;
 #endif
 #if defined (SIGPIPE)
-    case TARGET_SIGNAL_PIPE:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_PIPE):
       return SIGPIPE;
 #endif
 #if defined (SIGALRM)
-    case TARGET_SIGNAL_ALRM:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_ALRM):
       return SIGALRM;
 #endif
 #if defined (SIGTERM)
-    case TARGET_SIGNAL_TERM:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_TERM):
       return SIGTERM;
 #endif
 #if defined (SIGUSR1)
-    case TARGET_SIGNAL_USR1:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_USR1):
       return SIGUSR1;
 #endif
 #if defined (SIGUSR2)
-    case TARGET_SIGNAL_USR2:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_USR2):
       return SIGUSR2;
 #endif
 #if defined (SIGCHLD) || defined (SIGCLD)
-    case TARGET_SIGNAL_CHLD:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_CHLD):
 #if defined (SIGCHLD)
       return SIGCHLD;
 #else
@@ -453,111 +464,111 @@ do_target_signal_to_host (gdb_target_signal_t oursig,
 #endif
 #endif /* SIGCLD or SIGCHLD */
 #if defined (SIGPWR)
-    case TARGET_SIGNAL_PWR:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_PWR):
       return SIGPWR;
 #endif
 #if defined (SIGWINCH)
-    case TARGET_SIGNAL_WINCH:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_WINCH):
       return SIGWINCH;
 #endif
 #if defined (SIGURG)
-    case TARGET_SIGNAL_URG:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_URG):
       return SIGURG;
 #endif
 #if defined (SIGIO)
-    case TARGET_SIGNAL_IO:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_IO):
       return SIGIO;
 #endif
 #if defined (SIGPOLL)
-    case TARGET_SIGNAL_POLL:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_POLL):
       return SIGPOLL;
 #endif
 #if defined (SIGSTOP)
-    case TARGET_SIGNAL_STOP:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_STOP):
       return SIGSTOP;
 #endif
 #if defined (SIGTSTP)
-    case TARGET_SIGNAL_TSTP:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_TSTP):
       return SIGTSTP;
 #endif
 #if defined (SIGCONT)
-    case TARGET_SIGNAL_CONT:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_CONT):
       return SIGCONT;
 #endif
 #if defined (SIGTTIN)
-    case TARGET_SIGNAL_TTIN:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_TTIN):
       return SIGTTIN;
 #endif
 #if defined (SIGTTOU)
-    case TARGET_SIGNAL_TTOU:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_TTOU):
       return SIGTTOU;
 #endif
 #if defined (SIGVTALRM)
-    case TARGET_SIGNAL_VTALRM:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_VTALRM):
       return SIGVTALRM;
 #endif
 #if defined (SIGPROF)
-    case TARGET_SIGNAL_PROF:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_PROF):
       return SIGPROF;
 #endif
 #if defined (SIGXCPU)
-    case TARGET_SIGNAL_XCPU:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_XCPU):
       return SIGXCPU;
 #endif
 #if defined (SIGXFSZ)
-    case TARGET_SIGNAL_XFSZ:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_XFSZ):
       return SIGXFSZ;
 #endif
 #if defined (SIGWIND)
-    case TARGET_SIGNAL_WIND:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_WIND):
       return SIGWIND;
 #endif
 #if defined (SIGPHONE)
-    case TARGET_SIGNAL_PHONE:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_PHONE):
       return SIGPHONE;
 #endif
 #if defined (SIGLOST)
-    case TARGET_SIGNAL_LOST:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_LOST):
       return SIGLOST;
 #endif
 #if defined (SIGWAITING)
-    case TARGET_SIGNAL_WAITING:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_WAITING):
       return SIGWAITING;
 #endif
 #if defined (SIGCANCEL)
-    case TARGET_SIGNAL_CANCEL:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_CANCEL):
       return SIGCANCEL;
 #endif
 #if defined (SIGLWP)
-    case TARGET_SIGNAL_LWP:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_LWP):
       return SIGLWP;
 #endif
 #if defined (SIGDANGER)
-    case TARGET_SIGNAL_DANGER:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_DANGER):
       return SIGDANGER;
 #endif
 #if defined (SIGGRANT)
-    case TARGET_SIGNAL_GRANT:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_GRANT):
       return SIGGRANT;
 #endif
 #if defined (SIGRETRACT)
-    case TARGET_SIGNAL_RETRACT:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_RETRACT):
       return SIGRETRACT;
 #endif
 #if defined (SIGMSG)
-    case TARGET_SIGNAL_MSG:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_MSG):
       return SIGMSG;
 #endif
 #if defined (SIGSOUND)
-    case TARGET_SIGNAL_SOUND:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_SOUND):
       return SIGSOUND;
 #endif
 #if defined (SIGSAK)
-    case TARGET_SIGNAL_SAK:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_SAK):
       return SIGSAK;
 #endif
 #if defined (SIGPRIO)
-    case TARGET_SIGNAL_PRIO:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_PRIO):
       return SIGPRIO;
 #endif
 
@@ -588,7 +599,7 @@ do_target_signal_to_host (gdb_target_signal_t oursig,
 #endif
 
 #if defined (SIGINFO)
-    case TARGET_SIGNAL_INFO:
+    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_INFO):
       return SIGINFO;
 #endif
 
@@ -601,7 +612,8 @@ do_target_signal_to_host (gdb_target_signal_t oursig,
 	{
 	  /* This block of signals is continuous, and
              TARGET_SIGNAL_REALTIME_33 is 33 by definition.  */
-	  retsig = (int) oursig - (int) TARGET_SIGNAL_REALTIME_33 + 33;
+	  retsig = (TARGET_SIGNAL_NUMBER (oursig)
+		    - TARGET_SIGNAL_NUMBER (TARGET_SIGNAL_REALTIME_33) + 33);
 	}
       else if (oursig == TARGET_SIGNAL_REALTIME_32)
 	{
@@ -614,7 +626,8 @@ do_target_signal_to_host (gdb_target_signal_t oursig,
 	{
 	  /* This block of signals is continuous, and
              TARGET_SIGNAL_REALTIME_64 is 64 by definition.  */
-	  retsig = (int) oursig - (int) TARGET_SIGNAL_REALTIME_64 + 64;
+	  retsig = (TARGET_SIGNAL_NUMBER (oursig)
+		    - TARGET_SIGNAL_NUMBER (TARGET_SIGNAL_REALTIME_64) + 64);
 	}
 
       if (retsig >= REALTIME_LO && retsig < REALTIME_HI)
@@ -665,7 +678,7 @@ gdb_target_signal_t
 target_signal_from_command (int num)
 {
   if (num >= 1 && num <= 15)
-    return (gdb_target_signal_t) num;
+    return target_signal_from_number (num);
   error ("Only signals 1-15 are valid as numeric signals.\n\
 Use \"info signals\" for a list of symbolic signals.");
 }
@@ -675,8 +688,17 @@ extern initialize_file_ftype _initialize_signals; /* -Wmissing-prototype */
 void
 _initialize_signals (void)
 {
-  if (strcmp (signals[TARGET_SIGNAL_LAST].string, "TARGET_SIGNAL_MAGIC") != 0)
-    internal_error (__FILE__, __LINE__, "failed internal consistency check");
+  gdb_target_signal_t sig;
+
+  for (sig = TARGET_SIGNAL_0; sig <= TARGET_SIGNAL_LAST; sig++)
+    if (sig - TARGET_SIGNAL_0 != TARGET_SIGNAL_NUMBER (sig))
+      internal_error (__FILE__, __LINE__, "failed internal consistency check "
+                                          "(signals continuity)");
+
+  if (strcmp (TARGET_SIGNAL_STRING (TARGET_SIGNAL_LAST),
+	      "TARGET_SIGNAL_MAGIC") != 0)
+    internal_error (__FILE__, __LINE__, "failed internal consistency check"
+					"(last signal magic)");
 }
 
 int
--- a/gdb/gdbserver/linux-low.c
+++ b/gdb/gdbserver/linux-low.c
@@ -2266,7 +2266,7 @@ Check if we're already there.\n",
 	       || WSTOPSIG (w) == __SIGRTMIN + 1))
 	  ||
 #endif
-	  (pass_signals[target_signal_from_host (WSTOPSIG (w))]
+  (pass_signals[TARGET_SIGNAL_NUMBER (target_signal_from_host (WSTOPSIG (w)))]
 	   && !(WSTOPSIG (w) == SIGSTOP
 		&& current_inferior->last_resume_kind == resume_stop))))
     {
@@ -2421,7 +2421,7 @@ Check if we're already there.\n",
     fprintf (stderr, "linux_wait ret = %s, %d, %d\n",
 	     target_pid_to_str (ptid_of (event_child)),
 	     ourstatus->kind,
-	     ourstatus->value.sig);
+	     TARGET_SIGNAL_NUMBER (ourstatus->value.sig));
 
   return ptid_of (event_child);
 }
--- a/gdb/gdbserver/remote-utils.c
+++ b/gdb/gdbserver/remote-utils.c
@@ -1240,7 +1240,7 @@ prepare_resume_reply (char *buf, ptid_t ptid,
 	const char **regp;
 	struct regcache *regcache;
 
-	sprintf (buf, "T%02x", status->value.sig);
+	sprintf (buf, "T%02x", TARGET_SIGNAL_NUMBER (status->value.sig));
 	buf += strlen (buf);
 
 	regp = gdbserver_expedite_regs;
@@ -1339,9 +1339,10 @@ prepare_resume_reply (char *buf, ptid_t ptid,
     case TARGET_WAITKIND_SIGNALLED:
       if (multi_process)
 	sprintf (buf, "X%x;process:%x",
-		 status->value.sig, ptid_get_pid (ptid));
+		 TARGET_SIGNAL_NUMBER (status->value.sig),
+		 ptid_get_pid (ptid));
       else
-	sprintf (buf, "X%02x", status->value.sig);
+	sprintf (buf, "X%02x", TARGET_SIGNAL_NUMBER (status->value.sig));
       break;
     default:
       error ("unhandled waitkind");
--- a/gdb/gdbserver/server.c
+++ b/gdb/gdbserver/server.c
@@ -51,7 +51,7 @@ int debug_threads;
 /* Enable debugging of h/w breakpoint/watchpoint support.  */
 int debug_hw_points;
 
-int pass_signals[TARGET_SIGNAL_LAST];
+int pass_signals[TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_LAST)];
 
 jmp_buf toplevel;
 
@@ -398,7 +398,7 @@ handle_general_set (char *own_buf)
 {
   if (strncmp ("QPassSignals:", own_buf, strlen ("QPassSignals:")) == 0)
     {
-      int numsigs = (int) TARGET_SIGNAL_LAST, i;
+      int numsigs = TARGET_SIGNAL_NUMBER (TARGET_SIGNAL_LAST), i;
       const char *p = own_buf + strlen ("QPassSignals:");
       CORE_ADDR cursig;
 
@@ -1747,12 +1747,15 @@ handle_v_cont (char *own_buf)
 
       if (p[0] == 'S' || p[0] == 'C')
 	{
-	  int sig;
-	  sig = strtol (p + 1, &q, 16);
+	  int signo;
+	  gdb_target_signal_t sig;
+
+	  signo = strtol (p + 1, &q, 16);
 	  if (p == q)
 	    goto err;
 	  p = q;
 
+	  sig = target_signal_from_number (signo);
 	  if (!target_signal_to_host_p (sig))
 	    goto err;
 	  resume_info[i].sig = target_signal_to_host (sig);
@@ -2959,8 +2962,8 @@ process_serial_event (void)
     case 'C':
       require_running (own_buf);
       convert_ascii_to_int (own_buf + 1, &sig, 1);
-      if (target_signal_to_host_p (sig))
-	signal = target_signal_to_host (sig);
+      if (target_signal_to_host_p (target_signal_from_number (sig)))
+	signal = target_signal_to_host (target_signal_from_number (sig));
       else
 	signal = 0;
       myresume (own_buf, 0, signal);
@@ -2968,8 +2971,8 @@ process_serial_event (void)
     case 'S':
       require_running (own_buf);
       convert_ascii_to_int (own_buf + 1, &sig, 1);
-      if (target_signal_to_host_p (sig))
-	signal = target_signal_to_host (sig);
+      if (target_signal_to_host_p (target_signal_from_number (sig)))
+	signal = target_signal_to_host (target_signal_from_number (sig));
       else
 	signal = 0;
       myresume (own_buf, 1, signal);
--- a/gdb/inferior.h
+++ b/gdb/inferior.h
@@ -240,17 +240,17 @@ extern void start_remote (int from_tty);
 
 extern void normal_stop (void);
 
-extern int signal_stop_state (int);
+extern int signal_stop_state (gdb_target_signal_t sig);
 
-extern int signal_print_state (int);
+extern int signal_print_state (gdb_target_signal_t sig);
 
-extern int signal_pass_state (int);
+extern int signal_pass_state (gdb_target_signal_t sig);
 
-extern int signal_stop_update (int, int);
+extern int signal_stop_update (gdb_target_signal_t sig, int state);
 
-extern int signal_print_update (int, int);
+extern int signal_print_update (gdb_target_signal_t sig, int state);
 
-extern int signal_pass_update (int, int);
+extern int signal_pass_update (gdb_target_signal_t sig, int state);
 
 extern void get_last_target_status(ptid_t *ptid,
                                    struct target_waitstatus *status);
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -1583,7 +1583,7 @@ resume (int step, gdb_target_signal_t sig)
     fprintf_unfiltered (gdb_stdlog,
                         "infrun: resume (step=%d, signal=%d), "
 			"trap_expected=%d\n",
- 			step, sig, tp->trap_expected);
+ 			step, TARGET_SIGNAL_NUMBER (sig), tp->trap_expected);
 
   /* Normally, by the time we reach `resume', the breakpoints are either
      removed or inserted, as appropriate.  The exception is if we're sitting
@@ -1963,7 +1963,8 @@ proceed (CORE_ADDR addr, gdb_target_signal_t siggnal, int step)
   if (debug_infrun)
     fprintf_unfiltered (gdb_stdlog,
 			"infrun: proceed (addr=%s, signal=%d, step=%d)\n",
-			paddress (gdbarch, addr), siggnal, step);
+			paddress (gdbarch, addr),
+			TARGET_SIGNAL_NUMBER (siggnal), step);
 
   /* We're handling a live event, so make sure we're doing live
      debugging.  If we're looking at traceframes while the target is
@@ -2047,7 +2048,7 @@ proceed (CORE_ADDR addr, gdb_target_signal_t siggnal, int step)
     tp->stop_signal = siggnal;
   /* If this signal should not be seen by program,
      give it zero.  Used for debugging signals.  */
-  else if (!signal_program[tp->stop_signal])
+  else if (! signal_pass_state (tp->stop_signal))
     tp->stop_signal = TARGET_SIGNAL_0;
 
   annotate_starting ();
@@ -3970,11 +3971,11 @@ process_event_stop_test:
 
       if (debug_infrun)
 	 fprintf_unfiltered (gdb_stdlog, "infrun: random signal %d\n",
-			     ecs->event_thread->stop_signal);
+		       TARGET_SIGNAL_NUMBER (ecs->event_thread->stop_signal));
 
       stopped_by_random_signal = 1;
 
-      if (signal_print[ecs->event_thread->stop_signal])
+      if (signal_print_state (ecs->event_thread->stop_signal))
 	{
 	  printed = 1;
 	  target_terminal_ours_for_output ();
@@ -3997,7 +3998,7 @@ process_event_stop_test:
 	target_terminal_inferior ();
 
       /* Clear the signal if it should not be passed.  */
-      if (signal_program[ecs->event_thread->stop_signal] == 0)
+      if (signal_pass_state (ecs->event_thread->stop_signal) == 0)
 	ecs->event_thread->stop_signal = TARGET_SIGNAL_0;
 
       if (ecs->event_thread->prev_pc == stop_pc
@@ -5184,7 +5185,7 @@ keep_going (struct execution_control_state *ecs)
          equivalent of a SIGNAL_TRAP to the program being debugged. */
 
       if (ecs->event_thread->stop_signal == TARGET_SIGNAL_TRAP
-	  && !signal_program[ecs->event_thread->stop_signal])
+	  && ! signal_pass_state (ecs->event_thread->stop_signal))
 	ecs->event_thread->stop_signal = TARGET_SIGNAL_0;
 
       discard_cleanups (old_cleanups);
@@ -5594,47 +5595,47 @@ hook_stop_stub (void *cmd)
 }
 
 int
-signal_stop_state (int signo)
+signal_stop_state (gdb_target_signal_t sig)
 {
-  return signal_stop[signo];
+  return signal_stop[TARGET_SIGNAL_NUMBER (sig)];
 }
 
 int
-signal_print_state (int signo)
+signal_print_state (gdb_target_signal_t sig)
 {
-  return signal_print[signo];
+  return signal_print[TARGET_SIGNAL_NUMBER (sig)];
 }
 
 int
-signal_pass_state (int signo)
+signal_pass_state (gdb_target_signal_t sig)
 {
-  return signal_program[signo];
+  return signal_program[TARGET_SIGNAL_NUMBER (sig)];
 }
 
 int
-signal_stop_update (int signo, int state)
+signal_stop_update (gdb_target_signal_t sig, int state)
 {
-  int ret = signal_stop[signo];
+  int ret = signal_stop[TARGET_SIGNAL_NUMBER (sig)];
 
-  signal_stop[signo] = state;
+  signal_stop[TARGET_SIGNAL_NUMBER (sig)] = state;
   return ret;
 }
 
 int
-signal_print_update (int signo, int state)
+signal_print_update (gdb_target_signal_t sig, int state)
 {
-  int ret = signal_print[signo];
+  int ret = signal_print[TARGET_SIGNAL_NUMBER (sig)];
 
-  signal_print[signo] = state;
+  signal_print[TARGET_SIGNAL_NUMBER (sig)] = state;
   return ret;
 }
 
 int
-signal_pass_update (int signo, int state)
+signal_pass_update (gdb_target_signal_t sig, int state)
 {
-  int ret = signal_program[signo];
+  int ret = signal_program[TARGET_SIGNAL_NUMBER (sig)];
 
-  signal_program[signo] = state;
+  signal_program[TARGET_SIGNAL_NUMBER (sig)] = state;
   return ret;
 }
 
@@ -5656,9 +5657,9 @@ sig_print_info (gdb_target_signal_t oursig)
 
   printf_filtered ("%s", name);
   printf_filtered ("%*.*s ", name_padding, name_padding, "                 ");
-  printf_filtered ("%s\t", signal_stop[oursig] ? "Yes" : "No");
-  printf_filtered ("%s\t", signal_print[oursig] ? "Yes" : "No");
-  printf_filtered ("%s\t\t", signal_program[oursig] ? "Yes" : "No");
+  printf_filtered ("%s\t", signal_stop_state (oursig) ? "Yes" : "No");
+  printf_filtered ("%s\t", signal_print_state (oursig) ? "Yes" : "No");
+  printf_filtered ("%s\t\t", signal_pass_state (oursig) ? "Yes" : "No");
   printf_filtered ("%s\n", target_signal_to_string (oursig));
 }
 
@@ -5683,7 +5684,7 @@ handle_command (char *args, int from_tty)
 
   /* Allocate and zero an array of flags for which signals to handle. */
 
-  nsigs = (int) TARGET_SIGNAL_LAST;
+  nsigs = TARGET_SIGNAL_NUMBER (TARGET_SIGNAL_LAST);
   sigs = (unsigned char *) alloca (nsigs);
   memset (sigs, 0, nsigs);
 
@@ -5756,12 +5757,13 @@ handle_command (char *args, int from_tty)
 	     using symbolic names anyway, and the common ones like
 	     SIGHUP, SIGINT, SIGALRM, etc. will work right anyway.  */
 
-	  sigfirst = siglast = (int)
-	    target_signal_from_command (atoi (*argv));
+	  gdb_target_signal_t sig = target_signal_from_command (atoi (*argv));
+
+	  sigfirst = siglast = TARGET_SIGNAL_NUMBER (sig);
 	  if ((*argv)[digits] == '-')
 	    {
-	      siglast = (int)
-		target_signal_from_command (atoi ((*argv) + digits + 1));
+	      sig = target_signal_from_command (atoi ((*argv) + digits + 1));
+	      siglast = TARGET_SIGNAL_NUMBER (sig);
 	    }
 	  if (sigfirst > siglast)
 	    {
@@ -5776,7 +5778,7 @@ handle_command (char *args, int from_tty)
 	  oursig = target_signal_from_name (*argv);
 	  if (oursig != TARGET_SIGNAL_UNKNOWN)
 	    {
-	      sigfirst = siglast = (int) oursig;
+	      sigfirst = siglast = TARGET_SIGNAL_NUMBER (oursig);
 	    }
 	  else
 	    {
@@ -5790,15 +5792,15 @@ handle_command (char *args, int from_tty)
 
       for (signum = sigfirst; signum >= 0 && signum <= siglast; signum++)
 	{
-	  switch ((gdb_target_signal_t) signum)
+	  switch (signum)
 	    {
-	    case TARGET_SIGNAL_TRAP:
-	    case TARGET_SIGNAL_INT:
+	    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_TRAP):
+	    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_INT):
 	      if (!allsigs && !sigs[signum])
 		{
 		  if (query (_("%s is used by the debugger.\n\
 Are you sure you want to change it? "),
-			target_signal_to_name ((gdb_target_signal_t) signum)))
+		  target_signal_to_name (target_signal_from_number (signum))))
 		    {
 		      sigs[signum] = 1;
 		    }
@@ -5809,9 +5811,9 @@ Are you sure you want to change it? "),
 		    }
 		}
 	      break;
-	    case TARGET_SIGNAL_0:
-	    case TARGET_SIGNAL_DEFAULT:
-	    case TARGET_SIGNAL_UNKNOWN:
+	    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_0):
+	    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_DEFAULT):
+	    case TARGET_SIGNAL_NUMBER_CONST (TARGET_SIGNAL_UNKNOWN):
 	      /* Make sure that "all" doesn't print these.  */
 	      break;
 	    default:
@@ -5834,7 +5836,7 @@ Are you sure you want to change it? "),
 	    sig_print_header ();
 	    for (; signum < nsigs; signum++)
 	      if (sigs[signum])
-		sig_print_info (signum);
+		sig_print_info (target_signal_from_number (signum));
 	  }
 
 	break;
@@ -5876,21 +5878,21 @@ xdb_handle_command (char *args, int from_tty)
 	    {
 	      if (strcmp (argv[1], "s") == 0)
 		{
-		  if (!signal_stop[oursig])
+		  if (! signal_stop_state (oursig))
 		    sprintf (argBuf, "%s %s", argv[0], "stop");
 		  else
 		    sprintf (argBuf, "%s %s", argv[0], "nostop");
 		}
 	      else if (strcmp (argv[1], "i") == 0)
 		{
-		  if (!signal_program[oursig])
+		  if (! signal_pass_state (oursig))
 		    sprintf (argBuf, "%s %s", argv[0], "pass");
 		  else
 		    sprintf (argBuf, "%s %s", argv[0], "nopass");
 		}
 	      else if (strcmp (argv[1], "r") == 0)
 		{
-		  if (!signal_print[oursig])
+		  if (! signal_print_state (oursig))
 		    sprintf (argBuf, "%s %s", argv[0], "print");
 		  else
 		    sprintf (argBuf, "%s %s", argv[0], "noprint");
@@ -5937,9 +5939,7 @@ signals_info (char *signum_exp, int from_tty)
 
   printf_filtered ("\n");
   /* These ugly casts brought to you by the native VAX compiler.  */
-  for (oursig = TARGET_SIGNAL_FIRST;
-       (int) oursig < (int) TARGET_SIGNAL_LAST;
-       oursig = (gdb_target_signal_t) ((int) oursig + 1))
+  for (oursig = TARGET_SIGNAL_FIRST; oursig < TARGET_SIGNAL_LAST; oursig++)
     {
       QUIT;
 
@@ -6612,7 +6612,7 @@ leave it stopped or free to run as needed."),
 			   &setlist,
 			   &showlist);
 
-  numsigs = (int) TARGET_SIGNAL_LAST;
+  numsigs = TARGET_SIGNAL_NUMBER (TARGET_SIGNAL_LAST);
   signal_stop = (unsigned char *) xmalloc (sizeof (signal_stop[0]) * numsigs);
   signal_print = (unsigned char *)
     xmalloc (sizeof (signal_print[0]) * numsigs);
@@ -6627,37 +6627,37 @@ leave it stopped or free to run as needed."),
 
   /* Signals caused by debugger's own actions
      should not be given to the program afterwards.  */
-  signal_program[TARGET_SIGNAL_TRAP] = 0;
-  signal_program[TARGET_SIGNAL_INT] = 0;
+  signal_pass_update (TARGET_SIGNAL_TRAP, 0);
+  signal_pass_update (TARGET_SIGNAL_INT, 0);
 
   /* Signals that are not errors should not normally enter the debugger.  */
-  signal_stop[TARGET_SIGNAL_ALRM] = 0;
-  signal_print[TARGET_SIGNAL_ALRM] = 0;
-  signal_stop[TARGET_SIGNAL_VTALRM] = 0;
-  signal_print[TARGET_SIGNAL_VTALRM] = 0;
-  signal_stop[TARGET_SIGNAL_PROF] = 0;
-  signal_print[TARGET_SIGNAL_PROF] = 0;
-  signal_stop[TARGET_SIGNAL_CHLD] = 0;
-  signal_print[TARGET_SIGNAL_CHLD] = 0;
-  signal_stop[TARGET_SIGNAL_IO] = 0;
-  signal_print[TARGET_SIGNAL_IO] = 0;
-  signal_stop[TARGET_SIGNAL_POLL] = 0;
-  signal_print[TARGET_SIGNAL_POLL] = 0;
-  signal_stop[TARGET_SIGNAL_URG] = 0;
-  signal_print[TARGET_SIGNAL_URG] = 0;
-  signal_stop[TARGET_SIGNAL_WINCH] = 0;
-  signal_print[TARGET_SIGNAL_WINCH] = 0;
+  signal_stop_update (TARGET_SIGNAL_ALRM, 0);
+  signal_print_update (TARGET_SIGNAL_ALRM, 0);
+  signal_stop_update (TARGET_SIGNAL_VTALRM, 0);
+  signal_print_update (TARGET_SIGNAL_VTALRM, 0);
+  signal_stop_update (TARGET_SIGNAL_PROF, 0);
+  signal_print_update (TARGET_SIGNAL_PROF, 0);
+  signal_stop_update (TARGET_SIGNAL_CHLD, 0);
+  signal_print_update (TARGET_SIGNAL_CHLD, 0);
+  signal_stop_update (TARGET_SIGNAL_IO, 0);
+  signal_print_update (TARGET_SIGNAL_IO, 0);
+  signal_stop_update (TARGET_SIGNAL_POLL, 0);
+  signal_print_update (TARGET_SIGNAL_POLL, 0);
+  signal_stop_update (TARGET_SIGNAL_URG, 0);
+  signal_print_update (TARGET_SIGNAL_URG, 0);
+  signal_stop_update (TARGET_SIGNAL_WINCH, 0);
+  signal_print_update (TARGET_SIGNAL_WINCH, 0);
 
   /* These signals are used internally by user-level thread
      implementations.  (See signal(5) on Solaris.)  Like the above
      signals, a healthy program receives and handles them as part of
      its normal operation.  */
-  signal_stop[TARGET_SIGNAL_LWP] = 0;
-  signal_print[TARGET_SIGNAL_LWP] = 0;
-  signal_stop[TARGET_SIGNAL_WAITING] = 0;
-  signal_print[TARGET_SIGNAL_WAITING] = 0;
-  signal_stop[TARGET_SIGNAL_CANCEL] = 0;
-  signal_print[TARGET_SIGNAL_CANCEL] = 0;
+  signal_stop_update (TARGET_SIGNAL_LWP, 0);
+  signal_print_update (TARGET_SIGNAL_LWP, 0);
+  signal_stop_update (TARGET_SIGNAL_WAITING, 0);
+  signal_print_update (TARGET_SIGNAL_WAITING, 0);
+  signal_stop_update (TARGET_SIGNAL_CANCEL, 0);
+  signal_print_update (TARGET_SIGNAL_CANCEL, 0);
 
   add_setshow_zinteger_cmd ("stop-on-solib-events", class_support,
 			    &stop_on_solib_events, _("\
--- a/gdb/record.c
+++ b/gdb/record.c
@@ -2302,7 +2302,7 @@ record_restore (void)
 	  bfdcore_read (core_bfd, osec, &signal, 
 			sizeof (signal), &bfd_offset);
 	  signal = netorder32 (signal);
-	  rec->u.end.sigval = signal;
+	  rec->u.end.sigval = target_signal_from_number (signal);
 
 	  /* Get insn count.  */
 	  bfdcore_read (core_bfd, osec, &count, 
@@ -2560,7 +2560,8 @@ cmd_record_save (char *args, int from_tty)
 				      (unsigned long) sizeof (signal),
 				      (unsigned long) sizeof (count));
 		/* Write signal value.  */
-		signal = netorder32 (record_list->u.end.sigval);
+		signal = netorder32 (TARGET_SIGNAL_NUMBER
+						 (record_list->u.end.sigval));
 		bfdcore_write (obfd, osec, &signal,
 			       sizeof (signal), &bfd_offset);
 
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -1557,15 +1557,17 @@ remote_pass_signals (void)
   if (remote_protocol_packets[PACKET_QPassSignals].support != PACKET_DISABLE)
     {
       char *pass_packet, *p;
-      int numsigs = (int) TARGET_SIGNAL_LAST;
+      int numsigs = TARGET_SIGNAL_NUMBER (TARGET_SIGNAL_LAST);
       int count = 0, i;
 
       gdb_assert (numsigs < 256);
       for (i = 0; i < numsigs; i++)
 	{
-	  if (signal_stop_state (i) == 0
-	      && signal_print_state (i) == 0
-	      && signal_pass_state (i) == 1)
+	  gdb_target_signal_t sig = target_signal_from_number (i);
+
+	  if (signal_stop_state (sig) == 0
+	      && signal_print_state (sig) == 0
+	      && signal_pass_state (sig) == 1)
 	    count++;
 	}
       pass_packet = xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
@@ -1573,9 +1575,11 @@ remote_pass_signals (void)
       p = pass_packet + strlen (pass_packet);
       for (i = 0; i < numsigs; i++)
 	{
-	  if (signal_stop_state (i) == 0
-	      && signal_print_state (i) == 0
-	      && signal_pass_state (i) == 1)
+	  gdb_target_signal_t sig = target_signal_from_number (i);
+
+	  if (signal_stop_state (sig) == 0
+	      && signal_print_state (sig) == 0
+	      && signal_pass_state (sig) == 1)
 	    {
 	      if (i >= 16)
 		*p++ = tohex (i >> 4);
@@ -4389,11 +4393,11 @@ append_resumption (char *p, char *endp,
   struct remote_state *rs = get_remote_state ();
 
   if (step && siggnal != TARGET_SIGNAL_0)
-    p += xsnprintf (p, endp - p, ";S%02x", siggnal);
+    p += xsnprintf (p, endp - p, ";S%02x", TARGET_SIGNAL_NUMBER (siggnal));
   else if (step)
     p += xsnprintf (p, endp - p, ";s");
   else if (siggnal != TARGET_SIGNAL_0)
-    p += xsnprintf (p, endp - p, ";C%02x", siggnal);
+    p += xsnprintf (p, endp - p, ";C%02x", TARGET_SIGNAL_NUMBER (siggnal));
   else
     p += xsnprintf (p, endp - p, ";c");
 
@@ -4495,7 +4499,7 @@ remote_vcont_resume (ptid_t ptid, int step, gdb_target_signal_t siggnal)
 
 /* Tell the remote machine to resume.  */
 
-static gdb_target_signal_t last_sent_signal = TARGET_SIGNAL_0;
+static gdb_target_signal_t last_sent_signal;
 
 static int last_sent_step;
 
@@ -4531,7 +4535,7 @@ remote_resume (struct target_ops *ops,
       /* We don't pass signals to the target in reverse exec mode.  */
       if (info_verbose && siggnal != TARGET_SIGNAL_0)
 	warning (" - Can't pass signal %d to target in reverse: ignored.\n",
-		 siggnal);
+		 TARGET_SIGNAL_NUMBER (siggnal));
 
       if (step 
 	  && remote_protocol_packets[PACKET_bs].support == PACKET_DISABLE)
@@ -4544,9 +4548,11 @@ remote_resume (struct target_ops *ops,
     }
   else if (siggnal != TARGET_SIGNAL_0)
     {
+      int signo = TARGET_SIGNAL_NUMBER (siggnal);
+
       buf[0] = step ? 'S' : 'C';
-      buf[1] = tohex (((int) siggnal >> 4) & 0xf);
-      buf[2] = tohex (((int) siggnal) & 0xf);
+      buf[1] = tohex ((signo >> 4) & 0xf);
+      buf[2] = tohex (signo & 0xf);
       buf[3] = '\0';
     }
   else
@@ -5155,8 +5161,9 @@ Packet: '%s'\n"),
       else
 	{
 	  event->ws.kind = TARGET_WAITKIND_STOPPED;
-	  event->ws.value.sig = (gdb_target_signal_t)
-	    (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
+	  event->ws.value.sig
+	    = target_signal_from_number ((fromhex (buf[1]) << 4)
+					 + fromhex (buf[2]));
 	}
       break;
     case 'W':		/* Target exited.  */
@@ -5181,7 +5188,7 @@ Packet: '%s'\n"),
 	  {
 	    /* The remote process exited with a signal.  */
 	    event->ws.kind = TARGET_WAITKIND_SIGNALLED;
-	    event->ws.value.sig = (gdb_target_signal_t) value;
+	    event->ws.value.sig = target_signal_from_number (value);
 	  }
 
 	/* If no process is specified, assume inferior_ptid.  */
@@ -10788,5 +10795,6 @@ Show the remote pathname for \"run\""), NULL, NULL, NULL,
 
   target_buf_size = 2048;
   target_buf = xmalloc (target_buf_size);
-}
 
+  last_sent_signal = TARGET_SIGNAL_0;
+}
--- a/include/gdb/signals.h
+++ b/include/gdb/signals.h
@@ -49,13 +49,31 @@
 /* For an explanation of what each signal means, see
    target_signal_to_string.  */
 
-typedef enum
+#define TARGET_SIGNAL_NUMBER(target_signal) (target_signal)->number
+#define TARGET_SIGNAL_STRING(target_signal) (target_signal)->string
+#define TARGET_SIGNAL_NAME(target_signal) (target_signal)->name
+#define TARGET_SIGNAL_NUMBER_CONST(target_signal) target_signal ## _NUMBER
+
+enum target_signal_number
+  {
+#define SET(symbol, constant, name, string) \
+    TARGET_SIGNAL_NUMBER_CONST (symbol) = constant,
+#include "gdb/signals.def"
+#undef SET
+  };
+
+struct target_signal_o
   {
+    enum target_signal_number number;
+    const char *name;
+    const char *string;
+  };
+
+typedef const struct target_signal_o *gdb_target_signal_t;
+
 #define SET(symbol, constant, name, string) \
-    symbol = constant,
+    extern const gdb_target_signal_t symbol;
 #include "gdb/signals.def"
 #undef SET
-  }
-gdb_target_signal_t;
 
 #endif /* #ifndef GDB_SIGNALS_H */

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