gcc 4.4.0 arm/thumb interwork _from_arm bad stub generation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,  I hope I'm writting to the right list,

    I'm having a problem with gcc 4.4.0 cross compiler from IA32 to
ARM7TDMI in embedded
environments (newlib) with ARM/THUMB interworking.

    Everything has worked fine in my tests until I tried to make use
of the libc, after
doing that, some parts of the   "_from_arm" generated stubs for
interworking got broken/
overwritten/ ?? at linking time. Also the function attributes change
from "thunk" to "noreturn".

    But it doesn't happen to all of the _from_arm stubs, only some of them.

    If you have any hints about where to look to solve this it or whom
to ask , that would be great.

Thanks in advance,
Miguel Angel

Correctly generated (from main.elf)

.text:00003CA4             ; =============== S U B R O U T I N E
=======================================
.text:00003CA4
.text:00003CA4             ; Attributes: thunk
.text:00003CA4
.text:00003CA4             __memcpy_from_arm                       ;
CODE XREF: HandleClassRequest+38 p
.text:00003CA4 00 C0 9F E5                 LDR     R12, =(memcpy+1)
.text:00003CA8 1C FF 2F E1                 BX      R12
.text:00003CA8             ;
---------------------------------------------------------------------------
.text:00003CAC 25 3C 00 00 off_3CAC        DCD memcpy+1            ;
DATA XREF: __memcpy_from_arm r
.text:00003CAC             ; End of function __memcpy_from_arm
.text:00003CAC
.text:00003CB0
.text:00003CB0             ; =============== S U B R O U T I N E
=======================================
.text:00003CB0
.text:00003CB0             ; Attributes: thunk
.text:00003CB0
.text:00003CB0             ____umodsi3_from_arm                    ;
CODE XREF: print_integer:loc_383C p
.text:00003CB0 00 C0 9F E5                 LDR     R12, =(__umodsi3+1)
.text:00003CB4 1C FF 2F E1                 BX      R12
.text:00003CB4             ;
---------------------------------------------------------------------------
.text:00003CB8 59 3B 00 00 off_3CB8        DCD __umodsi3+1         ;
DATA XREF: ____umodsi3_from_arm r
.text:00003CB8             ; End of function ____umodsi3_from_arm
.text:00003CB8
.text:00003CBC
.text:00003CBC             ; =============== S U B R O U T I N E
=======================================
.text:00003CBC
.text:00003CBC             ; Attributes: thunk
.text:00003CBC
.text:00003CBC             ____udivsi3_from_arm                    ;
CODE XREF: print_integer+AC p
.text:00003CBC 00 C0 9F E5                 LDR     R12, =(__udivsi3+1)
.text:00003CC0 1C FF 2F E1                 BX      R12
.text:00003CC0             ;
---------------------------------------------------------------------------
.text:00003CC4 CD 3A 00 00 off_3CC4        DCD __udivsi3+1         ;
DATA XREF: ____udivsi3_from_arm r
.text:00003CC4             ; End of function ____udivsi3_from_arm
.text:00003CC4


Incorrectly generated (from main.elf)
.text:0000514C             ; =============== S U B R O U T I N E
=======================================
.text:0000514C
.text:0000514C             ; Attributes: noreturn
.text:0000514C
.text:0000514C             __memcpy_from_arm                       ;
CODE XREF: HandleClassRequest+38 p
.text:0000514C 07 00 A0 01                 MOVEQ   R0, R7
.text:00005150 0A 20 A0 03                 MOVEQ   R2, #0xA
.text:00005154 01 30 A0 03                 MOVEQ   R3, #1
.text:00005154             ; End of function __memcpy_from_arm
.text:00005154
.text:00005158
.text:00005158             ; =============== S U B R O U T I N E
=======================================
.text:00005158
.text:00005158             ; Attributes: noreturn
.text:00005158
.text:00005158             ____umodsi3_from_arm                    ;
CODE XREF: print_integer:loc_4CE4 p
.text:00005158 15 00 00 0A                 BEQ     0x51B4
.text:0000515C 78 00 53 E3                 CMP     R3, #0x78
.text:00005160 04 10 96 04                 LDREQ   R1, [R6],#4
.text:00005160             ; End of function ____umodsi3_from_arm
.text:00005160
.text:00005164
.text:00005164             ; =============== S U B R O U T I N E
=======================================
.text:00005164
.text:00005164             ; Attributes: noreturn
.text:00005164
.text:00005164             ____udivsi3_from_arm                    ;
CODE XREF: print_integer+AC p
.text:00005164 07 00 A0 01                 MOVEQ   R0, R7
.text:00005168 10 20 A0 03                 MOVEQ   R2, #0x10
.text:0000516C 0F 00 00 0A                 BEQ     0x51B0
.text:0000516C             ; End of function ____udivsi3_from_arm


-- 
Miguel Angel Ajo Pelayo
http://www.nbee.es
+34 91 120 1798
+34 636 52 25 69
skype: ajoajoajo

--
Miguel Angel Ajo Pelayo
http://www.nbee.es
+34 91 120 1798
+34 636 52 25 69
skype: ajoajoajo

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux