Bug 891479 - 2 unexpected failures in libtool tests (sparc64 environment)
Summary: 2 unexpected failures in libtool tests (sparc64 environment)
Keywords:
Status: CLOSED NOTABUG
Alias: None
Product: Fedora
Classification: Fedora
Component: libtool
Version: 18
Hardware: sparc64
OS: Linux
unspecified
medium
Target Milestone: ---
Assignee: Pavel Raiskup
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2013-01-03 05:00 UTC by Bryce
Modified: 2013-01-13 13:02 UTC (History)
2 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2013-01-09 08:30:52 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)

Description Bryce 2013-01-03 05:00:15 UTC
libtool-2.4.2-10
----------------

104: C++ exception handling                          FAILED (exceptions.at:385)

    LT_AT_NOINST_EXEC_CHECK([./main], [-dlopen m/module.la], [], [ignore], [ignore])

115: Run tests with low max_cmd_len                  FAILED (cmdline_wrap.at:43)

    AT_CHECK([$CONFIG_SHELL $abs_srcdir/testsuite -k libtool$INNER_TESTSUITEFLAGS],
             [], [ignore], [ignore])


    ERROR: 109 tests were run,
    7 failed (5 expected failures).
    17 tests were skipped.

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


Both appear to be Segmentation fault errors. Unfortunately I can't quite interpret what some of the test suite shell variables are meant to be and sh -xv didn't really expand any of them.

bash-4.2# cd testsuite.dir/104
bash-4.2# ./run

...

libtool: link: rm -f .libs/main.nm .libs/main.nmS .libs/main.nmT
libtool: link: (cd .libs && gcc -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mcpu=ultrasparc -fPIC -c -fno-builtin "mainS.c")
libtool: link: rm -f ".libs/mainS.c" ".libs/main.nm" ".libs/main.nmS" ".libs/main.nmT"
libtool: link: g++ -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mcpu=ultrasparc -Wl,-z -Wl,relro -o .libs/main main.o .libs/mainS.o -Wl,--export-dynamic  /root/rpmbuild/BUILD/libtool-2.4.2/libltdl/.libs/dlopen.a l/.libs/liba.so l/.libs/libcommon.so /root/rpmbuild/BUILD/libtool-2.4.2/tests/../libltdl/.libs/libltdlc.a -ldl -Wl,-rpath -Wl,/root/rpmbuild/BUILD/libtool-2.4.2/tests/testsuite.dir/104/inst/lib
./exceptions.at:385: if $LIBTOOL --mode=execute -dlopen m/module.la "$lt_exe" ; then :; else lt_status=$?;                test "X$host" != "X$build" && test -x "$lt_exe" && exit 77;     exit $lt_status; fi
stderr:
exceptions_in_prog
/root/rpmbuild/BUILD/libtool-2.4.2/tests/testsuite.dir/at-groups/104/test-source: line 564: 60752 Segmentation fault      (core dumped) $LIBTOOL --mode=execute -dlopen m/module.la "$lt_exe"
stdout:
./exceptions.at:385: exit code was 139, expected 0
++ read at_status


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

bash-4.2# cd testsuite.dir/115
bash-4.2# ./run

