aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2016-07-03 11:56:21 -0700
committerJohn Baldwin <jhb@FreeBSD.org>2016-07-15 06:35:37 -0700
commitbc7b765ab71f967eb2a9c3da111d7529eec46fbe (patch)
tree8ab1b728464f75f1a7208784ab3fe6fcb7eedc6f /gdb
parentf7e8b360fe6dd93aae7cb4af554dc66364da4fe0 (diff)
downloadgdb-bc7b765ab71f967eb2a9c3da111d7529eec46fbe.zip
gdb-bc7b765ab71f967eb2a9c3da111d7529eec46fbe.tar.gz
gdb-bc7b765ab71f967eb2a9c3da111d7529eec46fbe.tar.bz2
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.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/common/signals.c8
-rw-r--r--gdb/infrun.c2
-rw-r--r--gdb/proc-events.c3
4 files changed, 21 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 8f5a5e0..6c187dc 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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>
* python/py-breakpoint.c (gdbpy_breakpoint_deleted): Add missing
diff --git a/gdb/common/signals.c b/gdb/common/signals.c
index 45c0c73..f84935d 100644
--- a/gdb/common/signals.c
+++ b/gdb/common/signals.c
@@ -331,6 +331,10 @@ gdb_signal_from_host (int hostsig)
if (hostsig == SIGINFO)
return GDB_SIGNAL_INFO;
#endif
+#if defined (SIGLIBRT)
+ if (hostsig == SIGLIBRT)
+ return GDB_SIGNAL_LIBRT;
+#endif
#if defined (REALTIME_LO)
if (hostsig >= REALTIME_LO && hostsig < REALTIME_HI)
@@ -584,6 +588,10 @@ do_gdb_signal_to_host (enum gdb_signal oursig,
case GDB_SIGNAL_INFO:
return SIGINFO;
#endif
+#if defined (SIGLIBRT)
+ case GDB_SIGNAL_LIBRT:
+ return SIGLIBRT;
+#endif
default:
#if defined (REALTIME_LO)
diff --git a/gdb/infrun.c b/gdb/infrun.c
index 70a0790..257ac8a 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -9409,6 +9409,8 @@ leave it stopped or free to run as needed."),
signal_print[GDB_SIGNAL_WAITING] = 0;
signal_stop[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. */
signal_cache_update (-1);
diff --git a/gdb/proc-events.c b/gdb/proc-events.c
index b291d31..daa6f58 100644
--- a/gdb/proc-events.c
+++ b/gdb/proc-events.c
@@ -1536,6 +1536,9 @@ static struct trans signal_table[] =
#ifdef SIGAIO
{ SIGAIO, "SIGAIO", "Asynchronous I/O signal" },
#endif
+#ifdef SIGLIBRT
+ { SIGLIBRT, "SIGLIBRT", "Used by librt" },
+#endif
/* FIXME: add real-time signals. */
};