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