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