Pass SIGLIBRT directly to child processes.
Commit Message
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.
---
gdb/ChangeLog | 8 ++++++++
gdb/common/signals.c | 8 ++++++++
gdb/infrun.c | 2 ++
gdb/proc-events.c | 3 +++
include/gdb/ChangeLog | 4 ++++
include/gdb/signals.def | 4 +++-
6 files changed, 28 insertions(+), 1 deletion(-)
Comments
Ping?
On 7/3/16 3:01 PM, John Baldwin wrote:
> 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.
> ---
> gdb/ChangeLog | 8 ++++++++
> gdb/common/signals.c | 8 ++++++++
> gdb/infrun.c | 2 ++
> gdb/proc-events.c | 3 +++
> include/gdb/ChangeLog | 4 ++++
> include/gdb/signals.def | 4 +++-
> 6 files changed, 28 insertions(+), 1 deletion(-)
>
> diff --git a/gdb/ChangeLog b/gdb/ChangeLog
> index 58c9c78..a6f618e 100644
> --- a/gdb/ChangeLog
> +++ b/gdb/ChangeLog
> @@ -1,3 +1,11 @@
> +2016-07-03 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-01 John Baldwin <jhb@FreeBSD.org>
>
> * fbsd-nat.c (struct fbsd_fork_child_info): Rename to ...
> 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. */
> };
> diff --git a/include/gdb/ChangeLog b/include/gdb/ChangeLog
> index f05ba4b..1ebb660 100644
> --- a/include/gdb/ChangeLog
> +++ b/include/gdb/ChangeLog
> @@ -1,3 +1,7 @@
> +2016-07-03 John Baldwin <jhb@FreeBSD.org>
> +
> + * signals.def: Add GDB_SIGNAL_LIBRT.
> +
> 2016-01-06 Mike Frysinger <vapier@gentoo.org>
>
> * remote-sim.h (sim_open): Mark argv const.
> diff --git a/include/gdb/signals.def b/include/gdb/signals.def
> index 61cc88c..2b30e71 100644
> --- a/include/gdb/signals.def
> +++ b/include/gdb/signals.def
> @@ -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_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. */
>
> /* 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")
>
Hi John,
patch is OK to me.
@@ -1,3 +1,11 @@
+2016-07-03 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-01 John Baldwin <jhb@FreeBSD.org>
* fbsd-nat.c (struct fbsd_fork_child_info): Rename to ...
@@ -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)
@@ -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);
@@ -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. */
};
@@ -1,3 +1,7 @@
+2016-07-03 John Baldwin <jhb@FreeBSD.org>
+
+ * signals.def: Add GDB_SIGNAL_LIBRT.
+
2016-01-06 Mike Frysinger <vapier@gentoo.org>
* remote-sim.h (sim_open): Mark argv const.
@@ -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_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. */
/* 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")