Hello community,

here is the log from the commit of package gdb for openSUSE:Factory checked in 
at 2019-08-09 16:49:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gdb (Old)
 and      /work/SRC/openSUSE:Factory/.gdb.new.9556 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gdb"

Fri Aug  9 16:49:09 2019 rev:129 rq:721798 version:8.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/gdb/gdb.changes  2019-07-28 10:18:36.928601501 
+0200
+++ /work/SRC/openSUSE:Factory/.gdb.new.9556/gdb.changes        2019-08-09 
16:49:18.565507897 +0200
@@ -1,0 +2,23 @@
+Tue Aug  6 21:36:49 UTC 2019 - Tom de Vries <tdevr...@suse.de>
+
+- Master backport:  
+  * gdb-fix-breakpoints-on-file-reloads-for-pie-binaries.patch
+- Master backports testsuite:
+  * gdb-testsuite-i386-pkru-exp.patch
+  * gdb-testsuite-read1-fixes.patch
+  * gdb-testsuite-pie-no-pie.patch
+  * gdb-testsuite-add-missing-initial-prompt-read-in-multidictionary.exp.patch
+- Work around bsc#1115034:
+  * gdb-testsuite-ada-pie.patch
+- Fixes for fedora patches:
+  * gdb-testsuite-fix-perror-in-gdb.opt-fortran-string.exp.patch
+  * gdb-testsuite-avoid-pagination-in-attach-32.exp.patch
+
+-------------------------------------------------------------------
+Thu Jul 25 21:46:56 UTC 2019 - Stefan BrĂ¼ns <stefan.bru...@rwth-aachen.de>
+
+- Remove some conditionals for SLE-10 (build is disabled/unresolvable).
+- BuildRequire makeinfo instead of full texinfo (requiring texlive)
+  where available (SLE >= 12).
+
+-------------------------------------------------------------------

New:
----
  gdb-fix-breakpoints-on-file-reloads-for-pie-binaries.patch
  gdb-testsuite-ada-pie.patch
  gdb-testsuite-add-missing-initial-prompt-read-in-multidictionary.exp.patch
  gdb-testsuite-avoid-pagination-in-attach-32.exp.patch
  gdb-testsuite-fix-perror-in-gdb.opt-fortran-string.exp.patch
  gdb-testsuite-i386-pkru-exp.patch
  gdb-testsuite-pie-no-pie.patch
  gdb-testsuite-read1-fixes.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gdb.spec ++++++
--- /var/tmp/diff_new_pack.gL6sfm/_old  2019-08-09 16:49:21.897507901 +0200
+++ /var/tmp/diff_new_pack.gL6sfm/_new  2019-08-09 16:49:21.901507901 +0200
@@ -212,10 +212,16 @@
 Patch115:       gdb-rhbz1371380-gcore-elf-headers.patch
 #Fedora Packages end
 
+#Fedora patches fixup
+
+Patch500:       gdb-testsuite-avoid-pagination-in-attach-32.exp.patch
+Patch501:       gdb-testsuite-fix-perror-in-gdb.opt-fortran-string.exp.patch
+
 # openSUSE specific
 
 Patch1000:      gdb-gcore-bash.patch
 Patch1002:      gdb-6.6-buildid-locate-rpm-suse.patch
+Patch1003:      gdb-testsuite-ada-pie.patch
 
 # Patches to upstream
 
@@ -233,6 +239,11 @@
 Patch2001:      gdb-fix-riscv-tdep.patch
 Patch2002:      gdb-x86_64-i386-syscall-restart-master.patch
 Patch2003:      gdb-suppress-sigttou-when-handling-errors.patch
+Patch2004:      
gdb-testsuite-add-missing-initial-prompt-read-in-multidictionary.exp.patch
+Patch2005:      gdb-testsuite-pie-no-pie.patch
+Patch2006:      gdb-fix-breakpoints-on-file-reloads-for-pie-binaries.patch
+Patch2007:      gdb-testsuite-read1-fixes.patch
+Patch2008:      gdb-testsuite-i386-pkru-exp.patch
 
 # Submitted for master
 
@@ -258,23 +269,21 @@
 # support for newer distro versions in anticipation of a move to guile 2.2.
 BuildRequires:  guile-devel
 %endif
-BuildRequires:  ncurses-devel
-BuildRequires:  texinfo
-%if %{suse_version} < 1020
-BuildRequires:  expat
-%else
 BuildRequires:  libexpat-devel
+%if 0%{suse_version} >= 1200
+BuildRequires:  makeinfo
+%else
+BuildRequires:  texinfo
 %endif
 BuildRequires:  mpfr-devel
+BuildRequires:  ncurses-devel
 BuildRequires:  pkg-config
 BuildRequires:  readline-devel
 BuildRequires:  rpm-devel
-BuildRequires:  zlib-devel
 BuildRequires:  xz-devel
+BuildRequires:  zlib-devel
 %if 0%{!?_without_python:1}
-%if 0%{suse_version} > 1000
 Requires:       %{python}-base
-%endif
 BuildRequires:  %{python}-devel
 %endif # 0%{!?_without_python:1}
 
@@ -306,7 +315,6 @@
 %define ada_arch %ix86 x86_64 ppc s390 ia64
 %endif
 
-
 # Ensure the devel libraries are installed for both multilib arches.
 %global bits_local %{?_isa}
 %global bits_other %{?_isa}
@@ -383,7 +391,6 @@
 and printing their data.
 
 %ifnarch riscv64
-%if %{suse_version} > 1010
 %package -n gdbserver
 Summary:        A standalone server for GDB (the GNU source-level debugger)
 License:        GPL-3.0-or-later AND GPL-3.0-with-GCC-exception AND 
LGPL-2.1-or-later AND LGPL-3.0-or-later
@@ -397,7 +404,6 @@
 This package provides a program that allows you to run GDB on a different
 machine than the one which is running the program being debugged.
 %endif
-%endif
 
 %package doc
 Summary:        Documentation for GDB (the GNU source-level debugger)
@@ -557,8 +563,12 @@
 %patch115 -p1
 #Fedora patching end
 
+%patch500 -p1
+%patch501 -p1
+
 %patch1000 -p1
 %patch1002 -p1
+%patch1003 -p1
 
 %patch1005 -p1
 %patch1007 -p1
@@ -567,6 +577,11 @@
 %patch2001 -p1
 %patch2002 -p1
 %patch2003 -p1
+%patch2004 -p1
+%patch2005 -p1
+%patch2006 -p1
+%patch2007 -p1
+%patch2008 -p1
 
 %patch2500 -p1
 %patch2501 -p1
@@ -1084,16 +1099,6 @@
 %{_datadir}/gdb
 %{_infodir}/annotate.info*
 %{_infodir}/gdb.info*
