testsuite: Fix false FAIL for gdb.base/morestack.exp
authorJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 24 Oct 2016 12:13:51 +0000 (14:13 +0200)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 24 Oct 2016 12:13:51 +0000 (14:13 +0200)
Since
[commit] [testsuite patch] Fix gcc_compiled for gcc 6 & 7
https://sourceware.org/ml/gdb-patches/2016-10/msg00620.html

there has started running again
 Running gdb/testsuite/gdb.base/morestack.exp ...
+FAIL: gdb.base/morestack.exp: continue
+PASS: gdb.base/morestack.exp: up 3000

but as you can see it FAILs now - on Fedora 24 x86_64 (although for example it
still PASSes on CentOS-7.2 x86_64).

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff787c7bb in malloc_consolidate (av=av@entry=0x7ffff7bbcb00 <main_arena>) at malloc.c:4181
4181       unlink(av, nextchunk, bck, fwd);
(gdb) bt
[...]
[...]

This apparently is due to - man gcc - -fsplit-stack:
When code compiled with -fsplit-stack calls code compiled without
-fsplit-stack, there may not be much stack space available for the
latter code to run.  If compiling all code, including library code,
with -fsplit-stack is not an option, then the linker can fix up these
calls so that the code compiled without -fsplit-stack always has
a large stack.  Support for this is implemented in the gold linker in
GNU binutils release 2.21 and later.

gdb/testsuite/ChangeLog
2016-10-24  Jan Kratochvil  <jan.kratochvil@redhat.com>

* gdb.base/morestack.exp: Try to build it using -fuse-ld=gold first.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/morestack.exp

index c8709b7..460e6b9 100644 (file)
@@ -1,3 +1,7 @@
+2016-10-24  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       * gdb.base/morestack.exp: Try to build it using -fuse-ld=gold first.
+
 2016-10-20  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        * lib/gdb.exp (get_compiler_info): Generalize gcc_compile regexp.
index 12f5d28..fb9bbf3 100644 (file)
@@ -23,7 +23,11 @@ if {$gcc_compiled == 0} {
 
 standard_testfile
 
-if { [prepare_for_testing ${testfile}.exp ${testfile} $srcfile {additional_flags=-fsplit-stack}] } {
+# -fuse-ld=gold is used for calling printf code built without -fsplit-stack
+# which could crash otherwise.  See GCC documentation of -fsplit-stack.
+set opts "additional_flags=-fsplit-stack"
+if { [prepare_for_testing ${testfile}.exp ${testfile} $srcfile [list $opts additional_flags=-fuse-ld=gold]] \
+     && [prepare_for_testing ${testfile}.exp ${testfile} $srcfile $opts] } {
     return -1
 }