diff mbox

Pass SIGLIBRT directly to child processes.

Message ID 20160703190101.97715-1-jhb@FreeBSD.org
State New
Headers show

Commit Message

John Baldwin July 3, 2016, 7:01 p.m. UTC
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

John Baldwin July 14, 2016, 7:40 p.m. UTC | #1
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")
>
Yao Qi July 15, 2016, 12:03 p.m. UTC | #2
Hi John,
patch is OK to me.
diff mbox

Patch

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")