Accepting request 707836 from home:Andreas_Schwab:Factory
- gdb-suppress-sigttou-when-handling-errors.patch: Suppress SIGTTOU when handling errors - Enable ada tests on ppc64le and riscv64 - Enable multitarget build on riscv64 - Add ia64 and riscv64 to target_list - Enable -Werror on riscv64 and aarch64 - Don't remove %{buildroot} OBS-URL: https://build.opensuse.org/request/show/707836 OBS-URL: https://build.opensuse.org/package/show/devel:gcc/gdb?expand=0&rev=207
This commit is contained in:
parent
7c311b650f
commit
ff8c7e40a6
173
gdb-suppress-sigttou-when-handling-errors.patch
Normal file
173
gdb-suppress-sigttou-when-handling-errors.patch
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
From 766f883622ef008230250aa5aecef9fb9b29f233 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alan Hayward <alan.hayward@arm.com>
|
||||||
|
Date: Tue, 28 May 2019 10:07:54 +0100
|
||||||
|
Subject: [PATCH] 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.
|
||||||
|
---
|
||||||
|
gdb/ChangeLog | 8 ++++++++
|
||||||
|
gdb/event-top.c | 2 +-
|
||||||
|
gdb/inflow.c | 29 -----------------------------
|
||||||
|
gdb/inflow.h | 31 +++++++++++++++++++++++++++++++
|
||||||
|
gdb/ser-unix.c | 4 ++++
|
||||||
|
gdb/top.c | 2 +-
|
||||||
|
6 files changed, 45 insertions(+), 31 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/gdb/event-top.c b/gdb/event-top.c
|
||||||
|
index 3ccf136ff12..93b7d2d28bc 100644
|
||||||
|
--- a/gdb/event-top.c
|
||||||
|
+++ b/gdb/event-top.c
|
||||||
|
@@ -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"
|
||||||
|
diff --git a/gdb/inflow.c b/gdb/inflow.c
|
||||||
|
index 339b55c0bc6..eba7a931f46 100644
|
||||||
|
--- a/gdb/inflow.c
|
||||||
|
+++ b/gdb/inflow.c
|
||||||
|
@@ -106,35 +106,6 @@ static serial_ttystate initial_gdb_ttystate;
|
||||||
|
|
||||||
|
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
|
||||||
|
diff --git a/gdb/inflow.h b/gdb/inflow.h
|
||||||
|
index c32aa144331..5dd5c37bd2b 100644
|
||||||
|
--- a/gdb/inflow.h
|
||||||
|
+++ b/gdb/inflow.h
|
||||||
|
@@ -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 */
|
||||||
|
diff --git a/gdb/ser-unix.c b/gdb/ser-unix.c
|
||||||
|
index 5a9965bf744..3492619f2d6 100644
|
||||||
|
--- a/gdb/ser-unix.c
|
||||||
|
+++ b/gdb/ser-unix.c
|
||||||
|
@@ -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 *scb,
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/gdb/top.c b/gdb/top.c
|
||||||
|
index bacd684dbaa..1e17ebee87c 100644
|
||||||
|
--- a/gdb/top.c
|
||||||
|
+++ b/gdb/top.c
|
||||||
|
@@ -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"
|
||||||
|
--
|
||||||
|
2.21.0
|
||||||
|
|
11
gdb.changes
11
gdb.changes
@ -1,3 +1,14 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jun 5 09:53:09 UTC 2019 - Andreas Schwab <schwab@suse.de>
|
||||||
|
|
||||||
|
- gdb-suppress-sigttou-when-handling-errors.patch: Suppress SIGTTOU when
|
||||||
|
handling errors
|
||||||
|
- Enable ada tests on ppc64le and riscv64
|
||||||
|
- Enable multitarget build on riscv64
|
||||||
|
- Add ia64 and riscv64 to target_list
|
||||||
|
- Enable -Werror on riscv64 and aarch64
|
||||||
|
- Don't remove %{buildroot}
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Wed May 22 16:01:13 UTC 2019 - Tom de Vries <tdevries@suse.de>
|
Wed May 22 16:01:13 UTC 2019 - Tom de Vries <tdevries@suse.de>
|
||||||
|
|
||||||
|
12
gdb.spec
12
gdb.spec
@ -225,6 +225,7 @@ Patch1007: gdb-fix-s390-build.diff
|
|||||||
Patch2000: gdb-handle-vfork-in-thread-with-follow-fork-mode-child.patch
|
Patch2000: gdb-handle-vfork-in-thread-with-follow-fork-mode-child.patch
|
||||||
Patch2001: gdb-fix-riscv-tdep.patch
|
Patch2001: gdb-fix-riscv-tdep.patch
|
||||||
Patch2002: gdb-x86_64-i386-syscall-restart-master.patch
|
Patch2002: gdb-x86_64-i386-syscall-restart-master.patch
|
||||||
|
Patch2003: gdb-suppress-sigttou-when-handling-errors.patch
|
||||||
|
|
||||||
# Submitted for master
|
# Submitted for master
|
||||||
|
|
||||||
@ -308,7 +309,7 @@ BuildRequires: %{gcc}-java
|
|||||||
%endif
|
%endif
|
||||||
BuildRequires: %{gcc}-objc
|
BuildRequires: %{gcc}-objc
|
||||||
# Copied from gcc-4.1.2-32.
|
# Copied from gcc-4.1.2-32.
|
||||||
%ifarch %{ix86} x86_64 ia64 ppc ppc64 s390 alpha
|
%ifarch %{ix86} x86_64 ia64 ppc ppc64 ppc64le riscv64 s390 alpha
|
||||||
BuildRequires: %{gcc}-ada
|
BuildRequires: %{gcc}-ada
|
||||||
%endif
|
%endif
|
||||||
%ifarch aarch64
|
%ifarch aarch64
|
||||||
@ -542,6 +543,7 @@ find -name "*.info*"|xargs rm -f
|
|||||||
%patch2000 -p1
|
%patch2000 -p1
|
||||||
%patch2001 -p1
|
%patch2001 -p1
|
||||||
%patch2002 -p1
|
%patch2002 -p1
|
||||||
|
%patch2003 -p1
|
||||||
|
|
||||||
%patch2500 -p1
|
%patch2500 -p1
|
||||||
%patch2501 -p1
|
%patch2501 -p1
|
||||||
@ -567,7 +569,6 @@ rm -f gdb/doc/*.info
|
|||||||
rm -f gdb/doc/*.info-*
|
rm -f gdb/doc/*.info-*
|
||||||
|
|
||||||
%build
|
%build
|
||||||
rm -rf %{buildroot}
|
|
||||||
|
|
||||||
# Identify the build directory with the version of gdb as well as the
|
# Identify the build directory with the version of gdb as well as the
|
||||||
# architecture, to allow for mutliple versions to be installed and
|
# architecture, to allow for mutliple versions to be installed and
|
||||||
@ -643,13 +644,12 @@ fi
|
|||||||
if test -f /usr/%{_lib}/librpm.so.3; then
|
if test -f /usr/%{_lib}/librpm.so.3; then
|
||||||
export LIBRPM=librpm.so.3
|
export LIBRPM=librpm.so.3
|
||||||
fi
|
fi
|
||||||
%ifarch %ix86 ia64 ppc ppc64 ppc64le s390 s390x x86_64 aarch64
|
%ifarch %ix86 ia64 ppc ppc64 ppc64le s390 s390x x86_64 aarch64 riscv64
|
||||||
%define build_multitarget 1
|
%define build_multitarget 1
|
||||||
%else
|
%else
|
||||||
%define build_multitarget 0
|
%define build_multitarget 0
|
||||||
%endif
|
%endif
|
||||||
# For now disable ia64 until ia64-tdep.c is fixed
|
%define target_list i686 powerpc powerpc64 powerpc64le s390 s390x x86_64 arm aarch64 m68k ia64 riscv64
|
||||||
%define target_list i686 powerpc powerpc64 powerpc64le s390 s390x x86_64 arm aarch64 m68k
|
|
||||||
%define DIST %(echo '%distribution' | sed 's, /.*,,')
|
%define DIST %(echo '%distribution' | sed 's, /.*,,')
|
||||||
%if %build_multitarget
|
%if %build_multitarget
|
||||||
EXTRA_TARGETS="%(printf ,%%s-suse-linux %target_list)"
|
EXTRA_TARGETS="%(printf ,%%s-suse-linux %target_list)"
|
||||||
@ -669,7 +669,7 @@ EXTRA_TARGETS=
|
|||||||
--with-system-gdbinit=%{_sysconfdir}/gdbinit \
|
--with-system-gdbinit=%{_sysconfdir}/gdbinit \
|
||||||
--with-gdb-datadir=%{_datadir}/gdb \
|
--with-gdb-datadir=%{_datadir}/gdb \
|
||||||
--enable-gdb-build-warnings=,-Wno-unused \
|
--enable-gdb-build-warnings=,-Wno-unused \
|
||||||
%ifnarch %{ix86} alpha ia64 ppc s390 s390x x86_64 ppc64 ppc64le sparc sparcv9 sparc64
|
%ifnarch %{ix86} alpha ia64 ppc s390 s390x x86_64 ppc64 ppc64le sparc sparcv9 sparc64 riscv64 aarch64
|
||||||
--disable-werror \
|
--disable-werror \
|
||||||
%else
|
%else
|
||||||
%if %{suse_version} <= 1110
|
%if %{suse_version} <= 1110
|
||||||
|
Loading…
x
Reference in New Issue
Block a user