diff mbox

Use XSTAT_IS_XSTAT64 in generic xstat functions

Message ID 1479756063.14643.8.camel@caviumnetworks.com
State Accepted
Commit a09411756fd935482a81e99dc3f3eae99843d012
Headers show

Commit Message

Steve Ellcey Nov. 21, 2016, 7:21 p.m. UTC
Here is a new version of my patch to use XSTAT_IS_XSTAT64 in generic 32
bit xstat routines.  This is needed for the aarch64 ILP32 work where
the xstat and xstat64 routines can be aliased.  This patch uses #if's
instead of #ifdef's since my earlier patch defined XSTAT_IS_XSTAT64 to
0 or 1 in all of the kernel_stat.h header files.

Tested on x86 and aarch64.  OK to checkin?

Steve Ellcey
sellcey@caviumnetworks.com


2016-11-21  Yury Norov  <ynorov@caviumnetworks.com>
            Steve Ellcey  <sellcey@caviumnetworks.com>

        * sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat.c: Do not define
        fxstat if XSTAT_IS_XSTAT64 is set to non-zero.
        * sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat.c: Ditto for
        fxstatat.
        * sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat.c: Ditto for
        lxstat.
        * sysdeps/unix/sysv/linux/generic/wordsize-32/xstat.c: Ditto for xstat.

        * sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat64.c: New file.
        * sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat64.c: New file.
        * sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat64.c: Make __lxstat
        an alias of __lxstat64 if XSTAT_IS_XSTAT64 is set to non-zero.
        * sysdeps/unix/sysv/linux/generic/wordsize-32/xstat64.c: Ditto for
        __xstat.

Comments

Steve Ellcey Nov. 28, 2016, 6:52 p.m. UTC | #1
Ping.  I double checked this patch and did a alpha build with the
build-many-glibcs.py script to make sure it did not have the same
problem that my [f]statfs patch had on that target.

Steve Ellcey
sellcey@caviumnetworks.com

On Mon, 2016-11-21 at 11:21 -0800, Steve Ellcey wrote:
> Here is a new version of my patch to use XSTAT_IS_XSTAT64 in generic 32

> bit xstat routines.  This is needed for the aarch64 ILP32 work where

> the xstat and xstat64 routines can be aliased.  This patch uses #if's

> instead of #ifdef's since my earlier patch defined XSTAT_IS_XSTAT64 to

> 0 or 1 in all of the kernel_stat.h header files.

> 

> Tested on x86 and aarch64.  OK to checkin?

> 

> Steve Ellcey

> sellcey@caviumnetworks.com

> 

> 

> 2016-11-21  Yury Norov  <ynorov@caviumnetworks.com>

>             Steve Ellcey  <sellcey@caviumnetworks.com>

> 

>         * sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat.c: Do not define

>         fxstat if XSTAT_IS_XSTAT64 is set to non-zero.

>         * sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat.c: Ditto for

>         fxstatat.

>         * sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat.c: Ditto for

>         lxstat.

>         * sysdeps/unix/sysv/linux/generic/wordsize-32/xstat.c: Ditto for xstat.

>         * sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat64.c: New file.

>         * sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat64.c: New file.

>         * sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat64.c: Make __lxstat

>         an alias of __lxstat64 if XSTAT_IS_XSTAT64 is set to non-zero.

>         * sysdeps/unix/sysv/linux/generic/wordsize-32/xstat64.c: Ditto for

>         __xstat.
Andreas Schwab Nov. 29, 2016, 3:16 p.m. UTC | #2
On Nov 21 2016, Steve Ellcey <sellcey@caviumnetworks.com> wrote:

> 2016-11-21  Yury Norov  <ynorov@caviumnetworks.com>

>             Steve Ellcey  <sellcey@caviumnetworks.com>

>

>         * sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat.c: Do not define

>         fxstat if XSTAT_IS_XSTAT64 is set to non-zero.

>         * sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat.c: Ditto for

>         fxstatat.

>         * sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat.c: Ditto for

>         lxstat.

>         * sysdeps/unix/sysv/linux/generic/wordsize-32/xstat.c: Ditto for xstat.

>

>         * sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat64.c: New file.

>         * sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat64.c: New file.

>         * sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat64.c: Make __lxstat

>         an alias of __lxstat64 if XSTAT_IS_XSTAT64 is set to non-zero.

>         * sysdeps/unix/sysv/linux/generic/wordsize-32/xstat64.c: Ditto for

>         __xstat.


Ok.

Andreas.

-- 
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."
diff mbox

Patch

diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat.c
index dd52011..0a689a8 100644
--- a/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat.c
+++ b/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat.c
@@ -25,6 +25,7 @@ 
 #include <sysdep.h>
 #include <sys/syscall.h>
 
+#if !XSTAT_IS_XSTAT64
 #include "overflow.h"
 
 /* Get information about the file FD in BUF.  */
@@ -43,3 +44,4 @@  __fxstat (int vers, int fd, struct stat *buf)
 
 hidden_def (__fxstat)
 weak_alias (__fxstat, _fxstat);
