]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
Add RAII class for blocking gdb signals
authorTom Tromey <tom@tromey.com>
Sun, 29 Sep 2019 14:50:15 +0000 (08:50 -0600)
committerTom Tromey <tom@tromey.com>
Sun, 10 Nov 2019 17:44:49 +0000 (10:44 -0700)
commit530c45db2477335fa3d2a9f4df636739ededcb96
tree18dd55b24d0f370ef03b0e38ce165dda46576098
parenta7231e9d1cf181addcfa808e22e0f585194abb3d
Add RAII class for blocking gdb signals

This adds configury support and an RAII class that can be used to
temporarily block signals that are used by gdb.  (This class is not
used in this patch, but it split out for easier review.)

The idea of this patch is that these signals should only be delivered
to the main thread.  So, when creating a background thread, they are
temporarily blocked; the blocked state is inherited by the new thread.

The sigprocmask man page says:

    The use of sigprocmask() is unspecified in a multithreaded
    process; see pthread_sigmask(3).

This patch changes gdb to use pthread_sigmask when appropriate, by
introducing a convenience define.

I've updated gdbserver as well, because I had to touch gdbsupport, and
because the threading patches will make it link against the thread
library.

I chose not to touch the NTO code, because I don't know anything about
that platform and because I cannot test it.

Finally, this modifies an existing spot in the Guile layer to use the
new facility.

2019-10-19  Tom Tromey  <tom@tromey.com>

* gdbsupport/signals-state-save-restore.c (original_signal_mask):
Remove comment.
(save_original_signals_state, restore_original_signals_state): Use
gdb_sigmask.
* linux-nat.c (block_child_signals, restore_child_signals_mask)
(_initialize_linux_nat): Use gdb_sigmask.
* guile/guile.c (_initialize_guile): Use block_signals.
* Makefile.in (HFILES_NO_SRCDIR): Add gdb-sigmask.h.
* gdbsupport/gdb-sigmask.h: New file.
* event-top.c (async_sigtstp_handler): Use gdb_sigmask.
* cp-support.c (gdb_demangle): Use gdb_sigmask.
* gdbsupport/common.m4 (GDB_AC_COMMON): Check for
pthread_sigmask.
* configure, config.in: Rebuild.
* gdbsupport/block-signals.h: New file.

gdb/gdbserver/ChangeLog
2019-10-19  Tom Tromey  <tom@tromey.com>

* remote-utils.c (block_unblock_async_io): Use gdb_sigmask.
* linux-low.c (linux_wait_for_event_filtered, linux_async): Use
gdb_sigmask.
* configure, config.in: Rebuild.

Change-Id: If3f37dc57dd859c226e9e4d79458a0514746e8c6
17 files changed:
gdb/ChangeLog
gdb/Makefile.in
gdb/config.in
gdb/configure
gdb/cp-support.c
gdb/event-top.c
gdb/gdbserver/ChangeLog
gdb/gdbserver/config.in
gdb/gdbserver/configure
gdb/gdbserver/linux-low.c
gdb/gdbserver/remote-utils.c
gdb/gdbsupport/block-signals.h [new file with mode: 0644]
gdb/gdbsupport/common.m4
gdb/gdbsupport/gdb-sigmask.h [new file with mode: 0644]
gdb/gdbsupport/signals-state-save-restore.c
gdb/guile/guile.c
gdb/linux-nat.c