patches/glibc/ports-2.10.1/400-alpha-xstat.patch
changeset 1625 fde082da9813
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/patches/glibc/ports-2.10.1/400-alpha-xstat.patch	Fri Nov 13 21:37:18 2009 +0100
     1.3 @@ -0,0 +1,250 @@
     1.4 +http://sources.redhat.com/bugzilla/show_bug.cgi?id=1026
     1.5 +http://sourceware.org/ml/libc-alpha/2005-02/msg00122.html
     1.6 +
     1.7 +2005-02-26  GOTO Masanori  <gotom@debian.or.jp>
     1.8 +
     1.9 +	* sysdeps/unix/sysv/linux/kernel-features.h: Define
    1.10 +	__ASSUME_STAT64_SYSCALL.
    1.11 +	* sysdeps/unix/sysv/linux/alpha/fxstat.c: Check
    1.12 +	__ASSUME_STAT64_SYSCALL.
    1.13 +	* sysdeps/unix/sysv/linux/alpha/fxstatat.c: Likewise.
    1.14 +	* sysdeps/unix/sysv/linux/alpha/lxstat.c: Likewise.
    1.15 +	* sysdeps/unix/sysv/linux/alpha/xstat.c: Likewise.
    1.16 +	* sysdeps/unix/sysv/linux/alpha/xstatconv.c: Don't define
    1.17 +	__libc_missing_axp_stat64 when it's not needed.
    1.18 +	* sysdeps/unix/sysv/linux/alpha/xstatconv.h: Likewise.
    1.19 +
    1.20 +diff -durN glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/fxstat.c glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/fxstat.c
    1.21 +--- glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/fxstat.c	2009-05-16 10:36:20.000000000 +0200
    1.22 ++++ glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/fxstat.c	2009-11-13 00:50:45.000000000 +0100
    1.23 +@@ -35,27 +35,39 @@
    1.24 + __fxstat (int vers, int fd, struct stat *buf)
    1.25 + {
    1.26 +   INTERNAL_SYSCALL_DECL (err);
    1.27 +-  int result, errno_out;
    1.28 ++  int result;
    1.29 +   struct kernel_stat kbuf;
    1.30 + 
    1.31 ++#if __ASSUME_STAT64_SYSCALL > 0
    1.32 ++  if (vers == _STAT_VER_KERNEL64)
    1.33 ++    {
    1.34 ++      result = INTERNAL_SYSCALL (fstat64, err, 2, fd, buf);
    1.35 ++      if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
    1.36 ++	return result;
    1.37 ++      __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
    1.38 ++      return -1;
    1.39 ++    }
    1.40 ++#elif defined __NR_fstat64
    1.41 +   if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64)
    1.42 +     {
    1.43 ++      int errno_out;
    1.44 +       result = INTERNAL_SYSCALL (fstat64, err, 2, fd, buf);
    1.45 +       if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
    1.46 + 	return result;
    1.47 +       errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
    1.48 +       if (errno_out != ENOSYS)
    1.49 +-	goto fail;
    1.50 ++	{
    1.51 ++	  __set_errno (errno_out);
    1.52 ++	  return -1;
    1.53 ++	}
    1.54 +       __libc_missing_axp_stat64 = 1;
    1.55 +     }
    1.56 ++#endif
    1.57 + 
    1.58 +   result = INTERNAL_SYSCALL (fstat, err, 2, fd, &kbuf);
    1.59 +   if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
    1.60 +     return __xstat_conv (vers, &kbuf, buf);
    1.61 +-  errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
    1.62 +-  
    1.63 +- fail:
    1.64 +-  __set_errno (errno_out);
    1.65 ++  __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
    1.66 +   return -1;
    1.67 + }
    1.68 + hidden_def (__fxstat)
    1.69 +diff -durN glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/fxstatat.c glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/fxstatat.c
    1.70 +--- glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/fxstatat.c	2009-05-16 10:36:20.000000000 +0200
    1.71 ++++ glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/fxstatat.c	2009-11-13 00:50:45.000000000 +0100
    1.72 +@@ -65,6 +65,20 @@
    1.73 +   int result, errno_out;
    1.74 +   struct kernel_stat kst;
    1.75 + 
    1.76 ++#if __ASSUME_STAT64_SYSCALL > 0
    1.77 ++  if (vers == _STAT_VER_KERNEL64)
    1.78 ++    {
    1.79 ++      if (flag & AT_SYMLINK_NOFOLLOW)
    1.80 ++	result = INTERNAL_SYSCALL (lstat64, err, 2, file, st);
    1.81 ++      else
    1.82 ++	result = INTERNAL_SYSCALL (stat64, err, 2, file, st);
    1.83 ++
    1.84 ++      if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
    1.85 ++	return result;
    1.86 ++      errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
    1.87 ++      goto fail;
    1.88 ++    }
    1.89 ++#elif defined __NR_stat64
    1.90 +   if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64)
    1.91 +     {
    1.92 +       if (flag & AT_SYMLINK_NOFOLLOW)
    1.93 +@@ -79,6 +93,7 @@
    1.94 + 	goto fail;
    1.95 +       __libc_missing_axp_stat64 = 1;
    1.96 +     }
    1.97 ++#endif
    1.98 + 
    1.99 +   if (flag & AT_SYMLINK_NOFOLLOW)
   1.100 +     result = INTERNAL_SYSCALL (lstat, err, 2, file, &kst);
   1.101 +diff -durN glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/lxstat.c glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/lxstat.c
   1.102 +--- glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/lxstat.c	2009-05-16 10:36:20.000000000 +0200
   1.103 ++++ glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/lxstat.c	2009-11-13 00:50:45.000000000 +0100
   1.104 +@@ -35,27 +35,39 @@
   1.105 + __lxstat (int vers, const char *name, struct stat *buf)
   1.106 + {
   1.107 +   INTERNAL_SYSCALL_DECL (err);
   1.108 +-  int result, errno_out;
   1.109 ++  int result;
   1.110 +   struct kernel_stat kbuf;
   1.111 + 
   1.112 ++#if __ASSUME_STAT64_SYSCALL > 0
   1.113 ++  if (vers == _STAT_VER_KERNEL64)
   1.114 ++    {
   1.115 ++      result = INTERNAL_SYSCALL (lstat64, err, 2, name, buf);
   1.116 ++      if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
   1.117 ++	return result;
   1.118 ++      __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
   1.119 ++      return -1;
   1.120 ++    }
   1.121 ++#elif defined __NR_lstat64
   1.122 +   if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64)
   1.123 +     {
   1.124 ++      int errno_out;
   1.125 +       result = INTERNAL_SYSCALL (lstat64, err, 2, name, buf);
   1.126 +       if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
   1.127 + 	return result;
   1.128 +       errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
   1.129 +       if (errno_out != ENOSYS)
   1.130 +-	goto fail;
   1.131 ++	{
   1.132 ++	  __set_errno (errno_out);
   1.133 ++	  return -1;
   1.134 ++	}
   1.135 +       __libc_missing_axp_stat64 = 1;
   1.136 +     }
   1.137 ++#endif
   1.138 + 
   1.139 +   result = INTERNAL_SYSCALL (lstat, err, 2, name, &kbuf);
   1.140 +   if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
   1.141 +     return __xstat_conv (vers, &kbuf, buf);
   1.142 +-  errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
   1.143 +-  
   1.144 +- fail:
   1.145 +-  __set_errno (errno_out);
   1.146 ++  __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
   1.147 +   return -1;
   1.148 + }
   1.149 + hidden_def (__lxstat)
   1.150 +diff -durN glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstat.c glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstat.c
   1.151 +--- glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstat.c	2009-05-16 10:36:20.000000000 +0200
   1.152 ++++ glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstat.c	2009-11-13 00:50:45.000000000 +0100
   1.153 +@@ -35,27 +35,39 @@
   1.154 + __xstat (int vers, const char *name, struct stat *buf)
   1.155 + {
   1.156 +   INTERNAL_SYSCALL_DECL (err);
   1.157 +-  int result, errno_out;
   1.158 ++  int result;
   1.159 +   struct kernel_stat kbuf;
   1.160 + 
   1.161 ++#if __ASSUME_STAT64_SYSCALL > 0
   1.162 ++  if (vers == _STAT_VER_KERNEL64)
   1.163 ++    {
   1.164 ++      result = INTERNAL_SYSCALL (stat64, err, 2, name, buf);
   1.165 ++      if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
   1.166 ++	return result;
   1.167 ++      __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
   1.168 ++      return -1;
   1.169 ++    }
   1.170 ++#elif defined __NR_stat64
   1.171 +   if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64)
   1.172 +     {
   1.173 ++      int errno_out;
   1.174 +       result = INTERNAL_SYSCALL (stat64, err, 2, name, buf);
   1.175 +       if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
   1.176 + 	return result;
   1.177 +       errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
   1.178 +       if (errno_out != ENOSYS)
   1.179 +-	goto fail;
   1.180 ++	{
   1.181 ++	  __set_errno (errno_out);
   1.182 ++	  return -1;
   1.183 ++	}
   1.184 +       __libc_missing_axp_stat64 = 1;
   1.185 +     }
   1.186 ++#endif
   1.187 + 
   1.188 +   result = INTERNAL_SYSCALL (stat, err, 2, name, &kbuf);
   1.189 +   if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
   1.190 +     return __xstat_conv (vers, &kbuf, buf);
   1.191 +-  errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
   1.192 +-  
   1.193 +- fail:
   1.194 +-  __set_errno (errno_out);
   1.195 ++  __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
   1.196 +   return -1;
   1.197 + }
   1.198 + hidden_def (__xstat)
   1.199 +diff -durN glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstatconv.c glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstatconv.c
   1.200 +--- glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstatconv.c	2009-05-16 10:36:20.000000000 +0200
   1.201 ++++ glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstatconv.c	2009-11-13 00:50:45.000000000 +0100
   1.202 +@@ -22,9 +22,14 @@
   1.203 + #include <sys/stat.h>
   1.204 + #include <kernel_stat.h>
   1.205 + #include <xstatconv.h>
   1.206 ++#include <sys/syscall.h>
   1.207 + 
   1.208 + 
   1.209 ++#ifdef __NR_stat64
   1.210 ++# if __ASSUME_STAT64_SYSCALL == 0
   1.211 + int __libc_missing_axp_stat64;
   1.212 ++# endif
   1.213 ++#endif
   1.214 + 
   1.215 + int
   1.216 + __xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf)
   1.217 +diff -durN glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstatconv.h glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstatconv.h
   1.218 +--- glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstatconv.h	2009-05-16 10:36:20.000000000 +0200
   1.219 ++++ glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstatconv.h	2009-11-13 00:50:45.000000000 +0100
   1.220 +@@ -18,7 +18,12 @@
   1.221 +    02111-1307 USA.  */
   1.222 + 
   1.223 + #include <kernel-features.h>
   1.224 ++#include <sys/syscall.h>
   1.225 + 
   1.226 ++#ifdef __NR_stat64
   1.227 ++# if __ASSUME_STAT64_SYSCALL == 0
   1.228 + extern int __libc_missing_axp_stat64 attribute_hidden;
   1.229 ++# endif
   1.230 ++#endif
   1.231 + extern int __xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf)
   1.232 +   attribute_hidden;
   1.233 +diff -durN glibc-2.10.1.orig/ports/sysdeps/unix/sysv/linux/alpha/fxstat.c glibc-2.10.1/ports/sysdeps/unix/sysv/linux/alpha/fxstat.c
   1.234 +diff -durN glibc-2.10.1.orig/ports/sysdeps/unix/sysv/linux/alpha/fxstatat.c glibc-2.10.1/ports/sysdeps/unix/sysv/linux/alpha/fxstatat.c
   1.235 +diff -durN glibc-2.10.1.orig/ports/sysdeps/unix/sysv/linux/alpha/lxstat.c glibc-2.10.1/ports/sysdeps/unix/sysv/linux/alpha/lxstat.c
   1.236 +diff -durN glibc-2.10.1.orig/ports/sysdeps/unix/sysv/linux/alpha/xstat.c glibc-2.10.1/ports/sysdeps/unix/sysv/linux/alpha/xstat.c
   1.237 +diff -durN glibc-2.10.1.orig/ports/sysdeps/unix/sysv/linux/alpha/xstatconv.c glibc-2.10.1/ports/sysdeps/unix/sysv/linux/alpha/xstatconv.c
   1.238 +diff -durN glibc-2.10.1.orig/ports/sysdeps/unix/sysv/linux/alpha/xstatconv.h glibc-2.10.1/ports/sysdeps/unix/sysv/linux/alpha/xstatconv.h
   1.239 +diff -durN glibc-2.10.1.orig/sysdeps/unix/sysv/linux/kernel-features.h glibc-2.10.1/sysdeps/unix/sysv/linux/kernel-features.h
   1.240 +--- glibc-2.10.1.orig/sysdeps/unix/sysv/linux/kernel-features.h	2009-05-09 08:54:20.000000000 +0200
   1.241 ++++ glibc-2.10.1/sysdeps/unix/sysv/linux/kernel-features.h	2009-11-13 00:50:45.000000000 +0100
   1.242 +@@ -395,6 +395,11 @@
   1.243 + # define __ASSUME_GETDENTS32_D_TYPE	1
   1.244 + #endif
   1.245 + 
   1.246 ++/* Starting with version 2.6.4, alpha stat64 syscalls are available.  */
   1.247 ++#if __LINUX_KERNEL_VERSION >= 0x020604 && defined __alpha__
   1.248 ++# define __ASSUME_STAT64_SYSCALL	1
   1.249 ++#endif
   1.250 ++
   1.251 + /* Starting with version 2.5.3, the initial location returned by `brk'
   1.252 +    after exec is always rounded up to the next page.  */
   1.253 + #if __LINUX_KERNEL_VERSION >= 132355