This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: PATCH: Update x86_64 bits/stat.h
On Thu, May 31, 2012 at 4:43 PM, Roland McGrath <roland@hack.frob.com> wrote:
> That is fine. ?Have you verified that these are the only differences
> between the old i386 file and the i386 case in the x86_64 file?
>
>
Here is the diff. It looks OK to me.
--
H.J.
--
--- ./sysdeps/unix/sysv/linux/bits/stat.h 2012-02-11 10:04:07.113326914 -0
800
+++ ./sysdeps/unix/sysv/linux/x86_64/bits/stat.h 2012-05-31 16:35:44.5767
16281 -0700
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992, 1995-2002, 2009, 2010 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -23,41 +23,60 @@
#define _BITS_STAT_H 1
/* Versions of the `struct stat' data structure. */
+#ifndef __x86_64__
#define _STAT_VER_LINUX_OLD 1
#define _STAT_VER_KERNEL 1
#define _STAT_VER_SVR4 2
#define _STAT_VER_LINUX 3
-#define _STAT_VER _STAT_VER_LINUX /* The one defined below. */
-/* Versions of the `xmknod' interface. */
+/* i386 versions of the `xmknod' interface. */
#define _MKNOD_VER_LINUX 1
#define _MKNOD_VER_SVR4 2
#define _MKNOD_VER _MKNOD_VER_LINUX /* The bits defined below. */
+#else
+# define _STAT_VER_KERNEL 0
+# define _STAT_VER_LINUX 1
+
+/* x86-64 versions of the `xmknod' interface. */
+# define _MKNOD_VER_LINUX 0
+#endif
+#define _STAT_VER _STAT_VER_LINUX
struct stat
{
__dev_t st_dev; /* Device. */
+#ifndef __x86_64__
unsigned short int __pad1;
-#ifndef __USE_FILE_OFFSET64
+#endif
+#if defined __x86_64__ || !defined __USE_FILE_OFFSET64
__ino_t st_ino; /* File serial number. */
#else
__ino_t __st_ino; /* 32bit file serial number. */
#endif
+#ifndef __x86_64__
__mode_t st_mode; /* File mode. */
__nlink_t st_nlink; /* Link count. */
+#else
+ __nlink_t st_nlink; /* Link count. */
+ __mode_t st_mode; /* File mode. */
+#endif
__uid_t st_uid; /* User ID of the file's owner. */
__gid_t st_gid; /* Group ID of the file's group.*/
+#ifdef __x86_64__
+ int __pad0;
+#endif
__dev_t st_rdev; /* Device number, if device. */
+#ifndef __x86_64__
unsigned short int __pad2;
-#ifndef __USE_FILE_OFFSET64
+#endif
+#if defined __x86_64__ || !defined __USE_FILE_OFFSET64
__off_t st_size; /* Size of file, in bytes. */
#else
__off64_t st_size; /* Size of file, in bytes. */
#endif
__blksize_t st_blksize; /* Optimal block size for I/O. */
-
-#ifndef __USE_FILE_OFFSET64
+#if defined __x86_64__ || !defined __USE_FILE_OFFSET64
__blkcnt_t st_blocks; /* Number 512-byte blocks allocated. */
#else
__blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */
@@ -77,37 +96,52 @@ struct stat
# define st_ctime st_ctim.tv_sec
#else
__time_t st_atime; /* Time of last access. */
- unsigned long int st_atimensec; /* Nscecs of last access. */
+ __syscall_ulong_t st_atimensec; /* Nscecs of last access. */
__time_t st_mtime; /* Time of last modification. */
- unsigned long int st_mtimensec; /* Nsecs of last modification. */
+ __syscall_ulong_t st_mtimensec; /* Nsecs of last modification. */
__time_t st_ctime; /* Time of last status change. */
- unsigned long int st_ctimensec; /* Nsecs of last status change. */
+ __syscall_ulong_t st_ctimensec; /* Nsecs of last status change. */
#endif
+#ifdef __x86_64__
+ __syscall_slong_t __unused[3];
+#else
#ifndef __USE_FILE_OFFSET64
unsigned long int __unused4;
unsigned long int __unused5;
#else
__ino64_t st_ino; /* File serial number. */
#endif
+#endif
};
#ifdef __USE_LARGEFILE64
+/* Note stat64 has the same shape as stat for x86-64. */
struct stat64
{
__dev_t st_dev; /* Device. */
+# ifdef __x86_64__
+ __ino64_t st_ino; /* File serial number. */
+ __nlink_t st_nlink; /* Link count. */
+ __mode_t st_mode; /* File mode. */
+# else
unsigned int __pad1;
-
__ino_t __st_ino; /* 32bit file serial number. */
__mode_t st_mode; /* File mode. */
__nlink_t st_nlink; /* Link count. */
+# endif
__uid_t st_uid; /* User ID of the file's owner. */
__gid_t st_gid; /* Group ID of the file's group.*/
+# ifdef __x86_64__
+ int __pad0;
+ __dev_t st_rdev; /* Device number, if device. */
+ __off_t st_size; /* Size of file, in bytes. */
+# else
__dev_t st_rdev; /* Device number, if device. */
unsigned int __pad2;
__off64_t st_size; /* Size of file, in bytes. */
+# endif
__blksize_t st_blksize; /* Optimal block size for I/O. */
-
- __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */
+ __blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */
# if defined __USE_MISC || defined __USE_XOPEN2K8
/* Nanosecond resolution timestamps are stored in a format
equivalent to 'struct timespec'. This is the type used
@@ -120,13 +154,17 @@ struct stat64
struct timespec st_ctim; /* Time of last status change. */
# else
__time_t st_atime; /* Time of last access. */
- unsigned long int st_atimensec; /* Nscecs of last access. */
+ __syscall_ulong_t st_atimensec; /* Nscecs of last access. */
__time_t st_mtime; /* Time of last modification. */
- unsigned long int st_mtimensec; /* Nsecs of last modification. */
+ __syscall_ulong_t st_mtimensec; /* Nsecs of last modification. */
__time_t st_ctime; /* Time of last status change. */
- unsigned long int st_ctimensec; /* Nsecs of last status change. */
+ __syscall_ulong_t st_ctimensec; /* Nsecs of last status change. */
# endif
+# ifdef __x86_64__
+ __syscall_slong_t __unused[3];
+# else
__ino64_t st_ino; /* File serial number. */
+# endif
};
#endif