This is the mail archive of the
libc-alpha@sources.redhat.com
mailing list for the glibc project.
[PATCH] stat changes for PPC64
- From: Steve Munroe <sjmunroe at vnet dot ibm dot com>
- To: libc-alpha at sources dot redhat dot com
- Date: Tue, 1 Oct 2002 17:58:54 -0500
- Subject: [PATCH] stat changes for PPC64
The following patches complete the glibc support PowerPC64. Since this is our
last chance to change the kernel/glibc interface (for PPC64),
we decided to "fix a few things".
For example: Normalize the kernel and glibc to a single struct stat for PPC64.
Make _STAT_VER equal _STAT_VER_KERNEL and define XSTAT_IS_XSTAT64. Then add
dummy fxstat64.c, lxstat64.c, and xstat64.c files to make the linker happy.
And finally fix a few latent bugs we found in LTP testing.
These changes require a new Linux 2.4.19 kernel to match these structs
and execute the corresponding syscalls correctly.
2002-09-27 Steven Munroe <sjmunroe@us.ibm.com>
* sysdeps/unix/sysv/linux/powerpc/bits/stat.h [__WORDSIZE != 32]:
Define _STAT_VER as _STAT_VER_KERNEL. Define stat and stat64 structs
to match the PPC64 kernel.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions: Remove __xstat64,
__fxstat64, and __lxstat64.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/kernel_stat.h: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/fxstat64.c: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/lxstat64.c: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/xstat64.c: New file.
>>>>>>>> ppc64-stat-20020923.patch
diff -rupPN libc23-cvstip-20020923/sysdeps/unix/sysv/linux/powerpc/bits/stat.h libc23-ppc64-stat/sysdeps/unix/sysv/linux/powerpc/bits/stat.h
--- libc23-cvstip-20020923/sysdeps/unix/sysv/linux/powerpc/bits/stat.h Thu Jul 5 23:56:19 2001
+++ libc23-ppc64-stat/sysdeps/unix/sysv/linux/powerpc/bits/stat.h Tue Oct 1 10:22:50 2002
@@ -1,4 +1,5 @@
-/* Copyright (C) 1992,95,96,97,98,99,2000,2001 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
+ 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
@@ -25,7 +26,11 @@
#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. */
+#if __WORDSIZE == 32
+# define _STAT_VER _STAT_VER_LINUX /* The one defined below. */
+#else
+# define _STAT_VER _STAT_VER_KERNEL /* The struct stat matches the kernel. */
+#endif
/* Versions of the `xmknod' interface. */
#define _MKNOD_VER_LINUX 1
@@ -33,44 +38,47 @@
#define _MKNOD_VER _MKNOD_VER_LINUX /* The bits defined below. */
+#if __WORDSIZE == 32
+
struct stat
{
__dev_t st_dev; /* Device. */
-#ifndef __USE_FILE_OFFSET64
+# ifndef __USE_FILE_OFFSET64
unsigned short int __pad1;
__ino_t st_ino; /* File serial number. */
-#else
+# else
__ino64_t st_ino; /* File serial number. */
-#endif
+# endif
__mode_t st_mode; /* File mode. */
__nlink_t st_nlink; /* Link count. */
__uid_t st_uid; /* User ID of the file's owner. */
__gid_t st_gid; /* Group ID of the file's group.*/
__dev_t st_rdev; /* Device number, if device. */
unsigned short int __pad2;
-#ifndef __USE_FILE_OFFSET64
+# ifndef __USE_FILE_OFFSET64
__off_t st_size; /* Size of file, in bytes. */
-#else
+# else
__off64_t st_size; /* Size of file, in bytes. */
-#endif
+# endif
__blksize_t st_blksize; /* Optimal block size for I/O. */
-#ifndef __USE_FILE_OFFSET64
+# ifndef __USE_FILE_OFFSET64
__blkcnt_t st_blocks; /* Number 512-byte blocks allocated. */
-#else
+# else
__blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */
-#endif
+# endif
__time_t st_atime; /* Time of last access. */
- unsigned long int __unused1;
+ unsigned long int __unused1; /* Reserved for atime.nanoseconds. */
__time_t st_mtime; /* Time of last modification. */
- unsigned long int __unused2;
+ unsigned long int __unused2; /* Reserved for mtime.nanoseconds. */
__time_t st_ctime; /* Time of last status change. */
- unsigned long int __unused3;
+ unsigned long int __unused3; /* Reserved for ctime.nanoseconds. */
unsigned long int __unused4;
unsigned long int __unused5;
};
-#ifdef __USE_LARGEFILE64
+
+# ifdef __USE_LARGEFILE64
struct stat64
{
__dev_t st_dev; /* Device. */
@@ -83,18 +91,84 @@ struct stat64
unsigned short int __pad2;
__off64_t st_size; /* Size of file, in bytes. */
__blksize_t st_blksize; /* Optimal block size for I/O. */
+ __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */
+ __time_t st_atime; /* Time of last access. */
+ unsigned long int __unused1; /* Reserved for atime.nanoseconds. */
+ __time_t st_mtime; /* Time of last modification. */
+ unsigned long int __unused2; /* Reserved for mtime.nanoseconds. */
+ __time_t st_ctime; /* Time of last status change. */
+ unsigned long int __unused3; /* Reserved for ctime.nanoseconds. */
+ unsigned long int __unused4;
+ unsigned long int __unused5;
+ };
+# endif /* __USE_LARGEFILE64 */
+
+#else /* __WORDSIZE == 32 */
+struct stat
+ {
+ __dev_t st_dev; /* Device. */
+# ifndef __USE_FILE_OFFSET64
+ __ino_t st_ino; /* File serial number. */
+# else
+ __ino64_t st_ino; /* File serial number. */
+# endif
+ __nlink_t st_nlink; /* Link count. */
+ __mode_t st_mode; /* File mode. */
+ __uid_t st_uid; /* User ID of the file's owner. */
+ __gid_t st_gid; /* Group ID of the file's group.*/
+ int __pad2;
+ __dev_t st_rdev; /* Device number, if device. */
+# ifndef __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
+ __blkcnt_t st_blocks; /* Number 512-byte blocks allocated. */
+# else
+ __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */
+# endif
+ __time_t st_atime; /* Time of last access. */
+ unsigned long int __unused1; /* Reserved for atime.nanoseconds. */
+ __time_t st_mtime; /* Time of last modification. */
+ unsigned long int __unused2; /* Reserved for mtime.nanoseconds. */
+ __time_t st_ctime; /* Time of last status change. */
+ unsigned long int __unused3; /* Reserved for ctime.nanoseconds. */
+ unsigned long int __unused4;
+ unsigned long int __unused5;
+ unsigned long int __unused6;
+ };
+
+# ifdef __USE_LARGEFILE64
+struct stat64
+ {
+ __dev_t st_dev; /* Device. */
+ __ino64_t st_ino; /* File serial number. */
+ __nlink_t st_nlink; /* Link count. */
+ __mode_t st_mode; /* File mode. */
+ __uid_t st_uid; /* User ID of the file's owner. */
+ __gid_t st_gid; /* Group ID of the file's group.*/
+ int __pad2;
+ __dev_t st_rdev; /* Device number, if device. */
+ __off64_t st_size; /* Size of file, in bytes. */
+ __blksize_t st_blksize; /* Optimal block size for I/O. */
__blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */
__time_t st_atime; /* Time of last access. */
- unsigned long int __unused1;
+ unsigned long int __unused1; /* Reserved for atime.nanoseconds. */
__time_t st_mtime; /* Time of last modification. */
- unsigned long int __unused2;
+ unsigned long int __unused2; /* Reserved for mtime.nanoseconds. */
__time_t st_ctime; /* Time of last status change. */
- unsigned long int __unused3;
+ unsigned long int __unused3; /* Reserved for ctime.nanoseconds. */
unsigned long int __unused4;
unsigned long int __unused5;
+ unsigned long int __unused6;
};
+# endif /* __USE_LARGEFILE64 */
#endif
+
/* Tell code we have these members. */
#define _STATBUF_ST_BLKSIZE
diff -rupPN libc23-cvstip-20020923/sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions libc23-ppc64-stat/sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions
--- libc23-cvstip-20020923/sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions Tue Sep 17 18:50:03 2002
+++ libc23-ppc64-stat/sysdeps/unix/sysv/linux/powerpc/powerpc64/Versions Tue Oct 1 16:18:59 2002
@@ -1,7 +1,6 @@
libc {
GLIBC_2.2 {
# functions used in other libraries
- __xstat64; __fxstat64; __lxstat64;
# g*
glob64;
diff -rupPN libc23-cvstip-20020923/sysdeps/unix/sysv/linux/powerpc/powerpc64/fxstat64.c libc23-ppc64-stat/sysdeps/unix/sysv/linux/powerpc/powerpc64/fxstat64.c
--- libc23-cvstip-20020923/sysdeps/unix/sysv/linux/powerpc/powerpc64/fxstat64.c Wed Dec 31 18:00:00 1969
+++ libc23-ppc64-stat/sysdeps/unix/sysv/linux/powerpc/powerpc64/fxstat64.c Tue Oct 1 14:04:09 2002
@@ -0,0 +1 @@
+/* fxstat64 is in fxstat.c */
diff -rupPN libc23-cvstip-20020923/sysdeps/unix/sysv/linux/powerpc/powerpc64/kernel_stat.h libc23-ppc64-stat/sysdeps/unix/sysv/linux/powerpc/powerpc64/kernel_stat.h
--- libc23-cvstip-20020923/sysdeps/unix/sysv/linux/powerpc/powerpc64/kernel_stat.h Wed Dec 31 18:00:00 1969
+++ libc23-ppc64-stat/sysdeps/unix/sysv/linux/powerpc/powerpc64/kernel_stat.h Tue Oct 1 12:23:10 2002
@@ -0,0 +1,60 @@
+/* Definition of `struct stat' used in the kernel.
+ Copyright (C) 2002 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
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+struct kernel_stat
+ {
+ __uint64_t st_dev;
+ __uint64_t st_ino;
+ __uint64_t st_nlink;
+ __uint32_t st_mode;
+ __uint32_t st_uid;
+ __uint32_t st_gid;
+ __uint32_t __pad_2;
+ __uint64_t st_rdev;
+ __uint64_t st_size;
+ __uint64_t st_blksize;
+ __uint64_t st_blocks;
+ __uint64_t st_atime;
+ __uint64_t __unused1;
+#define _HAVE___UNUSED1
+ __uint64_t st_mtime;
+ __uint64_t __unused2;
+#define _HAVE___UNUSED2
+ __uint64_t st_ctime;
+ __uint64_t __unused3;
+#define _HAVE___UNUSED3
+ __uint64_t __unused4;
+#define _HAVE___UNUSED4
+ __uint64_t __unused5;
+#define _HAVE___UNUSED5
+ };
+
+#define _HAVE_STAT___UNUSED1
+#define _HAVE_STAT___UNUSED2
+#define _HAVE_STAT___UNUSED3
+#define _HAVE_STAT___UNUSED4
+#define _HAVE_STAT___UNUSED5
+#define _HAVE_STAT___PAD2
+#define _HAVE_STAT64___UNUSED1
+#define _HAVE_STAT64___UNUSED2
+#define _HAVE_STAT64___UNUSED3
+#define _HAVE_STAT64___UNUSED4
+#define _HAVE_STAT64___UNUSED5
+#define _HAVE_STAT64___PAD2
+#define XSTAT_IS_XSTAT64 1
diff -rupPN libc23-cvstip-20020923/sysdeps/unix/sysv/linux/powerpc/powerpc64/lxstat64.c libc23-ppc64-stat/sysdeps/unix/sysv/linux/powerpc/powerpc64/lxstat64.c
--- libc23-cvstip-20020923/sysdeps/unix/sysv/linux/powerpc/powerpc64/lxstat64.c Wed Dec 31 18:00:00 1969
+++ libc23-ppc64-stat/sysdeps/unix/sysv/linux/powerpc/powerpc64/lxstat64.c Tue Oct 1 14:04:12 2002
@@ -0,0 +1 @@
+/* lxstat64 is in lxstat.c */
diff -rupPN libc23-cvstip-20020923/sysdeps/unix/sysv/linux/powerpc/powerpc64/xstat64.c libc23-ppc64-stat/sysdeps/unix/sysv/linux/powerpc/powerpc64/xstat64.c
--- libc23-cvstip-20020923/sysdeps/unix/sysv/linux/powerpc/powerpc64/xstat64.c Wed Dec 31 18:00:00 1969
+++ libc23-ppc64-stat/sysdeps/unix/sysv/linux/powerpc/powerpc64/xstat64.c Tue Oct 1 14:04:05 2002
@@ -0,0 +1 @@
+/* xstat64 is in xstat.c */
<<<<<<<< ppc64-stat-20020923.patch