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