|
View:
New views
4 Messages
—
Rating Filter:
Alert me
|
|
|
fix ARMv4T interworkingA few functions were not interworking-safe when compiled for ARMv4T.
Here's a patch. OK to commit? p. [interwork.diff] 2009-11-04 Philip Blundell <philb@...> * sysdeps/unix/sysv/linux/arm/clone.S: Support V4T interworking. * sysdeps/unix/sysv/linux/arm/sysdep.h (__local_syscall_error): Likewise. * sysdeps/arm/memcpy.S: Likewise. * sysdeps/arm/memmove.S: Likewise. diff --git a/sysdeps/arm/memcpy.S b/sysdeps/arm/memcpy.S index 61cf33c..7f669a6 100644 --- a/sysdeps/arm/memcpy.S +++ b/sysdeps/arm/memcpy.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2006 Free Software Foundation, Inc. +/* Copyright (C) 2006, 2009 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by MontaVista Software, Inc. (written by Nicolas Pitre) @@ -130,7 +130,12 @@ ENTRY(memcpy) 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 diff --git a/sysdeps/arm/memmove.S b/sysdeps/arm/memmove.S index eda1bcc..9c9b234 100644 --- a/sysdeps/arm/memmove.S +++ b/sysdeps/arm/memmove.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2006, 2008 Free Software Foundation, Inc. +/* Copyright (C) 2006, 2008, 2009 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by MontaVista Software, Inc. (written by Nicolas Pitre) @@ -144,7 +144,12 @@ ENTRY(memmove) 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]! diff --git a/sysdeps/unix/sysv/linux/arm/clone.S b/sysdeps/unix/sysv/linux/arm/clone.S index cfd2e7e..1a19f5b 100644 --- a/sysdeps/unix/sysv/linux/arm/clone.S +++ b/sysdeps/unix/sysv/linux/arm/clone.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998, 1999, 2002, 2005, 2008 +/* Copyright (C) 1996, 1997, 1998, 1999, 2002, 2005, 2008, 2009 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Pat Beirne <patb@...> @@ -96,8 +96,14 @@ ENTRY(__clone) #endif @ pick the function arg and call address off the stack and execute ldr r0, [sp, #4] +#if defined(__ARM_ARCH_4T__) && 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(HIDDEN_JUMPTARGET(_exit)) diff --git a/sysdeps/unix/sysv/linux/arm/sysdep.h b/sysdeps/unix/sysv/linux/arm/sysdep.h index 3d7fafc..3911aee 100644 --- a/sysdeps/unix/sysv/linux/arm/sysdep.h +++ b/sysdeps/unix/sysv/linux/arm/sysdep.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 93, 1995-2000, 2002, 2003, 2005, 2006 +/* Copyright (C) 1992, 93, 1995-2000, 2002, 2003, 2005, 2006, 2009 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper, <drepper@...>, August 1995. @@ -129,6 +129,11 @@ __local_syscall_error: \ 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 @@ __local_syscall_error: \ 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. */ |
|
|
Re: fix ARMv4T interworkingOn Wed, 4 Nov 2009, Phil Blundell wrote:
> A few functions were not interworking-safe when compiled for ARMv4T. > Here's a patch. OK to commit? OK (though I don't think you need approval for ARM changes). -- Joseph S. Myers joseph@... |
|
|
Re: fix ARMv4T interworkingOn Thu, Nov 5, 2009 at 8:06 PM, Joseph S. Myers <joseph@...> wrote:
> On Wed, 4 Nov 2009, Phil Blundell wrote: > >> A few functions were not interworking-safe when compiled for ARMv4T. >> Here's a patch. OK to commit? > > OK (though I don't think you need approval for ARM changes). Phil doesn't need approval for ARM changes. Please see: http://sourceware.org/glibc/wiki/MAINTAINERS Cheers, Carlos. |
|
|
Re: fix ARMv4T interworkingOn Thu, 2009-11-05 at 21:14 -0500, Carlos O'Donell wrote:
> On Thu, Nov 5, 2009 at 8:06 PM, Joseph S. Myers <joseph@...> wrote: > > On Wed, 4 Nov 2009, Phil Blundell wrote: > > > >> A few functions were not interworking-safe when compiled for ARMv4T. > >> Here's a patch. OK to commit? > > > > OK (though I don't think you need approval for ARM changes). > > Phil doesn't need approval for ARM changes. > > Please see: > http://sourceware.org/glibc/wiki/MAINTAINERS Oh right, heh. I wasn't sure quite what the situation was with that. I've checked in these changes now, anyway. Thanks. :-) p. |
| Free embeddable forum powered by Nabble | Forum Help |