diff options
author | joseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2009-11-11 01:44:15 +0000 |
---|---|---|
committer | joseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2009-11-11 01:44:15 +0000 |
commit | 77fbb4f297a9808e9fd2e73db18abbd7e00fc639 (patch) | |
tree | cb68c849518da6ce901bc6e0114bd35c39175d71 /ports/sysdeps/unix/sysv/linux/arm | |
parent | 85437c7924a18e38c94912459fde243ff9a30923 (diff) | |
download | eglibc2-77fbb4f297a9808e9fd2e73db18abbd7e00fc639.tar.gz |
Merge changes between r9190 and r9222 from /fsf/trunk.
git-svn-id: svn://svn.eglibc.org/trunk@9223 7b3dc134-2b1b-0410-93df-9e9f96275f8d
Diffstat (limited to 'ports/sysdeps/unix/sysv/linux/arm')
-rw-r--r-- | ports/sysdeps/unix/sysv/linux/arm/bits/fcntl.h | 4 | ||||
-rw-r--r-- | ports/sysdeps/unix/sysv/linux/arm/clone.S | 8 | ||||
-rw-r--r-- | ports/sysdeps/unix/sysv/linux/arm/sysdep.h | 9 |
3 files changed, 16 insertions, 5 deletions
diff --git a/ports/sysdeps/unix/sysv/linux/arm/bits/fcntl.h b/ports/sysdeps/unix/sysv/linux/arm/bits/fcntl.h index e5e70aab4..638890485 100644 --- a/ports/sysdeps/unix/sysv/linux/arm/bits/fcntl.h +++ b/ports/sysdeps/unix/sysv/linux/arm/bits/fcntl.h @@ -259,8 +259,8 @@ extern ssize_t tee (int __fdin, int __fdout, size_t __len, extern int fallocate (int __fd, int __mode, __off_t __offset, __off_t __len); # else # ifdef __REDIRECT -extern int __REDIRECT (fallocate, (int __fd, int __mode, __off_t __offset, - __off_t __len), +extern int __REDIRECT (fallocate, (int __fd, int __mode, __off64_t __offset, + __off64_t __len), fallocate64); # else # define fallocate fallocate64 diff --git a/ports/sysdeps/unix/sysv/linux/arm/clone.S b/ports/sysdeps/unix/sysv/linux/arm/clone.S index cfd2e7ef7..1a19f5b55 100644 --- a/ports/sysdeps/unix/sysv/linux/arm/clone.S +++ b/ports/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@corelcomputer.com> @@ -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/ports/sysdeps/unix/sysv/linux/arm/sysdep.h b/ports/sysdeps/unix/sysv/linux/arm/sysdep.h index 3d7fafcb6..3911aee62 100644 --- a/ports/sysdeps/unix/sysv/linux/arm/sysdep.h +++ b/ports/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@gnu.ai.mit.edu>, 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. */ |