glibc-2.6.1: fix interworking for armv4t
authorPhilip Blundell <pb@mill.internal.reciva.com>
Sat, 25 Oct 2008 10:03:22 +0000 (11:03 +0100)
committerPhilip Blundell <pb@mill.internal.reciva.com>
Sat, 25 Oct 2008 10:03:22 +0000 (11:03 +0100)
packages/glibc/files/armv4t-interworking.patch [new file with mode: 0644]
packages/glibc/glibc_2.6.1.bb

diff --git a/packages/glibc/files/armv4t-interworking.patch b/packages/glibc/files/armv4t-interworking.patch
new file mode 100644 (file)
index 0000000..ce91ad6
--- /dev/null
@@ -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)
index c563a1f..1f72ff0 100644 (file)
@@ -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