gdb: fall back on sigpending + sigwait if sigtimedwait is not available
authorSimon Marchi <simon.marchi@polymtl.ca>
Sun, 27 Jun 2021 19:13:14 +0000 (15:13 -0400)
committerSimon Marchi <simon.marchi@polymtl.ca>
Mon, 5 Jul 2021 13:54:58 +0000 (09:54 -0400)
commit99624310dd82542c389c89c2e55d8cae36bb74e1
tree2fa728a0011e50c3fd1e43edc54fc05c560748c5
parentf4931779e4432bde7f04fd1a60a7f055f86e6ccb
gdb: fall back on sigpending + sigwait if sigtimedwait is not available

The macOS platform does not provide sigtimedwait, so we get:

      CXX    compile/compile.o
    In file included from /Users/smarchi/src/binutils-gdb/gdb/compile/compile.c:46:
    /Users/smarchi/src/binutils-gdb/gdb/../gdbsupport/scoped_ignore_signal.h:69:4: error: use of undeclared identifier 'sigtimedwait'
              sigtimedwait (&set, nullptr, &zero_timeout);
              ^

An alternative to sigtimedwait with a timeout of 0 is to use sigpending,
to first check which signals are pending, and then sigwait, to consume
them.  Since that's slightly more expensive (2 syscalls instead of 1),
keep using sigtimedwait for the platforms that provide it, and fall back
to sigpending + sigwait for the others.

gdbsupport/ChangeLog:

* scoped_ignore_signal.h (struct scoped_ignore_signal)
<~scoped_ignore_signal>: Use sigtimedwait if HAVE_SIGTIMEDWAIT
is defined, else use sigpending + sigwait.

Change-Id: I2a72798337e81dd1bbd21214736a139dd350af87
Co-Authored-By: John Baldwin <jhb@FreeBSD.org>
gdbsupport/scoped_ignore_signal.h