> libtool: link: rm -f .libs/main.nm .libs/main.nmS .libs/main.nmT
> libtool: link: (cd .libs && gcc -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mcpu=ultrasparc -fPIC -c -fno-builtin "mainS.c")
> libtool: link: rm -f ".libs/mainS.c" ".libs/main.nm" ".libs/main.nmS" ".libs/main.nmT"
> libtool: link: g++ -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mcpu=ultrasparc -Wl,-z -Wl,relro -o .libs/main main.o .libs/mainS.o -Wl,--export-dynamic  /root/rpmbuild/BUILD/libtool-2.4.2/libltdl/.libs/dlopen.a l/.libs/liba.so l/.libs/libcommon.so /root/rpmbuild/BUILD/libtool-2.4.2/tests/../libltdl/.libs/libltdlc.a -ldl -Wl,-rpath -Wl,/root/rpmbuild/BUILD/libtool-2.4.2/tests/testsuite.dir/115/tests/testsuite.dir/104/inst/lib
> /exceptions.at:385: if $LIBTOOL --mode=execute -dlopen m/module.la "$lt_exe" ; then :; else lt_status=$?;               test "X$host" != "X$build" && test -x "$lt_exe" && exit 77;     exit $lt_status; fi
> stderr:
> exceptions_in_prog
> /root/rpmbuild/BUILD/libtool-2.4.2/tests/testsuite.dir/115/tests/testsuite.dir/at-groups/104/test-source: line 564: 26133 Segmentation fault      (core dumped) $LIBTOOL --mode=execute -dlopen m/module.la "$lt_exe"
> stdout:
> /exceptions.at:385: exit code was 139, expected 0
> 104. exceptions.at:24: 104. C++ exception handling (exceptions.at:24): FAILED (exceptions.at:385)
> 
> 
++ read at_status
+ :
+ at_fn_group_postprocess
+ cd /root/rpmbuild/BUILD/libtool-2.4.2/tests/testsuite.dir
+ test '!' -f /root/rpmbuild/BUILD/libtool-2.4.2/tests/testsuite.dir/at-groups/115/check-line
+ printf %s '115. cmdline_wrap.at:28: '
115. cmdline_wrap.at:28: + printf %s '115. cmdline_wrap.at:28: '
+ case $at_xfail:$at_status in
++ cat /root/rpmbuild/BUILD/libtool-2.4.2/tests/testsuite.dir/at-groups/115/check-line
+ at_msg='FAILED (cmdline_wrap.at:43)'

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

Any advise on how to debug this would be appreciated as I just can't fathom out the testsuite variables eg "$lt_exe", it could well be just that the shel is broken rather than libtool since pretty much all the other tests went through fine.

Thanks

Phil
=--=

Comment 1 Pavel Raiskup 2013-01-07 11:40:36 UTC
Hi Phil,

> Both appear to be Segmentation fault errors. Unfortunately I can't quite
> interpret what some of the test suite shell variables are meant to be and sh
> -xv didn't really expand any of them.

.. and both defects are relevant to test #104 -> because #115 is running
recursively some subset of tests (including the #104).

> bash-4.2# cd testsuite.dir/115
> bash-4.2# ./run
>
> > libtool: link: rm -f .libs/main.nm .libs/main.nmS .libs/main.nmT
> > [.. snip ..]
> > 104. exceptions.at:24: 104. C++ exception handling (exceptions.at:24):
> >      FAILED (exceptions.at:385)

See the log here ^^^^.

> Any advise on how to debug this would be appreciated as I just can't fathom
> out the testsuite variables eg "$lt_exe", it could well be just that the shel
> is broken rather than libtool since pretty much all the other tests went
> through fine.

You may not directly run "sh -xv".  The best approach how to debug shell
variables handled in scripts generated by autoconf's testsuite is to give the
'-x' parameter to the 'testsuite' script:

  $ cd tests
  $ ./testsuite 104 -x

Or possibly, you may use something like:

  make check TESTSUITEFLAGS='104 -x'

The same option you may use with generated './run' script in
'tests/testsuite.dir'.  See the './run --help' or './testsuite --help' text.

Pavel

Comment 2 Bryce 2013-01-07 17:26:07 UTC
Whoops,.. ok,. let me back up and redo the testing again. (doesn't help that I'm being plagued by a glibc signal-stack bug in mock either,..-grumble-)

Ok not terribly helpful but,..having beaten up elfutils in #891553 where all of it's segv problems were down to unaligned access, I'll wager that this will probably turn out to be similar.

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

ugh lets see
libtool: link: g++ -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mcpu=ultrasparc -Wl,-z -Wl,relro -o .libs/main main.o .libs/mainS.o -Wl,--export-dynamic  /builddir/build/BUILD/libtool-2.4.2/libltdl/.libs/dlopen.a l/.libs/liba.so l/.libs/libcommon.so /builddir/build/BUILD/libtool-2.4.2/tests/../libltdl/.libs/libltdlc.a -ldl -Wl,-rpath -Wl,/builddir/build/BUILD/libtool-2.4.2/tests/testsuite.dir/104/inst/lib
./exceptions.at:385: if $LIBTOOL --mode=execute -dlopen m/module.la "$lt_exe" ; then :; else lt_status=$?;                 test "X$host" != "X$build" && test -x "$lt_exe" && exit 77;     exit $lt_status; fi
stderr:
exceptions_in_prog
/builddir/build/BUILD/libtool-2.4.2/tests/testsuite.dir/at-groups/104/test-source: line 564:  9411 Segmentation fault      (core dumped) $LIBTOOL --mode=execute -dlopen m/module.la "$lt_exe"
stdout:
./exceptions.at:385: exit code was 139, expected 0
104. exceptions.at:24: 104. C++ exception handling (exceptions.at:24): FAILED (exceptions.at:385)
--------------------------------------------------------------------------------

I managed to strap strace around this
8544  execve("/builddir/build/BUILD/libtool-2.4.2/tests/testsuite.dir/104/.libs/lt-main", ["/builddir/build/BUILD/libtool-2."...], [/* 75 vars */]) = 0
...
8544  munmap(0xfffff8010020c000, 19748) = 0
8544  write(2, "exceptions_in_prog\n", 19) = 19
8544  --- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_ACCERR, si_addr=0xfffff80100502558} ---
8544  +++ killed by SIGSEGV (core dumped) +++

