diff --git a/ChangeLog.arm b/ChangeLog.arm index b75bd860b4..bfb87aa2e0 100644 --- a/ChangeLog.arm +++ b/ChangeLog.arm @@ -1,3 +1,31 @@ +2012-05-19 Joseph Myers + + * sysdeps/unix/sysv/linux/arm/ftruncate64.c (kernel-features.h): + Don't include. + [__NR_ftruncate64]: Make code unconditional. + [!__NR_ftruncate64]: Remove conditional code. + [!__ASSUME_TRUNCATE64_SYSCALL]: Likewise. + * sysdeps/unix/sysv/linux/arm/mmap.S (kernel-features.h): Don't + include. + [__ASSUME_MMAP2_SYSCALL]: + Make code unconditional. + [!__ASSUME_MMAP2_SYSCALL]: Remove conditional code. + * sysdeps/unix/sysv/linux/arm/posix_fadvise64.c + (kernel-features.h): Don't include. + [__NR_arm_fadvise64_64]: Make code unconditional. + [!__ASSUME_FADVISE64_64_SYSCALL]: Remove conditional code. + * sysdeps/unix/sysv/linux/arm/truncate64.c (kernel-features.h): + Don't include. + [__NR_truncate64]: Make code unconditional. + [!__NR_truncate64]: Remove conditional code. + [!__ASSUME_TRUNCATE64_SYSCALL]: Likewise. + * sysdeps/unix/sysv/linux/arm/vfork.S (kernel-features.h): Don't + include. + [__NR_vfork]: Make code unconditional. + [__ASSUME_VFORK_SYSCALL]: Likewise. + [!__ASSUME_VFORK_SYSCALL]: Remove conditional code. + [!__NR_vfork]: Likewise. + 2012-05-16 Joseph Myers * sysdeps/unix/sysv/linux/arm/kernel-features.h diff --git a/sysdeps/unix/sysv/linux/arm/ftruncate64.c b/sysdeps/unix/sysv/linux/arm/ftruncate64.c index ad5eb186c2..9838182c39 100644 --- a/sysdeps/unix/sysv/linux/arm/ftruncate64.c +++ b/sysdeps/unix/sysv/linux/arm/ftruncate64.c @@ -1,5 +1,4 @@ -/* Copyright (C) 1997,1998,1999,2000,2001,2003, 2005 - Free Software Foundation, Inc. +/* Copyright (C) 1997-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -24,53 +23,14 @@ #include #include -#include "kernel-features.h" - -#ifdef __NR_ftruncate64 -#ifndef __ASSUME_TRUNCATE64_SYSCALL -/* The variable is shared between all wrappers around *truncate64 calls. */ -extern int __have_no_truncate64; -#endif - - /* Truncate the file FD refers to to LENGTH bytes. */ int __ftruncate64 (int fd, off64_t length) { -#ifndef __ASSUME_TRUNCATE64_SYSCALL - if (! __have_no_truncate64) -#endif - { - unsigned int low = length & 0xffffffff; - unsigned int high = length >> 32; -#ifndef __ASSUME_TRUNCATE64_SYSCALL - int saved_errno = errno; -#endif - int result = INLINE_SYSCALL (ftruncate64, 4, fd, 0, - __LONG_LONG_PAIR (high, low)); -#ifndef __ASSUME_TRUNCATE64_SYSCALL - if (result != -1 || errno != ENOSYS) -#endif - return result; - -#ifndef __ASSUME_TRUNCATE64_SYSCALL - __set_errno (saved_errno); - __have_no_truncate64 = 1; -#endif - } - -#ifndef __ASSUME_TRUNCATE64_SYSCALL - if ((off_t) length != length) - { - __set_errno (EINVAL); - return -1; - } - return __ftruncate (fd, (off_t) length); -#endif + unsigned int low = length & 0xffffffff; + unsigned int high = length >> 32; + int result = INLINE_SYSCALL (ftruncate64, 4, fd, 0, + __LONG_LONG_PAIR (high, low)); + return result; } weak_alias (__ftruncate64, ftruncate64) - -#else -/* Use the generic implementation. */ -# include -#endif diff --git a/sysdeps/unix/sysv/linux/arm/mmap.S b/sysdeps/unix/sysv/linux/arm/mmap.S index 62bf8ee1f8..3276a3b475 100644 --- a/sysdeps/unix/sysv/linux/arm/mmap.S +++ b/sysdeps/unix/sysv/linux/arm/mmap.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 2000, 2003, 2005, 2009 Free Software Foundation, Inc. +/* Copyright (C) 1998-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -16,20 +16,12 @@ . */ #include -#include #define EINVAL 22 .text ENTRY (__mmap) -# ifdef __ASSUME_MMAP2_SYSCALL - /* This code is actually a couple of cycles slower than the - sys_mmap version below, so it might seem like a loss. But the - code path inside the kernel is sufficiently much shorter to - make it a net gain to use mmap2 when it's known to be - available. */ - /* shuffle args */ str r5, [sp, #-4]! cfi_adjust_cfa_offset (4) @@ -66,38 +58,6 @@ ENTRY (__mmap) .Linval: mov r0, #-EINVAL b 2b -# else - /* Because we can only get five args through the syscall interface, and - mmap() takes six, we need to build a parameter block and pass its - address instead. The 386 port does a similar trick. */ - - /* This code previously moved sp into ip and stored the args using - stmdb ip!, {a1-a4}. It did not modify sp, so the stack never had - to be restored after the syscall completed. It saved an - instruction and meant no stack cleanup work was required. - - This will not work in the case of a mmap call being interrupted - by a signal. If the signal handler uses any stack the arguments - to mmap will be trashed. The results of a restart of mmap are - then unpredictable. */ - - /* store args on the stack */ - stmdb sp!, {a1-a4} - cfi_adjust_cfa_offset (16) - - /* do the syscall */ - mov a1, sp - DO_CALL (mmap, 0) - - /* pop args off the stack. */ - add sp, sp, #16 - cfi_adjust_cfa_offset (-16) - - cmn r0, $4096 - RETINSTR(cc, lr) - b PLTJMP(syscall_error); -#endif - PSEUDO_END (__mmap) weak_alias (__mmap, mmap) diff --git a/sysdeps/unix/sysv/linux/arm/posix_fadvise64.c b/sysdeps/unix/sysv/linux/arm/posix_fadvise64.c index 174c3bb290..75b06abf2e 100644 --- a/sysdeps/unix/sysv/linux/arm/posix_fadvise64.c +++ b/sysdeps/unix/sysv/linux/arm/posix_fadvise64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +/* Copyright (C) 2003-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -18,7 +18,6 @@ #include #include #include -#include int __posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise); int __posix_fadvise64_l32 (int fd, off64_t offset, size_t len, int advise); @@ -29,34 +28,13 @@ int __posix_fadvise64_l32 (int fd, off64_t offset, size_t len, int advise); int __posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise) { -#ifdef __NR_arm_fadvise64_64 INTERNAL_SYSCALL_DECL (err); int ret = INTERNAL_SYSCALL (arm_fadvise64_64, err, 6, fd, advise, __LONG_LONG_PAIR ((long)(offset >> 32), (long)offset), __LONG_LONG_PAIR ((long)(len >> 32), (long)len)); if (!INTERNAL_SYSCALL_ERROR_P (ret, err)) return 0; -# ifndef __ASSUME_FADVISE64_64_SYSCALL - if (INTERNAL_SYSCALL_ERRNO (ret, err) != ENOSYS) -# endif - return INTERNAL_SYSCALL_ERRNO (ret, err); -#endif -#ifndef __ASSUME_FADVISE64_64_SYSCALL -# ifdef __NR_fadvise64 - if (len != (off_t) len) - return EOVERFLOW; - - INTERNAL_SYSCALL_DECL (err2); - int ret2 = INTERNAL_SYSCALL (fadvise64, err2, 6, fd, 0, - __LONG_LONG_PAIR ((long)(offset >> 32), (long)offset), - (off_t) len, advise); - if (!INTERNAL_SYSCALL_ERROR_P (ret2, err2)) - return 0; - return INTERNAL_SYSCALL_ERRNO (ret2, err2); -# else - return ENOSYS; -# endif -#endif + return INTERNAL_SYSCALL_ERRNO (ret, err); } #include diff --git a/sysdeps/unix/sysv/linux/arm/truncate64.c b/sysdeps/unix/sysv/linux/arm/truncate64.c index 409bf19333..3fad93f50e 100644 --- a/sysdeps/unix/sysv/linux/arm/truncate64.c +++ b/sysdeps/unix/sysv/linux/arm/truncate64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1997-2000, 2003, 2004, 2005 Free Software Foundation, Inc. +/* Copyright (C) 1997-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -24,51 +24,13 @@ #include #include -#include "kernel-features.h" - -#ifdef __NR_truncate64 -#ifndef __ASSUME_TRUNCATE64_SYSCALL -/* The variable is shared between all wrappers around *truncate64 calls. */ -int __have_no_truncate64; -#endif - /* Truncate the file FD refers to to LENGTH bytes. */ int truncate64 (const char *path, off64_t length) { -#ifndef __ASSUME_TRUNCATE64_SYSCALL - if (! __have_no_truncate64) -#endif - { - unsigned int low = length & 0xffffffff; - unsigned int high = length >> 32; -#ifndef __ASSUME_TRUNCATE64_SYSCALL - int saved_errno = errno; -#endif - int result = INLINE_SYSCALL (truncate64, 4, CHECK_STRING (path), 0, - __LONG_LONG_PAIR (high, low)); -#ifndef __ASSUME_TRUNCATE64_SYSCALL - if (result != -1 || errno != ENOSYS) -#endif - return result; - -#ifndef __ASSUME_TRUNCATE64_SYSCALL - __set_errno (saved_errno); - __have_no_truncate64 = 1; -#endif - } - -#ifndef __ASSUME_TRUNCATE64_SYSCALL - if ((off_t) length != length) - { - __set_errno (EINVAL); - return -1; - } - return __truncate (path, (off_t) length); -#endif + unsigned int low = length & 0xffffffff; + unsigned int high = length >> 32; + int result = INLINE_SYSCALL (truncate64, 4, CHECK_STRING (path), 0, + __LONG_LONG_PAIR (high, low)); + return result; } - -#else -/* Use the generic implementation. */ -# include -#endif diff --git a/sysdeps/unix/sysv/linux/arm/vfork.S b/sysdeps/unix/sysv/linux/arm/vfork.S index 99c366d2b2..abd46c1c3b 100644 --- a/sysdeps/unix/sysv/linux/arm/vfork.S +++ b/sysdeps/unix/sysv/linux/arm/vfork.S @@ -19,7 +19,6 @@ #include #define _ERRNO_H 1 #include -#include /* Clone the calling process, but without copying the whole address space. The calling process is suspended until the new process exits or is @@ -27,8 +26,6 @@ and the process ID of the new process to the old process. */ ENTRY (__vfork) - -#ifdef __NR_vfork #ifdef SAVE_PID SAVE_PID #endif @@ -56,25 +53,7 @@ ENTRY (__vfork) cmn a1, #4096 RETINSTR(cc, lr) -# ifdef __ASSUME_VFORK_SYSCALL b PLTJMP(SYSCALL_ERROR) -# else - /* Check if vfork syscall is known at all. */ - cmn a1, #ENOSYS - bne PLTJMP(SYSCALL_ERROR) -# endif -#endif - -#ifndef __ASSUME_VFORK_SYSCALL - /* If we don't have vfork, fork is close enough. */ - DO_CALL (fork, 0) - cmn a1, #4096 - RETINSTR(cc, lr) - b PLTJMP(SYSCALL_ERROR) -#elif !defined __NR_vfork -# error "__NR_vfork not available and __ASSUME_VFORK_SYSCALL defined" -#endif - PSEUDO_END (__vfork) libc_hidden_def (__vfork)