diff options
Diffstat (limited to 'recipes/eglibc/files')
-rw-r--r-- | recipes/eglibc/files/armv4t-interworking.patch | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/recipes/eglibc/files/armv4t-interworking.patch b/recipes/eglibc/files/armv4t-interworking.patch index 55ee8565d7..6ab306180c 100644 --- a/recipes/eglibc/files/armv4t-interworking.patch +++ b/recipes/eglibc/files/armv4t-interworking.patch @@ -40,7 +40,7 @@ Index: libc/ports/sysdeps/unix/sysv/linux/arm/clone.S #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__) ++#if defined(__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__) + ldr ip, [sp], #8 + mov lr, pc + bx ip @@ -51,3 +51,28 @@ Index: libc/ports/sysdeps/unix/sysv/linux/arm/clone.S @ and we are done, passing the return value through r0 b PLTJMP(HIDDEN_JUMPTARGET(_exit)) +Index: libc/ports/sysdeps/unix/sysv/linux/arm/sysdep.h +=================================================================== +--- libc.orig/ports/sysdeps/unix/sysv/linux/arm/sysdep.h 2009-09-16 13:58:18.000000000 +0100 ++++ libc/ports/sysdeps/unix/sysv/linux/arm/sysdep.h 2009-11-03 19:17:16.000000000 +0000 +@@ -129,6 +129,11 @@ + DO_RET(lr); \ + 1: .word C_SYMBOL_NAME(rtld_errno) - 0b - 8; + # else ++#if defined(__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__) ++#define POP_PC ldr lr, [sp], #4; bx lr ++#else ++#define POP_PC ldr pc, [sp], #4 ++#endif + # define SYSCALL_ERROR_HANDLER \ + __local_syscall_error: \ + str lr, [sp, #-4]!; \ +@@ -138,7 +143,7 @@ + rsb r1, r1, #0; \ + str r1, [r0]; \ + mvn r0, #0; \ +- ldr pc, [sp], #4; ++ POP_PC; + # endif + #else + # define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */ |