# # Submitted-By: Marc Kleine-Budde, 2007-04-04 # Committed-By: Marc Kleine-Budde # # Error: # # Corrent Thumb interworking support is broken in gcc-4.1.x # # State: # # This patch is from # http://www.openembedded.org/repo/org.openembedded.dev/packages/gcc/gcc-4.1.2/arm-thumb.patch # Wed Apr 4 16:49:30 CEST 2007 # --- # gcc/config/arm/lib1funcs.asm | 18 +++++++++++++++++- # gcc/config/arm/t-linux | 1 + # 2 files changed, 18 insertions(+), 1 deletion(-) # Index: gcc-4.1.2/gcc/config/arm/lib1funcs.asm =================================================================== --- gcc-4.1.2.orig/gcc/config/arm/lib1funcs.asm +++ gcc-4.1.2/gcc/config/arm/lib1funcs.asm @@ -995,10 +995,24 @@ LSYM(Lover12): .code 32 FUNC_START div0 +#if ! defined __thumb__ stmfd sp!, {r1, lr} mov r0, #SIGFPE bl SYM(raise) __PLT__ RETLDM r1 +#else + push {r1, lr} + mov r0, #SIGFPE + bl SYM(raise) __PLT__ +#if __ARM_ARCH__ > 4 + pop {r1, pc} +#else + @ on 4T that won't work + pop {r1} + pop {r3} + bx r3 +#endif +#endif FUNC_END div0 @@ -1141,11 +1155,12 @@ LSYM(Lover12): code here switches to the correct mode before executing the function. */ .text - .align 0 + .align 1 .force_thumb .macro call_via register THUMB_FUNC_START _call_via_\register + .hidden SYM (_call_via_\register) bx \register nop @@ -1242,6 +1257,7 @@ _arm_return_r11: .code 16 THUMB_FUNC_START _interwork_call_via_\register + .hidden SYM (_interwork_call_via_\register) bx pc nop Index: gcc-4.1.2/gcc/config/arm/t-linux =================================================================== --- gcc-4.1.2.orig/gcc/config/arm/t-linux +++ gcc-4.1.2/gcc/config/arm/t-linux @@ -7,6 +7,7 @@ LIB1ASMSRC = arm/lib1funcs.asm LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \ _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \ _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \ + _call_via_rX \ _fixsfsi _fixunssfsi _floatdidf _floatdisf # MULTILIB_OPTIONS = mhard-float/msoft-float