Separate out ANSI-standard signals

This commit reorders various pieces of code to separate ANSI-standard
signals from other signals that need checking.  Comments are added to
document this, and to document the ordering of the signals.

gdb/
2014-06-09  Gary Benson  <gbenson@redhat.com>

	* common/signals.c (gdb_signal_from_host): Reorder to separate
	the always-available ANSI-standard signals from the signals that
	require checking.
	(do_gdb_signal_to_host): Likewise.
	* proc-events.c (signal_table): Likewise.

gdb/testsuite/
2014-06-09  Gary Benson  <gbenson@redhat.com>

	* gdb.base/sigall.c [Functions to send signals]: Reorder to
	separate the always-available ANSI-standard signals from the
	signals that require checking.
	(main): Likewise.
	* gdb.reverse/sigall-reverse.c [Functions to send signals]:
	Likewise.
	(main): Likewise.
This commit is contained in:
Gary Benson
2014-06-09 10:34:33 +01:00
parent c261090765
commit 3657956bf8
6 changed files with 205 additions and 129 deletions

@ -1,3 +1,11 @@
2014-06-09 Gary Benson <gbenson@redhat.com>
* common/signals.c (gdb_signal_from_host): Reorder to separate
the always-available ANSI-standard signals from the signals that
require checking.
(do_gdb_signal_to_host): Likewise.
* proc-events.c (signal_table): Likewise.
2014-06-08 Hui Zhu <hui@codesourcery.com>
* common/linux-ptrace.c (linux_disable_event_reporting): New