so the SEGV (which according to strace flakes out with SEGV_ACCERR (/* Invalid permissions for mapped object.  */))
is coming from the lt-main binary execution. Sin the point of the exercise is to check on c++ error handling I'm not sure is the segv is somthing that was supposed to happen or not.

As for the message /builddir/build/BUILD/libtool-2.4.2/tests/testsuite.dir/at-groups/104/test-source: line 564 ... is interesting because it doesn't exist,.. well it might and have been deleted,.. checking on that now. Mmmm no don't see any obvious evidence of it being created.

bash-4.2# ls -l /builddir/build/BUILD/libtool-2.4.2/tests/testsuite.dir/at-groups/104/test-source
ls: cannot access /builddir/build/BUILD/libtool-2.4.2/tests/testsuite.dir/at-groups/104/test-source: No such file or directory
ls: cannot access /builddir/build/BUILD/libtool-2.4.2/tests/testsuite.dir/104/test-source: No such file or directory
bash-4.2# ls -l /builddir/build/BUILD/libtool-2.4.2/tests/testsuite.dir/104
total 332
-rw-r--r--. 1 root root    103 Jan  7 11:53 common.cpp
-rw-r--r--. 1 root root    744 Jan  7 11:53 common.h
-rw-r--r--. 1 root root    270 Jan  7 11:53 common.lo
-rw-r--r--. 1 root root  36080 Jan  7 11:53 common.o
drwxr-xr-x. 5 root root   4096 Jan  7 11:53 inst
drwxr-xr-x. 3 root root   4096 Jan  7 11:53 l
-rw-r--r--. 1 root root    352 Jan  7 11:53 lib.cpp
-rw-r--r--. 1 root root    636 Jan  7 11:53 lib.h
-rw-r--r--. 1 root root    261 Jan  7 11:53 lib.lo
-rw-r--r--. 1 root root  60936 Jan  7 11:53 lib.o
drwxr-xr-x. 3 root root   4096 Jan  7 11:53 m
-rwxr-xr-x. 1 root root   7900 Jan  7 11:53 main
-rw-r--r--. 1 root root   2422 Jan  7 11:53 main.cpp
-rw-r--r--. 1 root root 103272 Jan  7 11:53 main.o
-rw-r--r--. 1 root root    370 Jan  7 11:53 module.cpp
-rw-r--r--. 1 root root    400 Jan  7 11:53 module.h
-rw-r--r--. 1 root root    270 Jan  7 11:53 module.lo
-rw-r--r--. 1 root root  60928 Jan  7 11:53 module.o
-rwxr-xr-x. 1 root root   1447 Jan  7 11:53 run
-rw-r--r--. 1 root root   7154 Jan  7 11:53 testsuite.log


soooo possibility that it's writing to a non existant directory or at least trying to perhaps?

testsuite:
  at_test_source=$at_job_dir/test-source

dazed and confused.

Comment 3 Bryce 2013-01-07 23:17:55 UTC
Comparing with a x86_64 build
-----------------------------

