http://sourceware.org/ml/gdb-patches/2016-10/msg00652.html Subject: [testsuite patch] Fix false FAIL for gdb.base/morestack.exp --HlL+5n6rz5pIUxbD Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi, 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 ) at malloc.c:4181 4181 unlink(av, nextchunk, bck, fwd); (gdb) bt #0 0x00007ffff787c7bb in malloc_consolidate (av=av@entry=0x7ffff7bbcb00 ) at malloc.c:4181 #1 0x00007ffff787f235 in _int_malloc (av=av@entry=0x7ffff7bbcb00 , bytes=bytes@entry=1024) at malloc.c:3448 [...] #8 0x00007ffff784c5ac in _IO_vfprintf_internal (s=0x7ffff7bbd600 <_IO_2_1_stdout_>, format=, ap=ap@entry=0x7ffff77fd7f8) at vfprintf.c:1631 #9 0x00007ffff7853939 in __printf (format=) at printf.c:33 #10 0x0000000000400d6b in down () #11 0x0000000000400f2c in __morestack () #12 0x0000000000400dda in down () [...] 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. Personally I do not understand why gold is not the default linker as GNU ld is unusably slow (6x) for C++ but that is off-topic here. OK for check-in? Thanks, Jan --HlL+5n6rz5pIUxbD Content-Type: text/plain; charset=us-ascii Content-Disposition: inline; filename=1 gdb/testsuite/ChangeLog 2016-10-22 Jan Kratochvil * gdb.base/morestack.exp: Try to build it using -fuse-ld=gold first. diff --git a/gdb/testsuite/gdb.base/morestack.exp b/gdb/testsuite/gdb.base/morestack.exp index 12f5d28..caa85b8 100644 --- a/gdb/testsuite/gdb.base/morestack.exp +++ b/gdb/testsuite/gdb.base/morestack.exp @@ -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 otherise. 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 } --HlL+5n6rz5pIUxbD--