patches/glibc/2.9/440-alpha-glibc-2.4-xstat.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jan 17 23:06:02 2010 +0100 (2010-01-17)
changeset 1740 c57458bb354d
parent 1201 c9967a6e3b25
permissions -rw-r--r--
configure: do not require hg when configuring in an hg clone

When configuring in an hg clone, we need hg to compute the version string.
It can happen that users do not have Mercurial (eg. if they got a snapshot
rather that they did a full clone). In this case, we can still run, of
course, so simply fill the version string with a sufficiently explicit
value, that does not require hg. The date is a good candidate.
yann@1201
     1
Original patch from: gentoo/src/patchsets/glibc/2.9/6001_all_alpha-glibc-2.4-xstat.patch
yann@1201
     2
yann@1201
     3
-= BEGIN original header =-
yann@1201
     4
http://sources.redhat.com/bugzilla/show_bug.cgi?id=1026
yann@1201
     5
http://sourceware.org/ml/libc-alpha/2005-02/msg00122.html
yann@1201
     6
yann@1201
     7
2005-02-26  GOTO Masanori  <gotom@debian.or.jp>
yann@1201
     8
yann@1201
     9
	* sysdeps/unix/sysv/linux/kernel-features.h: Define
yann@1201
    10
	__ASSUME_STAT64_SYSCALL.
yann@1201
    11
	* sysdeps/unix/sysv/linux/alpha/fxstat.c: Check
yann@1201
    12
	__ASSUME_STAT64_SYSCALL.
yann@1201
    13
	* sysdeps/unix/sysv/linux/alpha/fxstatat.c: Likewise.
yann@1201
    14
	* sysdeps/unix/sysv/linux/alpha/lxstat.c: Likewise.
yann@1201
    15
	* sysdeps/unix/sysv/linux/alpha/xstat.c: Likewise.
yann@1201
    16
	* sysdeps/unix/sysv/linux/alpha/xstatconv.c: Don't define
yann@1201
    17
	__libc_missing_axp_stat64 when it's not needed.
yann@1201
    18
	* sysdeps/unix/sysv/linux/alpha/xstatconv.h: Likewise.
yann@1201
    19
yann@1201
    20
-= END original header =-
yann@1201
    21
yann@1201
    22
diff -durN glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/fxstat.c glibc-2_9/sysdeps/unix/sysv/linux/alpha/fxstat.c
yann@1201
    23
--- glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/fxstat.c	2004-03-11 03:58:44.000000000 +0100
yann@1201
    24
+++ glibc-2_9/sysdeps/unix/sysv/linux/alpha/fxstat.c	2009-02-02 22:01:30.000000000 +0100
yann@1201
    25
@@ -35,27 +35,39 @@
yann@1201
    26
 __fxstat (int vers, int fd, struct stat *buf)
yann@1201
    27
 {
yann@1201
    28
   INTERNAL_SYSCALL_DECL (err);
yann@1201
    29
-  int result, errno_out;
yann@1201
    30
+  int result;
yann@1201
    31
   struct kernel_stat kbuf;
yann@1201
    32
 
yann@1201
    33
+#if __ASSUME_STAT64_SYSCALL > 0
yann@1201
    34
+  if (vers == _STAT_VER_KERNEL64)
yann@1201
    35
+    {
yann@1201
    36
+      result = INTERNAL_SYSCALL (fstat64, err, 2, fd, buf);
yann@1201
    37
+      if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
yann@1201
    38
+	return result;
yann@1201
    39
+      __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
yann@1201
    40
+      return -1;
yann@1201
    41
+    }
yann@1201
    42
+#elif defined __NR_fstat64
yann@1201
    43
   if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64)
yann@1201
    44
     {
yann@1201
    45
+      int errno_out;
yann@1201
    46
       result = INTERNAL_SYSCALL (fstat64, err, 2, fd, buf);
yann@1201
    47
       if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
yann@1201
    48
 	return result;
yann@1201
    49
       errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
yann@1201
    50
       if (errno_out != ENOSYS)
yann@1201
    51
-	goto fail;
yann@1201
    52
+	{
yann@1201
    53
+	  __set_errno (errno_out);
yann@1201
    54
+	  return -1;
yann@1201
    55
+	}
yann@1201
    56
       __libc_missing_axp_stat64 = 1;
yann@1201
    57
     }
