Segfault of executables with shared libraries.

Carmelo Amoroso carmelo73 at gmail.com
Fri Feb 27 19:58:27 UTC 2009


Colin Whittaker wrote:
> Colin Whittaker wrote:
>> André Goddard Rosa wrote:
>>> On Thu, Feb 26, 2009 at 4:45 PM, Colin Whittaker
>>> <colinw at occamnetworks.com <mailto:colinw at occamnetworks.com>> wrote:
>>>
>>>     Hi, I'm new here. I searched and found a similar thread that
>>>     didn't seem to get resolved. Any help would be grand.. :-)
>>>
>>>     I'm trying to build a cross tool chain for mips using buildroot.
>>>     uClibc 0.9.29
>>>     gcc 4.2.3
>>>     binutils 2.18
>>>     Kernel headers 2.6.21.5
>>>
>>>     Everything builds fine and my target system builds just fine.
>>>     Kernel builds and runs just fine. Only problem:
>>>     All the executables that load shared libraries segfault immediately.
>>>     This was most difficult to find since init(busybox) was
>>>     segfaulting, but it shows nothing. Once I built it with -static
>>>     it runs.
>>>
>>>
>>> Hi!
>>>
>>>      Are you compiling it with both -rdynamic and -fPIC? Which
>>> compiler flags do you use? Can you provide an example code?
>>>
>>>  
>>> -- 
>>> []s,
>>> André Goddard
>> No. I'm using no flags in this example:
>> # cat test.c
>> #include <unistd.h>
>>
>> int main( int argc, char **argv )
>> {
>>         while(1) {
>>                 write( 0, "Hello world!\n", 13 );
>>         }
>> }
>> #
>> # mips-linux-gcc -o test test.c
>> #
>>
>> On the target, I just get
>> # ./test
>> Segmentation fault
>> #
>>
>> mips-linux-objdump  shows that NULL Program Header in this application
>> too.
>> I will try to get gdb to build with -static and see if I can trace
>> where it is crashing.
>>
>> BTW, tried the other binutils, 2.18.50.0.1 with the same results.
>>
>> GDB seems unable to debug this as well.
>> I built gdb with static libraries and tried to debug test.c
>> I gets the Segmentation fault, and dumps out of gdb....weird I thought
>> gdb was suppose to catch these things..
>> # gdb test
>> GNU gdb 6.8
>> Copyright (C) 2008 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 "mips-linux"...
>> (gdb) l
>> warning: Source file is more recent than executable.
>> 1       #include <unistd.h>
>> 2      
>> 3       int main( int argc, char **argv )
>> 4       {
>> 5               while(1) {
>> 6                       write( 0, "Hello world!\n", 13 );
>> 7               }
>> 8       }
>> (gdb) b 3
>> Breakpoint 1 at 0x4005e0: file test.c, line 3.
>> (gdb) run
>> Starting program: /test
>> Segmentation fault
>> #
>>
>> Colin..
>>
> Tried strace, (built with static libs)
> # ./strace ./test
> execve("./test", ["./test"], [/* 9 vars */]) = 0
> --- SIGSEGV (Segmentation fault) @ 0 (0) ---
> +++ killed by SIGSEGV +++
> #
> 
> Colin..
> 
Try enabling debug early support into dynamic linker and run again.
Just to see if it is failing in the dynamic linker or in the application.
I suggest to build uclibc with full debug symbols too and start a real debuggging session
with gdb.
I'd suggest to set bp in __uClibc_main (unless you are failing before entering in this
function), and then go step by step.

I successfully debugged the ld.so in the past, so it is not impossible.

Carmelo
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> uClibc mailing list
> uClibc at uclibc.org
> http://lists.busybox.net/mailman/listinfo/uclibc



More information about the uClibc mailing list