Module Name: src
Committed By: martin
Date: Fri Sep 6 19:57:32 UTC 2019
Modified Files:
src/external/gpl3/gdb/dist/gdb [netbsd-9]: ChangeLog event-top.c
inflow.c inflow.h ser-unix.c top.c
Log Message:
Pull up following revision(s) (requested by kamil in ticket #188):
external/gpl3/gdb/dist/gdb/ser-unix.c: revision 1.2
external/gpl3/gdb/dist/gdb/inflow.c: revision 1.2
external/gpl3/gdb/dist/gdb/ChangeLog: revision 1.2
external/gpl3/gdb/dist/gdb/inflow.h: revision 1.2
external/gpl3/gdb/dist/gdb/event-top.c: revision 1.2
external/gpl3/gdb/dist/gdb/top.c: revision 1.2
Cherry-pick upstream GDB patch to fix SIGTTOU handling
Fixes toolchain/54508 by Tobias Ulmer
commit 766f883622ef008230250aa5aecef9fb9b29f233
Author: Alan Hayward <alan.hayward%arm.com@localhost>
Date: Tue May 28 10:07:54 2019 +0100
Suppress SIGTTOU when handling errors
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.
To generate a diff of this commit:
cvs rdiff -u -r1.1.1.8 -r1.1.1.8.2.1 src/external/gpl3/gdb/dist/gdb/ChangeLog \
src/external/gpl3/gdb/dist/gdb/event-top.c \
src/external/gpl3/gdb/dist/gdb/ser-unix.c \
src/external/gpl3/gdb/dist/gdb/top.c
cvs rdiff -u -r1.1.1.7 -r1.1.1.7.2.1 src/external/gpl3/gdb/dist/gdb/inflow.c \
src/external/gpl3/gdb/dist/gdb/inflow.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/gpl3/gdb/dist/gdb/ChangeLog
diff -u src/external/gpl3/gdb/dist/gdb/ChangeLog:1.1.1.8 src/external/gpl3/gdb/dist/gdb/ChangeLog:1.1.1.8.2.1
--- src/external/gpl3/gdb/dist/gdb/ChangeLog:1.1.1.8 Sun May 26 20:59:19 2019
+++ src/external/gpl3/gdb/dist/gdb/ChangeLog Fri Sep 6 19:57:32 2019
@@ -1,3 +1,11 @@
+2019-05-28 Alan Hayward <[email protected]>
+
+ * 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.
+
2019-05-11 Joel Brobecker <[email protected]>
* version.in: Set GDB version number to 8.3.
@@ -2691,4 +2699,3 @@ fill-column: 74
version-control: never
coding: utf-8
End:
-
Index: src/external/gpl3/gdb/dist/gdb/event-top.c
diff -u src/external/gpl3/gdb/dist/gdb/event-top.c:1.1.1.8 src/external/gpl3/gdb/dist/gdb/event-top.c:1.1.1.8.2.1
--- src/external/gpl3/gdb/dist/gdb/event-top.c:1.1.1.8 Sun May 26 20:59:21 2019
+++ src/external/gpl3/gdb/dist/gdb/event-top.c Fri Sep 6 19:57:32 2019
@@ -24,7 +24,7 @@
#include "inferior.h"
#include "infrun.h"
#include "target.h"
-#include "terminal.h" /* for job_control */
+#include "terminal.h"
#include "event-loop.h"
#include "event-top.h"
#include "interps.h"
Index: src/external/gpl3/gdb/dist/gdb/ser-unix.c
diff -u src/external/gpl3/gdb/dist/gdb/ser-unix.c:1.1.1.8 src/external/gpl3/gdb/dist/gdb/ser-unix.c:1.1.1.8.2.1
--- src/external/gpl3/gdb/dist/gdb/ser-unix.c:1.1.1.8 Sun May 26 20:59:24 2019
+++ src/external/gpl3/gdb/dist/gdb/ser-unix.c Fri Sep 6 19:57:32 2019
@@ -32,6 +32,7 @@
#include "gdbcmd.h"
#include "common/filestuff.h"
#include <termios.h>
+#include "inflow.h"
struct hardwire_ttystate
{
@@ -164,6 +165,9 @@ hardwire_print_tty_state (struct serial
static int
hardwire_drain_output (struct serial *scb)
{
+ /* Ignore SIGTTOU which may occur during the drain. */
+ scoped_ignore_sigttou ignore_sigttou;
+
return tcdrain (scb->fd);
}
Index: src/external/gpl3/gdb/dist/gdb/top.c
diff -u src/external/gpl3/gdb/dist/gdb/top.c:1.1.1.8 src/external/gpl3/gdb/dist/gdb/top.c:1.1.1.8.2.1
--- src/external/gpl3/gdb/dist/gdb/top.c:1.1.1.8 Sun May 26 20:59:38 2019
+++ src/external/gpl3/gdb/dist/gdb/top.c Fri Sep 6 19:57:32 2019
@@ -34,7 +34,7 @@
#include "expression.h"
#include "value.h"
#include "language.h"
-#include "terminal.h" /* For job_control. */
+#include "terminal.h"
#include "common/job-control.h"
#include "annotate.h"
#include "completer.h"
Index: src/external/gpl3/gdb/dist/gdb/inflow.c
diff -u src/external/gpl3/gdb/dist/gdb/inflow.c:1.1.1.7 src/external/gpl3/gdb/dist/gdb/inflow.c:1.1.1.7.2.1
--- src/external/gpl3/gdb/dist/gdb/inflow.c:1.1.1.7 Sun May 26 20:59:25 2019
+++ src/external/gpl3/gdb/dist/gdb/inflow.c Fri Sep 6 19:57:32 2019
@@ -103,35 +103,6 @@ static serial_ttystate initial_gdb_ttyst
static struct terminal_info *get_inflow_inferior_data (struct inferior *);
-/* RAII class used to ignore SIGTTOU in a scope. */
-
-class scoped_ignore_sigttou
-{
-public:
- scoped_ignore_sigttou ()
- {
-#ifdef SIGTTOU
- if (job_control)
- m_osigttou = signal (SIGTTOU, SIG_IGN);
-#endif
- }
-
- ~scoped_ignore_sigttou ()
- {
-#ifdef SIGTTOU
- if (job_control)
- signal (SIGTTOU, m_osigttou);
-#endif
- }
-
- DISABLE_COPY_AND_ASSIGN (scoped_ignore_sigttou);
-
-private:
-#ifdef SIGTTOU
- sighandler_t m_osigttou = NULL;
-#endif
-};
-
/* While the inferior is running, we want SIGINT and SIGQUIT to go to the
inferior only. If we have job control, that takes care of it. If not,
we save our handlers in these two variables and set SIGINT and SIGQUIT
Index: src/external/gpl3/gdb/dist/gdb/inflow.h
diff -u src/external/gpl3/gdb/dist/gdb/inflow.h:1.1.1.7 src/external/gpl3/gdb/dist/gdb/inflow.h:1.1.1.7.2.1
--- src/external/gpl3/gdb/dist/gdb/inflow.h:1.1.1.7 Sun May 26 20:59:31 2019
+++ src/external/gpl3/gdb/dist/gdb/inflow.h Fri Sep 6 19:57:32 2019
@@ -21,5 +21,36 @@
#define INFLOW_H
#include <unistd.h>
+#include <signal.h>
+#include "common/job-control.h"
+
+/* RAII class used to ignore SIGTTOU in a scope. */
+
+class scoped_ignore_sigttou
+{
+public:
+ scoped_ignore_sigttou ()
+ {
+#ifdef SIGTTOU
+ if (job_control)
+ m_osigttou = signal (SIGTTOU, SIG_IGN);
+#endif
+ }
+
+ ~scoped_ignore_sigttou ()
+ {
+#ifdef SIGTTOU
+ if (job_control)
+ signal (SIGTTOU, m_osigttou);
+#endif
+ }
+
+ DISABLE_COPY_AND_ASSIGN (scoped_ignore_sigttou);
+
+private:
+#ifdef SIGTTOU
+ sighandler_t m_osigttou = NULL;
+#endif
+};
#endif /* inflow.h */