-%ifnarch riscv64
-# In SLE10 gdbserver is not in a separate package
-%if %{suse_version} <= 1010
-%{_bindir}/gdbserver
-%{_mandir}/*/gdbserver.1*
-%ifnarch s390 s390x ia64 ppc %{sparc}
-%{_libdir}/libinproctrace.so
-%endif
-%endif
-%endif
 
 %if %{with testsuite}
 %files testresults
@@ -1104,9 +1109,7 @@
 
 # don't include the files in include, they are part of binutils
 
-%ifnarch riscv64
-%if %{suse_version} > 1010
-%ifnarch sparcv9 hppa
+%ifnarch riscv64 sparcv9 hppa
 %files -n gdbserver
 %defattr(-,root,root)
 %{_bindir}/gdbserver
@@ -1115,8 +1118,6 @@
 %{_libdir}/libinproctrace.so
 %endif # %%{have_inproctrace}
 %endif
-%endif
-%endif
 
 %post doc
 # This step is part of the installation of the RPM. Not to be confused

++++++ gdb-fix-breakpoints-on-file-reloads-for-pie-binaries.patch ++++++
Fix breakpoints on file reloads for PIE binaries

When a binary is built using PIE, reloading the file will cause GDB to error
on restart.  For example:
gdb ./a.out
(gdb) break main
(gdb) run
(gdb) file ./a.out
(gdb) continue

Will cause GDB to error with:
Continuing.
Warning:
Cannot insert breakpoint 1.
Cannot access memory at address 0x9e0
Command aborted.

This is due to the symbol offsets not being relocated after reloading the file.

Fix is to ensure solib_create_inferior_hook is called, in the same manner as
infrun.c:follow_exec().

Expand the idempotent test to cover PIE scenarios.

gdb/ChangeLog:

        * symfile.c (symbol_file_command): Call solib_create_inferior_hook.

gdb/testsuite/ChangeLog:

        * gdb.base/break-idempotent.exp: Test both PIE and non PIE.

---
 gdb/ChangeLog                               |  4 ++
 gdb/symfile.c                               | 12 ++++++
 gdb/testsuite/ChangeLog                     |  4 ++
 gdb/testsuite/gdb.base/break-idempotent.exp | 66 ++++++++++++++++-------------
 4 files changed, 56 insertions(+), 30 deletions(-)

diff --git a/gdb/symfile.c b/gdb/symfile.c
index bd79315687..a03ac29541 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -1672,7 +1672,19 @@ symbol_file_command (const char *args, int from_tty)
 
       validate_readnow_readnever (flags);
 
+      /* Set SYMFILE_DEFER_BP_RESET because the proper displacement for a PIE
+        (Position Independent Executable) main symbol file will only be
+        computed by the solib_create_inferior_hook below.  Without it,
+        breakpoint_re_set would fail to insert the breakpoints with the zero
+        displacement.  */
+      add_flags |= SYMFILE_DEFER_BP_RESET;
+
       symbol_file_add_main_1 (name, add_flags, flags, offset);
+
+      solib_create_inferior_hook (from_tty);
+
+      /* Now it's safe to re-add the breakpoints.  */
+      breakpoint_re_set ();
     }
 }
 
diff --git a/gdb/testsuite/gdb.base/break-idempotent.exp 
b/gdb/testsuite/gdb.base/break-idempotent.exp
index 902a5f818b..96f91c50f9 100644
--- a/gdb/testsuite/gdb.base/break-idempotent.exp
+++ b/gdb/testsuite/gdb.base/break-idempotent.exp
@@ -36,23 +36,6 @@
 
 standard_testfile
 
-if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
-    return -1
-}
-
-if ![runto_main] then {
-    fail "can't run to main"
-    return 0
-}
-
-if [is_remote host] {
-    set arg [remote_download host $binfile]
-    if { $arg == "" } {
-       perror "download failed"
-       return -1
-    }
-}
-
 # Force a breakpoint re-set in GDB.  Currently this is done by
 # reloading symbols with the "file" command.
 