@ -121,36 +121,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 (hostsig == SIGINT)
return GDB_SIGNAL_INT;
#if defined (SIGQUIT)
if (hostsig == SIGQUIT)
return GDB_SIGNAL_QUIT;
#endif
if (hostsig == SIGILL)
return GDB_SIGNAL_ILL;
#if defined (SIGTRAP)
if (hostsig == SIGTRAP)
return GDB_SIGNAL_TRAP;
#endif
if (hostsig == SIGABRT)
return GDB_SIGNAL_ABRT;
#if defined (SIGEMT)
if (hostsig == SIGEMT)
return GDB_SIGNAL_EMT;
#endif
if (hostsig == SIGFPE)
return GDB_SIGNAL_FPE;
#if defined (SIGKILL)
if (hostsig == SIGKILL)
return GDB_SIGNAL_KILL;
@ -159,8 +170,6 @@ gdb_signal_from_host (int hostsig)
if (hostsig == SIGBUS)
return GDB_SIGNAL_BUS;
#endif
if (hostsig == SIGSEGV)
return GDB_SIGNAL_SEGV;
#if defined (SIGSYS)
if (hostsig == SIGSYS)
return GDB_SIGNAL_SYS;
@ -173,8 +182,6 @@ gdb_signal_from_host (int hostsig)
if (hostsig == SIGALRM)
return GDB_SIGNAL_ALRM;
#endif
if (hostsig == SIGTERM)
return GDB_SIGNAL_TERM;
#if defined (SIGUSR1)
if (hostsig == SIGUSR1)
return GDB_SIGNAL_USR1;
@ -366,36 +373,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
case GDB_SIGNAL_INT:
return SIGINT;
#if defined (SIGQUIT)
case GDB_SIGNAL_QUIT:
return SIGQUIT;
#endif
case GDB_SIGNAL_ILL:
return SIGILL;
#if defined (SIGTRAP)
case GDB_SIGNAL_TRAP:
return SIGTRAP;
#endif
case GDB_SIGNAL_ABRT:
return SIGABRT;
#if defined (SIGEMT)
case GDB_SIGNAL_EMT:
return SIGEMT;
#endif
case GDB_SIGNAL_FPE:
return SIGFPE;
#if defined (SIGKILL)
case GDB_SIGNAL_KILL:
return SIGKILL;
@ -404,8 +423,6 @@ do_gdb_signal_to_host (enum gdb_signal oursig,
case GDB_SIGNAL_BUS:
return SIGBUS;
#endif
case GDB_SIGNAL_SEGV:
return SIGSEGV;
#if defined (SIGSYS)
case GDB_SIGNAL_SYS:
return SIGSYS;
@ -418,8 +435,6 @@ do_gdb_signal_to_host (enum gdb_signal oursig,
case GDB_SIGNAL_ALRM:
return SIGALRM;
#endif
case GDB_SIGNAL_TERM:
return SIGTERM;
#if defined (SIGUSR1)
case GDB_SIGNAL_USR1:
return SIGUSR1;

@ -1396,37 +1396,47 @@ proc_prettyprint_syscalls (sysset_t *sysset, int verbose)
/* Prettyprint signals. */
/* Signal translation table. */
/* Signal translation table, ordered ANSI-standard signals first,
other signals second, with signals in each block ordered by their
numerical values on a typical POSIX platform. */
static struct trans signal_table[] =
{
{ 0, "<no signal>", "no signal" },
/* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
are ANSI-standard signals and are always available. */
{ SIGINT, "SIGINT", "Interrupt (rubout)" },
{ SIGILL, "SIGILL", "Illegal instruction" }, /* not reset when caught */
{ SIGABRT, "SIGABRT", "used by abort()" }, /* replaces SIGIOT */
{ SIGFPE, "SIGFPE", "Floating point exception" },
{ SIGSEGV, "SIGSEGV", "Segmentation violation" },
{ SIGTERM, "SIGTERM", "Software termination signal from kill" },
/* All other signals need preprocessor conditionals. */
#ifdef SIGHUP
{ SIGHUP, "SIGHUP", "Hangup" },
#endif
{ SIGINT, "SIGINT", "Interrupt (rubout)" },
#ifdef SIGQUIT
{ SIGQUIT, "SIGQUIT", "Quit (ASCII FS)" },
#endif
{ SIGILL, "SIGILL", "Illegal instruction" }, /* not reset when caught */
#ifdef SIGTRAP
{ SIGTRAP, "SIGTRAP", "Trace trap" }, /* not reset when caught */
#endif
{ SIGABRT, "SIGABRT", "used by abort()" }, /* replaces SIGIOT */
#ifdef SIGIOT
{ SIGIOT, "SIGIOT", "IOT instruction" },
#endif
#ifdef SIGEMT
{ SIGEMT, "SIGEMT", "EMT instruction" },
#endif
{ SIGFPE, "SIGFPE", "Floating point exception" },
#ifdef SIGKILL
{ SIGKILL, "SIGKILL", "Kill" }, /* Solaris: cannot be caught/ignored */
#endif
#ifdef SIGBUS
{ SIGBUS, "SIGBUS", "Bus error" },
#endif
{ SIGSEGV, "SIGSEGV", "Segmentation violation" },
#ifdef SIGSYS
{ SIGSYS, "SIGSYS", "Bad argument to system call" },
#endif
@ -1436,7 +1446,6 @@ static struct trans signal_table[] =
#ifdef SIGALRM
{ SIGALRM, "SIGALRM", "Alarm clock" },
#endif
{ SIGTERM, "SIGTERM", "Software termination signal from kill" },
#ifdef SIGUSR1
{ SIGUSR1, "SIGUSR1", "User defined signal 1" },
#endif

@ -1,3 +1,13 @@
2014-06-09 Gary Benson <gbenson@redhat.com>
* gdb.base/sigall.c [Functions to send signals]: Reorder to
separate the always-available ANSI-standard signals from the
signals that require checking.
(main): Likewise.
* gdb.reverse/sigall-reverse.c [Functions to send signals]:
Likewise.
(main): Likewise.
2014-06-07 Keith Seitz <keiths@redhat.com>
Revert:

@ -786,35 +786,13 @@ handle_TERM (sig)
{
}
/* Functions to send signals. These also serve as markers. */
int
gen_ABRT ()
{
kill (getpid (), SIGABRT);
return 0;
}
/* Functions to send signals. These also serve as markers.
Ordered ANSI-standard signals first, other signals second,
with signals in each block ordered by their numerical values
on a typical POSIX platform. */
int
gen_HUP ()
{
#ifdef SIGHUP
kill (getpid (), SIGHUP);
#else
handle_HUP (0);
#endif
return 0;
}
int
gen_QUIT ()
{
#ifdef SIGQUIT
kill (getpid (), SIGQUIT);
#else
handle_QUIT (0);
#endif
return 0;
}
/* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
are ANSI-standard signals and are always available. */
int
gen_ILL ()
@ -824,13 +802,9 @@ return 0;
}
int
gen_EMT ()
gen_ABRT ()
{
#ifdef SIGEMT
kill (getpid (), SIGEMT);
#else
handle_EMT (0);
#endif
kill (getpid (), SIGABRT);
return 0;
}
@ -856,6 +830,55 @@ gen_FPE ()
return 0;
}
int
gen_SEGV ()
{
kill (getpid (), SIGSEGV);
return 0;
}
int
gen_TERM ()
{
kill (getpid (), SIGTERM);
return 0;
}
/* All other signals need preprocessor conditionals. */
int
gen_HUP ()
{
#ifdef SIGHUP
kill (getpid (), SIGHUP);
#else
handle_HUP (0);
#endif
return 0;
}
int
gen_QUIT ()
{
#ifdef SIGQUIT
kill (getpid (), SIGQUIT);
#else
handle_QUIT (0);
#endif
return 0;
}
int
gen_EMT ()
{
#ifdef SIGEMT
kill (getpid (), SIGEMT);
#else
handle_EMT (0);
#endif
return 0;
}
int
gen_BUS ()
{
@ -867,13 +890,6 @@ gen_BUS ()
return 0;
}
int
gen_SEGV ()
{
kill (getpid (), SIGSEGV);
return 0;
}
int
gen_SYS ()
{
@ -1555,13 +1571,6 @@ gen_63 ()
#endif
return 0;
}
int
gen_TERM ()
{
kill (getpid (), SIGTERM);
return 0;
}
int
main ()
@ -1578,22 +1587,31 @@ main ()
}
#endif
/* 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. */
/* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
are ANSI-standard signals and are always available. */
signal (SIGILL, handle_ILL);
signal (SIGABRT, handle_ABRT);
signal (SIGFPE, handle_FPE);
signal (SIGSEGV, handle_SEGV);
signal (SIGTERM, handle_TERM);
/* All other signals need preprocessor conditionals. */
#ifdef SIGHUP
signal (SIGHUP, handle_HUP);
#endif
#ifdef SIGQUIT
signal (SIGQUIT, handle_QUIT);
#endif
signal (SIGILL, handle_ILL);
#ifdef SIGEMT
signal (SIGEMT, handle_EMT);
#endif
signal (SIGFPE, handle_FPE);
#ifdef SIGBUS
signal (SIGBUS, handle_BUS);
#endif
signal (SIGSEGV, handle_SEGV);
#ifdef SIGSYS
signal (SIGSYS, handle_SYS);
#endif
@ -1721,7 +1739,6 @@ main ()
signal (62, handle_62);
signal (63, handle_63);
#endif /* lynx */
signal (SIGTERM, handle_TERM);
x = 0;

