diff options
author | Philip Blundell <pb@mill.internal.reciva.com> | 2008-10-25 11:03:22 +0100 |
---|---|---|
committer | Philip Blundell <pb@mill.internal.reciva.com> | 2008-10-25 11:03:22 +0100 |
commit | 0e578dfc600390132af6a4909f1e9f59952720e9 (patch) | |
tree | 7c6adb71583d31162cbbc4135eaab79a87540a72 /packages | |
parent | 7df20bae85a9883407b478dd7bad67fbf793d35c (diff) |
glibc-2.6.1: fix interworking for armv4t
Diffstat (limited to 'packages')
-rw-r--r-- | packages/glibc/files/armv4t-interworking.patch | 47 | ||||
-rw-r--r-- | packages/glibc/glibc_2.6.1.bb | 3 |
2 files changed, 49 insertions, 1 deletions
diff --git a/packages/glibc/files/armv4t-interworking.patch b/packages/glibc/files/armv4t-interworking.patch new file mode 100644 index 0000000000..ce91ad6530 --- /dev/null +++ b/packages/glibc/files/armv4t-interworking.patch @@ -0,0 +1,47 @@ +--- 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) diff --git a/packages/glibc/glibc_2.6.1.bb b/packages/glibc/glibc_2.6.1.bb index c563a1f389..1f72ff02e0 100644 --- a/packages/glibc/glibc_2.6.1.bb +++ b/packages/glibc/glibc_2.6.1.bb @@ -1,5 +1,5 @@ require glibc.inc -PR = "r13" +PR = "r14" PACKAGES_DYNAMIC = "libc6*" RPROVIDES_${PN}-dev = "libc6-dev virtual-libc-dev" @@ -57,6 +57,7 @@ SRC_URI = "\ file://glibc-2.6.1-use-short-for-fnstsw.patch;patch=1 \ file://glibc-use-isystem-include-fixed.patch;patch=1 \ file://glibc-arm-no-asm-page.patch;patch=1 \ + file://armv4t-interworking.patch;patch=1 \ " # Build fails on sh3 and sh4 without additional patches |