@@ -123,7 +106,7 @@ proc set_breakpoint { break_command } {
 proc test_break { always_inserted break_command } {
     set cmd [lindex [split "$break_command"] 0]
 
-    with_test_prefix "always-inserted $always_inserted: $cmd" {
+    with_test_prefix "$cmd" {
        delete_breakpoints
 
        if ![runto_main] then {
@@ -163,20 +146,43 @@ proc test_break { always_inserted break_command } {
     }
 }
 
-foreach always_inserted { "off" "on" } {
-    test_break $always_inserted "break"
+# The testcase uses the "file" command to force breakpoint re-set in
+# GDB.  Test both with and without PIE, as GDB used to mishandle
+# breakpoint re-set when reloading PIEs.
+foreach_with_prefix pie { "nopie" "pie" } {
+
+    set opts {debug}
+    lappend opts $pie
 
-    if {![skip_hw_breakpoint_tests]} {
-       test_break $always_inserted "hbreak"
+    set binfile [standard_output_file $testfile-$pie]
+
+    if {[prepare_for_testing "failed to prepare" $binfile $srcfile $opts]} {
+       continue
     }
 
-    if {![skip_hw_watchpoint_tests]} {
-       test_break $always_inserted "watch"
+    if [is_remote host] {
+       set arg [remote_download host $binfile]
+       if { $arg == "" } {
+           untested "download failed"
+           continue
+       }
     }
 
-    if {![skip_hw_watchpoint_access_tests]
-       && ![skip_hw_watchpoint_multi_tests]} {
-       test_break $always_inserted "rwatch"
-       test_break $always_inserted "awatch"
+    foreach_with_prefix always_inserted { "off" "on" } {
+       test_break $always_inserted "break"
+
+       if {![skip_hw_breakpoint_tests]} {
+           test_break $always_inserted "hbreak"
+       }
+
+       if {![skip_hw_watchpoint_tests]} {
+           test_break $always_inserted "watch"
+       }
+
+       if {![skip_hw_watchpoint_access_tests]
+           && ![skip_hw_watchpoint_multi_tests]} {
+           test_break $always_inserted "rwatch"
+           test_break $always_inserted "awatch"
+       }
     }
 }
++++++ gdb-testsuite-ada-pie.patch ++++++
[gdb/testsuite] Compile ada hello world for skip_ada_tests

For openSUSE Leap 15.0 with gcc-PIE installed (which makes gcc create PIE
executables by default) we get:
...
FAIL: gdb.ada/O2_float_param.exp: compilation foo.adb
...

The problem is that while gcc-PIE affects gcc, it does not affect gnatlink,
so it links in the libgnat.a, rather than libgnat_pic.a.  [ This is
bsc#1115034. ]

[ Without gcc-PIE, we have a related problem: if we run ada tests with
--target_board=unix/-fPIE/-pie, which makes sure PIE executables are generated
for c/c++ test-cases, still we get non-PIE ada executables, because gnatmake
does not pass -pie to gnatlink.  And if gnatmake would pass -pie to gnatlink,
we'd run into the same FAIL as above because gnatlink does not use use
libgnat_pic.a when -pie is specified (this is PR gcc/87936).  So, in order to
have ada tests generate PIE executables, we need
--target_board=unix/-fPIE/-largs/-pie/-lgnat_pic/-margs, which will not work
with c/c++ test-cases.  ]

For now, we check whether we can compile an ada hello world, and if not,
generate an UNSUPPORTED in either skip_ada_tests or gdb_compile_ada, to
not have this problem result in ~200 FAILs.

gdb/testsuite/ChangeLog:

2019-08-06  Tom de Vries  <tdevr...@suse.de>

        * lib/ada.exp (gdb_compile_ada_bare): Factor out of ...
        (gdb_compile_ada): ... here.
        (gdb_can_compile_ada): New gdb_caching_proc.
        * lib/gdb.exp: Add load_lib ada.exp.
        (skip_ada_tests): Return 1 if !gdb_can_compile_ada.

---
 gdb/testsuite/lib/ada.exp | 38 +++++++++++++++++++++++++++++++++++++-
 gdb/testsuite/lib/gdb.exp |  6 ++++++
 2 files changed, 43 insertions(+), 1 deletion(-)

diff --git a/gdb/testsuite/lib/ada.exp b/gdb/testsuite/lib/ada.exp
index 1345c747c5..e3a600327e 100644
--- a/gdb/testsuite/lib/ada.exp
+++ b/gdb/testsuite/lib/ada.exp
@@ -29,7 +29,7 @@ proc target_compile_ada_from_dir {builddir source dest type 
options} {
 
 # Compile some Ada code.
 
-proc gdb_compile_ada {source dest type options} {
+proc gdb_compile_ada_bare {source dest type options} {
 
     set srcdir [file dirname $source]
     set gprdir [file dirname $srcdir]
@@ -53,10 +53,46 @@ proc gdb_compile_ada {source dest type options} {
     # We therefore simply check whether the dest file has been created
     # or not. Unless not present, the build has succeeded.
     if [file exists $dest] { set result "" }
+    return $result
+}
+
+proc gdb_compile_ada {source dest type options} {
+    if { [gdb_can_compile_ada] == 0 } {
+       global gdb_test_file_name
+       unsupported "$gdb_test_file_name"
+       return "Cannot compile ada"
+    }
+    set result [gdb_compile_ada_bare $source $dest $type $options]
     gdb_compile_test $source $result
     return $result
 }
 
+gdb_caching_proc gdb_can_compile_ada {
+    set name "hello"
+    set dir "[pwd]/tmp-ada-hello-[pid]"
+    set src "$dir/$name.adb"
+    set dest "$dir/$name"
+
+    set code {
+       with Ada.Text_IO;
+
+       procedure Hello is
+       begin
+         Ada.Text_IO.Put_Line("Hello, world!");
+       end Hello;
+    }
+
+    file mkdir $dir
+    gdb_produce_source $src $code
+    set res [gdb_compile_ada_bare $src $dest executable {debug}]
+    file delete -force $dir
+
+    if { $res != "" } {
+       return 0
+    }
+    return 1
+}
+
 # Like standard_testfile, but for Ada.  Historically the Ada tests
 # used a different naming convention from many of the other gdb tests,
 # and this difference was preserved during the conversion to
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index edc8dfcdfd..8585320bd2 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -29,6 +29,7 @@ load_lib libgloss.exp
 load_lib cache.exp
 load_lib gdb-utils.exp
 load_lib memory.exp
+load_lib ada.exp
 
 global GDB
 
@@ -1881,6 +1882,11 @@ proc skip_fortran_tests {} {
 # Return a 1 if I don't even want to try to test ada.
 
 proc skip_ada_tests {} {
+    if { [gdb_can_compile_ada] == 0 } {
+       global gdb_test_file_name
+       unsupported "$gdb_test_file_name"
+       return 1
+    }
     return 0
 }
 
++++++ 
gdb-testsuite-add-missing-initial-prompt-read-in-multidictionary.exp.patch 
++++++
[gdb/testsuite] Add missing initial prompt read in multidictionary.exp

When running multidictionary.exp in conjunction with:
...
$ stress -c $(($(cat /proc/cpuinfo | grep -c "^processor") + 1))
...
we get:
...
Running gdb/testsuite/gdb.dwarf2/multidictionary.exp ...
ERROR: Couldn't load multidictionary into gdb.

                === gdb Summary ===

nr of unresolved testcases       1
...

The multidictionary test-case needs -readnow, and achieves this using:
...
gdb_spawn_with_cmdline_opts "-readnow"
gdb_load
...
but the initial gdb prompt is not read.  Usually, the following gdb_load
command accidentally consumes that initial prompt (at the gdb_expect for the
kill command in gdb_file_cmd).  But under high load, that doesn't happen and
we run into the error.

Fix this by consuming the initial gdb prompt after spawning gdb.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2019-07-23  Tom de Vries  <tdevr...@suse.de>

        PR testsuite/24842
        * gdb.dwarf2/multidictionary.exp: Consume initial prompt after
        gdb_spawn_with_cmdline_opts.

---
 gdb/testsuite/gdb.dwarf2/multidictionary.exp | 6 ++++++
 2 files changed, 12 insertions(+)

diff --git a/gdb/testsuite/gdb.dwarf2/multidictionary.exp 
b/gdb/testsuite/gdb.dwarf2/multidictionary.exp
index 5588ef2144..c307ed8adc 100644
--- a/gdb/testsuite/gdb.dwarf2/multidictionary.exp
+++ b/gdb/testsuite/gdb.dwarf2/multidictionary.exp
@@ -148,6 +148,12 @@ if {[build_executable $testfile.exp $testfile [list 
$asm_file $srcfile] {}] \
 
 # We force the DIEs above to be read in via "-readnow".
 gdb_spawn_with_cmdline_opts "-readnow"
+set test "initial prompt"
+gdb_test_multiple "" $test {
+    -re ".*$gdb_prompt $" {
+       pass "$test"
+    }
+}
 gdb_load $binfile
 
 # All we need to do is check whether GDB is alive.  Without
++++++ gdb-testsuite-avoid-pagination-in-attach-32.exp.patch ++++++
Avoid pagination in attach-32.exp

When running test-case attach-32.exp from
gdb-6.3-inferior-notification-20050721.patch, we run into:
...
spawn build/gdb/testsuite/../../gdb/gdb -nw -nx \
  -data-directory build/gdb/testsuite/../data-directory --pid=27520
GNU gdb (GDB) 8.3.50.20190726-git
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-pc-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word".
Attaching to process 27520
Reading symbols from build/gdb/testsuite/outputs/gdb.base/attach-32/attach-32...
Reading symbols from /lib/libm.so.6...
(No debugging symbols found in /lib/libm.so.6)
Reading symbols from /lib/libc.so.6...
(No debugging symbols found in /lib/libc.so.6)
(No debugging symbols found in /lib/libc.so.6)
Reading symbols from /lib/ld-linux.so.2...
(No debugging symbols found in /lib/ld-linux.so.2)
main () at /data/gdb_versions/devel/src/gdb/testsuite/gdb.base/attach-32.c:15
--Type <RET> for more, q to quit, c to continue without paging--ERROR: \
  (timeout) GDB never initialized after 10 seconds.
...
The test-case hangs because pagination is activated, with height == 25
due to gdb_init.

Fix this by starting gdb using -iex "set width 0" -iex "set height 0" -quiet,
similar to how it is done in attach.exp (see commit fef1b2933d "Avoid
pagination in attach.exp").

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2019-07-26  Tom de Vries  <tdevr...@suse.de>

        * gdb.base/attach-32.exp: Start gdb using -iex "set width 0" -iex
        "set height 0" -quiet.

---
 gdb/testsuite/gdb.base/attach-32.exp | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/gdb/testsuite/gdb.base/attach-32.exp 
b/gdb/testsuite/gdb.base/attach-32.exp
index 67ded02ccf..7627a0a5db 100644
--- a/gdb/testsuite/gdb.base/attach-32.exp
+++ b/gdb/testsuite/gdb.base/attach-32.exp
@@ -212,10 +212,14 @@ if { [istarget "*-*-cygwin*"] } {
     set testpid [ exec ps -e | gawk "{ if (\$1 == $testpid) print \$4; }" ]
 }
 
-set GDBFLAGS_orig $GDBFLAGS
-set GDBFLAGS "--pid=$testpid"
-gdb_start
-set GDBFLAGS $GDBFLAGS_orig
+set res [gdb_spawn_with_cmdline_opts \
+            "-quiet -iex \"set height 0\" -iex \"set width 0\" --pid=$testpid"]
+set test "starting with --pid"
+gdb_test_multiple "" $test {
+    -re "Reading symbols from.*$gdb_prompt $" {
+       pass "$test"
+    }
+}
 
 gdb_reinitialize_dir $srcdir/$subdir
 
@@ -234,10 +238,14 @@ if { [istarget "*-*-cygwin*"] } {
     set testpid [ exec ps -e | gawk "{ if (\$1 == $testpid) print \$4; }" ]
 }
 
-set GDBFLAGS_orig $GDBFLAGS
-set GDBFLAGS "--pid=$testpid"
-gdb_start
-set GDBFLAGS $GDBFLAGS_orig
+set res [gdb_spawn_with_cmdline_opts \
+            "-quiet -iex \"set height 0\" -iex \"set width 0\" --pid=$testpid"]
+set test "starting with --pid"
+gdb_test_multiple "" $test {
+    -re "Reading symbols from.*$gdb_prompt $" {
+       pass "$test"
+    }
+}
 
 gdb_reinitialize_dir $srcdir/$subdir
 do_call_attach_tests
++++++ gdb-testsuite-fix-perror-in-gdb.opt-fortran-string.exp.patch ++++++
Fix perror in gdb.opt/fortran-string.exp

When running the test-case gdb.opt/fortran-string.exp from
gdb-archer-vla-tests.patch, we run into:
...
ERROR: couldn't run to breakpoint MAIN__
...
The test case attempts to set a breakpoint on a line containing an "s = s"
assignment and when that doesn't work, it error out with above error message.

The test-case executable is optimized, and the "s = s" assignment is optimized
away, so there's not really an error, it's just that the test-case is
unsupported due to the optimizations done by the compiler.

Fix this by replacing the ERROR with UNSUPPORTED.

gdb/testsuite/ChangeLog:

2019-07-26  Tom de Vries  <tdevr...@suse.de>

        * gdb.opt/fortran-string.exp: Replace error with unsupported.

---
 gdb/testsuite/gdb.opt/fortran-string.exp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gdb/testsuite/gdb.opt/fortran-string.exp 
b/gdb/testsuite/gdb.opt/fortran-string.exp
index 90a2bdf212..6e5f37d439 100644
--- a/gdb/testsuite/gdb.opt/fortran-string.exp
+++ b/gdb/testsuite/gdb.opt/fortran-string.exp
@@ -30,7 +30,7 @@ if { [prepare_for_testing ${test}.exp ${test} ${srcfile} 
{debug f90 additional_f
 }
 
 if ![runto $srcfile:[gdb_get_line_number "s = s"]] then {
-    perror "couldn't run to breakpoint MAIN__"
+    unsupported "couldn't run to breakpoint s = s in optimized executable"
     continue
 }
 
++++++ gdb-testsuite-i386-pkru-exp.patch ++++++
commit 1512d3b7b9de3a1943623f2e1f373459d5d80a98
Author: Tom de Vries <tdevr...@suse.de>
Date:   Fri Jul 26 21:49:45 2019 +0200

    [gdb/testsuite] Fix unterminated string in i386-pkru.exp
    
    I ran into this error:
    ...
    ERROR: tcl error sourcing gdb/testsuite/gdb.arch/i386-pkru.exp.
    ERROR: missing "
        while executing
    "untested ""
        invoked from within
    "if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \
         [list debug additional_flags=${comp_flags}]] } {
        untested "failed to c..."
        (file "gdb/testsuite/gdb.arch/i386-pkru.exp" line 25)
        invoked from within
    ...
    caused by:
    ...
        untested "failed to compile x86 PKEYS test.
    ...
    
    Fix the unterminated string.
    
    Tested on x86_64-linux.
    
    gdb/testsuite/ChangeLog:
    
    2019-07-26  Tom de Vries  <tdevr...@suse.de>
    
            * gdb.arch/i386-pkru.exp: Fix unterminated string.

diff --git a/gdb/testsuite/gdb.arch/i386-pkru.exp 
b/gdb/testsuite/gdb.arch/i386-pkru.exp
index 7a2c65799e..db271522f0 100644
--- a/gdb/testsuite/gdb.arch/i386-pkru.exp
+++ b/gdb/testsuite/gdb.arch/i386-pkru.exp
@@ -24,7 +24,7 @@ set comp_flags "-I${srcdir}/../nat/"
 
 if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \
      [list debug additional_flags=${comp_flags}]] } {
-    untested "failed to compile x86 PKEYS test.
+    untested "failed to compile x86 PKEYS test."
     return -1
 }
 
++++++ gdb-testsuite-pie-no-pie.patch ++++++
- Testsuite: Ensure pie is disabled on some tests
- Testsuite: Remove pie from trace tests
- [gdb/testsuite] Fail in gdb_compile if nopie results in PIE executable
- [gdb/testsuite] Fail in gdb_compile if pie results in non-PIE executable

---------------------------------------------------------

[gdb/testsuite] Fail in gdb_compile if pie results in non-PIE executable

When running gdb.base/break-idempotent.exp with
--target_board=unix/-fno-PIE/-no-pie, we get:
...
nr of expected passes            140
...

The test-case is compiled once with nopie and once with pie, but in both cases
we end up with a non-PIE executable.  The "-fno-PIE -no-pie" options specified
using the target_board are interpreted by dejagnu as multilib_flags, and end up
overriding the pie flags.

Fix this by checking in gdb_compile if the resulting exec is non-PIE despite of
a pie setting, and if so return an error:
...
Running gdb/testsuite/gdb.base/break-idempotent.exp ...
gdb compile failed, pie failed to generate PIE executable

                === gdb Summary ===

nr of expected passes            70
nr of untested testcases         1
...

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2019-08-05  Tom de Vries  <tdevr...@suse.de>

        * lib/gdb.exp (version_at_least): Factor out of ...
        (tcl_version_at_least): ... here.
        (gdb_compile): Fail if pie results in non-PIE executable.
        (readelf_version, readelf_prints_pie): New proc.
        (exec_is_pie): Return -1 if unknown.

---------------------------------------------------------

[gdb/testsuite] Fail in gdb_compile if nopie results in PIE executable

When running gdb.base/dump.exp with --target_board=unix/-fPIE/-pie, we get:
...
Running gdb/testsuite/gdb.base/dump.exp ...
FAIL: gdb.base/dump.exp: dump array as value, intel hex
...

The FAIL happens because although the test specifies nopie, the exec is
in fact compiled as PIE.  The "-fPIE -pie" options specified using the
target_board are interpreted by dejagnu as multilib_flags, and end up
overriding the nopie flags.

Fix this by checking in gdb_compile if the resulting exec is PIE despite of
a nopie setting, and if so return an error:
...
Running gdb/testsuite/gdb.base/dump.exp ...
gdb compile failed, nopie failed to prevent PIE executable

                === gdb Summary ===

nr of untested testcases         1
...

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2019-07-30  Tom de Vries  <tdevr...@suse.de>

        PR testsuite/24834
        * lib/gdb.exp (gdb_compile): Fail if nopie results in PIE executable.
        (exec_is_pie): New proc.

---------------------------------------------------------

Testsuite: Remove pie from trace tests

Ubuntu/Debian defaults PIE to enabled.  This causes the trace tests
to fall over due to variables being returned as "unavailable".  The
tests were never designed to work with pie.

Simply ensure the nopie flag is always used for the failing tests.

This removes 100+ failures when running native-gdbserver on Ubuntu 18.04.

gdb/testsuite/ChangeLog:

        * gdb.trace/backtrace.exp: Use nopie flag.
        * gdb.trace/circ.exp: Likewise.
        * gdb.trace/collection.exp: Likewise.
        * gdb.trace/ftrace.exp: Likewise.
        * gdb.trace/mi-trace-unavailable.exp: Likewise.
        * gdb.trace/mi-traceframe-changed.exp: Likewise.
        * gdb.trace/qtro.exp: Likewise.
        * gdb.trace/read-memory.exp: Likewise.
        * gdb.trace/report.exp: Likewise.
        * gdb.trace/tfile.exp: Likewise.
        * gdb.trace/tfind.exp: Likewise.
        * gdb.trace/unavailable.exp: Likewise.

---------------------------------------------------------

Testsuite: Ensure pie is disabled on some tests

Recent versions of Ubuntu and Debian default GCC to enable pie.

In dump.exp, pie will causes addresses to be out of range for IHEX.

In break-interp.exp, pie is explicitly set for some tests and assumed
to be disabled for the remainder.

Ensure pie is disabled for these tests when required.

In addition, add a pie option to gdb_compile to match the nopie option
and simplify use.

gdb/testsuite/ChangeLog:

        * README: Add pie options.
        * gdb.base/break-interp.exp: Ensure pie is disabled.
        * gdb.base/dump.exp: Likewise.
        * lib/gdb.exp (gdb_compile): Add pie option.

---------------------------------------------------------

diff --git a/gdb/testsuite/README b/gdb/testsuite/README
index b5e75b9a79..db90ea4698 100644
--- a/gdb/testsuite/README
+++ b/gdb/testsuite/README
@@ -482,6 +482,16 @@ gdb,no_thread_names
 
   The target doesn't support thread names.
 
+gdb,pie_flag
+
+  The flag required to force the compiler to produce position-independent
+  executables.
+
+gdb,pie_ldflag
+
+  The flag required to force the linker to produce position-independent
+  executables.
+
 gdb,nopie_flag
 
   The flag required to force the compiler to produce non-position-independent
diff --git a/gdb/testsuite/gdb.base/break-interp.exp 
b/gdb/testsuite/gdb.base/break-interp.exp
index f85e8a650a..51e31f6503 100644
--- a/gdb/testsuite/gdb.base/break-interp.exp
+++ b/gdb/testsuite/gdb.base/break-interp.exp
@@ -625,8 +625,10 @@ foreach ldprelink {NO YES} {
                                lappend opts {debug}
                            }
                            if {$binpie != "NO"} {
-                               lappend opts {additional_flags=-fPIE}
-                               lappend opts {ldflags=-pie}
+                               lappend opts {pie}
+                           } else {
+                               # Debian9/Ubuntu16.10 onwards default to PIE 
enabled. Ensure it is disabled.
+                               lappend opts {nopie}
                            }
 
                            set dir ${exec}.d
diff --git a/gdb/testsuite/gdb.base/dump.exp b/gdb/testsuite/gdb.base/dump.exp
index 44b0988b80..52ba5f8ebe 100644
--- a/gdb/testsuite/gdb.base/dump.exp
+++ b/gdb/testsuite/gdb.base/dump.exp
@@ -36,6 +36,10 @@ if {[istarget "spu*-*-*"]} then {
     set is64bitonly "yes"
 }
 
+# Debian9/Ubuntu16.10 onwards default to PIE enabled. Ensure it is disabled as
+# this causes addresses to be out of range for IHEX.
+lappend options {nopie}
+
 if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable 
${options}] != "" } {
      untested "failed to compile"
      return -1
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 36f167336c..3d5f8726f7 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -3492,6 +3492,7 @@ set gdb_saved_set_unbuffered_mode_obj ""
 #     dynamically load libraries at runtime.  For example, on Linux, this adds
 #     -ldl so that the test can use dlopen.
 #   - nowarnings:  Inhibit all compiler warnings.
+#   - pie: Force creation of PIE executables.
 #   - nopie: Prevent creation of PIE executables.
 #
 # And here are some of the not too obscure options understood by DejaGnu that
@@ -3630,8 +3631,33 @@ proc gdb_compile {source dest type options} {
        set options [lreplace $options $nowarnings $nowarnings $flag]
     }
 
-    # Replace the "nopie" option with the appropriate additional_flags
-    # to disable PIE executables.
+    # Replace the "pie" option with the appropriate compiler and linker flags
+    # to enable PIE executables.
+    set pie [lsearch -exact $options pie]
+    if {$pie != -1} {
+       if [target_info exists gdb,pie_flag] {
+           set flag "additional_flags=[target_info gdb,pie_flag]"
+       } else {
+           # For safety, use fPIE rather than fpie. On AArch64, m68k, PowerPC
+           # and SPARC, fpie can cause compile errors due to the GOT exceeding
+           # a maximum size.  On other architectures the two flags are
+           # identical (see the GCC manual). Note Debian9 and Ubuntu16.10
+           # onwards default GCC to using fPIE.  If you do require fpie, then
+           # it can be set using the pie_flag.
+           set flag "additional_flags=-fPIE"
+       }
+       set options [lreplace $options $pie $pie $flag]
+
+       if [target_info exists gdb,pie_ldflag] {
+           set flag "ldflags=[target_info gdb,pie_ldflag]"
+       } else {
+           set flag "ldflags=-pie"
+       }
+       lappend options "$flag"
+    }
+
+    # Replace the "nopie" option with the appropriate linker flag to disable
+    # PIE executables.  There are no compiler flags for this option.
     set nopie [lsearch -exact $options nopie]
     if {$nopie != -1} {
        if [target_info exists gdb,nopie_flag] {
diff --git a/gdb/testsuite/gdb.trace/backtrace.exp 
b/gdb/testsuite/gdb.trace/backtrace.exp
index 0f60153cb5..24e097135f 100644
--- a/gdb/testsuite/gdb.trace/backtrace.exp
+++ b/gdb/testsuite/gdb.trace/backtrace.exp
@@ -27,7 +27,7 @@ if ![gdb_trace_common_supports_arch] {
 }
 
 if [prepare_for_testing "failed to prepare" $executable $srcfile \
-       [list debug nowarnings]] {
+       [list debug nowarnings nopie]] {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.trace/circ.exp b/gdb/testsuite/gdb.trace/circ.exp
index d48eca5deb..30ec9b47fc 100644
--- a/gdb/testsuite/gdb.trace/circ.exp
+++ b/gdb/testsuite/gdb.trace/circ.exp
@@ -17,7 +17,7 @@ load_lib "trace-support.exp"
 
 standard_testfile
 
-if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug 
nowarnings}]} {
+if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug 
nowarnings nopie}]} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.trace/collection.exp 
b/gdb/testsuite/gdb.trace/collection.exp
index 8c064385ba..44eccbe865 100644
--- a/gdb/testsuite/gdb.trace/collection.exp
+++ b/gdb/testsuite/gdb.trace/collection.exp
@@ -19,7 +19,7 @@ load_lib "trace-support.exp"
 standard_testfile
 set executable $testfile
 
-if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug 
nowarnings}]} {
+if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug 
nowarnings nopie}]} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.trace/ftrace.exp 
b/gdb/testsuite/gdb.trace/ftrace.exp
index f97c2c6193..702efe76bb 100644
--- a/gdb/testsuite/gdb.trace/ftrace.exp
+++ b/gdb/testsuite/gdb.trace/ftrace.exp
@@ -53,7 +53,7 @@ set remote_libipa [gdb_load_shlib $libipa]
 # file unused because linking not done" when building the object.
 
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
-         executable [list debug $additional_flags shlib=$libipa] ] != "" } {
+         executable [list debug nopie $additional_flags shlib=$libipa] ] != "" 
} {
     untested "failed to compile"
     return -1
 }
diff --git a/gdb/testsuite/gdb.trace/mi-trace-unavailable.exp 
b/gdb/testsuite/gdb.trace/mi-trace-unavailable.exp
index 5ec4bbc152..f0b3c52728 100644
--- a/gdb/testsuite/gdb.trace/mi-trace-unavailable.exp
+++ b/gdb/testsuite/gdb.trace/mi-trace-unavailable.exp
@@ -17,7 +17,7 @@ load_lib trace-support.exp
 
 standard_testfile trace-unavailable.c
 
-if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} {debug}] 
} {
+if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} {debug 
nopie}] } {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.trace/mi-traceframe-changed.exp 
b/gdb/testsuite/gdb.trace/mi-traceframe-changed.exp
index 781d3646cb..1244b5b273 100644
--- a/gdb/testsuite/gdb.trace/mi-traceframe-changed.exp
+++ b/gdb/testsuite/gdb.trace/mi-traceframe-changed.exp
@@ -32,7 +32,7 @@ if {![is_remote host] && ![is_remote target]} {
 
 if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
           executable \
-          [list debug nowarnings \
+          [list debug nowarnings nopie\
                "additional_flags=-DTFILE_DIR=\"$tfile_dir\""]] \
          != "" } {
      untested "failed to compile"
diff --git a/gdb/testsuite/gdb.trace/qtro.exp b/gdb/testsuite/gdb.trace/qtro.exp
index 9eabfeb51e..d5d912b5b9 100644
--- a/gdb/testsuite/gdb.trace/qtro.exp
+++ b/gdb/testsuite/gdb.trace/qtro.exp
@@ -22,7 +22,7 @@ load_lib trace-support.exp
 
 standard_testfile
 
-if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
+if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug 
nopie}]} {
     return -1
 }
 clean_restart $testfile