spinning through the log,.. this seems to be the relevant section for x86_64.
-------------------------------------------------------------------------------
./exceptions.at:381: $LIBTOOL --mode=link --tag=CXX $CXX $CXXFLAGS $LDFLAGS -o main$EXEEXT       main.$OBJEXT l/liba.la l/libcommon.la -dlopen m/module.la $LIBLTDL -export-dynamic
++ /root/rpmbuild/BUILD/libtool-2.4.2/libtool --mode=link --tag=CXX g++ -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Wl,-z,relro -o main main.o l/liba.la l/libcommon.la -dlopen m/module.la /root/rpmbuild/BUILD/libtool-2.4.2/tests/../libltdl/libltdlc.la -export-dynamic
stderr:
stdout:
libtool: link: rm -f .libs/main.nm .libs/main.nmS .libs/main.nmT
libtool: link: (cd .libs && gcc -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC -c -fno-builtin "mainS.c")
libtool: link: rm -f ".libs/mainS.c" ".libs/main.nm" ".libs/main.nmS" ".libs/main.nmT"
libtool: link: g++ -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Wl,-z -Wl,relro -o .libs/main main.o .libs/mainS.o -Wl,--export-dynamic  /root/rpmbuild/BUILD/libtool-2.4.2/libltdl/.libs/dlopen.a l/.libs/liba.so l/.libs/libcommon.so /root/rpmbuild/BUILD/libtool-2.4.2/tests/../libltdl/.libs/libltdlc.a -ldl -Wl,-rpath -Wl,/root/rpmbuild/BUILD/libtool-2.4.2/tests/testsuite.dir/104/inst/lib
++ lt_exe=./main
++ test -f ./main
++ lt_exe=./main
++ set +x
./exceptions.at:385: if $LIBTOOL --mode=execute -dlopen m/module.la "$lt_exe" ; then :; else lt_status=$?;                 test "X$host" != "X$build" && test -x "$lt_exe" && exit 77;     exit $lt_status; fi
++ /root/rpmbuild/BUILD/libtool-2.4.2/libtool --mode=execute -dlopen m/module.la ./main
++ :
stderr:
exceptions_in_prog
caught: exception in program
exceptions_in_lib
caught inside lib: exception in library
caught: exception from library
exceptions_in_module
caught inside module: exception in module
caught: exception from module
stdout:
++ set +x
./exceptions.at:387: $LIBTOOL --mode=install cp l/libcommon.la $libdir
-------------------------------------------------------------------------------

so the segv is most certainly not expected at all but it's being generated from the g++ executable. Fine,.. next up lets plug the g++ program into the debugger and see what on earth it thinks it's doing,.. heck this could well end up being a g++ bug and nothing to do with libtool at all.

Comment 4 Pavel Raiskup 2013-01-08 08:32:14 UTC
> so the segv is most certainly not expected at all but it's being generated
> from the g++ executable. Fine,.. next up lets plug the g++ program into the
> debugger and see what on earth it thinks it's doing,.. heck this could well
> end up being a g++ bug and nothing to do with libtool at all.

Firstly, I would go for stepping through compiled program './main' inside
'testsuite.dir/104'.

You are able to re-run the compiled main program by libtool:

    $ cd testsuite.dir/104
    $ libtool --mode=execute -dlopen inst/mod/module.la ./inst/bin/main

Which is pretty much the same like:

    $ LD_LIBRARY_PATH=inst/mod/ ./inst/bin/main

~~> And so, you are able to run:

    $ LD_LIBRARY_PATH=inst/mod/ gdb ./inst/bin/main

Pavel

Comment 5 Bryce 2013-01-08 15:27:13 UTC
++ at_fn_check_prepare_dynamic 'if /builddir/build/BUILD/libtool-2.4.2/libtool --mode=execute -dlopen m/module.la "./main" ; then :; else lt_status=0;             test "Xsparc64-redhat-linux-gnu" != "Xsparc64-redhat-linux-gnu" && test -x "./main" && exit 77;         exit ; fi' exceptions.at:385
++ case $1 in
++ at_fn_check_prepare_trace exceptions.at:385
++ printf '%s\n' exceptions.at:385
++ at_check_trace=:
++ at_check_filter=:
++ :
++ :
++ at_status=139
++ at_failed=false
++ :
++ echo stderr:
stderr:
++ cat /builddir/build/BUILD/libtool-2.4.2/tests/testsuite.dir/at-groups/104/stderr
++ :
++ /builddir/build/BUILD/libtool-2.4.2/libtool --mode=execute -dlopen m/module.la ./main
exceptions_in_prog
/builddir/build/BUILD/libtool-2.4.2/tests/testsuite.dir/at-groups/104/test-source: line 565: 61893 Segmentation fault      (core dumped) $LIBTOOL --mode=execute -dlopen m/module.la "$lt_exe"
++ lt_status=139
-------------------------------------------------------------------------------

