Another data point from my experimentation:
Not many symbols from libunwind seem to make into my test binary using
static linking, and this seems to explain why the stacks are different in
shared and static.
If I instead link in the whole libunwind.a archive, like this:
unwind-whole: unwind.cpp
g++ $(CPPFLAGS) -o $@ unwind.cpp -Wl,--whole-archive
/home/mrabkin/unwind/lib/libunwind.a -Wl,--no-whole-archive
The behavior is the same as unwind-shared and I get the same crash -- it
seems to then use Unwind_RaiseException instead of the the libstdc++ throw
code.
Can you reproduce with the -Wl,--whole-archive or does it then run fine for
you like the shared version?
- Mark
On 2/15/08 5:40 PM, "Mark Rabkin" <[EMAIL PROTECTED]> wrote:
> I'm glad you can reproduce the static version!
>
> Here's as many relevant specs as I can think of:
>
> $ gcc -v
> Using built-in specs.
> Target: x86_64-redhat-linux
> Configured with: ../configure --prefix=/usr --mandir=/usr/share/man
> --infodir=/usr/share/info --enable-shared --enable-threads=posix
> --enable-checking=release --with-system-zlib --enable-__cxa_atexit
> --disable-libunwind-exceptions --enable-libgcj-multifile
> --enable-languages=c,c++,objc,java,f95,ada --enable-java-awt=gtk
> --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre
> --host=x86_64-redhat-linux
> Thread model: posix
> gcc version 4.0.1 20050727 (Red Hat 4.0.1-5)
>
> $ ls -l /lib64/libc-*
> -rwxr-xr-x 1 root root 1553232 May 30 2005 /lib64/libc-2.3.5.so*
>
> $ ls -l /usr/lib64/*c++*
> lrwxrwxrwx 1 root root 18 Sep 10 07:48 /usr/lib64/libstdc++.so.6 ->
> libstdc++.so.6.0.5*
> -rwxr-xr-x 1 root root 975736 Jul 27 2005 /usr/lib64/libstdc++.so.6.0.5*
>
> $ ldd unwind-shared
> libunwind.so.7 => /home/mrabkin/unwind/lib/libunwind.so.7
> (0x00002aaaaaaad000)
> libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003bd9500000)
> libm.so.6 => /lib64/libm.so.6 (0x0000003bd8d00000)
> libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003bd9800000)
> libc.so.6 => /lib64/libc.so.6 (0x0000003bd8800000)
> /lib64/ld-linux-x86-64.so.2 (0x0000003bd8600000)
>
> - Mark
>
> On 2/15/08 4:58 PM, "Arun Sharma" <[EMAIL PROTECTED]> wrote:
>
>> On Fri, Feb 15, 2008 at 4:25 PM, Mark Rabkin <[EMAIL PROTECTED]> wrote:
>>> $ gdb unwind
>>> Program received signal SIGABRT, Aborted.
>>>
>>> #0 0x0000003bd882f3b0 in raise () from /lib64/libc.so.6
>>> #1 0x0000003bd8830860 in abort () from /lib64/libc.so.6
>>> #2 0x0000003bd95bb8c1 in __cxa_get_globals () from
>>> /usr/lib64/libstdc++.so.6
>>> #3 0x0000003bd95bb9b4 in __cxa_get_globals () from
>>> /usr/lib64/libstdc++.so.6
>>> #4 0x0000003bd95bbd07 in __gxx_personality_v0 ()
>>> from /usr/lib64/libstdc++.so.6
>>> #5 0x000000000040100b in _Unwind_Resume (exception_object=0x517060)
>>> at unwind/unwind-internal.h:118
>>> #6 0x0000000000400e84 in throw_int () at unwind.cpp:7
>>> #7 0x0000000000400e98 in main (argc=1, argv=0x7ffffffcb818) at
>>> unwind.cpp:12
>>
>> I can reproduce this one.
>>
>>>
>>> $ ./unwind-shared
>>>
>>> Program received signal SIGSEGV, Segmentation fault.
>>> _x86_64_setcontext () at x86_64/setcontext.S:34
>>> 34 fldenv (%r8)
>>
>>
>> But not this one. Which version of gcc are you using?
>>
>> -Arun
>>
>
>
>
> _______________________________________________
> Libunwind-devel mailing list
> [email protected]
> http://lists.nongnu.org/mailman/listinfo/libunwind-devel
_______________________________________________
Libunwind-devel mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/libunwind-devel