+#endif
diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat64.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat64.c
index e69de29..bb97a70 100644
--- a/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat64.c
+++ b/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstat64.c
@@ -0,0 +1,36 @@ 
+/* __fxstat64 () implementation.
+   Copyright (C) 2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
+
+   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, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Hide the prototypes for __fxstat and _fxstat so that GCC will not
+   complain about the different function signatures if they are aliased
+   to  __fxstat64.  If XSTAT_IS_XSTAT64 is set to non-zero then the stat and
+   stat64 structures have an identical layout but different type names.  */
+
+#define __fxstat __fxstat_disable
+#define _fxstat _fxstat_disable
+
+#include <sysdeps/unix/sysv/linux/fxstat64.c>
+
+#undef __fxstat
+#undef _fxstat
+#if XSTAT_IS_XSTAT64
+weak_alias (__fxstat64, __fxstat)
+weak_alias (__fxstat64, _fxstat)
+hidden_ver (__fxstat64, __fxstat)
+#endif
diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat.c
index dc7f934..aaed6db 100644
--- a/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat.c
+++ b/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat.c
@@ -26,6 +26,7 @@ 
 #include <sysdep.h>
 #include <sys/syscall.h>
 
+#if !XSTAT_IS_XSTAT64
 #include "overflow.h"
 
 /* Get information about the file NAME in BUF.  */
@@ -42,3 +43,4 @@  __fxstatat (int vers, int fd, const char *file, struct stat *buf, int flag)
   return -1;
 }
 libc_hidden_def (__fxstatat)
+#endif
diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat64.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat64.c
index e69de29..dac2ad1 100644
--- a/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat64.c
+++ b/sysdeps/unix/sysv/linux/generic/wordsize-32/fxstatat64.c
@@ -0,0 +1,37 @@ 
+/* __fxstatat64 () implementation.
+   Copyright (C) 2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
+
+   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, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Hide the prototype for __fxstatat so that GCC will not complain about
+   the different function signature if it is aliased to  __fxstatat64.
+   If XSTAT_IS_XSTAT64 is set to non-zero then the stat and stat64 structures
+   have an identical layout but different type names.  */
+
+#define __fxstatat __fxstatat_disable
+
+#include <sys/stat.h>
+#undef _STAT_VER_LINUX
+#define _STAT_VER_LINUX _STAT_VER_KERNEL
+
+#include <sysdeps/unix/sysv/linux/fxstatat64.c>
+
+#undef __fxstatat
+#if XSTAT_IS_XSTAT64
+weak_alias (__fxstatat64, __fxstatat)
+libc_hidden_ver (__fxstatat64, __fxstatat)
+#endif
diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat.c
index 395f98b..dd0338b 100644
--- a/sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat.c
+++ b/sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat.c
@@ -25,6 +25,7 @@ 
 #include <sysdep.h>
 #include <sys/syscall.h>
 
+#if !XSTAT_IS_XSTAT64
 #include "overflow.h"
 
 /* Get information about the file NAME in BUF.  */
@@ -41,3 +42,4 @@  __lxstat (int vers, const char *name, struct stat *buf)
   return -1;
 }
 hidden_def (__lxstat)
+#endif
diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat64.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat64.c
index e1c15a8..7407c6b 100644
--- a/sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat64.c
+++ b/sysdeps/unix/sysv/linux/generic/wordsize-32/lxstat64.c
@@ -16,6 +16,13 @@ 
    License along with the GNU C Library.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
+/* Hide the prototype for __lxstat so that GCC will not complain about
+   the different function signature if it is aliased to  __lxstat64.
+   If XSTAT_IS_XSTAT64 is set to non-zero then the stat and stat64
+   structures have an identical layout but different type names.  */
+
+#define __lxstat __lxstat_disable
+
 #include <errno.h>
 #include <stddef.h>
 #include <fcntl.h>
@@ -36,3 +43,9 @@  __lxstat64 (int vers, const char *name, struct stat64 *buf)
   return -1;
 }
 hidden_def (__lxstat64)
+
+#undef __lxstat
+#if XSTAT_IS_XSTAT64
+strong_alias (__lxstat64, __lxstat)
+hidden_ver (__lxstat64, __lxstat)
+#endif
diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/xstat.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/xstat.c
index fdd2cb0..b776e31 100644
--- a/sysdeps/unix/sysv/linux/generic/wordsize-32/xstat.c
+++ b/sysdeps/unix/sysv/linux/generic/wordsize-32/xstat.c
@@ -25,6 +25,7 @@ 
 #include <sysdep.h>
 #include <sys/syscall.h>
 
+#if !XSTAT_IS_XSTAT64
 #include "overflow.h"
 
 /* Get information about the file NAME in BUF.  */
@@ -41,3 +42,4 @@  __xstat (int vers, const char *name, struct stat *buf)
   return -1;
 }
 hidden_def (__xstat)
+#endif
diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/xstat64.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/xstat64.c
index 2252337..e710931 100644
--- a/sysdeps/unix/sysv/linux/generic/wordsize-32/xstat64.c
+++ b/sysdeps/unix/sysv/linux/generic/wordsize-32/xstat64.c
@@ -16,6 +16,13 @@ 
    License along with the GNU C Library.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
+/* Hide the prototype for __xstat so that GCC will not complain about
+   the different function signature if it is aliased to  __xstat64.
+   If XSTAT_IS_XSTAT64 is set to non-zero then the stat and stat64
+   structures have an identical layout but different type names.  */
+
+#define __xstat __xstat_disable
+
 #include <errno.h>
 #include <stddef.h>
 #include <fcntl.h>
@@ -36,3 +43,9 @@  __xstat64 (int vers, const char *name, struct stat64 *buf)
   return -1;
 }
 hidden_def (__xstat64)
+
+#undef __xstat
+#if XSTAT_IS_XSTAT64
+strong_alias (__xstat64, __xstat)
+hidden_ver (__xstat64, __xstat)
+#endif