gdb/common/signals.c - gdb
Global variables defined
Functions defined
Macros defined
Source code
- #include "common-defs.h"
- #ifdef HAVE_SIGNAL_H
- #include <signal.h>
- #endif
- #include "gdb_signals.h"
- struct gdbarch;
- #ifndef REALTIME_LO
- # if defined(__SIGRTMIN)
- # define REALTIME_LO __SIGRTMIN
- # define REALTIME_HI (__SIGRTMAX + 1)
- # elif defined(SIGRTMIN)
- # define REALTIME_LO SIGRTMIN
- # define REALTIME_HI (SIGRTMAX + 1)
- # endif
- #endif
- static const struct {
- const char *symbol;
- const char *name;
- const char *string;
- } signals [] =
- {
- #define SET(symbol, constant, name, string) { #symbol, name, string },
- #include "gdb/signals.def"
- #undef SET
- };
- const char *
- gdb_signal_to_symbol_string (enum gdb_signal sig)
- {
- gdb_assert ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST);
- return signals[sig].symbol;
- }
- const char *
- gdb_signal_to_string (enum gdb_signal sig)
- {
- if ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST)
- return signals[sig].string;
- else
- return signals[GDB_SIGNAL_UNKNOWN].string;
- }
- const char *
- gdb_signal_to_name (enum gdb_signal sig)
- {
- if ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST
- && signals[sig].name != NULL)
- return signals[sig].name;
- else
-
- return "?";
- }
- enum gdb_signal
- gdb_signal_from_name (const char *name)
- {
- enum gdb_signal sig;
-
-
- for (sig = GDB_SIGNAL_HUP;
- sig < GDB_SIGNAL_LAST;
- sig = (enum gdb_signal) ((int) sig + 1))
- if (signals[sig].name != NULL
- && strcmp (name, signals[sig].name) == 0)
- return sig;
- return GDB_SIGNAL_UNKNOWN;
- }
- enum gdb_signal
- gdb_signal_from_host (int hostsig)
- {
-
- if (hostsig == 0)
- return GDB_SIGNAL_0;
-
- if (hostsig == SIGINT)
- return GDB_SIGNAL_INT;
- if (hostsig == SIGILL)
- return GDB_SIGNAL_ILL;
- if (hostsig == SIGABRT)
- return GDB_SIGNAL_ABRT;
- if (hostsig == SIGFPE)
- return GDB_SIGNAL_FPE;
- if (hostsig == SIGSEGV)
- return GDB_SIGNAL_SEGV;
- if (hostsig == SIGTERM)
- return GDB_SIGNAL_TERM;
-
- #if defined (SIGHUP)
- if (hostsig == SIGHUP)
- return GDB_SIGNAL_HUP;
- #endif
- #if defined (SIGQUIT)
- if (hostsig == SIGQUIT)
- return GDB_SIGNAL_QUIT;
- #endif
- #if defined (SIGTRAP)
- if (hostsig == SIGTRAP)
- return GDB_SIGNAL_TRAP;
- #endif
- #if defined (SIGEMT)
- if (hostsig == SIGEMT)
- return GDB_SIGNAL_EMT;
- #endif
- #if defined (SIGKILL)
- if (hostsig == SIGKILL)
- return GDB_SIGNAL_KILL;
- #endif
- #if defined (SIGBUS)
- if (hostsig == SIGBUS)
- return GDB_SIGNAL_BUS;
- #endif
- #if defined (SIGSYS)
- if (hostsig == SIGSYS)
- return GDB_SIGNAL_SYS;
- #endif
- #if defined (SIGPIPE)
- if (hostsig == SIGPIPE)
- return GDB_SIGNAL_PIPE;
- #endif
- #if defined (SIGALRM)
- if (hostsig == SIGALRM)
- return GDB_SIGNAL_ALRM;
- #endif
- #if defined (SIGUSR1)
- if (hostsig == SIGUSR1)
- return GDB_SIGNAL_USR1;
- #endif
- #if defined (SIGUSR2)
- if (hostsig == SIGUSR2)
- return GDB_SIGNAL_USR2;
- #endif
- #if defined (SIGCLD)
- if (hostsig == SIGCLD)
- return GDB_SIGNAL_CHLD;
- #endif
- #if defined (SIGCHLD)
- if (hostsig == SIGCHLD)
- return GDB_SIGNAL_CHLD;
- #endif
- #if defined (SIGPWR)
- if (hostsig == SIGPWR)
- return GDB_SIGNAL_PWR;
- #endif
- #if defined (SIGWINCH)
- if (hostsig == SIGWINCH)
- return GDB_SIGNAL_WINCH;
- #endif
- #if defined (SIGURG)
- if (hostsig == SIGURG)
- return GDB_SIGNAL_URG;
- #endif
- #if defined (SIGIO)
- if (hostsig == SIGIO)
- return GDB_SIGNAL_IO;
- #endif
- #if defined (SIGPOLL)
- if (hostsig == SIGPOLL)
- return GDB_SIGNAL_POLL;
- #endif
- #if defined (SIGSTOP)
- if (hostsig == SIGSTOP)
- return GDB_SIGNAL_STOP;
- #endif
- #if defined (SIGTSTP)
- if (hostsig == SIGTSTP)
- return GDB_SIGNAL_TSTP;
- #endif
- #if defined (SIGCONT)
- if (hostsig == SIGCONT)
- return GDB_SIGNAL_CONT;
- #endif
- #if defined (SIGTTIN)
- if (hostsig == SIGTTIN)
- return GDB_SIGNAL_TTIN;
- #endif
- #if defined (SIGTTOU)
- if (hostsig == SIGTTOU)
- return GDB_SIGNAL_TTOU;
- #endif
- #if defined (SIGVTALRM)
- if (hostsig == SIGVTALRM)
- return GDB_SIGNAL_VTALRM;
- #endif
- #if defined (SIGPROF)
- if (hostsig == SIGPROF)
- return GDB_SIGNAL_PROF;
- #endif
- #if defined (SIGXCPU)
- if (hostsig == SIGXCPU)
- return GDB_SIGNAL_XCPU;
- #endif
- #if defined (SIGXFSZ)
- if (hostsig == SIGXFSZ)
- return GDB_SIGNAL_XFSZ;
- #endif
- #if defined (SIGWIND)
- if (hostsig == SIGWIND)
- return GDB_SIGNAL_WIND;
- #endif
- #if defined (SIGPHONE)
- if (hostsig == SIGPHONE)
- return GDB_SIGNAL_PHONE;
- #endif
- #if defined (SIGLOST)
- if (hostsig == SIGLOST)
- return GDB_SIGNAL_LOST;
- #endif
- #if defined (SIGWAITING)
- if (hostsig == SIGWAITING)
- return GDB_SIGNAL_WAITING;
- #endif
- #if defined (SIGCANCEL)
- if (hostsig == SIGCANCEL)
- return GDB_SIGNAL_CANCEL;
- #endif
- #if defined (SIGLWP)
- if (hostsig == SIGLWP)
- return GDB_SIGNAL_LWP;
- #endif
- #if defined (SIGDANGER)
- if (hostsig == SIGDANGER)
- return GDB_SIGNAL_DANGER;
- #endif
- #if defined (SIGGRANT)
- if (hostsig == SIGGRANT)
- return GDB_SIGNAL_GRANT;
- #endif
- #if defined (SIGRETRACT)
- if (hostsig == SIGRETRACT)
- return GDB_SIGNAL_RETRACT;
- #endif
- #if defined (SIGMSG)
- if (hostsig == SIGMSG)
- return GDB_SIGNAL_MSG;
- #endif
- #if defined (SIGSOUND)
- if (hostsig == SIGSOUND)
- return GDB_SIGNAL_SOUND;
- #endif
- #if defined (SIGSAK)
- if (hostsig == SIGSAK)
- return GDB_SIGNAL_SAK;
- #endif
- #if defined (SIGPRIO)
- if (hostsig == SIGPRIO)
- return GDB_SIGNAL_PRIO;
- #endif
-
- #if defined (EXC_BAD_ACCESS) && defined (_NSIG)
- if (hostsig == _NSIG + EXC_BAD_ACCESS)
- return GDB_EXC_BAD_ACCESS;
- #endif
- #if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG)
- if (hostsig == _NSIG + EXC_BAD_INSTRUCTION)
- return GDB_EXC_BAD_INSTRUCTION;
- #endif
- #if defined (EXC_ARITHMETIC) && defined (_NSIG)
- if (hostsig == _NSIG + EXC_ARITHMETIC)
- return GDB_EXC_ARITHMETIC;
- #endif
- #if defined (EXC_EMULATION) && defined (_NSIG)
- if (hostsig == _NSIG + EXC_EMULATION)
- return GDB_EXC_EMULATION;
- #endif
- #if defined (EXC_SOFTWARE) && defined (_NSIG)
- if (hostsig == _NSIG + EXC_SOFTWARE)
- return GDB_EXC_SOFTWARE;
- #endif
- #if defined (EXC_BREAKPOINT) && defined (_NSIG)
- if (hostsig == _NSIG + EXC_BREAKPOINT)
- return GDB_EXC_BREAKPOINT;
- #endif
- #if defined (SIGINFO)
- if (hostsig == SIGINFO)
- return GDB_SIGNAL_INFO;
- #endif
- #if defined (REALTIME_LO)
- if (hostsig >= REALTIME_LO && hostsig < REALTIME_HI)
- {
-
- if (33 <= hostsig && hostsig <= 63)
- return (enum gdb_signal)
- (hostsig - 33 + (int) GDB_SIGNAL_REALTIME_33);
- else if (hostsig == 32)
- return GDB_SIGNAL_REALTIME_32;
- else if (64 <= hostsig && hostsig <= 127)
- return (enum gdb_signal)
- (hostsig - 64 + (int) GDB_SIGNAL_REALTIME_64);
- else
- error (_("GDB bug: target.c (gdb_signal_from_host): "
- "unrecognized real-time signal"));
- }
- #endif
- return GDB_SIGNAL_UNKNOWN;
- }
- static int
- do_gdb_signal_to_host (enum gdb_signal oursig,
- int *oursig_ok)
- {
- int retsig;
-
- (void) retsig;
-
- *oursig_ok = 1;
- switch (oursig)
- {
- case GDB_SIGNAL_0:
- return 0;
-
- case GDB_SIGNAL_INT:
- return SIGINT;
- case GDB_SIGNAL_ILL:
- return SIGILL;
- case GDB_SIGNAL_ABRT:
- return SIGABRT;
- case GDB_SIGNAL_FPE:
- return SIGFPE;
- case GDB_SIGNAL_SEGV:
- return SIGSEGV;
- case GDB_SIGNAL_TERM:
- return SIGTERM;
-
- #if defined (SIGHUP)
- case GDB_SIGNAL_HUP:
- return SIGHUP;
- #endif
- #if defined (SIGQUIT)
- case GDB_SIGNAL_QUIT:
- return SIGQUIT;
- #endif
- #if defined (SIGTRAP)
- case GDB_SIGNAL_TRAP:
- return SIGTRAP;
- #endif
- #if defined (SIGEMT)
- case GDB_SIGNAL_EMT:
- return SIGEMT;
- #endif
- #if defined (SIGKILL)
- case GDB_SIGNAL_KILL:
- return SIGKILL;
- #endif
- #if defined (SIGBUS)
- case GDB_SIGNAL_BUS:
- return SIGBUS;
- #endif
- #if defined (SIGSYS)
- case GDB_SIGNAL_SYS:
- return SIGSYS;
- #endif
- #if defined (SIGPIPE)
- case GDB_SIGNAL_PIPE:
- return SIGPIPE;
- #endif
- #if defined (SIGALRM)
- case GDB_SIGNAL_ALRM:
- return SIGALRM;
- #endif
- #if defined (SIGUSR1)
- case GDB_SIGNAL_USR1:
- return SIGUSR1;
- #endif
- #if defined (SIGUSR2)
- case GDB_SIGNAL_USR2:
- return SIGUSR2;
- #endif
- #if defined (SIGCHLD) || defined (SIGCLD)
- case GDB_SIGNAL_CHLD:
- #if defined (SIGCHLD)
- return SIGCHLD;
- #else
- return SIGCLD;
- #endif
- #endif
- #if defined (SIGPWR)
- case GDB_SIGNAL_PWR:
- return SIGPWR;
- #endif
- #if defined (SIGWINCH)
- case GDB_SIGNAL_WINCH:
- return SIGWINCH;
- #endif
- #if defined (SIGURG)
- case GDB_SIGNAL_URG:
- return SIGURG;
- #endif
- #if defined (SIGIO)
- case GDB_SIGNAL_IO:
- return SIGIO;
- #endif
- #if defined (SIGPOLL)
- case GDB_SIGNAL_POLL:
- return SIGPOLL;
- #endif
- #if defined (SIGSTOP)
- case GDB_SIGNAL_STOP:
- return SIGSTOP;
- #endif
- #if defined (SIGTSTP)
- case GDB_SIGNAL_TSTP:
- return SIGTSTP;
- #endif
- #if defined (SIGCONT)
- case GDB_SIGNAL_CONT:
- return SIGCONT;
- #endif
- #if defined (SIGTTIN)
- case GDB_SIGNAL_TTIN:
- return SIGTTIN;
- #endif
- #if defined (SIGTTOU)
- case GDB_SIGNAL_TTOU:
- return SIGTTOU;
- #endif
- #if defined (SIGVTALRM)
- case GDB_SIGNAL_VTALRM:
- return SIGVTALRM;
- #endif
- #if defined (SIGPROF)
- case GDB_SIGNAL_PROF:
- return SIGPROF;
- #endif
- #if defined (SIGXCPU)
- case GDB_SIGNAL_XCPU:
- return SIGXCPU;
- #endif
- #if defined (SIGXFSZ)
- case GDB_SIGNAL_XFSZ:
- return SIGXFSZ;
- #endif
- #if defined (SIGWIND)
- case GDB_SIGNAL_WIND:
- return SIGWIND;
- #endif
- #if defined (SIGPHONE)
- case GDB_SIGNAL_PHONE:
- return SIGPHONE;
- #endif
- #if defined (SIGLOST)
- case GDB_SIGNAL_LOST:
- return SIGLOST;
- #endif
- #if defined (SIGWAITING)
- case GDB_SIGNAL_WAITING:
- return SIGWAITING;
- #endif
- #if defined (SIGCANCEL)
- case GDB_SIGNAL_CANCEL:
- return SIGCANCEL;
- #endif
- #if defined (SIGLWP)
- case GDB_SIGNAL_LWP:
- return SIGLWP;
- #endif
- #if defined (SIGDANGER)
- case GDB_SIGNAL_DANGER:
- return SIGDANGER;
- #endif
- #if defined (SIGGRANT)
- case GDB_SIGNAL_GRANT:
- return SIGGRANT;
- #endif
- #if defined (SIGRETRACT)
- case GDB_SIGNAL_RETRACT:
- return SIGRETRACT;
- #endif
- #if defined (SIGMSG)
- case GDB_SIGNAL_MSG:
- return SIGMSG;
- #endif
- #if defined (SIGSOUND)
- case GDB_SIGNAL_SOUND:
- return SIGSOUND;
- #endif
- #if defined (SIGSAK)
- case GDB_SIGNAL_SAK:
- return SIGSAK;
- #endif
- #if defined (SIGPRIO)
- case GDB_SIGNAL_PRIO:
- return SIGPRIO;
- #endif
-
- #if defined (EXC_BAD_ACCESS) && defined (_NSIG)
- case GDB_EXC_BAD_ACCESS:
- return _NSIG + EXC_BAD_ACCESS;
- #endif
- #if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG)
- case GDB_EXC_BAD_INSTRUCTION:
- return _NSIG + EXC_BAD_INSTRUCTION;
- #endif
- #if defined (EXC_ARITHMETIC) && defined (_NSIG)
- case GDB_EXC_ARITHMETIC:
- return _NSIG + EXC_ARITHMETIC;
- #endif
- #if defined (EXC_EMULATION) && defined (_NSIG)
- case GDB_EXC_EMULATION:
- return _NSIG + EXC_EMULATION;
- #endif
- #if defined (EXC_SOFTWARE) && defined (_NSIG)
- case GDB_EXC_SOFTWARE:
- return _NSIG + EXC_SOFTWARE;
- #endif
- #if defined (EXC_BREAKPOINT) && defined (_NSIG)
- case GDB_EXC_BREAKPOINT:
- return _NSIG + EXC_BREAKPOINT;
- #endif
- #if defined (SIGINFO)
- case GDB_SIGNAL_INFO:
- return SIGINFO;
- #endif
- default:
- #if defined (REALTIME_LO)
- retsig = 0;
- if (oursig >= GDB_SIGNAL_REALTIME_33
- && oursig <= GDB_SIGNAL_REALTIME_63)
- {
-
- retsig = (int) oursig - (int) GDB_SIGNAL_REALTIME_33 + 33;
- }
- else if (oursig == GDB_SIGNAL_REALTIME_32)
- {
-
- retsig = 32;
- }
- else if (oursig >= GDB_SIGNAL_REALTIME_64
- && oursig <= GDB_SIGNAL_REALTIME_127)
- {
-
- retsig = (int) oursig - (int) GDB_SIGNAL_REALTIME_64 + 64;
- }
- if (retsig >= REALTIME_LO && retsig < REALTIME_HI)
- return retsig;
- #endif
- *oursig_ok = 0;
- return 0;
- }
- }
- int
- gdb_signal_to_host_p (enum gdb_signal oursig)
- {
- int oursig_ok;
- do_gdb_signal_to_host (oursig, &oursig_ok);
- return oursig_ok;
- }
- int
- gdb_signal_to_host (enum gdb_signal oursig)
- {
- int oursig_ok;
- int targ_signo = do_gdb_signal_to_host (oursig, &oursig_ok);
- if (!oursig_ok)
- {
-
- warning (_("Signal %s does not exist on this system."),
- gdb_signal_to_name (oursig));
- return 0;
- }
- else
- return targ_signo;
- }