busybox segfault in __uClibc_main
Linh Dang
linhd at nortel.com
Tue Dec 6 16:40:36 UTC 2005
Joakim Tjernlund <joakim.tjernlund at transmode.se> wrote:
>> Christopher, thanx for the hints. Rob, I think I found the problem.
>> I made the following changes and it works (for me!):
>>
>>
>> --- uClibc-0.9.28.orig/libc/sysdeps/linux/powerpc/crt1.S
>> 2005-12-05 21:19:20.000000000 -0500
>> +++ uClibc-0.9.28/libc/sysdeps/linux/powerpc/crt1.S
>> 2005-12-05 21:19:09.000000000 -0500
>> @@ -61,6 +61,10 @@ _start:
>> /* find argv one word offset from the stack pointer */
>> addi r5,r9,4
>> mr r8,r7 /* Pass _dl_fini from ldso or NULL if
>> statically linked */
>> + mr. r4,r4 /* abi said top of stack must be NULL */
>> + beq from_ldso
>> + li r8,0
>> +from_ldso:
>> /* Ok, now run uClibc's main() -- shouldn't return */
>> #ifdef __PIC__
>> lwz r6,_init at got(r31)
>
> uh, this looks strange, I checked in 2.4 that linux cleared all
> relevant registers(r7 in this case) before calling user space. Why
> is this not true anymore in 2.6? hmm, I can run 2.6.15-rc1 here so I
> think you kernel is broken.
I run vanilla 2.6.14 and I dont think it's broken.
>
> Anyhow this patch is wrong and won't work for the non static case,
> r8 will always be cleared and thus no destructors will be executed
> during exit().
Did you test it? it works for me both static and dynamic (i.e
rtld_fini got called in a dynamic linked prog)
I think you mis-read the patch.
Regards
--
Linh Dang
More information about the uClibc
mailing list