@ -377,35 +377,13 @@ handle_TERM (int sig)
{
}
/* Functions to send signals. These also serve as markers. */
int
gen_ABRT (void)
{
kill (getpid (), SIGABRT);
return 0;
}
/* Functions to send signals. These also serve as markers.
Ordered ANSI-standard signals first, other signals second,
with signals in each block ordered by their numerical values
on a typical POSIX platform. */
int
gen_HUP (void)
{
#ifdef SIGHUP
kill (getpid (), SIGHUP);
#else
handle_HUP (0);
#endif
return 0;
}
int
gen_QUIT (void)
{
#ifdef SIGQUIT
kill (getpid (), SIGQUIT);
#else
handle_QUIT (0);
#endif
return 0;
}
/* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
are ANSI-standard signals and are always available. */
int
gen_ILL (void)
@ -415,13 +393,9 @@ return 0;
}
int
gen_EMT (void)
gen_ABRT (void)
{
#ifdef SIGEMT
kill (getpid (), SIGEMT);
#else
handle_EMT (0);
#endif
kill (getpid (), SIGABRT);
return 0;
}
@ -447,6 +421,55 @@ gen_FPE (void)
return 0;
}
int
gen_SEGV (void)
{
kill (getpid (), SIGSEGV);
return 0;
}
int
gen_TERM (void)
{
kill (getpid (), SIGTERM);
return 0;
}
/* All other signals need preprocessor conditionals. */
int
gen_HUP (void)
{
#ifdef SIGHUP
kill (getpid (), SIGHUP);
#else
handle_HUP (0);
#endif
return 0;
}
int
gen_QUIT (void)
{
#ifdef SIGQUIT
kill (getpid (), SIGQUIT);
#else
handle_QUIT (0);
#endif
return 0;
}
int
gen_EMT (void)
{
#ifdef SIGEMT
kill (getpid (), SIGEMT);
#else
handle_EMT (0);
#endif
return 0;
}
int
gen_BUS (void)
{
@ -458,13 +481,6 @@ gen_BUS (void)
return 0;
}
int
gen_SEGV (void)
{
kill (getpid (), SIGSEGV);
return 0;
}
int
gen_SYS (void)
{
@ -1146,13 +1162,6 @@ gen_63 (void)
#endif
return 0;
}
int
gen_TERM (void)
{
kill (getpid (), SIGTERM);
return 0;
}
int
main ()
@ -1168,22 +1177,31 @@ main ()
}
#endif
/* 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. */
/* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
are ANSI-standard signals and are always available. */
signal (SIGILL, handle_ILL);
signal (SIGABRT, handle_ABRT);
signal (SIGFPE, handle_FPE);
signal (SIGSEGV, handle_SEGV);
signal (SIGTERM, handle_TERM);
/* All other signals need preprocessor conditionals. */
#ifdef SIGHUP
signal (SIGHUP, handle_HUP);
#endif
#ifdef SIGQUIT
signal (SIGQUIT, handle_QUIT);
#endif
signal (SIGILL, handle_ILL);
#ifdef SIGEMT
signal (SIGEMT, handle_EMT);
#endif
signal (SIGFPE, handle_FPE);
#ifdef SIGBUS
signal (SIGBUS, handle_BUS);
#endif
signal (SIGSEGV, handle_SEGV);
#ifdef SIGSYS
signal (SIGSYS, handle_SYS);
#endif
@ -1311,7 +1329,6 @@ main ()
signal (62, handle_62);
signal (63, handle_63);
#endif /* lynx */
signal (SIGTERM, handle_TERM);
x = 0;