diff --git a/gdb/testsuite/gdb.trace/read-memory.exp 
b/gdb/testsuite/gdb.trace/read-memory.exp
index 61fc137916..4d19f0074d 100644
--- a/gdb/testsuite/gdb.trace/read-memory.exp
+++ b/gdb/testsuite/gdb.trace/read-memory.exp
@@ -17,7 +17,7 @@ load_lib "trace-support.exp"
 
 standard_testfile
 
-if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
+if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug 
nopie}]} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.trace/report.exp 
b/gdb/testsuite/gdb.trace/report.exp
index f43fbb7c62..c847ab0c5b 100644
--- a/gdb/testsuite/gdb.trace/report.exp
+++ b/gdb/testsuite/gdb.trace/report.exp
@@ -27,7 +27,7 @@ if ![gdb_trace_common_supports_arch] {
     return -1
 }
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
-         executable {debug nowarnings}] != "" } {
+         executable {debug nowarnings nopie}] != "" } {
     untested "failed to compile"
     return -1
 }
diff --git a/gdb/testsuite/gdb.trace/tfile.exp 
b/gdb/testsuite/gdb.trace/tfile.exp
index 04f3e98e99..23f4fc58d0 100644
--- a/gdb/testsuite/gdb.trace/tfile.exp
+++ b/gdb/testsuite/gdb.trace/tfile.exp
@@ -37,7 +37,7 @@ if {![is_remote host] && ![is_remote target]} {
 standard_testfile
 if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
          executable \
-         [list debug \
+         [list debug nopie\
               "additional_flags=-DTFILE_DIR=\"$tfile_dir\""]] \
         != "" } {
     untested "failed to compile"
diff --git a/gdb/testsuite/gdb.trace/tfind.exp 
b/gdb/testsuite/gdb.trace/tfind.exp
index 2c9996b040..fb58f80196 100644
--- a/gdb/testsuite/gdb.trace/tfind.exp
+++ b/gdb/testsuite/gdb.trace/tfind.exp
@@ -29,7 +29,7 @@ if ![gdb_trace_common_supports_arch] {
 }
 
 if { [gdb_compile "$srcdir/$subdir/$srcfile" "$binfile" \
-         executable {debug nowarnings}] != "" } {
+         executable {debug nowarnings nopie}] != "" } {
     untested "failed to compile"
     return -1
 }