yann@1201
    58
+#endif
yann@1201
    59
 
yann@1201
    60
   result = INTERNAL_SYSCALL (fstat, err, 2, fd, &kbuf);
yann@1201
    61
   if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
yann@1201
    62
     return __xstat_conv (vers, &kbuf, buf);
yann@1201
    63
-  errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
yann@1201
    64
-  
yann@1201
    65
- fail:
yann@1201
    66
-  __set_errno (errno_out);
yann@1201
    67
+  __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
yann@1201
    68
   return -1;
yann@1201
    69
 }
yann@1201
    70
 hidden_def (__fxstat)
yann@1201
    71
diff -durN glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/fxstatat.c glibc-2_9/sysdeps/unix/sysv/linux/alpha/fxstatat.c
yann@1201
    72
--- glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/fxstatat.c	2006-02-20 23:51:48.000000000 +0100
yann@1201
    73
+++ glibc-2_9/sysdeps/unix/sysv/linux/alpha/fxstatat.c	2009-02-02 22:01:30.000000000 +0100
yann@1201
    74
@@ -65,6 +65,20 @@
yann@1201
    75
   int result, errno_out;
yann@1201
    76
   struct kernel_stat kst;
yann@1201
    77
 
yann@1201
    78
+#if __ASSUME_STAT64_SYSCALL > 0
yann@1201
    79
+  if (vers == _STAT_VER_KERNEL64)
yann@1201
    80
+    {
yann@1201
    81
+      if (flag & AT_SYMLINK_NOFOLLOW)
yann@1201
    82
+	result = INTERNAL_SYSCALL (lstat64, err, 2, file, st);
yann@1201
    83
+      else
yann@1201
    84
+	result = INTERNAL_SYSCALL (stat64, err, 2, file, st);
yann@1201
    85
+
yann@1201
    86
+      if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
yann@1201
    87
+	return result;
yann@1201
    88
+      errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
yann@1201
    89
+      goto fail;
yann@1201
    90
+    }
yann@1201
    91
+#elif defined __NR_stat64
yann@1201
    92
   if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64)
yann@1201
    93
     {
yann@1201
    94
       if (flag & AT_SYMLINK_NOFOLLOW)
yann@1201
    95
@@ -79,6 +93,7 @@
yann@1201
    96
 	goto fail;
yann@1201
    97
       __libc_missing_axp_stat64 = 1;
yann@1201
    98
     }
yann@1201
    99
+#endif
yann@1201
   100
 
yann@1201
   101
   if (flag & AT_SYMLINK_NOFOLLOW)
yann@1201
   102
     result = INTERNAL_SYSCALL (lstat, err, 2, file, &kst);
yann@1201
   103
diff -durN glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/lxstat.c glibc-2_9/sysdeps/unix/sysv/linux/alpha/lxstat.c
yann@1201
   104
--- glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/lxstat.c	2004-03-11 03:58:44.000000000 +0100
yann@1201
   105
+++ glibc-2_9/sysdeps/unix/sysv/linux/alpha/lxstat.c	2009-02-02 22:01:30.000000000 +0100
yann@1201
   106
@@ -35,27 +35,39 @@
yann@1201
   107
 __lxstat (int vers, const char *name, struct stat *buf)
yann@1201
   108
 {
yann@1201
   109
   INTERNAL_SYSCALL_DECL (err);
yann@1201
   110
-  int result, errno_out;
yann@1201
   111
+  int result;
yann@1201
   112
   struct kernel_stat kbuf;
yann@1201
   113
 
yann@1201
   114
+#if __ASSUME_STAT64_SYSCALL > 0
yann@1201
   115
+  if (vers == _STAT_VER_KERNEL64)
yann@1201
   116
+    {
yann@1201
   117
+      result = INTERNAL_SYSCALL (lstat64, err, 2, name, buf);
yann@1201
   118
+      if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
yann@1201
   119
+	return result;
yann@1201
   120
+      __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
yann@1201
   121
+      return -1;
yann@1201
   122
+    }
yann@1201
   123
+#elif defined __NR_lstat64
yann@1201
   124
   if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64)