This eventually boils down to
[mockbuild@localhost 104]$  /builddir/build/BUILD/libtool-2.4.2/libtool --verbose --mode=execute -dlopen m/module.la ./.libs/lt-main
exceptions_in_prog
Segmentation fault (core dumped)


[mockbuild@localhost 104]$ gdb ./.libs/lt-main
(gdb) set environment LD_LIBRARY_PATH=m
(gdb) run
exceptions_in_prog

Program received signal SIGSEGV, Segmentation fault.
0xfffff8010061a558 in __frame_dummy_init_array_entry () from /lib64/libstdc++.so.6
(gdb) where
#0  0xfffff8010061a558 in __frame_dummy_init_array_entry () from /lib64/libstdc++.so.6
#1  0xfffff80100490988 in __cxxabiv1::__cxa_get_globals ()
    at ../../../../libstdc++-v3/libsupc++/eh_globals.cc:63
#2  0xfffff801004907cc in std::uncaught_exception ()
    at ../../../../libstdc++-v3/libsupc++/eh_catch.cc:136
#3  0xfffff801004ccbe4 in ~sentry (this=0x7fefffff1b0, __in_chrg=<optimized out>)
    at /usr/src/debug/gcc-4.7.2-20121109/obj-sparc64-redhat-linux/sparc64-redhat-linux/libstdc++-v3/include/ostream:429
#4  std::__ostream_insert<char, std::char_traits<char> > (__out=..., __s=<optimized out>, 
    __n=<optimized out>)
    at /usr/src/debug/gcc-4.7.2-20121109/obj-sparc64-redhat-linux/sparc64-redhat-linux/libstdc++-v3/include/bits/ostream_insert.h:112
#5  0x000000000010321c in operator<< <std::char_traits<char> > (
    __s=0x1085f8 "exceptions_in_prog\n", __out=...)
    at /usr/lib/gcc/sparc64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/ostream:533
#6  exceptions_in_prog () at main.cpp:30
#7  0x0000000000102e78 in main () at main.cpp:120

-------------------------------------------------------------------------------
Lets read that in order with some program text around it that might make some better sense:

#7  0x0000000000102e78 in main () at main.cpp:120
(gdb) list
115     int main (void)
116     {
117
118       LTDL_SET_PRELOADED_SYMBOLS();
119
120       if (exceptions_in_prog ())
121         return 1;
122       if (exceptions_in_lib ())
123         return 1;
124       if (exceptions_in_module ())

#6  exceptions_in_prog () at main.cpp:30
(gdb) list
25        return 0;
26      }
27
28      int exceptions_in_prog (void)
29      {
30        std::cerr << "exceptions_in_prog\n";
31        try {
32          foo ();
33        }
34        catch (exc e) {

#5  0x000000000010321c in operator<< <std::char_traits<char> > (
    __s=0x1085f8 "exceptions_in_prog\n", __out=...)
    at /usr/lib/gcc/sparc64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/ostream:533
533             __ostream_insert(__out, __s,
(gdb) list
528         operator<<(basic_ostream<char, _Traits>& __out, const char* __s)
529         {
530           if (!__s)
531             __out.setstate(ios_base::badbit);
532           else
533             __ostream_insert(__out, __s,
534                              static_cast<streamsize>(_Traits::length(__s)));
535           return __out;
536         }
537

(gdb) down
#4  std::__ostream_insert<char, std::char_traits<char> > (__out=..., __s=<optimized out>,
    __n=<optimized out>)
    at /usr/src/debug/gcc-4.7.2-20121109/obj-sparc64-redhat-linux/sparc64-redhat-linux/libstdc++-v3/include/bits/ostream_insert.h:112
112           return __out;
(gdb) list
107                   __throw_exception_again;
108                 }
109               __catch(...)
110                 { __out._M_setstate(__ios_base::badbit); }
111             }
112           return __out;
113         }
114
115       // Inhibit implicit instantiations for required instantiations,
116       // which are defined via explicit instantiations elsewhere.

#3  0xfffff801004ccbe4 in ~sentry (this=0x7fefffff1b0, __in_chrg=<optimized out>)
    at /usr/src/debug/gcc-4.7.2-20121109/obj-sparc64-redhat-linux/sparc64-redhat-linux/libstdc++-v3/include/ostream:429
