POWERPC g++ crash in __uClibc_main
Stefani Seibold
stefani at seibold.net
Mon Sep 20 07:02:13 UTC 2010
uclib is crashing in the __uClibc_main() executing a program compiled
with g++ and statical linked. A simple test application like
int main(void)
{
return 0;
}
compile with gcc as a "C" application will run without a problem, but
when this program will be compiled with g++ it will crash when executed:
"Program received signal SIGILL, Illegal instruction."
The problem is in the current git tree and also in 0.9.31 and 0.9.30.
Here is the shortened assembler output when single stepping through the
startup code:
0x100000fc <_start+0>: mr r9,r1
0x100000fc <_start+4>: rlwinm r1,r1,0,0,27
0x10000100 <_start+8>: lis r13,4100
0x10000104 <_start+12>: addi r13,r13,-19216
0x10000108 <_start+16>: li r0,0
0x1000010c <_start+20>: stwu r1,-16(r1)
0x10000110 <_start+24>: mtlr r0
0x10000114 <_start+28>: stw r0,0(r1)
Cannot access memory at address 0x0
0x1000011c <_start+36>: addi r5,r9,4
0x10000120 <_start+40>: mr r8,r3
0x10000124 <_start+44>: lis r6,4096
0x10000128 <_start+48>: addi r6,r6,212
0x1000012c <_start+52>: lis r7,4098
0x10000130 <_start+56>: addi r7,r7,-26376
0x10000134 <_start+60>: lis r3,4096
0x10000138 <_start+64>: addi r3,r3,768
0x1000013c <_start+68>: b 0x10015d30 <__uClibc_main>
0x10015d30 <__uClibc_main>: stwu r1,-176(r1)
0x10015d34 <__uClibc_main+4>: mflr r0
0x10015d38 <__uClibc_main+8>: lis r10,4099
0x10015d3c <__uClibc_main+12>: lis r11,4099
0x10015d40 <__uClibc_main+16>: stw r9,14192(r10)
0x10015d44 <__uClibc_main+20>: lis r9,4099
0x10015d48 <__uClibc_main+24>: stw r8,14208(r9)
0x10015d4c <__uClibc_main+28>: stw r0,180(r1)
0x10015d50 <__uClibc_main+32>: addi r0,r4,1
0x10015d54 <__uClibc_main+36>: rlwinm r0,r0,2,0,29
0x10015d58 <__uClibc_main+40>: stw r26,152(r1)
0x10015d5c <__uClibc_main+44>: mr r26,r7
0x10015d60 <__uClibc_main+48>: add r0,r5,r0
0x10015d64 <__uClibc_main+52>: stw r28,160(r1)
0x10015d68 <__uClibc_main+56>: mr r28,r6
0x10015d6c <__uClibc_main+60>: stw r29,164(r1)
0x10015d70 <__uClibc_main+64>: mr r29,r3
0x10015d74 <__uClibc_main+68>: stw r30,168(r1)
0x10015d78 <__uClibc_main+72>: mr r30,r4
0x10015d7c <__uClibc_main+76>: stw r31,172(r1)
0x10015d80 <__uClibc_main+80>: mr r31,r5
0x10015d84 <__uClibc_main+84>: stw r25,148(r1)
0x10015d88 <__uClibc_main+88>: stw r27,156(r1)
0x10015d8c <__uClibc_main+92>: stw r0,14196(r11)
0x10015d90 <__uClibc_main+96>: lwz r9,0(r5)
0x10015d94 <__uClibc_main+100>: cmpw cr7,r0,r9
0x10015d98 <__uClibc_main+104>: bne+ cr7,0x10015da8 <__uClibc_main+120>
0x10015da8 <__uClibc_main+120>: addi r3,r1,8
0x10015dac <__uClibc_main+124>: li r4,0
0x10015db0 <__uClibc_main+128>: li r5,120
0x10015db4 <__uClibc_main+132>: bl 0x10013184 <memset>
0x10015db8 <__uClibc_main+136>: lis r9,4099
0x10015dbc <__uClibc_main+140>: lwz r27,14196(r9)
<loop>
0x10015dc0 <__uClibc_main+144>: lwz r0,0(r27)
0x10015dc4 <__uClibc_main+148>: addi r27,r27,4
0x10015dc8 <__uClibc_main+152>: cmpwi cr7,r0,0
0x10015dcc <__uClibc_main+156>: bne+ cr7,0x10015dc0 <__uClibc_main+144>
</loop>
<loop>
0x10015dd0 <__uClibc_main+160>: addi r25,r1,8
0x10015dd4 <__uClibc_main+164>: b 0x10015df8 <__uClibc_main+200>
0x10015df8 <__uClibc_main+200>: lwz r3,0(r27)
0x10015dfc <__uClibc_main+204>: cmpwi cr7,r3,0
0x10015e00 <__uClibc_main+208>: bne+ cr7,0x10015dd8 <__uClibc_main+168>
0x10015dd8 <__uClibc_main+168>: cmplwi cr7,r3,14
0x10015ddc <__uClibc_main+172>: bgt+ cr7,0x10015df4 <__uClibc_main+196>
</loop>
<loop>
0x10015de0 <__uClibc_main+176>: rlwinm r3,r3,3,0,28
0x10015de4 <__uClibc_main+180>: mr r4,r27
0x10015de8 <__uClibc_main+184>: add r3,r25,r3
0x10015dec <__uClibc_main+188>: li r5,8
0x10015df0 <__uClibc_main+192>: bl 0x100130ec <memcpy>
0x10015df4 <__uClibc_main+196>: addi r27,r27,8
0x10015df8 <__uClibc_main+200>: lwz r3,0(r27)
0x10015dfc <__uClibc_main+204>: cmpwi cr7,r3,0
0x10015e00 <__uClibc_main+208>: bne+ cr7,0x10015dd8 <__uClibc_main+168>
0x10015dd8 <__uClibc_main+168>: cmplwi cr7,r3,14
0x10015ddc <__uClibc_main+172>: bgt+ cr7,0x10015df4 <__uClibc_main+196>
</loop>
0x10015e04 <__uClibc_main+212>: addi r3,r1,8
0x10015e08 <__uClibc_main+216>: bl 0x10018d7c <_dl_aux_init>
0x10015e0c <__uClibc_main+220>: bl 0x10015cc8 <__uClibc_init>
0x10015e10 <__uClibc_main+224>: lwz r0,60(r1)
0x10015e14 <__uClibc_main+228>: cmpwi cr7,r0,0
0x10015e18 <__uClibc_main+232>: bne- cr7,0x10015e20 <__uClibc_main+240>
0x10015e20 <__uClibc_main+240>: lwz r9,100(r1)
0x10015e24 <__uClibc_main+244>: cmpwi cr7,r9,-1
0x10015e28 <__uClibc_main+248>: lis r9,4099
0x10015e2c <__uClibc_main+252>: stw r0,14200(r9)
0x10015e30 <__uClibc_main+256>: bne+ cr7,0x10015e5c <__uClibc_main+300>
0x10015e5c <__uClibc_main+300>: lwz r0,100(r1)
0x10015e60 <__uClibc_main+304>: cmpwi cr7,r0,-1
0x10015e64 <__uClibc_main+308>: beq- cr7,0x10015eb4 <__uClibc_main+388>
0x10015e68 <__uClibc_main+312>: lwz r9,108(r1)
0x10015e6c <__uClibc_main+316>: cmpw cr7,r0,r9
0x10015e70 <__uClibc_main+320>: bne+ cr7,0x10015e84 <__uClibc_main+340>
0x10015e74 <__uClibc_main+324>: lwz r0,124(r1)
0x10015e78 <__uClibc_main+328>: lwz r9,116(r1)
0x10015e7c <__uClibc_main+332>: cmpw cr7,r9,r0
0x10015e80 <__uClibc_main+336>: beq- cr7,0x10015eb4 <__uClibc_main+388>
0x10015eb4 <__uClibc_main+388>: lwz r11,0(r31)
0x10015eb8 <__uClibc_main+392>: lis r9,4099
0x10015ebc <__uClibc_main+396>: lis r25,4099
0x10015ec0 <__uClibc_main+400>: addi r0,r9,-7396
0x10015ec4 <__uClibc_main+404>: addi r25,r25,-7396
0x10015ec8 <__uClibc_main+408>: lis r9,4099
0x10015ecc <__uClibc_main+412>: subf r0,r25,r0
0x10015ed0 <__uClibc_main+416>: stw r11,14096(r9)
0x10015ed4 <__uClibc_main+420>: lis r9,4099
0x10015ed8 <__uClibc_main+424>: li r27,0
0x10015edc <__uClibc_main+428>: stw r26,14204(r9)
0x10015ee0 <__uClibc_main+432>: srawi r26,r0,2
0x10015ee4 <__uClibc_main+436>: b 0x10015efc <__uClibc_main+460>
0x10015efc <__uClibc_main+460>: cmplw cr7,r27,r26
0x10015f00 <__uClibc_main+464>: blt+ cr7,0x10015ee8 <__uClibc_main+440>
0x10015f04 <__uClibc_main+468>: cmpwi cr7,r28,0
0x10015f08 <__uClibc_main+472>: beq- cr7,0x10015f14 <__uClibc_main+484>
0x10015f0c <__uClibc_main+476>: mtctr r28
0x10015f10 <__uClibc_main+480>: bctrl
Program received signal SIGILL, Illegal instruction.
0x10000000 in ?? ()
0x10000000: .long 0x7f454c46
One more information: It was necessary to build the cross compiler with
"--disable-tls", otherwise i will get the error:
libstdc++.so: undefined reference to `__tls_get_addr'
So i am currently unable to have C++, uClibc and thread local storage
support at the same time :-(
Any idea?
- Stefani
More information about the uClibc
mailing list