Suppress SIGTTOU when handling errors
authorAlan Hayward <alan.hayward@arm.com>
Wed, 7 Aug 2019 16:23:49 +0000 (18:23 +0200)
committerTom de Vries <tdevries@suse.de>
Wed, 7 Aug 2019 16:23:49 +0000 (18:23 +0200)
commit8ac39635f6f0b7019f4a474f995e94d447fe8d38
treec00d10d5438644fb7ec26aed929bd5a75e666c62
parent7e38ddcb2e86101f4dd0045dd8b204f8913c7946
Suppress SIGTTOU when handling errors

[ Backport of commit 766f883622. ]

Calls to error () can cause SIGTTOU to send gdb to the background.

For example, on an Arm build:
  (gdb) b main
  Breakpoint 1 at 0x10774: file /build/gdb/testsuite/../../../src/binutils-gdb/gdb/testsuite/gdb.base/watchpoint.c, line 174.
  (gdb) r
  Starting program: /build/gdb/testsuite/outputs/gdb.base/watchpoint/watchpoint

  [1]+  Stopped                 ../gdb ./outputs/gdb.base/watchpoint/watchpoint
  localhost$ fg
  ../gdb ./outputs/gdb.base/watchpoint/watchpoint
  Cannot parse expression `.L1199 4@r4'.
  warning: Probes-based dynamic linker interface failed.
  Reverting to original interface.

The SIGTTOU is raised whilst inside a syscall during the call to tcdrain.
Fix is to use scoped_ignore_sigttou to ensure SIGTTOU is blocked.

In addition fix include comments - job_control is not included via terminal.h

gdb/ChangeLog:

* event-top.c: Remove include comment.
* inflow.c (class scoped_ignore_sigttou): Move from here...
* inflow.h (class scoped_ignore_sigttou): ...to here.
* ser-unix.c (hardwire_drain_output): Block SIGTTOU during drain.
* top.c:  Remove include comment.
gdb/ChangeLog
gdb/event-top.c
gdb/inflow.c
gdb/inflow.h
gdb/ser-unix.c
gdb/top.c