429             if (bool(_M_os.flags() & ios_base::unitbuf) && !uncaught_exception())
(gdb) list
424            *  @c flush() on the output stream.
425           */
426           ~sentry()
427           {
428             // XXX MT
429             if (bool(_M_os.flags() & ios_base::unitbuf) && !uncaught_exception())
430               {
431                 // Can't call flush directly or else will get into recursive lock.
432                 if (_M_os.rdbuf() && _M_os.rdbuf()->pubsync() == -1)
433                   _M_os.setstate(ios_base::badbit);

#2  0xfffff801004907cc in std::uncaught_exception ()
    at ../../../../libstdc++-v3/libsupc++/eh_catch.cc:136
136       __cxa_eh_globals *globals = __cxa_get_globals ();
(gdb) list
131
132
133     bool
134     std::uncaught_exception() throw()
135     {
136       __cxa_eh_globals *globals = __cxa_get_globals ();
137       return globals->uncaughtExceptions != 0;
138     }

#1  0xfffff80100490988 in __cxxabiv1::__cxa_get_globals ()
    at ../../../../libstdc++-v3/libsupc++/eh_globals.cc:63
63      { return get_global(); }
(gdb) list
58      __cxxabiv1::__cxa_get_globals_fast() _GLIBCXX_NOTHROW
59      { return get_global(); }
60
61      extern "C" __cxa_eh_globals*
62      __cxxabiv1::__cxa_get_globals() _GLIBCXX_NOTHROW
63      { return get_global(); }
64
65
66      #else
67

#0  0xfffff8010061a558 in __frame_dummy_init_array_entry () from /lib64/libstdc++.so.6
(gdb) list
68      // Single-threaded fallback buffer.
69      static __cxa_eh_globals eh_globals;
70
71      #if __GTHREADS
72
73      static void
74      eh_globals_dtor(void* ptr)
75      {
76        if (ptr)
77          {

Umm,.. this is looking like a g++ bug and nothing to do with libtool, though poor libtool gets the blame since it's test program exposes it. Unfortunately my g++ knowledge extends only as far a spelling it and I tend to get rather blind when too many '__' and ':' chars are present. Also the gcc-*debuginfo* packages don't preserve MACRO definitions without -g3 so some prior internal knowledge of the compiler is required.

Outside of that, I suspect libtool is perfectly fine, I'l just have to drop the 104 and 115 tests when the architecture is sparc64 (possibly all of sparc)

This bug should probably be reassigned to gcc

Phil
=--=

Comment 6 Pavel Raiskup 2013-01-09 08:09:50 UTC
> Outside of that, I suspect libtool is perfectly fine, I'l just have to
> drop the 104 and 115 tests when the architecture is sparc64 (possibly
> all of sparc)
>
> This bug should probably be reassigned to gcc

It really seems that the problem is outside of libtool, but it is quite
difficult to say that 'gcc' is guilty.

The reproducer would be:

  | $ cat main.cpp
  | #include <iostream>
  | int main()
  | {
  |     std::cerr << "we are able to write to stderr\n";
  | }
  | $ g++ main.cpp
  | $ ./a.out
  | we are able to write to stderr

If this does not work for you, libtool is innocent here.

Pavel

Comment 7 Bryce 2013-01-09 08:23:19 UTC
bash-4.2# g++ test.c
bash-4.2# ./a.out
we are able to write to stderr
Segmentation fault (core dumped)

I'd be happy to say libtool is innocent, it's simply showing up a weakness in g++ that needs attention by the compiler/libstdc++ folk

Tracking this externally now in http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55909

Sorry for wasting your time with this,.. (just when I originally hit it I couldn't make heads of tails of what the testsuite was trying to do.

Phil
=--=

Comment 8 Pavel Raiskup 2013-01-09 08:30:52 UTC
(In reply to comment #7)

> [..] just when I originally hit it I couldn't make heads of tails of
> what the testsuite was trying to do.

Ok, np, closing NOTABUG.

Pavel

Comment 9 Bryce 2013-01-13 13:02:38 UTC
Just as a followup, it turns out this was all caused by glibc not having TLS support compiled in. For whatever reason the glibc configure script decided when it was being rebuilt that tls didn't exist even though it was. This is resolved by forcing '--with-tls' to the glibc configure

I guess a non zero result from `nm %{_lib}/ld-linux.so* | grep -c __tls_get_addr` would have been a way to flag it.. oh well, live and learn/look foolish


Note You need to log in before you can comment on or make changes to this bug.