yann@1201
   125
     {
yann@1201
   126
+      int errno_out;
yann@1201
   127
       result = INTERNAL_SYSCALL (lstat64, err, 2, name, buf);
yann@1201
   128
       if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
yann@1201
   129
 	return result;
yann@1201
   130
       errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
yann@1201
   131
       if (errno_out != ENOSYS)
yann@1201
   132
-	goto fail;
yann@1201
   133
+	{
yann@1201
   134
+	  __set_errno (errno_out);
yann@1201
   135
+	  return -1;
yann@1201
   136
+	}
yann@1201
   137
       __libc_missing_axp_stat64 = 1;
yann@1201
   138
     }
yann@1201
   139
+#endif
yann@1201
   140
 
yann@1201
   141
   result = INTERNAL_SYSCALL (lstat, err, 2, name, &kbuf);
yann@1201
   142
   if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
yann@1201
   143
     return __xstat_conv (vers, &kbuf, buf);
yann@1201
   144
-  errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
yann@1201
   145
-  
yann@1201
   146
- fail:
yann@1201
   147
-  __set_errno (errno_out);
yann@1201
   148
+  __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
yann@1201
   149
   return -1;
yann@1201
   150
 }
yann@1201
   151
 hidden_def (__lxstat)
yann@1201
   152
diff -durN glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/xstat.c glibc-2_9/sysdeps/unix/sysv/linux/alpha/xstat.c
yann@1201
   153
--- glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/xstat.c	2004-03-11 03:58:44.000000000 +0100
yann@1201
   154
+++ glibc-2_9/sysdeps/unix/sysv/linux/alpha/xstat.c	2009-02-02 22:01:30.000000000 +0100
yann@1201
   155
@@ -35,27 +35,39 @@
yann@1201
   156
 __xstat (int vers, const char *name, struct stat *buf)
yann@1201
   157
 {
yann@1201
   158
   INTERNAL_SYSCALL_DECL (err);
yann@1201
   159
-  int result, errno_out;
yann@1201
   160
+  int result;
yann@1201
   161
   struct kernel_stat kbuf;
yann@1201
   162
 
yann@1201
   163
+#if __ASSUME_STAT64_SYSCALL > 0
yann@1201
   164
+  if (vers == _STAT_VER_KERNEL64)
yann@1201
   165
+    {
yann@1201
   166
+      result = INTERNAL_SYSCALL (stat64, err, 2, name, buf);
yann@1201
   167
+      if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
yann@1201
   168
+	return result;
yann@1201
   169
+      __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
yann@1201
   170
+      return -1;
yann@1201
   171
+    }
yann@1201
   172
+#elif defined __NR_stat64
yann@1201
   173
   if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64)
yann@1201
   174
     {
yann@1201
   175
+      int errno_out;
yann@1201
   176
       result = INTERNAL_SYSCALL (stat64, err, 2, name, buf);
yann@1201
   177
       if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
yann@1201
   178
 	return result;
yann@1201
   179
       errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
yann@1201
   180
       if (errno_out != ENOSYS)
yann@1201
   181
-	goto fail;
yann@1201
   182
+	{
yann@1201
   183
+	  __set_errno (errno_out);
yann@1201
   184
+	  return -1;
yann@1201
   185
+	}
yann@1201
   186
       __libc_missing_axp_stat64 = 1;
yann@1201
   187
     }
yann@1201
   188
+#endif
yann@1201
   189
 
yann@1201
   190
   result = INTERNAL_SYSCALL (stat, err, 2, name, &kbuf);
yann@1201
   191
   if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
