diff options
author | joseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2012-08-28 14:14:43 +0000 |
---|---|---|
committer | joseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2012-08-28 14:14:43 +0000 |
commit | 89a00bff19086cb0fe6b694dd82d485e3c732e4d (patch) | |
tree | 92a42478f401701889d5c5acf8a5f4324225f312 /libc/sysdeps/unix/sysv/linux | |
parent | e7a9915190f0e2b940e4af9ad480cbe035a197d6 (diff) | |
download | eglibc2-89a00bff19086cb0fe6b694dd82d485e3c732e4d.tar.gz |
Merge changes between r20213 and r20391 from /fsf/trunk.
git-svn-id: svn://svn.eglibc.org/trunk@20392 7b3dc134-2b1b-0410-93df-9e9f96275f8d
Diffstat (limited to 'libc/sysdeps/unix/sysv/linux')
31 files changed, 129 insertions, 838 deletions
diff --git a/libc/sysdeps/unix/sysv/linux/bits/param.h b/libc/sysdeps/unix/sysv/linux/bits/param.h new file mode 100644 index 000000000..36ca088e5 --- /dev/null +++ b/libc/sysdeps/unix/sysv/linux/bits/param.h @@ -0,0 +1,42 @@ +/* Old-style Unix parameters and limits. Linux version. + Copyright (C) 1995-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 + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#ifndef _SYS_PARAM_H +# error "Never use <bits/param.h> directly; include <sys/param.h> instead." +#endif + +#ifndef ARG_MAX +# define __undef_ARG_MAX +#endif + +#include <linux/limits.h> +#include <linux/param.h> + +/* The kernel headers define ARG_MAX. The value is wrong, though. */ +#ifdef __undef_ARG_MAX +# undef ARG_MAX +# undef __undef_ARG_MAX +#endif + +#define MAXSYMLINKS 20 + +/* The following are not really correct but it is a value we used for a + long time and which seems to be usable. People should not use NOFILE + and NCARGS anyway. */ +#define NOFILE 256 +#define NCARGS 131072 diff --git a/libc/sysdeps/unix/sysv/linux/check_pf.c b/libc/sysdeps/unix/sysv/linux/check_pf.c index 950498acd..eebb3a483 100644 --- a/libc/sysdeps/unix/sysv/linux/check_pf.c +++ b/libc/sysdeps/unix/sysv/linux/check_pf.c @@ -78,6 +78,29 @@ __bump_nl_timestamp (void) } #endif +static inline uint32_t +get_nl_timestamp (void) +{ +#ifdef IS_IN_nscd + return nl_timestamp; +#elif defined USE_NSCD + return __nscd_get_nl_timestamp (); +#else + return 0; +#endif +} + +static inline bool +cache_valid_p (void) +{ + if (cache != NULL) + { + uint32_t timestamp = get_nl_timestamp (); + return timestamp != 0 && cache->timestamp == timestamp; + } + return false; +} + static struct cached_data * make_request (int fd, pid_t pid) @@ -253,11 +276,7 @@ make_request (int fd, pid_t pid) if (result == NULL) goto out_fail; -#ifdef IS_IN_nscd - result->timestamp = nl_timestamp; -#else - result->timestamp = __nscd_get_nl_timestamp (); -#endif + result->timestamp = get_nl_timestamp (); result->usecnt = 2; result->seen_ipv4 = seen_ipv4; result->seen_ipv6 = true; @@ -302,14 +321,7 @@ __check_pf (bool *seen_ipv4, bool *seen_ipv6, __libc_lock_lock (lock); -#ifdef IS_IN_nscd -# define cache_valid() nl_timestamp != 0 && cache->timestamp == nl_timestamp -#else -# define cache_valid() \ - ({ uint32_t val = __nscd_get_nl_timestamp (); \ - val != 0 && cache->timestamp == val; }) -#endif - if (cache != NULL && cache_valid ()) + if (cache_valid_p ()) { data = cache; atomic_increment (&cache->usecnt); diff --git a/libc/sysdeps/unix/sysv/linux/dl-fxstatat64.c b/libc/sysdeps/unix/sysv/linux/dl-fxstatat64.c index 9a17a9b73..1f8c2e641 100644 --- a/libc/sysdeps/unix/sysv/linux/dl-fxstatat64.c +++ b/libc/sysdeps/unix/sysv/linux/dl-fxstatat64.c @@ -3,4 +3,4 @@ function in this case. */ #undef __ASSUME_ATFCTS #define __ASSUME_ATFCTS 1 -#include "fxstatat64.c" +#include <fxstatat64.c> diff --git a/libc/sysdeps/unix/sysv/linux/fxstat64.c b/libc/sysdeps/unix/sysv/linux/fxstat64.c index dc7864792..b2ad48bdb 100644 --- a/libc/sysdeps/unix/sysv/linux/fxstat64.c +++ b/libc/sysdeps/unix/sysv/linux/fxstat64.c @@ -1,5 +1,5 @@ -/* fxstat64 using old-style Unix fstat system call. - Copyright (C) 1997-2002, 2003, 2006 Free Software Foundation, Inc. +/* fxstat64 using Linux fstat64 system call. + 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 @@ -27,57 +27,18 @@ #include <kernel-features.h> -#if __ASSUME_STAT64_SYSCALL == 0 -# include <xstatconv.h> -#endif - -#ifdef __NR_fstat64 -# if __ASSUME_STAT64_SYSCALL == 0 -/* The variable is shared between all wrappers around *stat64 calls. */ -extern int __have_no_stat64; -# endif -#endif - /* Get information about the file FD in BUF. */ int ___fxstat64 (int vers, int fd, struct stat64 *buf) { int result; -#if __ASSUME_STAT64_SYSCALL > 0 result = INLINE_SYSCALL (fstat64, 2, fd, CHECK_1 (buf)); -# if defined _HAVE_STAT64___ST_INO && __ASSUME_ST_INO_64_BIT == 0 +#if defined _HAVE_STAT64___ST_INO && __ASSUME_ST_INO_64_BIT == 0 if (__builtin_expect (!result, 1) && buf->__st_ino != (__ino_t) buf->st_ino) buf->st_ino = buf->__st_ino; -# endif - return result; -#else - struct kernel_stat kbuf; -# if defined __NR_fstat64 - if (! __have_no_stat64) - { - int saved_errno = errno; - result = INLINE_SYSCALL (fstat64, 2, fd, CHECK_1 (buf)); - - if (result != -1 || errno != ENOSYS) - { -# if defined _HAVE_STAT64___ST_INO && __ASSUME_ST_INO_64_BIT == 0 - if (!result && buf->__st_ino != (__ino_t)buf->st_ino) - buf->st_ino = buf->__st_ino; -# endif - return result; - } - - __set_errno (saved_errno); - __have_no_stat64 = 1; - } -# endif - result = INLINE_SYSCALL (fstat, 2, fd, __ptrvalue (&kbuf)); - if (result == 0) - result = __xstat64_conv (vers, &kbuf, buf); - - return result; #endif + return result; } #include <shlib-compat.h> diff --git a/libc/sysdeps/unix/sysv/linux/fxstatat64.c b/libc/sysdeps/unix/sysv/linux/fxstatat64.c index fff9444f0..4aa60df7a 100644 --- a/libc/sysdeps/unix/sysv/linux/fxstatat64.c +++ b/libc/sysdeps/unix/sysv/linux/fxstatat64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +/* Copyright (C) 2005-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 @@ -29,18 +29,6 @@ #include <kernel-features.h> -#if __ASSUME_STAT64_SYSCALL == 0 -# include <xstatconv.h> -#endif - -#ifdef __NR_stat64 -# if __ASSUME_STAT64_SYSCALL == 0 -/* The variable is shared between all wrappers around *stat64 calls. - This is the definition. */ -extern int __have_no_stat64; -# endif -#endif - /* Get information about the file NAME in BUF. */ int @@ -110,7 +98,6 @@ __fxstatat64 (int vers, int fd, const char *file, struct stat64 *st, int flag) file = buf; } -# if __ASSUME_STAT64_SYSCALL > 0 if (flag & AT_SYMLINK_NOFOLLOW) result = INTERNAL_SYSCALL (lstat64, err, 2, CHECK_STRING (file), CHECK_1 (st)); @@ -119,51 +106,12 @@ __fxstatat64 (int vers, int fd, const char *file, struct stat64 *st, int flag) CHECK_1 (st)); if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) { -# if defined _HAVE_STAT64___ST_INO && __ASSUME_ST_INO_64_BIT == 0 +# if defined _HAVE_STAT64___ST_INO && __ASSUME_ST_INO_64_BIT == 0 if (st->__st_ino != (__ino_t) st->st_ino) st->st_ino = st->__st_ino; -# endif +# endif return result; } -# else - struct kernel_stat kst; -# ifdef __NR_stat64 - if (! __have_no_stat64) - { - if (flag & AT_SYMLINK_NOFOLLOW) - result = INTERNAL_SYSCALL (lstat64, err, 2, CHECK_STRING (file), - CHECK_1 (st)); - else - result = INTERNAL_SYSCALL (stat64, err, 2, CHECK_STRING (file), - CHECK_1 (st)); - - if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) - { -# if defined _HAVE_STAT64___ST_INO && __ASSUME_ST_INO_64_BIT == 0 - if (st->__st_ino != (__ino_t) st->st_ino) - st->st_ino = st->__st_ino; -# endif - return result; - } - if (INTERNAL_SYSCALL_ERRNO (result, err) != ENOSYS) - goto fail; - - __have_no_stat64 = 1; - } -# endif - - if (flag & AT_SYMLINK_NOFOLLOW) - result = INTERNAL_SYSCALL (lstat, err, 2, CHECK_STRING (file), - __ptrvalue (&kst)); - else - result = INTERNAL_SYSCALL (stat, err, 2, CHECK_STRING (file), - __ptrvalue (&kst)); - - if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) - return __xstat64_conv (vers, &kst, st); - - fail: -# endif __atfct_seterrno (INTERNAL_SYSCALL_ERRNO (result, err), fd, buf); return -1; diff --git a/libc/sysdeps/unix/sysv/linux/i386/fxstat.c b/libc/sysdeps/unix/sysv/linux/i386/fxstat.c index 5077780f0..a1a950ee7 100644 --- a/libc/sysdeps/unix/sysv/linux/i386/fxstat.c +++ b/libc/sysdeps/unix/sysv/linux/i386/fxstat.c @@ -1,6 +1,5 @@ /* fxstat using old-style Unix fstat system call. - Copyright (C) 1991,1995-1998,2000,2002,2003,2006 - Free Software Foundation, Inc. + Copyright (C) 1991-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 @@ -34,26 +33,15 @@ #include <xstatconv.h> -#ifdef __NR_stat64 -# if __ASSUME_STAT64_SYSCALL == 0 -/* The variable is shared between all wrappers around *stat64 calls. */ -extern int __have_no_stat64; -# endif -#endif - /* Get information about the file FD in BUF. */ int __fxstat (int vers, int fd, struct stat *buf) { -#if __ASSUME_STAT64_SYSCALL == 0 - struct kernel_stat kbuf; -#endif int result; if (vers == _STAT_VER_KERNEL) return INLINE_SYSCALL (fstat, 2, fd, CHECK_1 ((struct kernel_stat *) buf)); -#if __ASSUME_STAT64_SYSCALL > 0 { struct stat64 buf64; @@ -62,33 +50,6 @@ __fxstat (int vers, int fd, struct stat *buf) result = __xstat32_conv (vers, &buf64, buf); return result; } -#else - -# if defined __NR_stat64 - /* To support 32 bit UIDs, we have to use stat64. The normal stat call only returns - 16 bit UIDs. */ - if (! __have_no_stat64) - { - struct stat64 buf64; - - result = INLINE_SYSCALL (fstat64, 2, fd, __ptrvalue (&buf64)); - - if (result == 0) - result = __xstat32_conv (vers, &buf64, buf); - - if (result != -1 || errno != ENOSYS) - return result; - - __have_no_stat64 = 1; - } -# endif - - result = INLINE_SYSCALL (fstat, 2, fd, __ptrvalue (&kbuf)); - if (result == 0) - result = __xstat_conv (vers, &kbuf, buf); - - return result; -#endif /* __ASSUME_STAT64_SYSCALL */ } hidden_def (__fxstat) diff --git a/libc/sysdeps/unix/sysv/linux/i386/fxstatat.c b/libc/sysdeps/unix/sysv/linux/i386/fxstatat.c index 7aae336e0..d1e81e081 100644 --- a/libc/sysdeps/unix/sysv/linux/i386/fxstatat.c +++ b/libc/sysdeps/unix/sysv/linux/i386/fxstatat.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +/* Copyright (C) 2005-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 @@ -35,13 +35,6 @@ #include <xstatconv.h> -#ifdef __NR_stat64 -# if __ASSUME_STAT64_SYSCALL == 0 -/* The variable is shared between all wrappers around *stat64 calls. */ -extern int __have_no_stat64; -# endif -#endif - /* Get information about the file NAME relative to FD in ST. */ int @@ -106,9 +99,6 @@ __fxstatat (int vers, int fd, const char *file, struct stat *st, int flag) file = buf; } -# if __ASSUME_STAT64_SYSCALL == 0 - struct kernel_stat kst; -# endif if (vers == _STAT_VER_KERNEL) { if (flag & AT_SYMLINK_NOFOLLOW) @@ -120,8 +110,6 @@ __fxstatat (int vers, int fd, const char *file, struct stat *st, int flag) goto out; } -# if __ASSUME_STAT64_SYSCALL > 0 - if (flag & AT_SYMLINK_NOFOLLOW) result = INTERNAL_SYSCALL (lstat64, err, 2, CHECK_STRING (file), __ptrvalue (&st64)); @@ -130,38 +118,6 @@ __fxstatat (int vers, int fd, const char *file, struct stat *st, int flag) __ptrvalue (&st64)); if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) return __xstat32_conv (vers, &st64, st); -# else -# if defined __NR_stat64 - /* To support 32 bit UIDs, we have to use stat64. The normal stat - call only returns 16 bit UIDs. */ - if (! __have_no_stat64) - { - if (flag & AT_SYMLINK_NOFOLLOW) - result = INTERNAL_SYSCALL (lstat64, err, 2, CHECK_STRING (file), - __ptrvalue (&st64)); - else - result = INTERNAL_SYSCALL (stat64, err, 2, CHECK_STRING (file), - __ptrvalue (&st64)); - - if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) - result = __xstat32_conv (vers, &st64, st); - - if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1) - || INTERNAL_SYSCALL_ERRNO (result, err) != ENOSYS) - goto out; - - __have_no_stat64 = 1; - } -# endif - if (flag & AT_SYMLINK_NOFOLLOW) - result = INTERNAL_SYSCALL (lstat, err, 2, CHECK_STRING (file), - __ptrvalue (&kst)); - else - result = INTERNAL_SYSCALL (stat, err, 2, CHECK_STRING (file), - __ptrvalue (&kst)); - if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) - return __xstat_conv (vers, &kst, st); -# endif /* __ASSUME_STAT64_SYSCALL */ out: if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (result, err), 0)) diff --git a/libc/sysdeps/unix/sysv/linux/i386/lxstat.c b/libc/sysdeps/unix/sysv/linux/i386/lxstat.c index 8994e1700..2b1ecaa0d 100644 --- a/libc/sysdeps/unix/sysv/linux/i386/lxstat.c +++ b/libc/sysdeps/unix/sysv/linux/i386/lxstat.c @@ -1,6 +1,5 @@ /* lxstat using old-style Unix lstat system call. - Copyright (C) 1991,1995,1996,1997,1998,2000,2002,2003,2006 - Free Software Foundation, Inc. + Copyright (C) 1991-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 @@ -34,27 +33,16 @@ #include <xstatconv.h> -#ifdef __NR_stat64 -# if __ASSUME_STAT64_SYSCALL == 0 -/* The variable is shared between all wrappers around *stat64 calls. */ -extern int __have_no_stat64; -# endif -#endif - /* Get information about the file NAME in BUF. */ int __lxstat (int vers, const char *name, struct stat *buf) { -#if __ASSUME_STAT64_SYSCALL == 0 - struct kernel_stat kbuf; -#endif int result; if (vers == _STAT_VER_KERNEL) return INLINE_SYSCALL (lstat, 2, CHECK_STRING (name), CHECK_1 ((struct kernel_stat *) buf)); -#if __ASSUME_STAT64_SYSCALL > 0 { struct stat64 buf64; @@ -63,32 +51,6 @@ __lxstat (int vers, const char *name, struct stat *buf) result = __xstat32_conv (vers, &buf64, buf); return result; } -#else - -# if defined __NR_stat64 - /* To support 32 bit UIDs, we have to use stat64. The normal stat call only returns - 16 bit UIDs. */ - if (! __have_no_stat64) - { - struct stat64 buf64; - result = INLINE_SYSCALL (lstat64, 2, CHECK_STRING (name), __ptrvalue (&buf64)); - - if (result == 0) - result = __xstat32_conv (vers, &buf64, buf); - - if (result != -1 || errno != ENOSYS) - return result; - - __have_no_stat64 = 1; - } -# endif - - result = INLINE_SYSCALL (lstat, 2, CHECK_STRING (name), __ptrvalue (&kbuf)); - if (result == 0) - result = __xstat_conv (vers, &kbuf, buf); - - return result; -#endif } hidden_def (__lxstat) diff --git a/libc/sysdeps/unix/sysv/linux/i386/mmap.S b/libc/sysdeps/unix/sysv/linux/i386/mmap.S index c8bf3e108..1f79bde28 100644 --- a/libc/sysdeps/unix/sysv/linux/i386/mmap.S +++ b/libc/sysdeps/unix/sysv/linux/i386/mmap.S @@ -25,10 +25,6 @@ ENTRY (__mmap) -/* I don't think it is worthwhile trying to use mmap2 whenever it - is available. Only use it when we are sure the syscall exists. */ -#ifdef __ASSUME_MMAP2_SYSCALL - /* Save registers. */ pushl %ebp cfi_adjust_cfa_offset (4) @@ -73,25 +69,6 @@ L(skip): cfi_adjust_cfa_offset (-4) cfi_restore (ebp) -#else - - /* Save registers. */ - movl %ebx, %edx - cfi_register (ebx, edx) - - movl $SYS_ify(mmap), %eax /* System call number in %eax. */ - - lea 4(%esp), %ebx /* Address of args is 1st arg. */ - - /* Do the system call trap. */ - int $0x80 - - /* Restore registers. */ - movl %edx, %ebx - cfi_restore (ebx) - -#endif - /* If 0 > %eax > -4096 there was an error. */ cmpl $-4096, %eax ja SYSCALL_ERROR_LABEL diff --git a/libc/sysdeps/unix/sysv/linux/i386/mmap64.S b/libc/sysdeps/unix/sysv/linux/i386/mmap64.S index 7599b8544..8855109ff 100644 --- a/libc/sysdeps/unix/sysv/linux/i386/mmap64.S +++ b/libc/sysdeps/unix/sysv/linux/i386/mmap64.S @@ -37,8 +37,6 @@ .text ENTRY (BP_SYM (__mmap64)) -#ifdef __NR_mmap2 - /* Save registers. */ pushl %ebp cfi_adjust_cfa_offset (4) @@ -88,12 +86,6 @@ L(do_syscall): cfi_adjust_cfa_offset (-4) cfi_restore (ebp) -#ifndef __ASSUME_MMAP2_SYSCALL -2: - cmp $-ENOSYS, %eax - je 3f -#endif - /* If 0 > %eax > -4096 there was an error. */ cmpl $-4096, %eax ja SYSCALL_ERROR_LABEL @@ -122,42 +114,6 @@ L(einval): cfi_restore (ebp) movl $-EINVAL, %eax jmp SYSCALL_ERROR_LABEL -#endif - -#if !defined __ASSUME_MMAP2_SYSCALL || !defined __NR_mmap2 -3: - /* Save registers. */ - movl %ebx, %edx - cfi_register (ebx, edx) - - cmpl $0, OFFHI-SVRSP(%esp) - jne L(einval2) - - movl $SYS_ify(mmap), %eax /* System call number in %eax. */ - - lea ADDR-SVRSP(%esp), %ebx /* Address of args is 1st arg. */ - - /* Do the system call trap. */ - ENTER_KERNEL - - /* Restore registers. */ - movl %edx, %ebx - cfi_restore (ebx) - - /* If 0 > %eax > -4096 there was an error. */ - cmpl $-4096, %eax - ja SYSCALL_ERROR_LABEL - - /* Successful; return the syscall's value. */ - ret - - cfi_register (ebx, edx) -L(einval2): - movl %edx, %ebx - cfi_restore (ebx) - movl $-EINVAL, %eax - jmp SYSCALL_ERROR_LABEL -#endif PSEUDO_END (BP_SYM (__mmap64)) diff --git a/libc/sysdeps/unix/sysv/linux/i386/posix_fadvise64.S b/libc/sysdeps/unix/sysv/linux/i386/posix_fadvise64.S index 79fc071d2..00e6a4194 100644 --- a/libc/sysdeps/unix/sysv/linux/i386/posix_fadvise64.S +++ b/libc/sysdeps/unix/sysv/linux/i386/posix_fadvise64.S @@ -1,5 +1,4 @@ -/* Copyright (C) 1995-2000,2002,2003,2004,2005,2006 - Free Software Foundation, Inc. +/* Copyright (C) 1995-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 @@ -20,8 +19,6 @@ #include <bp-sym.h> #include <bp-asm.h> -#include <kernel-features.h> - #define EINVAL 22 #define ENOSYS 38 #define EOVERFLOW 75 @@ -38,8 +35,6 @@ .text ENTRY (BP_SYM (__posix_fadvise64_l64)) -#ifdef __NR_fadvise64_64 - /* Save registers. */ pushl %ebp cfi_adjust_cfa_offset (4) @@ -78,11 +73,6 @@ ENTRY (BP_SYM (__posix_fadvise64_l64)) cfi_adjust_cfa_offset (-4) cfi_restore (ebp) -#ifndef __ASSUME_FADVISE64_64_SYSCALL - cmpl $-ENOSYS, %eax - je 1f -#endif - /* The function returns zero, or the error number. So all we have to do is negate the value passed back from the kernel. */ /* If 0 > %eax > -4096 there was an error. */ @@ -90,72 +80,15 @@ ENTRY (BP_SYM (__posix_fadvise64_l64)) /* Successful; return the syscall's value. */ ret -#endif - -#if defined __NR_fadvise64 \ - && (!defined __ASSUME_FADVISE64_64_SYSCALL || !defined __NR_fadvise64_64) -1: /* Save registers. */ - pushl %ebx - cfi_adjust_cfa_offset (4) - pushl %esi - cfi_adjust_cfa_offset (4) - pushl %edi - cfi_adjust_cfa_offset (4) - - /* Overflow check. */ - cmpl $0, LENHI(%esp) - movl $-EOVERFLOW, %eax - jne L(overflow) - - movl FD(%esp), %ebx - cfi_rel_offset (ebx, 8) - movl OFFLO(%esp), %ecx - movl OFFHI(%esp), %edx - movl LENLO(%esp), %esi - cfi_rel_offset (esi, 4) - movl FLAGS(%esp), %edi - cfi_rel_offset (edi, 0) - - movl $SYS_ify(fadvise64), %eax - ENTER_KERNEL - - /* Restore registers. */ -L(overflow): - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) - - /* If 0 > %eax > -4096 there was an error. */ - negl %eax - - /* Successful; return the syscall's value. */ - ret -#else - movl $ENOSYS, %eax - ret -#endif END (BP_SYM (__posix_fadvise64_l64)) -#ifdef __NR_fadvise64 .section .text.compat, "ax" ENTRY (__posix_fadvise64_l32) DO_CALL (fadvise64, 5) negl %eax ret PSEUDO_END_ERRVAL (__posix_fadvise64_l32) -#else -ENTRY (BP_SYM (__posix_fadvise64_l32)) - movl $ENOSYS, %eax - ret -END (BP_SYM (__posix_fadvise64_l32)) -#endif default_symbol_version (__posix_fadvise64_l64, posix_fadvise64, GLIBC_2.3.3) symbol_version (__posix_fadvise64_l32, posix_fadvise64, GLIBC_2.2) diff --git a/libc/sysdeps/unix/sysv/linux/i386/xstat.c b/libc/sysdeps/unix/sysv/linux/i386/xstat.c index 236ec748f..0fe7a9dcd 100644 --- a/libc/sysdeps/unix/sysv/linux/i386/xstat.c +++ b/libc/sysdeps/unix/sysv/linux/i386/xstat.c @@ -1,6 +1,5 @@ /* xstat using old-style Unix stat system call. - Copyright (C) 1991,95,96,97,98,2000,2002,2003,2006 - Free Software Foundation, Inc. + Copyright (C) 1991-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 @@ -34,27 +33,16 @@ #include <xstatconv.h> -#ifdef __NR_stat64 -# if __ASSUME_STAT64_SYSCALL == 0 -/* The variable is shared between all wrappers around *stat64 calls. */ -extern int __have_no_stat64; -# endif -#endif - /* Get information about the file NAME in BUF. */ int __xstat (int vers, const char *name, struct stat *buf) { -#if __ASSUME_STAT64_SYSCALL == 0 - struct kernel_stat kbuf; -#endif int result; if (vers == _STAT_VER_KERNEL) return INLINE_SYSCALL (stat, 2, CHECK_STRING (name), CHECK_1 ((struct kernel_stat *) buf)); -#if __ASSUME_STAT64_SYSCALL > 0 { struct stat64 buf64; @@ -63,31 +51,6 @@ __xstat (int vers, const char *name, struct stat *buf) result = __xstat32_conv (vers, &buf64, buf); return result; } -#else -# if defined __NR_stat64 - /* To support 32 bit UIDs, we have to use stat64. The normal stat call only returns - 16 bit UIDs. */ - if (! __have_no_stat64) - { - struct stat64 buf64; - - result = INLINE_SYSCALL (stat64, 2, CHECK_STRING (name), __ptrvalue (&buf64)); - - if (result == 0) - result = __xstat32_conv (vers, &buf64, buf); - - if (result != -1 || errno != ENOSYS) - return result; - - __have_no_stat64 = 1; - } -# endif - result = INLINE_SYSCALL (stat, 2, CHECK_STRING (name), __ptrvalue (&kbuf)); - if (result == 0) - result = __xstat_conv (vers, &kbuf, buf); - - return result; -#endif /* __ASSUME_STAT64_SYSCALL */ } hidden_def (__xstat) weak_alias (__xstat, _xstat); diff --git a/libc/sysdeps/unix/sysv/linux/kernel-features.h b/libc/sysdeps/unix/sysv/linux/kernel-features.h index 6b0eb95c5..33fca5c4f 100644 --- a/libc/sysdeps/unix/sysv/linux/kernel-features.h +++ b/libc/sysdeps/unix/sysv/linux/kernel-features.h @@ -40,29 +40,6 @@ /* The sendfile syscall was introduced in 2.2.0. */ #define __ASSUME_SENDFILE 1 -/* On x86 the mmap2 syscall was introduced in 2.3.31. */ -#ifdef __i386__ -# define __ASSUME_MMAP2_SYSCALL 1 -#endif - -/* On x86 the stat64/lstat64/fstat64 syscalls were introduced in 2.3.34. */ -#ifdef __i386__ -# define __ASSUME_STAT64_SYSCALL 1 -#endif - -/* On sparc the mmap2/stat64/lstat64/fstat64 syscalls were introduced - in 2.3.35. */ -#if defined __sparc__ && !defined __arch64__ -# define __ASSUME_MMAP2_SYSCALL 1 -# define __ASSUME_STAT64_SYSCALL 1 -#endif - -/* I know for sure that these are in 2.3.35 on powerpc. But PowerPC64 does not - support separate 64-bit syscalls, already 64-bit. */ -#if defined __powerpc__ && !defined __powerpc64__ -# define __ASSUME_STAT64_SYSCALL 1 -#endif - /* Linux 2.3.39 introduced IPC64. Except for powerpc. Linux 2.4.0 on PPC introduced a correct IPC64. But PowerPC64 does not support a separate 64-bit syscall, already 64-bit. */ @@ -70,12 +47,6 @@ # define __ASSUME_IPC64 1 #endif -/* SH kernels got stat64 and mmap2 during 2.4.0-test. */ -#ifdef __sh__ -# define __ASSUME_MMAP2_SYSCALL 1 -# define __ASSUME_STAT64_SYSCALL 1 -#endif - /* The changed st_ino field appeared in 2.4.0-test6. However, SH is lame, and still does not have a 64-bit inode field. */ #ifndef __sh__ @@ -86,12 +57,6 @@ MIPS n32). */ #define __ASSUME_GETDENTS64_SYSCALL 1 -/* Starting with 2.4.5 kernels the mmap2 syscall made it into the official - kernel. But PowerPC64 does not support a separate MMAP2 call. */ -#if defined __powerpc__ && !defined __powerpc64__ -# define __ASSUME_MMAP2_SYSCALL 1 -#endif - /* Beginning with 2.6.12 the clock and timer supports CPU clocks. */ #define __ASSUME_POSIX_CPU_TIMERS 1 @@ -100,35 +65,17 @@ /* The utimes syscall has been available for some architectures forever. For x86 it was introduced after 2.5.75, for x86-64, - ppc, and ppc64 it was introduced in 2.6.0-test3. */ + ppc, and ppc64 it was introduced in 2.6.0-test3, for s390 it was + introduced in 2.6.21-rc5. */ #if defined __sparc__ \ || defined __i386__ \ || defined __x86_64__ \ || defined __powerpc__ \ - || defined __sh__ + || defined __sh__ \ + || (defined __s390__ && __LINUX_KERNEL_VERSION >= 0x020616) # define __ASSUME_UTIMES 1 #endif -/* The fixed version of the posix_fadvise64 syscall appeared in - 2.6.0-test3. At least for x86 and sparc. Powerpc support appeared - in 2.6.2, but for 32-bit userspace only. */ -#if (defined __i386__ || defined __sparc__ \ - || (defined __powerpc__ && !defined __powerpc64__)) -# define __ASSUME_FADVISE64_64_SYSCALL 1 -#endif - -/* Starting with 2.6.0 PowerPC adds signal/swapcontext support for Vector - SIMD (AKA Altivec, VMX) instructions and register state. This changes - the overall size of the sigcontext and adds the swapcontext syscall. */ -#ifdef __powerpc__ -# define __ASSUME_SWAPCONTEXT_SYSCALL 1 -#endif - -/* On sparc64 stat64/lstat64/fstat64 syscalls were introduced in 2.6.12. */ -#if defined __sparc__ && defined __arch64__ -# define __ASSUME_STAT64_SYSCALL 1 -#endif - /* pselect/ppoll were introduced just after 2.6.16-rc1. Due to the way the kernel versions are advertised we can only rely on 2.6.17 to have the code. On x86_64 and SH this appeared first in 2.6.19-rc1, diff --git a/libc/sysdeps/unix/sysv/linux/lxstat64.c b/libc/sysdeps/unix/sysv/linux/lxstat64.c index c6920b47c..765b195c6 100644 --- a/libc/sysdeps/unix/sysv/linux/lxstat64.c +++ b/libc/sysdeps/unix/sysv/linux/lxstat64.c @@ -1,5 +1,5 @@ -/* lxstat64 using old-style Unix lstat system call. - Copyright (C) 1997-2002,2003,2006 Free Software Foundation, Inc. +/* lxstat64 using Linux lstat64 system call. + 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 @@ -27,56 +27,17 @@ #include <kernel-features.h> -#if __ASSUME_STAT64_SYSCALL == 0 -# include <xstatconv.h> -#endif - -#ifdef __NR_lstat64 -# if __ASSUME_STAT64_SYSCALL == 0 -/* The variable is shared between all wrappers around *stat64 calls. */ -extern int __have_no_stat64; -# endif -#endif - /* Get information about the file NAME in BUF. */ int ___lxstat64 (int vers, const char *name, struct stat64 *buf) { int result; -#ifdef __ASSUME_STAT64_SYSCALL result = INLINE_SYSCALL (lstat64, 2, CHECK_STRING (name), CHECK_1 (buf)); -# if defined _HAVE_STAT64___ST_INO && __ASSUME_ST_INO_64_BIT == 0 +#if defined _HAVE_STAT64___ST_INO && __ASSUME_ST_INO_64_BIT == 0 if (__builtin_expect (!result, 1) && buf->__st_ino != (__ino_t) buf->st_ino) buf->st_ino = buf->__st_ino; -# endif - return result; -#else - struct kernel_stat kbuf; -# ifdef __NR_lstat64 - if (! __have_no_stat64) - { - int saved_errno = errno; - result = INLINE_SYSCALL (lstat64, 2, CHECK_STRING (name), CHECK_1 (buf)); - - if (result != -1 || errno != ENOSYS) - { -# if defined _HAVE_STAT64___ST_INO && __ASSUME_ST_INO_64_BIT == 0 - if (!result && buf->__st_ino != (__ino_t) buf->st_ino) - buf->st_ino = buf->__st_ino; -# endif - return result; - } - - __set_errno (saved_errno); - __have_no_stat64 = 1; - } -# endif - result = INLINE_SYSCALL (lstat, 2, CHECK_STRING (name), __ptrvalue (&kbuf)); - if (result == 0) - result = __xstat64_conv (vers, &kbuf, buf); - - return result; #endif + return result; } #include <shlib-compat.h> diff --git a/libc/sysdeps/unix/sysv/linux/mmap64.c b/libc/sysdeps/unix/sysv/linux/mmap64.c index 495d77768..bca15f9c5 100644 --- a/libc/sysdeps/unix/sysv/linux/mmap64.c +++ b/libc/sysdeps/unix/sysv/linux/mmap64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1999,2000,2001,2002,2006,2010 Free Software Foundation, Inc. +/* Copyright (C) 1999-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>, 1999. @@ -26,76 +26,42 @@ #include <kernel-features.h> -#ifdef __NR_mmap2 - /* This is always 12, even on architectures where PAGE_SHIFT != 12. */ -# if MMAP2_PAGE_SHIFT == -1 +#if MMAP2_PAGE_SHIFT == -1 static int page_shift; -# else -# ifndef MMAP2_PAGE_SHIFT -# define MMAP2_PAGE_SHIFT 12 -# endif -# define page_shift MMAP2_PAGE_SHIFT -# endif - -# ifndef __ASSUME_MMAP2_SYSCALL -static int have_no_mmap2; +#else +# ifndef MMAP2_PAGE_SHIFT +# define MMAP2_PAGE_SHIFT 12 # endif +#define page_shift MMAP2_PAGE_SHIFT #endif void * __mmap64 (void *addr, size_t len, int prot, int flags, int fd, off64_t offset) { -#ifdef __NR_mmap2 -# if MMAP2_PAGE_SHIFT == -1 +#if MMAP2_PAGE_SHIFT == -1 if (page_shift == 0) { int page_size = getpagesize (); while ((1 << ++page_shift) != page_size) ; } -# endif - if (offset & ((1 << page_shift) - 1)) - { - __set_errno (EINVAL); - return MAP_FAILED; - } -# ifndef __ASSUME_MMAP2_SYSCALL - if (! have_no_mmap2) -# endif - { -# ifndef __ASSUME_MMAP2_SYSCALL - int saved_errno = errno; -# endif - void *result; - __ptrvalue (result) = (void *__unbounded) - INLINE_SYSCALL (mmap2, 6, __ptrvalue (addr), - len, prot, flags, fd, - (off_t) (offset >> MMAP2_PAGE_SHIFT)); -# if __BOUNDED_POINTERS__ - __ptrlow (result) = __ptrvalue (result); - __ptrhigh (result) = __ptrvalue (result) + len; -# endif -# ifndef __ASSUME_MMAP2_SYSCALL - if (result != MAP_FAILED || errno != ENOSYS) -# endif - return result; - -# ifndef __ASSUME_MMAP2_SYSCALL - __set_errno (saved_errno); - have_no_mmap2 = 1; -# endif - } #endif -#ifndef __ASSUME_MMAP2_SYSCALL - if (offset != (off_t) offset || (offset + len) != (off_t) (offset + len)) + if (offset & ((1 << page_shift) - 1)) { __set_errno (EINVAL); return MAP_FAILED; } - - return __mmap (addr, len, prot, flags, fd, (off_t) offset); + void *result; + __ptrvalue (result) = (void *__unbounded) + INLINE_SYSCALL (mmap2, 6, __ptrvalue (addr), + len, prot, flags, fd, + (off_t) (offset >> MMAP2_PAGE_SHIFT)); +#if __BOUNDED_POINTERS__ + __ptrlow (result) = __ptrvalue (result); + __ptrhigh (result) = __ptrvalue (result) + len; #endif + return result; } weak_alias (__mmap64, mmap64) diff --git a/libc/sysdeps/unix/sysv/linux/nice.c b/libc/sysdeps/unix/sysv/linux/nice.c index 46a6da80c..3bcbb1e89 100644 --- a/libc/sysdeps/unix/sysv/linux/nice.c +++ b/libc/sysdeps/unix/sysv/linux/nice.c @@ -1 +1 @@ -#include <sysdeps/unix/nice.c> +#include <sysdeps/posix/nice.c> diff --git a/libc/sysdeps/unix/sysv/linux/posix_fadvise64.c b/libc/sysdeps/unix/sysv/linux/posix_fadvise64.c index 5d51cf243..3eea6deac 100644 --- a/libc/sysdeps/unix/sysv/linux/posix_fadvise64.c +++ b/libc/sysdeps/unix/sysv/linux/posix_fadvise64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004 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 <errno.h> #include <fcntl.h> #include <sysdep.h> -#include <kernel-features.h> 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,7 +28,6 @@ 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_fadvise64_64 INTERNAL_SYSCALL_DECL (err); int ret = INTERNAL_SYSCALL (fadvise64_64, err, 6, fd, __LONG_LONG_PAIR ((long) (offset >> 32), @@ -39,28 +37,7 @@ __posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise) advise); 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, 5, fd, - __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 <shlib-compat.h> diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext.S b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext.S index 2d36df458..27f2348da 100644 --- a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext.S +++ b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext.S @@ -32,7 +32,6 @@ /* Size of ucontext in GLIBC_2.3.4 and later. */ #define _UC_SIZE_2_3_4 1184 -#ifdef __ASSUME_SWAPCONTEXT_SYSCALL .section ".text"; ENTRY (__getcontext) li r4,0 @@ -45,9 +44,6 @@ ENTRY (__getcontext) 1: b __syscall_error@local END(__getcontext) -#else -# include "getcontext-common.S" -#endif versioned_symbol (libc, __getcontext, getcontext, GLIBC_2_3_4) diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/posix_fadvise64.c b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/posix_fadvise64.c index 2ffaec675..5b11e28ba 100644 --- a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/posix_fadvise64.c +++ b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/posix_fadvise64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004 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 <errno.h> #include <fcntl.h> #include <sysdep.h> -#include <kernel-features.h> 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_fadvise64_64 INTERNAL_SYSCALL_DECL (err); int ret = INTERNAL_SYSCALL (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 <shlib-compat.h> diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S index fa7d05f70..b96b04040 100644 --- a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S +++ b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S @@ -1,5 +1,5 @@ /* Jump to a new context. - Copyright (C) 2002, 2004, 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 2002-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 @@ -32,7 +32,6 @@ /* Size of ucontext in GLIBC_2.3.4 and later. */ #define _UC_SIZE_2_3_4 1184 -#ifdef __ASSUME_SWAPCONTEXT_SYSCALL .section ".text"; ENTRY (__setcontext) mr r4,r3 @@ -46,9 +45,6 @@ ENTRY (__setcontext) 1: b __syscall_error@local END(__setcontext) -#else -# include "setcontext-common.S" -#endif versioned_symbol (libc, __setcontext, setcontext, GLIBC_2_3_4) diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S index 0189af8e2..556c8020d 100644 --- a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S +++ b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S @@ -1,5 +1,5 @@ /* Save current context and jump to a new context. - Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 2002-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 @@ -32,7 +32,6 @@ /* Size of ucontext in GLIBC_2.3.4 and later. */ #define _UC_SIZE_2_3_4 1184 -#ifdef __ASSUME_SWAPCONTEXT_SYSCALL .section ".text"; ENTRY (__swapcontext) li r5,_UC_SIZE_2_3_4; @@ -44,9 +43,6 @@ ENTRY (__swapcontext) 1: b __syscall_error@local END(__swapcontext) -#else -# include "swapcontext-common.S" -#endif versioned_symbol (libc, __swapcontext, swapcontext, GLIBC_2_3_4) diff --git a/libc/sysdeps/unix/sysv/linux/s390/s390-32/getrlimit.c b/libc/sysdeps/unix/sysv/linux/s390/s390-32/getrlimit.c deleted file mode 100644 index fc06dbd64..000000000 --- a/libc/sysdeps/unix/sysv/linux/s390/s390-32/getrlimit.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/getrlimit.c> diff --git a/libc/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S b/libc/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S index 6e5ba94c1..0357ab461 100644 --- a/libc/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S +++ b/libc/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2001, 2007 Free Software Foundation, Inc. +/* Copyright (C) 2000-2012 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of the GNU C Library. @@ -40,8 +40,8 @@ ENTRY(__mmap) cfi_adjust_cfa_offset (120) st %r1,0(%r15) /* store back chain */ - /* Store parameters on stack, because old_mmap/mmap2 - * take only one parameter: a pointer to the parameter area + /* Store parameters on stack, because mmap2 + * takes only one parameter: a pointer to the parameter area */ st %r6,0x70(%r15) /* Store 'fd'. */ st %r5,0x6C(%r15) /* Store 'flags'. */ @@ -50,10 +50,6 @@ ENTRY(__mmap) st %r2,0x60(%r15) /* Store 'start'. */ l %r1,216(%r15) /* Load offset. */ -#ifdef __ASSUME_MMAP2_SYSCALL - /* I don't think it is worthwhile trying to use mmap2 whenever - * it is available. Only use it when we are sure the syscall - * exists. */ tml %r1,0x0fff /* Offset page aligned ? */ lhi %r2,-EINVAL jnz 1f /* No -> EINVAL. */ @@ -61,11 +57,6 @@ ENTRY(__mmap) st %r1,0x74(%r15) /* Store page offset. */ la %r2,0x60(%r15) /* Load address of parameter list. */ svc SYS_ify(mmap2) /* Do the system call trap. */ -#else - st %r1,0x74(%r15) /* Store offset unmodified. */ - la %r2,0x60(%r15) /* Load address of parameter list. */ - svc SYS_ify(mmap) /* Do the system call trap. */ -#endif 1: l %r15,0(%r15) /* Load back chain. */ cfi_adjust_cfa_offset (-120) diff --git a/libc/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S b/libc/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S index ad6d254db..8b4bd4556 100644 --- a/libc/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S +++ b/libc/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2001, 2007 Free Software Foundation, Inc. +/* Copyright (C) 2000-2012 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of the GNU C Library. @@ -41,15 +41,14 @@ ENTRY(__mmap64) cfi_adjust_cfa_offset (120) st %r1,0(%r15) /* Store back chain. */ - /* Store parameters on stack, because mmap2 and old_mmap - * take only one parameter: a pointer to the parameter area. */ + /* Store parameters on stack, because mmap2 + * takes only one parameter: a pointer to the parameter area. */ st %r6,0x70(%r15) /* Store 'fd'. */ st %r5,0x6C(%r15) /* Store 'flags'. */ st %r4,0x68(%r15) /* Store 'prot'. */ st %r3,0x64(%r15) /* Store 'length'. */ st %r2,0x60(%r15) /* Store 'start'. */ -#ifdef __NR_mmap2 lm %r0,%r1,216(%r15) /* Load 64 bit offset. */ tml %r1,0x0fff /* Offset page aligned ? */ jnz 2f /* No -> EINVAL. */ @@ -61,11 +60,6 @@ ENTRY(__mmap64) la %r2,0x60(%r15) /* Load address of parameter list. */ svc SYS_ify(mmap2) /* Do the system call trap. */ -#ifndef __ASSUME_MMAP2_SYSCALL - chi %r2,-ENOSYS - je 1f -#endif - l %r15,0(%r15) /* Load back chain. */ cfi_adjust_cfa_offset (-120) lm %r6,%r15,24(%r15) /* Load registers. */ @@ -78,31 +72,6 @@ ENTRY(__mmap64) /* Successful; return the syscall's value. */ br %r14 -#endif - -#if !defined __ASSUME_MMAP2_SYSCALL || !defined __NR_mmap2 -1: lm %r0,%r1,216(%r15) /* Load 64 bit offset. */ - st %r1,0x74(%r15) /* Store lower word of offset. */ - ltr %r0,%r0 /* Offset > 2^32 ? */ - jnz 2f - alr %r1,%r3 /* Add length to offset. */ - brc 3,2f /* Carry -> EINVAL. */ - - la %r2,0x60(%r15) /* Load address of parameter list. */ - svc SYS_ify(mmap) /* Do the system call trap. */ - - l %r15,0(%r15) /* Load back chain. */ - lm %r6,%r15,24(%r15) /* Load registers. */ - - /* Check gpr 2 for error. */ - lhi %r0,-4096 - clr %r2,%r0 - jnl SYSCALL_ERROR_LABEL - - /* Successful; return the syscall's value. */ - br %r14 -#endif - 2: lhi %r2,-EINVAL l %r15,0(%r15) /* Load back chain. */ lm %r6,%r15,24(%r15) /* Load registers. */ diff --git a/libc/sysdeps/unix/sysv/linux/s390/s390-32/posix_fadvise64.c b/libc/sysdeps/unix/sysv/linux/s390/s390-32/posix_fadvise64.c index 05b81ecbc..480b92fcb 100644 --- a/libc/sysdeps/unix/sysv/linux/s390/s390-32/posix_fadvise64.c +++ b/libc/sysdeps/unix/sysv/linux/s390/s390-32/posix_fadvise64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004 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 <errno.h> #include <fcntl.h> #include <sysdep.h> -#include <kernel-features.h> 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); @@ -37,7 +36,6 @@ struct fadvise64_64_layout int __posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise) { -#ifdef __NR_fadvise64_64 struct fadvise64_64_layout parameters; INTERNAL_SYSCALL_DECL (err); @@ -48,28 +46,7 @@ __posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise) int ret = INTERNAL_SYSCALL (fadvise64_64, err, 1, ¶meters); 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, 5, fd, - __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 <shlib-compat.h> diff --git a/libc/sysdeps/unix/sysv/linux/sparc/sparc64/time.c b/libc/sysdeps/unix/sysv/linux/sparc/sparc64/time.c index 3a64ef195..509b580c5 100644 --- a/libc/sysdeps/unix/sysv/linux/sparc/sparc64/time.c +++ b/libc/sysdeps/unix/sysv/linux/sparc/sparc64/time.c @@ -1 +1 @@ -#include <sysdeps/unix/time.c> +#include <sysdeps/posix/time.c> diff --git a/libc/sysdeps/unix/sysv/linux/sparc/sparc64/xstat.c b/libc/sysdeps/unix/sysv/linux/sparc/sparc64/xstat.c index 71a51ccd8..c3b00cb1d 100644 --- a/libc/sysdeps/unix/sysv/linux/sparc/sparc64/xstat.c +++ b/libc/sysdeps/unix/sysv/linux/sparc/sparc64/xstat.c @@ -1,10 +1 @@ -#include <kernel-features.h> - #include "../../i386/xstat.c" - -#ifdef __NR_stat64 -# if __ASSUME_STAT64_SYSCALL == 0 -/* The variable is shared between all wrappers around *stat{,64} calls. */ -int __have_no_stat64; -# endif -#endif diff --git a/libc/sysdeps/unix/sysv/linux/sys/param.h b/libc/sysdeps/unix/sysv/linux/sys/param.h deleted file mode 100644 index c419b8640..000000000 --- a/libc/sysdeps/unix/sysv/linux/sys/param.h +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright (C) 1995-1997,2000,2001,2003,2008,2011 - 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SYS_PARAM_H -#define _SYS_PARAM_H 1 - -#ifndef ARG_MAX -# define __undef_ARG_MAX -#endif - -#include <limits.h> -#include <linux/limits.h> -#include <linux/param.h> - -/* The kernel headers defines ARG_MAX. The value is wrong, though. */ -#ifdef __undef_ARG_MAX -# undef ARG_MAX -# undef __undef_ARG_MAX -#endif - -/* BSD names for some <limits.h> values. */ - -#define NBBY CHAR_BIT -#ifndef NGROUPS -# define NGROUPS NGROUPS_MAX -#endif -#define MAXSYMLINKS 20 -#define CANBSIZ MAX_CANON -#define MAXPATHLEN PATH_MAX -/* The following are not really correct but it is a value we used for a - long time and which seems to be usable. People should not use NOFILE - and NCARGS anyway. */ -#define NOFILE 256 -#define NCARGS 131072 - - -#include <sys/types.h> - -/* Bit map related macros. */ -#define setbit(a,i) ((a)[(i)/NBBY] |= 1<<((i)%NBBY)) -#define clrbit(a,i) ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY))) -#define isset(a,i) ((a)[(i)/NBBY] & (1<<((i)%NBBY))) -#define isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0) - -/* Macros for counting and rounding. */ -#ifndef howmany -# define howmany(x, y) (((x) + ((y) - 1)) / (y)) -#endif -#ifdef __GNUC__ -# define roundup(x, y) (__builtin_constant_p (y) && powerof2 (y) \ - ? (((x) + (y) - 1) & ~((y) - 1)) \ - : ((((x) + ((y) - 1)) / (y)) * (y))) -#else -# define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y)) -#endif -#define powerof2(x) ((((x) - 1) & (x)) == 0) - -/* Macros for min/max. */ -#define MIN(a,b) (((a)<(b))?(a):(b)) -#define MAX(a,b) (((a)>(b))?(a):(b)) - - -/* Unit of `st_blocks'. */ -#define DEV_BSIZE 512 - - -#endif /* sys/param.h */ diff --git a/libc/sysdeps/unix/sysv/linux/time.c b/libc/sysdeps/unix/sysv/linux/time.c index f01d5753f..a73783e36 100644 --- a/libc/sysdeps/unix/sysv/linux/time.c +++ b/libc/sysdeps/unix/sysv/linux/time.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2005 Free Software Foundation, Inc. +/* Copyright (C) 2005-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 @@ -37,6 +37,6 @@ libc_hidden_def (time) #else -# include <sysdeps/unix/time.c> +# include <sysdeps/posix/time.c> #endif diff --git a/libc/sysdeps/unix/sysv/linux/xstat64.c b/libc/sysdeps/unix/sysv/linux/xstat64.c index c83d2b77e..dd0f99676 100644 --- a/libc/sysdeps/unix/sysv/linux/xstat64.c +++ b/libc/sysdeps/unix/sysv/linux/xstat64.c @@ -1,5 +1,5 @@ -/* xstat64 using old-style Unix stat system call. - Copyright (C) 1991,1995-2002,2003,2006 Free Software Foundation, Inc. +/* xstat64 using Linux stat64 system call. + Copyright (C) 1991-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 @@ -27,59 +27,18 @@ #include <kernel-features.h> -#if __ASSUME_STAT64_SYSCALL == 0 -# include <xstatconv.h> -#endif - -#ifdef __NR_stat64 -# if __ASSUME_STAT64_SYSCALL == 0 -/* The variable is shared between all wrappers around *stat64 calls. - This is the definition. */ -int __have_no_stat64; -# endif -#endif - /* Get information about the file NAME in BUF. */ int ___xstat64 (int vers, const char *name, struct stat64 *buf) { int result; -#if __ASSUME_STAT64_SYSCALL > 0 result = INLINE_SYSCALL (stat64, 2, CHECK_STRING (name), CHECK_1 (buf)); -# if defined _HAVE_STAT64___ST_INO && __ASSUME_ST_INO_64_BIT == 0 +#if defined _HAVE_STAT64___ST_INO && __ASSUME_ST_INO_64_BIT == 0 if (__builtin_expect (!result, 1) && buf->__st_ino != (__ino_t) buf->st_ino) buf->st_ino = buf->__st_ino; -# endif - return result; -#else - struct kernel_stat kbuf; -# if defined __NR_stat64 - if (! __have_no_stat64) - { - int saved_errno = errno; - result = INLINE_SYSCALL (stat64, 2, CHECK_STRING (name), CHECK_1 (buf)); - - if (result != -1 || errno != ENOSYS) - { -# if defined _HAVE_STAT64___ST_INO && __ASSUME_ST_INO_64_BIT == 0 - if (!result && buf->__st_ino != (__ino_t) buf->st_ino) - buf->st_ino = buf->__st_ino; -# endif - return result; - } - - __set_errno (saved_errno); - __have_no_stat64 = 1; - } -# endif - - result = INLINE_SYSCALL (stat, 2, CHECK_STRING (name), __ptrvalue (&kbuf)); - if (result == 0) - result = __xstat64_conv (vers, &kbuf, buf); - - return result; #endif + return result; } diff --git a/libc/sysdeps/unix/sysv/linux/xstatconv.c b/libc/sysdeps/unix/sysv/linux/xstatconv.c index bf1dae08c..2e5a1a151 100644 --- a/libc/sysdeps/unix/sysv/linux/xstatconv.c +++ b/libc/sysdeps/unix/sysv/linux/xstatconv.c @@ -1,6 +1,5 @@ /* Convert between the kernel's `struct stat' format, and libc's. - Copyright (C) 1991,1995-1997,2000,2002,2003,2007 - Free Software Foundation, Inc. + Copyright (C) 1991-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 @@ -32,7 +31,7 @@ struct kernel_stat; #include <string.h> -#if !defined __ASSUME_STAT64_SYSCALL || defined XSTAT_IS_XSTAT64 +#ifdef XSTAT_IS_XSTAT64 int __xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf) { |