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 Mon Oct 18 16:51:01 2010 +0200
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