Pass SIGLIBRT directly to child processes.

FreeBSD's librt uses SIGLIBRT as an internal signal to implement
SIGEV_THREAD sigevent notifications.  Similar to SIGLWP or SIGCANCEL
this signal should be passed through to child processes by default.

include/ChangeLog:

	* signals.def: Add GDB_SIGNAL_LIBRT.

gdb/ChangeLog:

	* common/signals.c (gdb_signal_from_host): Handle SIGLIBRT.
	(do_gdb_signal_to_host): Likewise.
	* infrun.c (_initialize_infrun): Pass GDB_SIGNAL_LIBRT through to
	programs.
	* proc-events.c (signal_table): Add entry for SIGLIBRT.
This commit is contained in:
John Baldwin 2016-07-03 11:56:21 -07:00
parent f7e8b360fe
commit bc7b765ab7
6 changed files with 28 additions and 1 deletions

View file

@ -1,3 +1,11 @@
2016-07-15 John Baldwin <jhb@FreeBSD.org>
* common/signals.c (gdb_signal_from_host): Handle SIGLIBRT.
(do_gdb_signal_to_host): Likewise.
* infrun.c (_initialize_infrun): Pass GDB_SIGNAL_LIBRT through to
programs.
* proc-events.c (signal_table): Add entry for SIGLIBRT.
2016-07-14 Tom Tromey <tom@tromey.com> 2016-07-14 Tom Tromey <tom@tromey.com>
* python/py-breakpoint.c (gdbpy_breakpoint_deleted): Add missing * python/py-breakpoint.c (gdbpy_breakpoint_deleted): Add missing

View file

@ -331,6 +331,10 @@ gdb_signal_from_host (int hostsig)
if (hostsig == SIGINFO) if (hostsig == SIGINFO)
return GDB_SIGNAL_INFO; return GDB_SIGNAL_INFO;
#endif #endif
#if defined (SIGLIBRT)
if (hostsig == SIGLIBRT)
return GDB_SIGNAL_LIBRT;
#endif
#if defined (REALTIME_LO) #if defined (REALTIME_LO)
if (hostsig >= REALTIME_LO && hostsig < REALTIME_HI) if (hostsig >= REALTIME_LO && hostsig < REALTIME_HI)
@ -584,6 +588,10 @@ do_gdb_signal_to_host (enum gdb_signal oursig,
case GDB_SIGNAL_INFO: case GDB_SIGNAL_INFO:
return SIGINFO; return SIGINFO;
#endif #endif
#if defined (SIGLIBRT)
case GDB_SIGNAL_LIBRT:
return SIGLIBRT;
#endif
default: default:
#if defined (REALTIME_LO) #if defined (REALTIME_LO)

View file

@ -9409,6 +9409,8 @@ leave it stopped or free to run as needed."),
signal_print[GDB_SIGNAL_WAITING] = 0; signal_print[GDB_SIGNAL_WAITING] = 0;
signal_stop[GDB_SIGNAL_CANCEL] = 0; signal_stop[GDB_SIGNAL_CANCEL] = 0;
signal_print[GDB_SIGNAL_CANCEL] = 0; signal_print[GDB_SIGNAL_CANCEL] = 0;
signal_stop[GDB_SIGNAL_LIBRT] = 0;
signal_print[GDB_SIGNAL_LIBRT] = 0;
/* Update cached state. */ /* Update cached state. */
signal_cache_update (-1); signal_cache_update (-1);

View file

@ -1536,6 +1536,9 @@ static struct trans signal_table[] =
#ifdef SIGAIO #ifdef SIGAIO
{ SIGAIO, "SIGAIO", "Asynchronous I/O signal" }, { SIGAIO, "SIGAIO", "Asynchronous I/O signal" },
#endif #endif
#ifdef SIGLIBRT
{ SIGLIBRT, "SIGLIBRT", "Used by librt" },
#endif
/* FIXME: add real-time signals. */ /* FIXME: add real-time signals. */
}; };

View file

@ -1,3 +1,7 @@
2016-07-15 John Baldwin <jhb@FreeBSD.org>
* signals.def: Add GDB_SIGNAL_LIBRT.
2016-01-06 Mike Frysinger <vapier@gentoo.org> 2016-01-06 Mike Frysinger <vapier@gentoo.org>
* remote-sim.h (sim_open): Mark argv const. * remote-sim.h (sim_open): Mark argv const.

View file

@ -194,7 +194,9 @@ SET (GDB_EXC_EMULATION, 148, "EXC_EMULATION", "Emulation instruction")
SET (GDB_EXC_SOFTWARE, 149, "EXC_SOFTWARE", "Software generated exception") SET (GDB_EXC_SOFTWARE, 149, "EXC_SOFTWARE", "Software generated exception")
SET (GDB_EXC_BREAKPOINT, 150, "EXC_BREAKPOINT", "Breakpoint") SET (GDB_EXC_BREAKPOINT, 150, "EXC_BREAKPOINT", "Breakpoint")
SET (GDB_SIGNAL_LIBRT, 151, "SIGLIBRT", "librt internal signal")
/* If you are adding a new signal, add it just above this comment. */ /* If you are adding a new signal, add it just above this comment. */
/* Last and unused enum value, for sizing arrays, etc. */ /* Last and unused enum value, for sizing arrays, etc. */
SET (GDB_SIGNAL_LAST, 151, NULL, "GDB_SIGNAL_LAST") SET (GDB_SIGNAL_LAST, 152, NULL, "GDB_SIGNAL_LAST")