X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fcommon%2Fsignals.c;h=45c0c7341ef33be133a191aad9c50c8dbb6bf85c;hb=b1058ce98878654d8c19b7b6741d84615795b9a1;hp=1f3e3a4e0b84d40c07f1519035189269c211b02e;hpb=c9737c08e7f804dfa80f71b74cb5678d0b69308e;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/common/signals.c b/gdb/common/signals.c index 1f3e3a4e0b..45c0c7341e 100644 --- a/gdb/common/signals.c +++ b/gdb/common/signals.c @@ -1,5 +1,5 @@ /* Target signal translation functions for GDB. - Copyright (C) 1990-2013 Free Software Foundation, Inc. + Copyright (C) 1990-2016 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB. @@ -17,19 +17,13 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifdef GDBSERVER -#include "server.h" -#else -#include "defs.h" -#include "gdb_string.h" -#endif +#include "common-defs.h" #ifdef HAVE_SIGNAL_H #include #endif #include "gdb_signals.h" -#include "gdb_assert.h" struct gdbarch; @@ -121,44 +115,47 @@ gdb_signal_from_name (const char *name) enum gdb_signal gdb_signal_from_host (int hostsig) { - /* A switch statement would make sense but would require special kludges - to deal with the cases where more than one signal has the same number. */ + /* A switch statement would make sense but would require special + kludges to deal with the cases where more than one signal has the + same number. Signals are ordered ANSI-standard signals first, + other signals second, with signals in each block ordered by their + numerical values on a typical POSIX platform. */ if (hostsig == 0) return GDB_SIGNAL_0; + /* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM + are ANSI-standard signals and are always available. */ + 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; + + /* All other signals need preprocessor conditionals. */ #if defined (SIGHUP) if (hostsig == SIGHUP) return GDB_SIGNAL_HUP; #endif -#if defined (SIGINT) - if (hostsig == SIGINT) - return GDB_SIGNAL_INT; -#endif #if defined (SIGQUIT) if (hostsig == SIGQUIT) return GDB_SIGNAL_QUIT; #endif -#if defined (SIGILL) - if (hostsig == SIGILL) - return GDB_SIGNAL_ILL; -#endif #if defined (SIGTRAP) if (hostsig == SIGTRAP) return GDB_SIGNAL_TRAP; #endif -#if defined (SIGABRT) - if (hostsig == SIGABRT) - return GDB_SIGNAL_ABRT; -#endif #if defined (SIGEMT) if (hostsig == SIGEMT) return GDB_SIGNAL_EMT; #endif -#if defined (SIGFPE) - if (hostsig == SIGFPE) - return GDB_SIGNAL_FPE; -#endif #if defined (SIGKILL) if (hostsig == SIGKILL) return GDB_SIGNAL_KILL; @@ -167,10 +164,6 @@ gdb_signal_from_host (int hostsig) if (hostsig == SIGBUS) return GDB_SIGNAL_BUS; #endif -#if defined (SIGSEGV) - if (hostsig == SIGSEGV) - return GDB_SIGNAL_SEGV; -#endif #if defined (SIGSYS) if (hostsig == SIGSYS) return GDB_SIGNAL_SYS; @@ -183,10 +176,6 @@ gdb_signal_from_host (int hostsig) if (hostsig == SIGALRM) return GDB_SIGNAL_ALRM; #endif -#if defined (SIGTERM) - if (hostsig == SIGTERM) - return GDB_SIGNAL_TERM; -#endif #if defined (SIGUSR1) if (hostsig == SIGUSR1) return GDB_SIGNAL_USR1; @@ -378,44 +367,48 @@ do_gdb_signal_to_host (enum gdb_signal oursig, do not support signals. */ (void) retsig; + /* Signals are ordered ANSI-standard signals first, other signals + second, with signals in each block ordered by their numerical + values on a typical POSIX platform. */ + *oursig_ok = 1; switch (oursig) { case GDB_SIGNAL_0: return 0; + /* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM + are ANSI-standard signals and are always available. */ + 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; + + /* All other signals need preprocessor conditionals. */ #if defined (SIGHUP) case GDB_SIGNAL_HUP: return SIGHUP; #endif -#if defined (SIGINT) - case GDB_SIGNAL_INT: - return SIGINT; -#endif #if defined (SIGQUIT) case GDB_SIGNAL_QUIT: return SIGQUIT; #endif -#if defined (SIGILL) - case GDB_SIGNAL_ILL: - return SIGILL; -#endif #if defined (SIGTRAP) case GDB_SIGNAL_TRAP: return SIGTRAP; #endif -#if defined (SIGABRT) - case GDB_SIGNAL_ABRT: - return SIGABRT; -#endif #if defined (SIGEMT) case GDB_SIGNAL_EMT: return SIGEMT; #endif -#if defined (SIGFPE) - case GDB_SIGNAL_FPE: - return SIGFPE; -#endif #if defined (SIGKILL) case GDB_SIGNAL_KILL: return SIGKILL; @@ -424,10 +417,6 @@ do_gdb_signal_to_host (enum gdb_signal oursig, case GDB_SIGNAL_BUS: return SIGBUS; #endif -#if defined (SIGSEGV) - case GDB_SIGNAL_SEGV: - return SIGSEGV; -#endif #if defined (SIGSYS) case GDB_SIGNAL_SYS: return SIGSYS; @@ -440,10 +429,6 @@ do_gdb_signal_to_host (enum gdb_signal oursig, case GDB_SIGNAL_ALRM: return SIGALRM; #endif -#if defined (SIGTERM) - case GDB_SIGNAL_TERM: - return SIGTERM; -#endif #if defined (SIGUSR1) case GDB_SIGNAL_USR1: return SIGUSR1;