Home | History | Annotate | Line # | Download | only in gdbsupport
signals.cc revision 1.1.1.2
      1 /* Target signal translation functions for GDB.
      2    Copyright (C) 1990-2023 Free Software Foundation, Inc.
      3    Contributed by Cygnus Support.
      4 
      5    This file is part of GDB.
      6 
      7    This program is free software; you can redistribute it and/or modify
      8    it under the terms of the GNU General Public License as published by
      9    the Free Software Foundation; either version 3 of the License, or
     10    (at your option) any later version.
     11 
     12    This program is distributed in the hope that it will be useful,
     13    but WITHOUT ANY WARRANTY; without even the implied warranty of
     14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15    GNU General Public License for more details.
     16 
     17    You should have received a copy of the GNU General Public License
     18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     19 
     20 #include "common-defs.h"
     21 
     22 #ifdef HAVE_SIGNAL_H
     23 #include <signal.h>
     24 #endif
     25 
     26 #include "gdb_signals.h"
     27 
     28 struct gdbarch;
     29 
     30 /* Always use __SIGRTMIN if it's available.  SIGRTMIN is the lowest
     31    _available_ realtime signal, not the lowest supported; glibc takes
     32    several for its own use.  */
     33 
     34 #ifndef REALTIME_LO
     35 # if defined(__SIGRTMIN)
     36 #  define REALTIME_LO __SIGRTMIN
     37 #  define REALTIME_HI (__SIGRTMAX + 1)
     38 # elif defined(SIGRTMIN)
     39 #  define REALTIME_LO SIGRTMIN
     40 #  define REALTIME_HI (SIGRTMAX + 1)
     41 # endif
     42 #endif
     43 
     44 /* This table must match in order and size the signals in enum
     45    gdb_signal.  */
     46 
     47 static const struct {
     48   const char *symbol;
     49   const char *name;
     50   const char *string;
     51   } signals [] =
     52 {
     53 #define SET(symbol, constant, name, string) { #symbol, name, string },
     54 #include "gdb/signals.def"
     55 #undef SET
     56 };
     57 
     58 const char *
     59 gdb_signal_to_symbol_string (enum gdb_signal sig)
     60 {
     61   gdb_assert ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST);
     62 
     63   return signals[sig].symbol;
     64 }
     65 
     66 /* Return the string for a signal.  */
     67 const char *
     68 gdb_signal_to_string (enum gdb_signal sig)
     69 {
     70   if ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST)
     71     return signals[sig].string;
     72   else
     73     return signals[GDB_SIGNAL_UNKNOWN].string;
     74 }
     75 
     76 /* Return the name for a signal.  */
     77 const char *
     78 gdb_signal_to_name (enum gdb_signal sig)
     79 {
     80   if ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST
     81       && signals[sig].name != NULL)
     82     return signals[sig].name;
     83   else
     84     /* I think the code which prints this will always print it along
     85        with the string, so no need to be verbose (very old comment).  */
     86     return "?";
     87 }
     88 
     89 /* Given a name, return its signal.  */
     90 enum gdb_signal
     91 gdb_signal_from_name (const char *name)
     92 {
     93   enum gdb_signal sig;
     94 
     95   /* It's possible we also should allow "SIGCLD" as well as "SIGCHLD"
     96      for GDB_SIGNAL_SIGCHLD.  SIGIOT, on the other hand, is more
     97      questionable; seems like by now people should call it SIGABRT
     98      instead.  */
     99 
    100   /* This ugly cast brought to you by the native VAX compiler.  */
    101   for (sig = GDB_SIGNAL_HUP;
    102        sig < GDB_SIGNAL_LAST;
    103        sig = (enum gdb_signal) ((int) sig + 1))
    104     if (signals[sig].name != NULL
    105 	&& strcmp (name, signals[sig].name) == 0)
    106       return sig;
    107   return GDB_SIGNAL_UNKNOWN;
    108 }
    109 
    110 /* The following functions are to help certain targets deal
    112    with the signal/waitstatus stuff.  They could just as well be in
    113    a file called native-utils.c or unixwaitstatus-utils.c or whatever.  */
    114 
    115 /* Convert host signal to our signals.  */
    116 enum gdb_signal
    117 gdb_signal_from_host (int hostsig)
    118 {
    119   /* A switch statement would make sense but would require special
    120      kludges to deal with the cases where more than one signal has the
    121      same number.  Signals are ordered ANSI-standard signals first,
    122      other signals second, with signals in each block ordered by their
    123      numerical values on a typical POSIX platform.  */
    124 
    125   if (hostsig == 0)
    126     return GDB_SIGNAL_0;
    127 
    128   /* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
    129      are ANSI-standard signals and are always available.  */
    130   if (hostsig == SIGINT)
    131     return GDB_SIGNAL_INT;
    132   if (hostsig == SIGILL)
    133     return GDB_SIGNAL_ILL;
    134   if (hostsig == SIGABRT)
    135     return GDB_SIGNAL_ABRT;
    136   if (hostsig == SIGFPE)
    137     return GDB_SIGNAL_FPE;
    138   if (hostsig == SIGSEGV)
    139     return GDB_SIGNAL_SEGV;
    140   if (hostsig == SIGTERM)
    141     return GDB_SIGNAL_TERM;
    142 
    143   /* All other signals need preprocessor conditionals.  */
    144 #if defined (SIGHUP)
    145   if (hostsig == SIGHUP)
    146     return GDB_SIGNAL_HUP;
    147 #endif
    148 #if defined (SIGQUIT)
    149   if (hostsig == SIGQUIT)
    150     return GDB_SIGNAL_QUIT;
    151 #endif
    152 #if defined (SIGTRAP)
    153   if (hostsig == SIGTRAP)
    154     return GDB_SIGNAL_TRAP;
    155 #endif
    156 #if defined (SIGEMT)
    157   if (hostsig == SIGEMT)
    158     return GDB_SIGNAL_EMT;
    159 #endif
    160 #if defined (SIGKILL)
    161   if (hostsig == SIGKILL)
    162     return GDB_SIGNAL_KILL;
    163 #endif
    164 #if defined (SIGBUS)
    165   if (hostsig == SIGBUS)
    166     return GDB_SIGNAL_BUS;
    167 #endif
    168 #if defined (SIGSYS)
    169   if (hostsig == SIGSYS)
    170     return GDB_SIGNAL_SYS;
    171 #endif
    172 #if defined (SIGPIPE)
    173   if (hostsig == SIGPIPE)
    174     return GDB_SIGNAL_PIPE;
    175 #endif
    176 #if defined (SIGALRM)
    177   if (hostsig == SIGALRM)
    178     return GDB_SIGNAL_ALRM;
    179 #endif
    180 #if defined (SIGUSR1)
    181   if (hostsig == SIGUSR1)
    182     return GDB_SIGNAL_USR1;
    183 #endif
    184 #if defined (SIGUSR2)
    185   if (hostsig == SIGUSR2)
    186     return GDB_SIGNAL_USR2;
    187 #endif
    188 #if defined (SIGCLD)
    189   if (hostsig == SIGCLD)
    190     return GDB_SIGNAL_CHLD;
    191 #endif
    192 #if defined (SIGCHLD)
    193   if (hostsig == SIGCHLD)
    194     return GDB_SIGNAL_CHLD;
    195 #endif
    196 #if defined (SIGPWR)
    197   if (hostsig == SIGPWR)
    198     return GDB_SIGNAL_PWR;
    199 #endif
    200 #if defined (SIGWINCH)
    201   if (hostsig == SIGWINCH)
    202     return GDB_SIGNAL_WINCH;
    203 #endif
    204 #if defined (SIGURG)
    205   if (hostsig == SIGURG)
    206     return GDB_SIGNAL_URG;
    207 #endif
    208 #if defined (SIGIO)
    209   if (hostsig == SIGIO)
    210     return GDB_SIGNAL_IO;
    211 #endif
    212 #if defined (SIGPOLL)
    213   if (hostsig == SIGPOLL)
    214     return GDB_SIGNAL_POLL;
    215 #endif
    216 #if defined (SIGSTOP)
    217   if (hostsig == SIGSTOP)
    218     return GDB_SIGNAL_STOP;
    219 #endif
    220 #if defined (SIGTSTP)
    221   if (hostsig == SIGTSTP)
    222     return GDB_SIGNAL_TSTP;
    223 #endif
    224 #if defined (SIGCONT)
    225   if (hostsig == SIGCONT)
    226     return GDB_SIGNAL_CONT;
    227 #endif
    228 #if defined (SIGTTIN)
    229   if (hostsig == SIGTTIN)
    230     return GDB_SIGNAL_TTIN;
    231 #endif
    232 #if defined (SIGTTOU)
    233   if (hostsig == SIGTTOU)
    234     return GDB_SIGNAL_TTOU;
    235 #endif
    236 #if defined (SIGVTALRM)
    237   if (hostsig == SIGVTALRM)
    238     return GDB_SIGNAL_VTALRM;
    239 #endif
    240 #if defined (SIGPROF)
    241   if (hostsig == SIGPROF)
    242     return GDB_SIGNAL_PROF;
    243 #endif
    244 #if defined (SIGXCPU)
    245   if (hostsig == SIGXCPU)
    246     return GDB_SIGNAL_XCPU;
    247 #endif
    248 #if defined (SIGXFSZ)
    249   if (hostsig == SIGXFSZ)
    250     return GDB_SIGNAL_XFSZ;
    251 #endif
    252 #if defined (SIGWIND)
    253   if (hostsig == SIGWIND)
    254     return GDB_SIGNAL_WIND;
    255 #endif
    256 #if defined (SIGPHONE)
    257   if (hostsig == SIGPHONE)
    258     return GDB_SIGNAL_PHONE;
    259 #endif
    260 #if defined (SIGLOST)
    261   if (hostsig == SIGLOST)
    262     return GDB_SIGNAL_LOST;
    263 #endif
    264 #if defined (SIGWAITING)
    265   if (hostsig == SIGWAITING)
    266     return GDB_SIGNAL_WAITING;
    267 #endif
    268 #if defined (SIGCANCEL)
    269   if (hostsig == SIGCANCEL)
    270     return GDB_SIGNAL_CANCEL;
    271 #endif
    272 #if defined (SIGLWP)
    273   if (hostsig == SIGLWP)
    274     return GDB_SIGNAL_LWP;
    275 #endif
    276 #if defined (SIGDANGER)
    277   if (hostsig == SIGDANGER)
    278     return GDB_SIGNAL_DANGER;
    279 #endif
    280 #if defined (SIGGRANT)
    281   if (hostsig == SIGGRANT)
    282     return GDB_SIGNAL_GRANT;
    283 #endif
    284 #if defined (SIGRETRACT)
    285   if (hostsig == SIGRETRACT)
    286     return GDB_SIGNAL_RETRACT;
    287 #endif
    288 #if defined (SIGMSG)
    289   if (hostsig == SIGMSG)
    290     return GDB_SIGNAL_MSG;
    291 #endif
    292 #if defined (SIGSOUND)
    293   if (hostsig == SIGSOUND)
    294     return GDB_SIGNAL_SOUND;
    295 #endif
    296 #if defined (SIGSAK)
    297   if (hostsig == SIGSAK)
    298     return GDB_SIGNAL_SAK;
    299 #endif
    300 #if defined (SIGPRIO)
    301   if (hostsig == SIGPRIO)
    302     return GDB_SIGNAL_PRIO;
    303 #endif
    304 
    305   /* Mach exceptions.  Assumes that the values for EXC_ are positive! */
    306 #if defined (EXC_BAD_ACCESS) && defined (_NSIG)
    307   if (hostsig == _NSIG + EXC_BAD_ACCESS)
    308     return GDB_EXC_BAD_ACCESS;
    309 #endif
    310 #if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG)
    311   if (hostsig == _NSIG + EXC_BAD_INSTRUCTION)
    312     return GDB_EXC_BAD_INSTRUCTION;
    313 #endif
    314 #if defined (EXC_ARITHMETIC) && defined (_NSIG)
    315   if (hostsig == _NSIG + EXC_ARITHMETIC)
    316     return GDB_EXC_ARITHMETIC;
    317 #endif
    318 #if defined (EXC_EMULATION) && defined (_NSIG)
    319   if (hostsig == _NSIG + EXC_EMULATION)
    320     return GDB_EXC_EMULATION;
    321 #endif
    322 #if defined (EXC_SOFTWARE) && defined (_NSIG)
    323   if (hostsig == _NSIG + EXC_SOFTWARE)
    324     return GDB_EXC_SOFTWARE;
    325 #endif
    326 #if defined (EXC_BREAKPOINT) && defined (_NSIG)
    327   if (hostsig == _NSIG + EXC_BREAKPOINT)
    328     return GDB_EXC_BREAKPOINT;
    329 #endif
    330 
    331 #if defined (SIGINFO)
    332   if (hostsig == SIGINFO)
    333     return GDB_SIGNAL_INFO;
    334 #endif
    335 #if defined (SIGLIBRT)
    336   if (hostsig == SIGLIBRT)
    337     return GDB_SIGNAL_LIBRT;
    338 #endif
    339 
    340 #if defined (REALTIME_LO)
    341   if (hostsig >= REALTIME_LO && hostsig < REALTIME_HI)
    342     {
    343       /* This block of GDB_SIGNAL_REALTIME value is in order.  */
    344       if (33 <= hostsig && hostsig <= 63)
    345 	return (enum gdb_signal)
    346 	  (hostsig - 33 + (int) GDB_SIGNAL_REALTIME_33);
    347       else if (hostsig == 32)
    348 	return GDB_SIGNAL_REALTIME_32;
    349       else if (64 <= hostsig && hostsig <= 127)
    350 	return (enum gdb_signal)
    351 	  (hostsig - 64 + (int) GDB_SIGNAL_REALTIME_64);
    352       else
    353 	error (_("GDB bug: target.c (gdb_signal_from_host): "
    354 	       "unrecognized real-time signal"));
    355     }
    356 #endif
    357 
    358   return GDB_SIGNAL_UNKNOWN;
    359 }
    360 
    361 /* Convert a OURSIG (an enum gdb_signal) to the form used by the
    362    target operating system (refered to as the ``host'') or zero if the
    363    equivalent host signal is not available.  Set/clear OURSIG_OK
    364    accordingly. */
    365 
    366 static int
    367 do_gdb_signal_to_host (enum gdb_signal oursig,
    368 			  int *oursig_ok)
    369 {
    370   int retsig;
    371   /* Silence the 'not used' warning, for targets that
    372      do not support signals.  */
    373   (void) retsig;
    374 
    375   /* Signals are ordered ANSI-standard signals first, other signals
    376      second, with signals in each block ordered by their numerical
    377      values on a typical POSIX platform.  */
    378 
    379   *oursig_ok = 1;
    380   switch (oursig)
    381     {
    382     case GDB_SIGNAL_0:
    383       return 0;
    384 
    385       /* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
    386 	 are ANSI-standard signals and are always available.  */
    387     case GDB_SIGNAL_INT:
    388       return SIGINT;
    389     case GDB_SIGNAL_ILL:
    390       return SIGILL;
    391     case GDB_SIGNAL_ABRT:
    392       return SIGABRT;
    393     case GDB_SIGNAL_FPE:
    394       return SIGFPE;
    395     case GDB_SIGNAL_SEGV:
    396       return SIGSEGV;
    397     case GDB_SIGNAL_TERM:
    398       return SIGTERM;
    399 
    400       /* All other signals need preprocessor conditionals.  */
    401 #if defined (SIGHUP)
    402     case GDB_SIGNAL_HUP:
    403       return SIGHUP;
    404 #endif
    405 #if defined (SIGQUIT)
    406     case GDB_SIGNAL_QUIT:
    407       return SIGQUIT;
    408 #endif
    409 #if defined (SIGTRAP)
    410     case GDB_SIGNAL_TRAP:
    411       return SIGTRAP;
    412 #endif
    413 #if defined (SIGEMT)
    414     case GDB_SIGNAL_EMT:
    415       return SIGEMT;
    416 #endif
    417 #if defined (SIGKILL)
    418     case GDB_SIGNAL_KILL:
    419       return SIGKILL;
    420 #endif
    421 #if defined (SIGBUS)
    422     case GDB_SIGNAL_BUS:
    423       return SIGBUS;
    424 #endif
    425 #if defined (SIGSYS)
    426     case GDB_SIGNAL_SYS:
    427       return SIGSYS;
    428 #endif
    429 #if defined (SIGPIPE)
    430     case GDB_SIGNAL_PIPE:
    431       return SIGPIPE;
    432 #endif
    433 #if defined (SIGALRM)
    434     case GDB_SIGNAL_ALRM:
    435       return SIGALRM;
    436 #endif
    437 #if defined (SIGUSR1)
    438     case GDB_SIGNAL_USR1:
    439       return SIGUSR1;
    440 #endif
    441 #if defined (SIGUSR2)
    442     case GDB_SIGNAL_USR2:
    443       return SIGUSR2;
    444 #endif
    445 #if defined (SIGCHLD) || defined (SIGCLD)
    446     case GDB_SIGNAL_CHLD:
    447 #if defined (SIGCHLD)
    448       return SIGCHLD;
    449 #else
    450       return SIGCLD;
    451 #endif
    452 #endif /* SIGCLD or SIGCHLD */
    453 #if defined (SIGPWR)
    454     case GDB_SIGNAL_PWR:
    455       return SIGPWR;
    456 #endif
    457 #if defined (SIGWINCH)
    458     case GDB_SIGNAL_WINCH:
    459       return SIGWINCH;
    460 #endif
    461 #if defined (SIGURG)
    462     case GDB_SIGNAL_URG:
    463       return SIGURG;
    464 #endif
    465 #if defined (SIGIO)
    466     case GDB_SIGNAL_IO:
    467       return SIGIO;
    468 #endif
    469 #if defined (SIGPOLL)
    470     case GDB_SIGNAL_POLL:
    471       return SIGPOLL;
    472 #endif
    473 #if defined (SIGSTOP)
    474     case GDB_SIGNAL_STOP:
    475       return SIGSTOP;
    476 #endif
    477 #if defined (SIGTSTP)
    478     case GDB_SIGNAL_TSTP:
    479       return SIGTSTP;
    480 #endif
    481 #if defined (SIGCONT)
    482     case GDB_SIGNAL_CONT:
    483       return SIGCONT;
    484 #endif
    485 #if defined (SIGTTIN)
    486     case GDB_SIGNAL_TTIN:
    487       return SIGTTIN;
    488 #endif
    489 #if defined (SIGTTOU)
    490     case GDB_SIGNAL_TTOU:
    491       return SIGTTOU;
    492 #endif
    493 #if defined (SIGVTALRM)
    494     case GDB_SIGNAL_VTALRM:
    495       return SIGVTALRM;
    496 #endif
    497 #if defined (SIGPROF)
    498     case GDB_SIGNAL_PROF:
    499       return SIGPROF;
    500 #endif
    501 #if defined (SIGXCPU)
    502     case GDB_SIGNAL_XCPU:
    503       return SIGXCPU;
    504 #endif
    505 #if defined (SIGXFSZ)
    506     case GDB_SIGNAL_XFSZ:
    507       return SIGXFSZ;
    508 #endif
    509 #if defined (SIGWIND)
    510     case GDB_SIGNAL_WIND:
    511       return SIGWIND;
    512 #endif
    513 #if defined (SIGPHONE)
    514     case GDB_SIGNAL_PHONE:
    515       return SIGPHONE;
    516 #endif
    517 #if defined (SIGLOST)
    518     case GDB_SIGNAL_LOST:
    519       return SIGLOST;
    520 #endif
    521 #if defined (SIGWAITING)
    522     case GDB_SIGNAL_WAITING:
    523       return SIGWAITING;
    524 #endif
    525 #if defined (SIGCANCEL)
    526     case GDB_SIGNAL_CANCEL:
    527       return SIGCANCEL;
    528 #endif
    529 #if defined (SIGLWP)
    530     case GDB_SIGNAL_LWP:
    531       return SIGLWP;
    532 #endif
    533 #if defined (SIGDANGER)
    534     case GDB_SIGNAL_DANGER:
    535       return SIGDANGER;
    536 #endif
    537 #if defined (SIGGRANT)
    538     case GDB_SIGNAL_GRANT:
    539       return SIGGRANT;
    540 #endif
    541 #if defined (SIGRETRACT)
    542     case GDB_SIGNAL_RETRACT:
    543       return SIGRETRACT;
    544 #endif
    545 #if defined (SIGMSG)
    546     case GDB_SIGNAL_MSG:
    547       return SIGMSG;
    548 #endif
    549 #if defined (SIGSOUND)
    550     case GDB_SIGNAL_SOUND:
    551       return SIGSOUND;
    552 #endif
    553 #if defined (SIGSAK)
    554     case GDB_SIGNAL_SAK:
    555       return SIGSAK;
    556 #endif
    557 #if defined (SIGPRIO)
    558     case GDB_SIGNAL_PRIO:
    559       return SIGPRIO;
    560 #endif
    561 
    562       /* Mach exceptions.  Assumes that the values for EXC_ are positive! */
    563 #if defined (EXC_BAD_ACCESS) && defined (_NSIG)
    564     case GDB_EXC_BAD_ACCESS:
    565       return _NSIG + EXC_BAD_ACCESS;
    566 #endif
    567 #if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG)
    568     case GDB_EXC_BAD_INSTRUCTION:
    569       return _NSIG + EXC_BAD_INSTRUCTION;
    570 #endif
    571 #if defined (EXC_ARITHMETIC) && defined (_NSIG)
    572     case GDB_EXC_ARITHMETIC:
    573       return _NSIG + EXC_ARITHMETIC;
    574 #endif
    575 #if defined (EXC_EMULATION) && defined (_NSIG)
    576     case GDB_EXC_EMULATION:
    577       return _NSIG + EXC_EMULATION;
    578 #endif
    579 #if defined (EXC_SOFTWARE) && defined (_NSIG)
    580     case GDB_EXC_SOFTWARE:
    581       return _NSIG + EXC_SOFTWARE;
    582 #endif
    583 #if defined (EXC_BREAKPOINT) && defined (_NSIG)
    584     case GDB_EXC_BREAKPOINT:
    585       return _NSIG + EXC_BREAKPOINT;
    586 #endif
    587 
    588 #if defined (SIGINFO)
    589     case GDB_SIGNAL_INFO:
    590       return SIGINFO;
    591 #endif
    592 #if defined (SIGLIBRT)
    593     case GDB_SIGNAL_LIBRT:
    594       return SIGLIBRT;
    595 #endif
    596 
    597     default:
    598 #if defined (REALTIME_LO)
    599       retsig = 0;
    600 
    601       if (oursig >= GDB_SIGNAL_REALTIME_33
    602 	  && oursig <= GDB_SIGNAL_REALTIME_63)
    603 	{
    604 	  /* This block of signals is continuous, and
    605 	     GDB_SIGNAL_REALTIME_33 is 33 by definition.  */
    606 	  retsig = (int) oursig - (int) GDB_SIGNAL_REALTIME_33 + 33;
    607 	}
    608       else if (oursig == GDB_SIGNAL_REALTIME_32)
    609 	{
    610 	  /* GDB_SIGNAL_REALTIME_32 isn't contiguous with
    611 	     GDB_SIGNAL_REALTIME_33.  It is 32 by definition.  */
    612 	  retsig = 32;
    613 	}
    614       else if (oursig >= GDB_SIGNAL_REALTIME_64
    615 	  && oursig <= GDB_SIGNAL_REALTIME_127)
    616 	{
    617 	  /* This block of signals is continuous, and
    618 	     GDB_SIGNAL_REALTIME_64 is 64 by definition.  */
    619 	  retsig = (int) oursig - (int) GDB_SIGNAL_REALTIME_64 + 64;
    620 	}
    621 
    622       if (retsig >= REALTIME_LO && retsig < REALTIME_HI)
    623 	return retsig;
    624 #endif
    625 
    626       *oursig_ok = 0;
    627       return 0;
    628     }
    629 }
    630 
    631 int
    632 gdb_signal_to_host_p (enum gdb_signal oursig)
    633 {
    634   int oursig_ok;
    635   do_gdb_signal_to_host (oursig, &oursig_ok);
    636   return oursig_ok;
    637 }
    638 
    639 int
    640 gdb_signal_to_host (enum gdb_signal oursig)
    641 {
    642   int oursig_ok;
    643   int targ_signo = do_gdb_signal_to_host (oursig, &oursig_ok);
    644   if (!oursig_ok)
    645     {
    646       /* The user might be trying to do "signal SIGSAK" where this system
    647 	 doesn't have SIGSAK.  */
    648       warning (_("Signal %s does not exist on this system."),
    649 	       gdb_signal_to_name (oursig));
    650       return 0;
    651     }
    652   else
    653     return targ_signo;
    654 }
    655