diff --git a/gdb/testsuite/gdb.trace/unavailable.exp 
b/gdb/testsuite/gdb.trace/unavailable.exp
index 23d593e7d3..f3bb54db34 100644
--- a/gdb/testsuite/gdb.trace/unavailable.exp
+++ b/gdb/testsuite/gdb.trace/unavailable.exp
@@ -19,7 +19,7 @@ standard_testfile unavailable.cc
 set executable $testfile
 
 if {[prepare_for_testing "failed to prepare" $testfile $srcfile \
-        {debug nowarnings c++}]} {
+        {debug nowarnings c++ nopie}]} {
     return -1
 }
 
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 3d5f8726f7..cf7739aee3 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -3722,6 +3722,12 @@ proc gdb_compile {source dest type options} {
     regsub "\[\r\n\]*$" "$result" "" result
     regsub "^\[\r\n\]*" "$result" "" result
     
+    if { $type == "executable" && $result == "" && $nopie != -1 } {
+       if { [exec_is_pie "$dest"] } {
+           set result "nopie failed to prevent PIE executable"
+       }
+    }
+
     if {[lsearch $options quiet] < 0} {
        # We shall update this on a per language basis, to avoid
        # changing the entire testsuite in one go.
@@ -5083,6 +5089,18 @@ proc rerun_to_main {} {
   }
 }
 
+# Return true if EXECUTABLE is a Position Independent Executable.
+
+proc exec_is_pie { executable } {
+    set readelf_program [gdb_find_readelf]
+    set res [catch {exec $readelf_program -d $executable \
+                       | grep -E "(FLAGS_1).*Flags:.* PIE($| )" }]
+    if { $res == 0 } {
+       return 1
+    }
+    return 0
+}
+
 # Return true if a test should be skipped due to lack of floating
 # point support or GDB can't fetch the contents from floating point
 # registers.
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index cf7739aee3..896e0f1b40 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -1097,6 +1097,18 @@ proc gdb_test { args } {
      }]
 }
 
