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 Sep 12 23:38:18 2010 +0200
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