Remove __ASSUME_STAT64_SYSCALL.

This commit is contained in:
Joseph Myers 2012-08-27 19:36:04 +00:00
parent 5dbf56af7e
commit ad845c0be9
22 changed files with 81 additions and 402 deletions

View File

@ -1,3 +1,38 @@
2012-08-27 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/kernel-features.h
(__ASSUME_STAT64_SYSCALL): Remove all definitions.
* sysdeps/unix/sysv/linux/fxstat64.c [!__ASSUME_STAT64_SYSCALL]:
Remove conditional code.
[__ASSUME_STAT64_SYSCALL]: Make code unconditional.
* sysdeps/unix/sysv/linux/fxstatat64.c [!__ASSUME_STAT64_SYSCALL]:
Remove conditional code.
[__ASSUME_STAT64_SYSCALL]: Make code unconditional.
* sysdeps/unix/sysv/linux/i386/fxstat.c
[!__ASSUME_STAT64_SYSCALL]: Remove conditional code.
[__ASSUME_STAT64_SYSCALL]: Make code unconditional.
* sysdeps/unix/sysv/linux/i386/fxstatat.c
[!__ASSUME_STAT64_SYSCALL]: Remove conditional code.
[__ASSUME_STAT64_SYSCALL]: Make code unconditional.
* sysdeps/unix/sysv/linux/i386/lxstat.c
[!__ASSUME_STAT64_SYSCALL]: Remove conditional code.
[__ASSUME_STAT64_SYSCALL]: Make code unconditional.
* sysdeps/unix/sysv/linux/i386/xstat.c [!__ASSUME_STAT64_SYSCALL]:
Remove conditional code.
[__ASSUME_STAT64_SYSCALL]: Make code unconditional.
* sysdeps/unix/sysv/linux/lxstat64.c [!__ASSUME_STAT64_SYSCALL]:
Remove conditional code.
[__ASSUME_STAT64_SYSCALL]: Make code unconditional.
* sysdeps/unix/sysv/linux/sparc/sparc64/xstat.c: Do not include
<kernel-features.h>.
[__NR_stat64 && !__ASSUME_STAT64_SYSCALL] (__have_no_stat64):
Remove.
* sysdeps/unix/sysv/linux/xstat64.c [!__ASSUME_STAT64_SYSCALL]:
Remove conditional code.
[__ASSUME_STAT64_SYSCALL]: Make code unconditional.
* sysdeps/unix/sysv/linux/xstatconv.c [!__ASSUME_STAT64_SYSCALL]:
Remove conditional.
2012-08-27 Mike Frysinger <vapier@gentoo.org> 2012-08-27 Mike Frysinger <vapier@gentoo.org>
[BZ #5400] [BZ #5400]

View File

@ -1,3 +1,8 @@
2012-08-27 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/arm/kernel-features.h
(__ASSUME_STAT64_SYSCALL): Remove.
2012-08-23 Steve McIntyre <steve.mcintyre@linaro.org> 2012-08-23 Steve McIntyre <steve.mcintyre@linaro.org>
* sysdeps/unix/sysv/linux/arm/ldsodefs.h (VALID_FLOAT_ABI): Define * sysdeps/unix/sysv/linux/arm/ldsodefs.h (VALID_FLOAT_ABI): Define

View File

@ -1,3 +1,8 @@
2012-08-27 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/kernel-features.h
(__ASSUME_STAT64_SYSCALL): Remove.
2012-08-20 Joseph Myers <joseph@codesourcery.com> 2012-08-20 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/hppa/kernel-features.h * sysdeps/unix/sysv/linux/hppa/kernel-features.h

View File

@ -1,3 +1,8 @@
2012-08-27 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/m68k/kernel-features.h
(__ASSUME_STAT64_SYSCALL): Remove.
2012-08-21 Joseph Myers <joseph@codesourcery.com> 2012-08-21 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/m68k/kernel-features.h * sysdeps/unix/sysv/linux/m68k/kernel-features.h

View File

@ -1,3 +1,8 @@
2012-08-27 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/mips/kernel-features.h
(__ASSUME_STAT64_SYSCALL): Remove.
2012-08-27 Guido Guenther <agx@sigxcpu.org> 2012-08-27 Guido Guenther <agx@sigxcpu.org>
* sysdeps/mips/fpu_control.h (_FPU_RESERVED): Set bit 23. * sysdeps/mips/fpu_control.h (_FPU_RESERVED): Set bit 23.

View File

@ -1,3 +1,8 @@
2012-08-27 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/tile/kernel-features.h
(__ASSUME_STAT64_SYSCALL): Remove.
2012-08-21 Joseph Myers <joseph@codesourcery.com> 2012-08-21 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/tile/kernel-features.h * sysdeps/unix/sysv/linux/tile/kernel-features.h

View File

@ -20,10 +20,6 @@
/* The utimes syscall was added before 2.6.1. */ /* The utimes syscall was added before 2.6.1. */
#define __ASSUME_UTIMES 1 #define __ASSUME_UTIMES 1
/* On ARM the stat64/lstat64/fstat64 syscalls were introduced in
2.3.35. */
#define __ASSUME_STAT64_SYSCALL 1
/* The signal frame layout changed in 2.6.18. */ /* The signal frame layout changed in 2.6.18. */
#if __LINUX_KERNEL_VERSION >= 132626 #if __LINUX_KERNEL_VERSION >= 132626
# define __ASSUME_SIGFRAME_V2 1 # define __ASSUME_SIGFRAME_V2 1

View File

@ -23,7 +23,6 @@
and expect the final version here. */ and expect the final version here. */
#define __ASSUME_32BITUIDS 1 #define __ASSUME_32BITUIDS 1
#define __ASSUME_TRUNCATE64_SYSCALL 1 #define __ASSUME_TRUNCATE64_SYSCALL 1
#define __ASSUME_STAT64_SYSCALL 1
#define __ASSUME_IPC64 1 #define __ASSUME_IPC64 1
#define __ASSUME_ST_INO_64_BIT 1 #define __ASSUME_ST_INO_64_BIT 1
#define __ASSUME_GETDENTS64_SYSCALL 1 #define __ASSUME_GETDENTS64_SYSCALL 1

View File

@ -17,9 +17,6 @@
License along with the GNU C Library. If not, see License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
/* These features were surely available with 2.4.12. */
#define __ASSUME_STAT64_SYSCALL 1
/* Many syscalls were added in 2.6.10 for m68k. */ /* Many syscalls were added in 2.6.10 for m68k. */
#define __ASSUME_UTIMES 1 #define __ASSUME_UTIMES 1

View File

@ -25,12 +25,6 @@
/* MIPS had the utimes syscall by 2.6.0. */ /* MIPS had the utimes syscall by 2.6.0. */
#define __ASSUME_UTIMES 1 #define __ASSUME_UTIMES 1
/* MIPS o32 had the stat64 syscalls by 2.6.0, but for n32 and n64 the
plain stat syscalls are 64-bit. */
#if _MIPS_SIM == _ABIO32
# define __ASSUME_STAT64_SYSCALL 1
#endif
/* Support for the eventfd2 and signalfd4 syscalls was added in 2.6.27. */ /* Support for the eventfd2 and signalfd4 syscalls was added in 2.6.27. */
#if __LINUX_KERNEL_VERSION >= 0x02061c #if __LINUX_KERNEL_VERSION >= 0x02061c
# define __ASSUME_EVENTFD2 1 # define __ASSUME_EVENTFD2 1

View File

@ -18,7 +18,6 @@
/* TILE glibc support starts with 2.6.36, guaranteeing many kernel features. */ /* TILE glibc support starts with 2.6.36, guaranteeing many kernel features. */
#define __ASSUME_STAT64_SYSCALL 1
#define __ASSUME_UTIMES 1 #define __ASSUME_UTIMES 1
#define __ASSUME_O_CLOEXEC 1 #define __ASSUME_O_CLOEXEC 1
#define __ASSUME_SOCK_CLOEXEC 1 #define __ASSUME_SOCK_CLOEXEC 1

View File

@ -1,5 +1,5 @@
/* fxstat64 using old-style Unix fstat system call. /* fxstat64 using Linux fstat64 system call.
Copyright (C) 1997-2002, 2003, 2006 Free Software Foundation, Inc. Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -27,57 +27,18 @@
#include <kernel-features.h> #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. */ /* Get information about the file FD in BUF. */
int int
___fxstat64 (int vers, int fd, struct stat64 *buf) ___fxstat64 (int vers, int fd, struct stat64 *buf)
{ {
int result; int result;
#if __ASSUME_STAT64_SYSCALL > 0
result = INLINE_SYSCALL (fstat64, 2, fd, CHECK_1 (buf)); 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) if (__builtin_expect (!result, 1) && buf->__st_ino != (__ino_t) buf->st_ino)
buf->st_ino = 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 #endif
return result;
} }
#include <shlib-compat.h> #include <shlib-compat.h>