+# Return 1 if version MAJOR.MINOR is at least AT_LEAST_MAJOR.AT_LEAST_MINOR.
+proc version_at_least { major minor at_least_major at_least_minor} {
+    if { $major > $at_least_major } {
+        return 1
+    } elseif { $major == $at_least_major \
+                  && $minor >= $at_least_minor } {
+        return 1
+    } else {
+        return 0
+    }
+}
+
 # gdb_test_no_output COMMAND MESSAGE
 # Send a command to GDB and verify that this command generated no output.
 #
@@ -3722,9 +3734,13 @@ proc gdb_compile {source dest type options} {
     regsub "\[\r\n\]*$" "$result" "" result
     regsub "^\[\r\n\]*" "$result" "" result
     
-    if { $type == "executable" && $result == "" && $nopie != -1 } {
-       if { [exec_is_pie "$dest"] } {
+    if { $type == "executable" && $result == "" \
+            && ($nopie != -1 || $pie != -1) } {
+       set is_pie [exec_is_pie "$dest"]
+       if { $nopie != -1 && $is_pie == 1 } {
            set result "nopie failed to prevent PIE executable"
+       } elseif { $pie != -1 && $is_pie == 0 } {
+           set result "pie failed to generate PIE executable"
        }
     }
 
@@ -5089,13 +5105,53 @@ proc rerun_to_main {} {
   }
 }
 
-# Return true if EXECUTABLE is a Position Independent Executable.
+# Return list with major and minor version of readelf, or an empty list.
+gdb_caching_proc readelf_version {
+    set readelf_program [gdb_find_readelf]
+    set res [catch {exec $readelf_program --version} output]
+    if { $res != 0 } {
+       return [list]
+    }
+    set lines [split $output \n]
+    set line [lindex $lines 0]
+    set res [regexp {[ \t]+([0-9]+)[.]([0-9]+)[^ \t]*$} \
+                $line dummy major minor]
+    if { $res != 1 } {
+       return [list]
+    }
+    return [list $major $minor]
+}
+
+# Return 1 if readelf prints the PIE flag, 0 if is doesn't, and -1 if unknown.
+proc readelf_prints_pie { } {
+    set version [readelf_version]
+    if { [llength $version] == 0 } {
+       return -1
+    }
+    set major [lindex $version 0]
+    set minor [lindex $version 1]
+    # It would be better to construct a PIE executable and test if the PIE
+    # flag is printed by readelf, but we cannot reliably construct a PIE
+    # executable if the multilib_flags dictate otherwise
+    # (--target_board=unix/-no-pie/-fno-PIE).
+    return [version_at_least $major $minor 2 26]
+}
+
+# Return 1 if EXECUTABLE is a Position Independent Executable, 0 if it is not,
+# and -1 if unknown.
 
 proc exec_is_pie { executable } {
+    set res [readelf_prints_pie]
+    if { $res != 1 } {
+       return -1
+    }
     set readelf_program [gdb_find_readelf]
-    set res [catch {exec $readelf_program -d $executable \
-                       | grep -E "(FLAGS_1).*Flags:.* PIE($| )" }]
-    if { $res == 0 } {
+    set res [catch {exec $readelf_program -d $executable} output]
+    if { $res != 0 } {
+       return -1
+    }
+    set res [regexp -line {\(FLAGS_1\).*Flags:.* PIE($| )} $output]
+    if { $res == 1 } {
        return 1
     }
     return 0
++++++ gdb-testsuite-read1-fixes.patch ++++++
- Fix test_gdb_complete_tab_multiple race
- [gdb/testsuite] Don't expect gdb_prompt in mi_skip_python_test
- [gdb/testsuite] Fix gdb.base/maint.exp with check-read1
- [gdb/testsuite] Fix mi-catch-cpp-exceptions.exp and mi-nonstop.exp with 
check-read1
- [gdb/testsuite] Fix python.exp with check-read1
- [gdb/testsuite, 1/2] Fix gdb.linespec/explicit.exp with check-read1
- [gdb/testsuite, 2/2] Fix gdb.linespec/explicit.exp with check-read1
- [gdb/testsuite] Test skip_libstdcxx_probe_tests in mi-catch-cpp-exceptions.exp

diff --git a/gdb/testsuite/gdb.base/maint.exp b/gdb/testsuite/gdb.base/maint.exp
index 38e9a1ec4b..810c7c9b8c 100644
--- a/gdb/testsuite/gdb.base/maint.exp
+++ b/gdb/testsuite/gdb.base/maint.exp
@@ -69,15 +69,15 @@ set saw_registers 0
 set saw_headers 0
 set test "maint print registers"
 gdb_test_multiple $test $test {
-    -re 
"\[^\r\n\]+Name\[^\r\n\]+Nr\[^\r\n\]+Rel\[^\r\n\]+Offset\[^\r\n\]+Size\[^\r\n\]+Type\[^\r\n\]+\[\r\n\]+"
 {
+    -re 
"\[^\r\n\]+Name\[^\r\n\]+Nr\[^\r\n\]+Rel\[^\r\n\]+Offset\[^\r\n\]+Size\[^\r\n\]+Type\[^\r\n\]+\r\n"
 {
        set saw_headers 1
        exp_continue
     }
-    -re 
"^\[^\r\n\]+\[0-9\]+\[^\r\n\]+\[0-9\]+\[^\r\n\]+\[0-9\]+\[^\r\n\]+\[0-9\]+\[^\r\n\]+\[\r\n\]+"
 {
+    -re 
"^\[^\r\n\]+\[0-9\]+\[^\r\n\]+\[0-9\]+\[^\r\n\]+\[0-9\]+\[^\r\n\]+\[0-9\]+\[^\r\n\]+\r\n"
 {
         set saw_registers 1
         exp_continue
     }
-    -re "^\\*\[0-9\]+\[^\r\n\]+\[\r\n\]+" {
+    -re "^\\*\[0-9\]+\[^\r\n\]+\r\n" {
         exp_continue
     }
     -re "$gdb_prompt $" {
diff --git a/gdb/testsuite/gdb.linespec/explicit.exp 
b/gdb/testsuite/gdb.linespec/explicit.exp
index 11656ca5c5..e50e503343 100644
--- a/gdb/testsuite/gdb.linespec/explicit.exp
+++ b/gdb/testsuite/gdb.linespec/explicit.exp
@@ -241,20 +241,7 @@ namespace eval $testfile {
            -re "break -source exp\\\x07licit" {
                send_gdb "\t\t"
                gdb_test_multiple "" $tst {
-                   -re "\\\x07\r\nexplicit.c\[ \t\]+explicit2.c\[ 
\t\]+\r\n$gdb_prompt" {
-                       send_gdb "\n"
-                       gdb_test "" \
-                           {Source filename requires function, label, or line 
offset.} \
-                           $tst
-                   }
-               }
-           }
-
-           -re "break -source exp\\\x07l" {
-               # This pattern may occur when glibc debuginfo is installed.
-               send_gdb "\t\t"
-               gdb_test_multiple "" $tst {
-                   -re "\\\x07\r\nexplicit.c\[ \t\]+explicit2.c\[ 
\t\]+expl.*\r\n$gdb_prompt" {
+                   -re "\\\x07\r\nexplicit.c\[ \t\]+explicit2.c\[ 
\t\]+\(expl.*\)?\r\n$gdb_prompt" {
                        send_gdb "\n"
                        gdb_test "" \
                            {Source filename requires function, label, or line 
offset.} \
@@ -486,7 +473,7 @@ namespace eval $testfile {
        send_gdb "break \t"
        gdb_test_multiple "" $tst {
            "break \\\x07" {
-               send_gdb "\t\t"
+               send_gdb "\t"
                gdb_test_multiple "" $tst {
                    "Display all" {
                        send_gdb "y"
diff --git a/gdb/testsuite/gdb.python/python.exp 
b/gdb/testsuite/gdb.python/python.exp
index b62572ceb8..f5c1d1b261 100644
--- a/gdb/testsuite/gdb.python/python.exp
+++ b/gdb/testsuite/gdb.python/python.exp
@@ -450,7 +450,7 @@ gdb_py_test_multiple "prompt substitution readline" \
   "end" ""
 
 gdb_test_multiple "python gdb.prompt_hook = error_prompt" "set the hook" {
-    -re "Python Exception (exceptions.RuntimeError|<(type 'exceptions.|class 
')RuntimeError'>) Python exception called.*" {
+    -re "Python Exception (exceptions.RuntimeError|<(type 'exceptions.|class 
')RuntimeError'>) Python exception called.*$gdb_prompt $" {
        pass "set hook"
     }
 }
@@ -462,7 +462,7 @@ gdb_py_test_silent_cmd "set python print-stack full" \
     "set print-stack full for prompt error test" 1
 
 gdb_test_multiple "python gdb.prompt_hook = error_prompt" "set the hook" {
-    -re "Traceback.*File.*line.*RuntimeError.*Python exception called.*" {
+    -re "Traceback.*File.*line.*RuntimeError.*Python exception 
called.*$gdb_prompt $" {
        pass "set hook"
     }
 }
diff --git a/gdb/testsuite/lib/completion-support.exp 
b/gdb/testsuite/lib/completion-support.exp
index 3e498d3c63..8a75b0d785 100644
--- a/gdb/testsuite/lib/completion-support.exp
+++ b/gdb/testsuite/lib/completion-support.exp
@@ -144,8 +144,12 @@ proc test_gdb_complete_tab_multiple { input_line 
add_completed_line \
                set maybe_bell ""
            }
            gdb_test_multiple "" "$test (second tab)" {
-               -re "^${maybe_bell}\r\n$expected_re\r\n$gdb_prompt 
$input_line_re$add_completed_line_re$" {
-                   pass "$test"
+               -re "^${maybe_bell}\r\n$expected_re\r\n$gdb_prompt " {
+                   gdb_test_multiple "" "$test (second tab)" {
+                       -re "^$input_line_re$add_completed_line_re$" {
+                           pass "$test"
+                       }
+                   }
                }
            }
        }
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 896e0f1b40..2eb00d58b9 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -695,7 +695,7 @@ proc gdb_internal_error_resync {} {
 }
 
 
-# gdb_test_multiple COMMAND MESSAGE EXPECT_ARGUMENTS
+# gdb_test_multiple COMMAND MESSAGE EXPECT_ARGUMENTS PROMPT_REGEXP
 # Send a command to gdb; test the result.
 #
 # COMMAND is the command to execute, send to GDB with send_gdb.  If
@@ -707,6 +707,8 @@ proc gdb_internal_error_resync {} {
 #   context; action elements will be executed in the caller's context.
 #   Unlike patterns for gdb_test, these patterns should generally include
 #   the final newline and prompt.
+# PROMPT_REGEXP is a regexp matching the expected prompt after the command
+#   output.  If empty, defaults to "$gdb_prompt $"
 #
 # Returns:
 #    1 if the test failed, according to a built-in failure pattern
@@ -744,7 +746,7 @@ proc gdb_internal_error_resync {} {
 # expected from $gdb_spawn_id.  IOW, callers do not need to worry
 # about resetting "-i" back to $gdb_spawn_id explicitly.
 #
-proc gdb_test_multiple { command message user_code } {
+proc gdb_test_multiple { command message user_code { prompt_regexp "" } } {
     global verbose use_gdb_stub
     global gdb_prompt pagination_prompt
     global GDB
@@ -754,6 +756,10 @@ proc gdb_test_multiple { command message user_code } {
     upvar expect_out expect_out
     global any_spawn_id
 
+    if { "$prompt_regexp" == "" } {
+       set prompt_regexp "$gdb_prompt $"
+    }
+
     if { $message == "" } {
        set message $command
     }
@@ -913,7 +919,7 @@ proc gdb_test_multiple { command message user_code } {
     }
 
     append code {
-       -re "Ending remote debugging.*$gdb_prompt $" {
+       -re "Ending remote debugging.*$prompt_regexp" {
            if ![isnative] then {
                warning "Can`t communicate to remote target."
            }
@@ -921,17 +927,17 @@ proc gdb_test_multiple { command message user_code } {
            gdb_start
            set result -1
        }
-       -re "Undefined\[a-z\]* command:.*$gdb_prompt $" {
+       -re "Undefined\[a-z\]* command:.*$prompt_regexp" {
            perror "Undefined command \"$command\"."
            fail "$message"
            set result 1
        }
-       -re "Ambiguous command.*$gdb_prompt $" {
+       -re "Ambiguous command.*$prompt_regexp" {
            perror "\"$command\" is not a unique command name."
            fail "$message"
            set result 1
        }
-       -re "$inferior_exited_re with code \[0-9\]+.*$gdb_prompt $" {
+       -re "$inferior_exited_re with code \[0-9\]+.*$prompt_regexp" {
            if ![string match "" $message] then {
                set errmsg "$message (the program exited)"
            } else {
@@ -940,7 +946,7 @@ proc gdb_test_multiple { command message user_code } {
            fail "$errmsg"
            set result -1
        }
-       -re "$inferior_exited_re normally.*$gdb_prompt $" {
+       -re "$inferior_exited_re normally.*$prompt_regexp" {
            if ![string match "" $message] then {
                set errmsg "$message (the program exited)"
            } else {
@@ -949,7 +955,7 @@ proc gdb_test_multiple { command message user_code } {
            fail "$errmsg"
            set result -1
        }
-       -re "The program is not being run.*$gdb_prompt $" {
+       -re "The program is not being run.*$prompt_regexp" {
            if ![string match "" $message] then {
                set errmsg "$message (the program is no longer running)"
            } else {
@@ -958,7 +964,7 @@ proc gdb_test_multiple { command message user_code } {
            fail "$errmsg"
            set result -1
        }
-       -re "\r\n$gdb_prompt $" {
+       -re "\r\n$prompt_regexp" {
            if ![string match "" $message] then {
                fail "$message"
            }
@@ -972,13 +978,13 @@ proc gdb_test_multiple { command message user_code } {
        }
        -re "\\((y or n|y or \\\[n\\\]|\\\[y\\\] or n)\\) " {
            send_gdb "n\n"
-           gdb_expect -re "$gdb_prompt $"
+           gdb_expect -re "$prompt_regexp"
            fail "$message (got interactive prompt)"
            set result -1
        }
        -re "\\\[0\\\] cancel\r\n\\\[1\\\] all.*\r\n> $" {
            send_gdb "0\n"
-           gdb_expect -re "$gdb_prompt $"
+           gdb_expect -re "$prompt_regexp"
            fail "$message (got breakpoint menu)"
            set result -1
        }
@@ -1842,7 +1848,7 @@ proc skip_python_tests_prompt { prompt_regexp } {
            return 1
        }
        -re "$prompt_regexp" {}
-    }
+    } "$prompt_regexp"
 
     set gdb_py_is_py24 0
     gdb_test_multiple "python print (sys.version_info\[0\])" "check if python 
3" {
@@ -1852,7 +1858,7 @@ proc skip_python_tests_prompt { prompt_regexp } {
        -re ".*$prompt_regexp" {
             set gdb_py_is_py3k 0
         }
-    }
+    } "$prompt_regexp"
     if { $gdb_py_is_py3k == 0 } {
         gdb_test_multiple "python print (sys.version_info\[1\])" "check if 
python 2.4" {
            -re "\[45\].*$prompt_regexp" {
@@ -1861,7 +1867,7 @@ proc skip_python_tests_prompt { prompt_regexp } {
            -re ".*$prompt_regexp" {
                 set gdb_py_is_py24 0
             }
-        }
+        } "$prompt_regexp"
     }
 
     return 0
@@ -3079,22 +3085,27 @@ proc skip_unwinder_tests {} {
 
 # Return 0 if we should skip tests that require the libstdc++ stap
 # probes.  This must be invoked while gdb is running, after shared
-# libraries have been loaded.
-
-proc skip_libstdcxx_probe_tests {} {
-    global gdb_prompt
+# libraries have been loaded.  PROMPT_REGEXP is the expected prompt.
 
+proc skip_libstdcxx_probe_tests_prompt { prompt_regexp } {
     set ok 0
     gdb_test_multiple "info probe" "check for stap probe in libstdc++" {
-       -re ".*libstdcxx.*catch.*\r\n$gdb_prompt $" {
+       -re ".*libstdcxx.*catch.*\r\n$prompt_regexp" {
            set ok 1
        }
-       -re "\r\n$gdb_prompt $" {
+       -re "\r\n$prompt_regexp" {
        }
-    }
+    } "$prompt_regexp"
     return $ok
 }
 
+# As skip_libstdcxx_probe_tests_prompt, with gdb_prompt.
+
+proc skip_libstdcxx_probe_tests {} {
+    global gdb_prompt
+    return [skip_libstdcxx_probe_tests_prompt "$gdb_prompt $"]
+}
+
 # Return 1 if we should skip tests of the "compile" feature.
 # This must be invoked after the inferior has been started.
 
@@ -3131,7 +3142,7 @@ proc gdb_is_target_1 { target_name target_stack_regexp 
prompt_regexp } {
        -re "$prompt_regexp" {
            pass $test
        }
-    }
+    } "$prompt_regexp"
     return 0
 }
 
diff --git a/gdb/testsuite/lib/mi-support.exp b/gdb/testsuite/lib/mi-support.exp
index a58c4f6e11..d0ee5ca744 100644
--- a/gdb/testsuite/lib/mi-support.exp
+++ b/gdb/testsuite/lib/mi-support.exp
@@ -2596,6 +2596,13 @@ proc mi_skip_python_tests {} {
     return [skip_python_tests_prompt "$mi_gdb_prompt$"]
 }
 
+# As skip_libstdcxx_probe_tests_prompt, with mi_gdb_prompt.
+
+proc mi_skip_libstdcxx_probe_tests {} {
+    global mi_gdb_prompt
+    return [skip_libstdcxx_probe_tests_prompt "$mi_gdb_prompt$"]
+}
+
 # Check whether we're testing with the remote or extended-remote
 # targets.
 

Reply via email to