yann@1201
   192
     return __xstat_conv (vers, &kbuf, buf);
yann@1201
   193
-  errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
yann@1201
   194
-  
yann@1201
   195
- fail:
yann@1201
   196
-  __set_errno (errno_out);
yann@1201
   197
+  __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
yann@1201
   198
   return -1;
yann@1201
   199
 }
yann@1201
   200
 hidden_def (__xstat)
yann@1201
   201
diff -durN glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/xstatconv.c glibc-2_9/sysdeps/unix/sysv/linux/alpha/xstatconv.c
yann@1201
   202
--- glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/xstatconv.c	2004-03-11 03:58:44.000000000 +0100
yann@1201
   203
+++ glibc-2_9/sysdeps/unix/sysv/linux/alpha/xstatconv.c	2009-02-02 22:01:30.000000000 +0100
yann@1201
   204
@@ -22,9 +22,14 @@
yann@1201
   205
 #include <sys/stat.h>
yann@1201
   206
 #include <kernel_stat.h>
yann@1201
   207
 #include <xstatconv.h>
yann@1201
   208
+#include <sys/syscall.h>
yann@1201
   209
 
yann@1201
   210
 
yann@1201
   211
+#ifdef __NR_stat64
yann@1201
   212
+# if __ASSUME_STAT64_SYSCALL == 0
yann@1201
   213
 int __libc_missing_axp_stat64;
yann@1201
   214
+# endif
yann@1201
   215
+#endif
yann@1201
   216
 
yann@1201
   217
 int
yann@1201
   218
 __xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf)
yann@1201
   219
diff -durN glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/xstatconv.h glibc-2_9/sysdeps/unix/sysv/linux/alpha/xstatconv.h
yann@1201
   220
--- glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/xstatconv.h	2006-01-08 09:21:16.000000000 +0100
yann@1201
   221
+++ glibc-2_9/sysdeps/unix/sysv/linux/alpha/xstatconv.h	2009-02-02 22:01:30.000000000 +0100
yann@1201
   222
@@ -18,7 +18,12 @@
yann@1201
   223
    02111-1307 USA.  */
yann@1201
   224
 
yann@1201
   225
 #include <kernel-features.h>
yann@1201
   226
+#include <sys/syscall.h>
yann@1201
   227
 
yann@1201
   228
+#ifdef __NR_stat64
yann@1201
   229
+# if __ASSUME_STAT64_SYSCALL == 0
yann@1201
   230
 extern int __libc_missing_axp_stat64 attribute_hidden;
yann@1201
   231
+# endif
yann@1201
   232
+#endif
yann@1201
   233
 extern int __xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf)
yann@1201
   234
   attribute_hidden;
yann@1201
   235
diff -durN glibc-2_9.orig/sysdeps/unix/sysv/linux/kernel-features.h glibc-2_9/sysdeps/unix/sysv/linux/kernel-features.h
yann@1201
   236
--- glibc-2_9.orig/sysdeps/unix/sysv/linux/kernel-features.h	2008-08-01 23:51:04.000000000 +0200
yann@1201
   237
+++ glibc-2_9/sysdeps/unix/sysv/linux/kernel-features.h	2009-02-02 22:01:30.000000000 +0100
yann@1201
   238
@@ -395,6 +395,11 @@
yann@1201
   239
 # define __ASSUME_GETDENTS32_D_TYPE	1
yann@1201
   240
 #endif
yann@1201
   241
 
yann@1201
   242
+/* Starting with version 2.6.4, alpha stat64 syscalls are available.  */
yann@1201
   243
+#if __LINUX_KERNEL_VERSION >= 0x020604 && defined __alpha__
yann@1201
   244
+# define __ASSUME_STAT64_SYSCALL	1
yann@1201
   245
+#endif
yann@1201
   246
+
yann@1201
   247
 /* Starting with version 2.5.3, the initial location returned by `brk'
yann@1201
   248
    after exec is always rounded up to the next page.  */
yann@1201
   249
 #if __LINUX_KERNEL_VERSION >= 132355