--- libc/ports/sysdeps/arm/memcpy.S~ 2006-10-31 17:07:54.000000000 +0000 +++ libc/ports/sysdeps/arm/memcpy.S 2008-10-24 11:09:34.000000000 +0100 @@ -130,7 +130,12 @@ strcsb r4, [r0], #1 strcsb ip, [r0] +#if defined (__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__) + ldmfd sp!, {r0, r4, lr} + bx lr +#else ldmfd sp!, {r0, r4, pc} +#endif 9: rsb ip, ip, #4 cmp ip, #2 --- libc/ports/sysdeps/arm/memmove.S~ 2006-10-31 17:07:54.000000000 +0000 +++ libc/ports/sysdeps/arm/memmove.S 2008-10-24 11:09:44.000000000 +0100 @@ -140,7 +140,12 @@ strneb r3, [r0, #-1]! strcsb r4, [r0, #-1]! strcsb ip, [r0, #-1] +#if defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__) + ldmfd sp!, {r0, r4, lr} + bx lr +#else ldmfd sp!, {r0, r4, pc} +#endif 9: cmp ip, #2 ldrgtb r3, [r1, #-1]! --- libc/ports/sysdeps/unix/sysv/linux/arm/clone.S~ 2005-11-16 19:03:42.000000000 +0000 +++ libc/ports/sysdeps/unix/sysv/linux/arm/clone.S 2008-10-24 11:11:05.000000000 +0100 @@ -96,8 +96,14 @@ #endif @ pick the function arg and call address off the stack and execute ldr r0, [sp, #4] +#if defined(__ARM_ARCH_V4T__) && defined(__THUMB_INTERWORK__) + ldr ip, [sp], #8 + mov lr, pc + bx ip +#else mov lr, pc ldr pc, [sp], #8 +#endif @ and we are done, passing the return value through r0 b PLTJMP(_exit)