View File

@ -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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -29,18 +29,6 @@
#include <kernel-features.h> #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. */ /* Get information about the file NAME in BUF. */
int int
@ -110,7 +98,6 @@ __fxstatat64 (int vers, int fd, const char *file, struct stat64 *st, int flag)
file = buf; file = buf;
} }
# if __ASSUME_STAT64_SYSCALL > 0
if (flag & AT_SYMLINK_NOFOLLOW) if (flag & AT_SYMLINK_NOFOLLOW)
result = INTERNAL_SYSCALL (lstat64, err, 2, CHECK_STRING (file), result = INTERNAL_SYSCALL (lstat64, err, 2, CHECK_STRING (file),
CHECK_1 (st)); CHECK_1 (st));
@ -119,51 +106,12 @@ __fxstatat64 (int vers, int fd, const char *file, struct stat64 *st, int flag)
CHECK_1 (st)); CHECK_1 (st));
if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) 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) if (st->__st_ino != (__ino_t) st->st_ino)
st->st_ino = st->__st_ino; st->st_ino = st->__st_ino;
# endif # endif
return result; 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); __atfct_seterrno (INTERNAL_SYSCALL_ERRNO (result, err), fd, buf);
return -1; return -1;

View File

@ -1,6 +1,5 @@
/* fxstat using old-style Unix fstat system call. /* fxstat using old-style Unix fstat system call.
Copyright (C) 1991,1995-1998,2000,2002,2003,2006 Copyright (C) 1991-2012 Free Software Foundation, Inc.
Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -34,26 +33,15 @@
#include <xstatconv.h> #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. */ /* Get information about the file FD in BUF. */
int int
__fxstat (int vers, int fd, struct stat *buf) __fxstat (int vers, int fd, struct stat *buf)
{ {
#if __ASSUME_STAT64_SYSCALL == 0
struct kernel_stat kbuf;
#endif
int result; int result;
if (vers == _STAT_VER_KERNEL) if (vers == _STAT_VER_KERNEL)
return INLINE_SYSCALL (fstat, 2, fd, CHECK_1 ((struct kernel_stat *) buf)); return INLINE_SYSCALL (fstat, 2, fd, CHECK_1 ((struct kernel_stat *) buf));
#if __ASSUME_STAT64_SYSCALL > 0
{ {
struct stat64 buf64; struct stat64 buf64;
@ -62,33 +50,6 @@ __fxstat (int vers, int fd, struct stat *buf)
result = __xstat32_conv (vers, &buf64, buf); result = __xstat32_conv (vers, &buf64, buf);
return result; 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) hidden_def (__fxstat)

View File

@ -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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -35,13 +35,6 @@
#include <xstatconv.h> #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. */ /* Get information about the file NAME relative to FD in ST. */
int int
@ -106,9 +99,6 @@ __fxstatat (int vers, int fd, const char *file, struct stat *st, int flag)
file = buf; file = buf;
} }
# if __ASSUME_STAT64_SYSCALL == 0
struct kernel_stat kst;
# endif
if (vers == _STAT_VER_KERNEL) if (vers == _STAT_VER_KERNEL)
{ {
if (flag & AT_SYMLINK_NOFOLLOW) if (flag & AT_SYMLINK_NOFOLLOW)
@ -120,8 +110,6 @@ __fxstatat (int vers, int fd, const char *file, struct stat *st, int flag)
goto out; goto out;
} }
# if __ASSUME_STAT64_SYSCALL > 0
if (flag & AT_SYMLINK_NOFOLLOW) if (flag & AT_SYMLINK_NOFOLLOW)
result = INTERNAL_SYSCALL (lstat64, err, 2, CHECK_STRING (file), result = INTERNAL_SYSCALL (lstat64, err, 2, CHECK_STRING (file),
__ptrvalue (&st64)); __ptrvalue (&st64));
@ -130,38 +118,6 @@ __fxstatat (int vers, int fd, const char *file, struct stat *st, int flag)
__ptrvalue (&st64)); __ptrvalue (&st64));
if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1)) if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
return __xstat32_conv (vers, &st64, st); 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: out:
if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (result, err), 0)) if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (result, err), 0))

