diff options
Diffstat (limited to 'meta/recipes-core/eglibc/eglibc-2.13/armv4t-interworking.patch')
-rw-r--r-- | meta/recipes-core/eglibc/eglibc-2.13/armv4t-interworking.patch | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/meta/recipes-core/eglibc/eglibc-2.13/armv4t-interworking.patch b/meta/recipes-core/eglibc/eglibc-2.13/armv4t-interworking.patch new file mode 100644 index 0000000000..945a8ff687 --- /dev/null +++ b/meta/recipes-core/eglibc/eglibc-2.13/armv4t-interworking.patch | |||
@@ -0,0 +1,82 @@ | |||
1 | Needed to support ARMv4t machines | ||
2 | |||
3 | Upstream-status: Pending | ||
4 | |||
5 | Index: libc/ports/sysdeps/arm/memcpy.S | ||
6 | =================================================================== | ||
7 | --- libc.orig/ports/sysdeps/arm/memcpy.S 2009-09-03 16:12:00.000000000 -0700 | ||
8 | +++ libc/ports/sysdeps/arm/memcpy.S 2009-10-28 12:51:22.000000000 -0700 | ||
9 | @@ -130,7 +130,12 @@ ENTRY(memcpy) | ||
10 | strcsb r4, [r0], #1 | ||
11 | strcsb ip, [r0] | ||
12 | |||
13 | +#if defined (__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__) | ||
14 | + ldmfd sp!, {r0, r4, lr} | ||
15 | + bx lr | ||
16 | +#else | ||
17 | ldmfd sp!, {r0, r4, pc} | ||
18 | +#endif | ||
19 | |||
20 | 9: rsb ip, ip, #4 | ||
21 | cmp ip, #2 | ||
22 | Index: libc/ports/sysdeps/arm/memmove.S | ||
23 | =================================================================== | ||
24 | --- libc.orig/ports/sysdeps/arm/memmove.S 2009-09-03 16:12:00.000000000 -0700 | ||
25 | +++ libc/ports/sysdeps/arm/memmove.S 2009-10-28 12:51:22.000000000 -0700 | ||
26 | @@ -144,7 +144,12 @@ ENTRY(memmove) | ||
27 | strneb r3, [r0, #-1]! | ||
28 | strcsb r4, [r0, #-1]! | ||
29 | strcsb ip, [r0, #-1] | ||
30 | +#if defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__) | ||
31 | + ldmfd sp!, {r0, r4, lr} | ||
32 | + bx lr | ||
33 | +#else | ||
34 | ldmfd sp!, {r0, r4, pc} | ||
35 | +#endif | ||
36 | |||
37 | 9: cmp ip, #2 | ||
38 | ldrgtb r3, [r1, #-1]! | ||
39 | Index: libc/ports/sysdeps/unix/sysv/linux/arm/clone.S | ||
40 | =================================================================== | ||
41 | --- libc.orig/ports/sysdeps/unix/sysv/linux/arm/clone.S 2009-09-03 16:12:04.000000000 -0700 | ||
42 | +++ libc/ports/sysdeps/unix/sysv/linux/arm/clone.S 2009-10-28 12:51:22.000000000 -0700 | ||
43 | @@ -96,8 +96,14 @@ ENTRY(__clone) | ||
44 | #endif | ||
45 | @ pick the function arg and call address off the stack and execute | ||
46 | ldr r0, [sp, #4] | ||
47 | +#if defined(__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__) | ||
48 | + ldr ip, [sp], #8 | ||
49 | + mov lr, pc | ||
50 | + bx ip | ||
51 | +#else | ||
52 | mov lr, pc | ||
53 | ldr pc, [sp], #8 | ||
54 | +#endif | ||
55 | |||
56 | @ and we are done, passing the return value through r0 | ||
57 | b PLTJMP(HIDDEN_JUMPTARGET(_exit)) | ||
58 | Index: libc/ports/sysdeps/unix/sysv/linux/arm/sysdep.h | ||
59 | =================================================================== | ||
60 | --- libc.orig/ports/sysdeps/unix/sysv/linux/arm/sysdep.h 2009-09-16 13:58:18.000000000 +0100 | ||
61 | +++ libc/ports/sysdeps/unix/sysv/linux/arm/sysdep.h 2009-11-03 19:17:16.000000000 +0000 | ||
62 | @@ -129,6 +129,11 @@ | ||
63 | DO_RET(lr); \ | ||
64 | 1: .word C_SYMBOL_NAME(rtld_errno) - 0b - 8; | ||
65 | # else | ||
66 | +#if defined(__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__) | ||
67 | +#define POP_PC ldr lr, [sp], #4; bx lr | ||
68 | +#else | ||
69 | +#define POP_PC ldr pc, [sp], #4 | ||
70 | +#endif | ||
71 | # define SYSCALL_ERROR_HANDLER \ | ||
72 | __local_syscall_error: \ | ||
73 | str lr, [sp, #-4]!; \ | ||
74 | @@ -138,7 +143,7 @@ | ||
75 | rsb r1, r1, #0; \ | ||
76 | str r1, [r0]; \ | ||
77 | mvn r0, #0; \ | ||
78 | - ldr pc, [sp], #4; | ||
79 | + POP_PC; | ||
80 | # endif | ||
81 | #else | ||
82 | # define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */ | ||