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:
Michael Matz 2019-06-05 12:50:01 +00:00 committed by Git OBS Bridge
parent 7c311b650f
commit ff8c7e40a6
3 changed files with 190 additions and 6 deletions

View 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

View File

@ -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>

View File

@ -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