View File

@ -1,6 +1,5 @@
/* lxstat using old-style Unix lstat system call. /* lxstat using old-style Unix lstat system call.
Copyright (C) 1991,1995,1996,1997,1998,2000,2002,2003,2006 Copyright (C) 1991-2012 Free Software Foundation, Inc.
Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -34,27 +33,16 @@
#include <xstatconv.h> #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. */ /* Get information about the file NAME in BUF. */
int int
__lxstat (int vers, const char *name, struct stat *buf) __lxstat (int vers, const char *name, struct stat *buf)
{ {
#if __ASSUME_STAT64_SYSCALL == 0
struct kernel_stat kbuf;
#endif
int result; int result;
if (vers == _STAT_VER_KERNEL) if (vers == _STAT_VER_KERNEL)
return INLINE_SYSCALL (lstat, 2, CHECK_STRING (name), CHECK_1 ((struct kernel_stat *) buf)); return INLINE_SYSCALL (lstat, 2, CHECK_STRING (name), CHECK_1 ((struct kernel_stat *) buf));
#if __ASSUME_STAT64_SYSCALL > 0
{ {
struct stat64 buf64; struct stat64 buf64;
@ -63,32 +51,6 @@ __lxstat (int vers, const char *name, struct stat *buf)
result = __xstat32_conv (vers, &buf64, buf); result = __xstat32_conv (vers, &buf64, buf);
return result; 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) hidden_def (__lxstat)

View File

@ -1,6 +1,5 @@
/* xstat using old-style Unix stat system call. /* xstat using old-style Unix stat system call.
Copyright (C) 1991,95,96,97,98,2000,2002,2003,2006 Copyright (C) 1991-2012 Free Software Foundation, Inc.
Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -34,27 +33,16 @@
#include <xstatconv.h> #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. */ /* Get information about the file NAME in BUF. */
int int
__xstat (int vers, const char *name, struct stat *buf) __xstat (int vers, const char *name, struct stat *buf)
{ {
#if __ASSUME_STAT64_SYSCALL == 0
struct kernel_stat kbuf;
#endif
int result; int result;
if (vers == _STAT_VER_KERNEL) if (vers == _STAT_VER_KERNEL)
return INLINE_SYSCALL (stat, 2, CHECK_STRING (name), CHECK_1 ((struct kernel_stat *) buf)); return INLINE_SYSCALL (stat, 2, CHECK_STRING (name), CHECK_1 ((struct kernel_stat *) buf));
#if __ASSUME_STAT64_SYSCALL > 0
{ {
struct stat64 buf64; struct stat64 buf64;
@ -63,31 +51,6 @@ __xstat (int vers, const char *name, struct stat *buf)
result = __xstat32_conv (vers, &buf64, buf); result = __xstat32_conv (vers, &buf64, buf);
return result; 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) hidden_def (__xstat)
weak_alias (__xstat, _xstat); weak_alias (__xstat, _xstat);

View File

@ -40,23 +40,6 @@
/* The sendfile syscall was introduced in 2.2.0. */ /* The sendfile syscall was introduced in 2.2.0. */
#define __ASSUME_SENDFILE 1 #define __ASSUME_SENDFILE 1
/* On x86 the stat64/lstat64/fstat64 syscalls were introduced in 2.3.34. */
#ifdef __i386__
# define __ASSUME_STAT64_SYSCALL 1
#endif
/* On sparc the stat64/lstat64/fstat64 syscalls were introduced in
2.3.35. */
#if defined __sparc__ && !defined __arch64__
# 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 /* 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 PPC introduced a correct IPC64. But PowerPC64 does not support a
separate 64-bit syscall, already 64-bit. */ separate 64-bit syscall, already 64-bit. */
@ -64,11 +47,6 @@
# define __ASSUME_IPC64 1 # define __ASSUME_IPC64 1
#endif #endif
/* SH kernels got stat64 during 2.4.0-test. */
#ifdef __sh__
# define __ASSUME_STAT64_SYSCALL 1
#endif
/* The changed st_ino field appeared in 2.4.0-test6. However, SH is lame, /* 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. */ and still does not have a 64-bit inode field. */
#ifndef __sh__ #ifndef __sh__
@ -98,11 +76,6 @@
# define __ASSUME_UTIMES 1 # define __ASSUME_UTIMES 1
#endif #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 /* 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 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, the code. On x86_64 and SH this appeared first in 2.6.19-rc1,

View File

@ -1,5 +1,5 @@
/* lxstat64 using old-style Unix lstat system call. /* lxstat64 using Linux lstat64 system call.
Copyright (C) 1997-2002,2003,2006 Free Software Foundation, Inc. Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -27,56 +27,17 @@
#include <kernel-features.h> #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. */ /* Get information about the file NAME in BUF. */
int int
___lxstat64 (int vers, const char *name, struct stat64 *buf) ___lxstat64 (int vers, const char *name, struct stat64 *buf)
{ {
int result; int result;
#ifdef __ASSUME_STAT64_SYSCALL
result = INLINE_SYSCALL (lstat64, 2, CHECK_STRING (name), CHECK_1 (buf)); 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) if (__builtin_expect (!result, 1) && buf->__st_ino != (__ino_t) buf->st_ino)
buf->st_ino = 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 #endif
return result;
} }
#include <shlib-compat.h> #include <shlib-compat.h>

View File

@ -1,10 +1 @@
#include <kernel-features.h>
#include "../../i386/xstat.c" #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

View File

@ -1,5 +1,5 @@
/* xstat64 using old-style Unix stat system call. /* xstat64 using Linux stat64 system call.
Copyright (C) 1991,1995-2002,2003,2006 Free Software Foundation, Inc. Copyright (C) 1991-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -27,59 +27,18 @@
#include <kernel-features.h> #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. */ /* Get information about the file NAME in BUF. */
int int
___xstat64 (int vers, const char *name, struct stat64 *buf) ___xstat64 (int vers, const char *name, struct stat64 *buf)
{ {
int result; int result;
#if __ASSUME_STAT64_SYSCALL > 0
result = INLINE_SYSCALL (stat64, 2, CHECK_STRING (name), CHECK_1 (buf)); 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) if (__builtin_expect (!result, 1) && buf->__st_ino != (__ino_t) buf->st_ino)
buf->st_ino = 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 #endif
return result;
} }

View File

@ -1,6 +1,5 @@
/* Convert between the kernel's `struct stat' format, and libc's. /* Convert between the kernel's `struct stat' format, and libc's.
Copyright (C) 1991,1995-1997,2000,2002,2003,2007 Copyright (C) 1991-2012 Free Software Foundation, Inc.
Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -32,7 +31,7 @@ struct kernel_stat;
#include <string.h> #include <string.h>
#if !defined __ASSUME_STAT64_SYSCALL || defined XSTAT_IS_XSTAT64 #ifdef XSTAT_IS_XSTAT64
int int
__xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf) __xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf)
{ {