From: Lukasz Majewski <lukma@denx.de>
To: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Cc: Alistair Francis <alistair.francis@wdc.com>, libc-alpha@sourceware.org
Subject: Re: [PATCH 09/16] Remove stat wrapper functions, move them to exported symbols
Date: Fri, 24 Jul 2020 11:23:56 +0200 [thread overview]
Message-ID: <20200724112356.3d03e17d@jawa> (raw)
In-Reply-To: <20200723194641.1949404-10-adhemerval.zanella@linaro.org>
[-- Attachment #1: Type: text/plain, Size: 73744 bytes --]
On Thu, 23 Jul 2020 16:46:34 -0300
Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote:
> This patch removes the stat, stat64, lstat, lstat64, fstat, fstat64,
> fstatat, and fstatat64 static wrapper and add the symbol on the libc
> with the expected names.
>
> Both the prototypes of the internal symbol linked by the static
> wrappers and the inline redirectors are also removed from the
> installed sys/stat.h header file. The wrapper implementation license
> is also change from LGPL to GPL.
>
> Internally the _STAT_VER* definitions are moved to a arch-specific
> xstatver.h file. The internal defines that redirects internals
> {f}stat{at} to their {f}xstat{at} counterparts are removed for Linux
> (!NO_RTLD_HIDDEN). Hurd still requires them since {f}stat{at} pulls
> extra objects that makes the loader build fail otherwise (I haven't
> dig into why exactly).
>
> Checked with a build for all affected Linux ABIs and Hurd. I checked
> also on x86_64-linux-gnu and i686-linux-gnu.
Reviewed-by: Lukasz Majewski <lukma@denx.de>
> ---
> include/sys/stat.h | 94 ++++++++-----
> io/Makefile | 4 +-
> io/Versions | 4 +
> io/fstat.c | 33 +----
> io/fstat64.c | 36 +----
> io/fstatat.c | 36 +----
> io/fstatat64.c | 36 +----
> io/lstat.c | 33 +----
> io/lstat64.c | 36 +----
> io/stat.c | 34 +----
> io/stat64.c | 36 +----
> io/sys/stat.h | 129
> ------------------ nscd/gai.c |
> 5 + sysdeps/generic/xstatver.h | 3 +
> sysdeps/mach/hurd/i386/libc.abilist | 8 ++
> sysdeps/posix/getaddrinfo.c | 2 +-
> sysdeps/unix/sysv/linux/aarch64/libc.abilist | 8 ++
> sysdeps/unix/sysv/linux/alpha/bits/stat.h | 9 --
> sysdeps/unix/sysv/linux/alpha/libc.abilist | 8 ++
> sysdeps/unix/sysv/linux/alpha/xstatver.h | 9 ++
> sysdeps/unix/sysv/linux/arc/libc.abilist | 8 ++
> sysdeps/unix/sysv/linux/arm/le/libc.abilist | 8 ++
> sysdeps/unix/sysv/linux/bits/stat.h | 6 -
> sysdeps/unix/sysv/linux/csky/libc.abilist | 8 ++
> sysdeps/unix/sysv/linux/generic/bits/stat.h | 11 --
> sysdeps/unix/sysv/linux/generic/xstatver.h | 5 +
> sysdeps/unix/sysv/linux/hppa/libc.abilist | 8 ++
> sysdeps/unix/sysv/linux/i386/libc.abilist | 8 ++
> sysdeps/unix/sysv/linux/ia64/bits/stat.h | 5 -
> sysdeps/unix/sysv/linux/ia64/libc.abilist | 8 ++
> sysdeps/unix/sysv/linux/ia64/xstatver.h | 5 +
> sysdeps/unix/sysv/linux/m68k/bits/stat.h | 7 -
> .../unix/sysv/linux/m68k/m680x0/libc.abilist | 8 ++
> sysdeps/unix/sysv/linux/m68k/xstatver.h | 7 +
> .../sysv/linux/microblaze/be/libc.abilist | 8 ++
> .../unix/sysv/linux/microblaze/bits/stat.h | 7 -
> sysdeps/unix/sysv/linux/microblaze/xstatver.h | 7 +
> sysdeps/unix/sysv/linux/mips/bits/stat.h | 7 -
> .../sysv/linux/mips/mips32/fpu/libc.abilist | 8 ++
> .../sysv/linux/mips/mips64/n32/libc.abilist | 8 ++
> .../sysv/linux/mips/mips64/n64/libc.abilist | 8 ++
> sysdeps/unix/sysv/linux/mips/xstatver.h | 7 +
> sysdeps/unix/sysv/linux/nios2/libc.abilist | 8 ++
> sysdeps/unix/sysv/linux/powerpc/bits/stat.h | 11 --
> .../linux/powerpc/powerpc32/fpu/libc.abilist | 8 ++
> .../linux/powerpc/powerpc64/be/libc.abilist | 8 ++
> .../linux/powerpc/powerpc64/le/libc.abilist | 8 ++
> sysdeps/unix/sysv/linux/powerpc/xstatver.h | 11 ++
> .../unix/sysv/linux/riscv/rv64/libc.abilist | 8 ++
> sysdeps/unix/sysv/linux/s390/bits/stat.h | 12 --
> .../unix/sysv/linux/s390/s390-32/libc.abilist | 8 ++
> .../unix/sysv/linux/s390/s390-64/libc.abilist | 8 ++
> sysdeps/unix/sysv/linux/s390/xstatver.h | 16 +++
> sysdeps/unix/sysv/linux/sh/le/libc.abilist | 8 ++
> sysdeps/unix/sysv/linux/sparc/bits/stat.h | 7 -
> .../sysv/linux/sparc/sparc32/libc.abilist | 8 ++
> .../sysv/linux/sparc/sparc64/libc.abilist | 8 ++
> sysdeps/unix/sysv/linux/sparc/xstatver.h | 7 +
> sysdeps/unix/sysv/linux/x86/bits/stat.h | 10 --
> sysdeps/unix/sysv/linux/x86/xstatver.h | 13 ++
> .../unix/sysv/linux/x86_64/64/libc.abilist | 8 ++
> .../unix/sysv/linux/x86_64/x32/libc.abilist | 8 ++
> sysdeps/unix/sysv/linux/xstatver.h | 7 +
> 63 files changed, 414 insertions(+), 501 deletions(-)
> create mode 100644 sysdeps/generic/xstatver.h
> create mode 100644 sysdeps/unix/sysv/linux/alpha/xstatver.h
> create mode 100644 sysdeps/unix/sysv/linux/generic/xstatver.h
> create mode 100644 sysdeps/unix/sysv/linux/ia64/xstatver.h
> create mode 100644 sysdeps/unix/sysv/linux/m68k/xstatver.h
> create mode 100644 sysdeps/unix/sysv/linux/microblaze/xstatver.h
> create mode 100644 sysdeps/unix/sysv/linux/mips/xstatver.h
> create mode 100644 sysdeps/unix/sysv/linux/powerpc/xstatver.h
> create mode 100644 sysdeps/unix/sysv/linux/s390/xstatver.h
> create mode 100644 sysdeps/unix/sysv/linux/sparc/xstatver.h
> create mode 100644 sysdeps/unix/sysv/linux/x86/xstatver.h
> create mode 100644 sysdeps/unix/sysv/linux/xstatver.h
>
> diff --git a/include/sys/stat.h b/include/sys/stat.h
> index f8847cf73e..0be918a7a7 100644
> --- a/include/sys/stat.h
> +++ b/include/sys/stat.h
> @@ -2,10 +2,26 @@
> #include <io/sys/stat.h>
>
> #ifndef _ISOMAC
> +# include <xstatver.h>
> +
> /* Now define the internal interfaces. */
> extern int __stat (const char *__file, struct stat *__buf);
> +extern int __stat64 (const char *__file, struct stat64 *__buf);
> extern int __fstat (int __fd, struct stat *__buf);
> +extern int __fstat64 (int __fd, struct stat64 *__buf);
> extern int __lstat (const char *__file, struct stat *__buf);
> +extern int __lstat64 (const char *__file, struct stat64 *__buf);
> +extern int __fstatat (int dirfd, const char *pathname, struct stat
> *buf,
> + int flags);
> +extern int __fstatat64 (int dirfd, const char *pathname, struct
> stat64 *buf,
> + int flags);
> +# if IS_IN (libc) || (IS_IN (rtld) && !defined NO_RTLD_HIDDEN)
> +hidden_proto (__stat64)
> +hidden_proto (__fstat64)
> +hidden_proto (__lstat64)
> +hidden_proto (__fstatat64)
> +# endif
> +
> extern int __chmod (const char *__file, __mode_t __mode);
> libc_hidden_proto (__chmod)
> extern int __fchmod (int __fd, __mode_t __mode);
> @@ -13,20 +29,9 @@ libc_hidden_proto (fchmodat)
> extern __mode_t __umask (__mode_t __mask);
> extern int __mkdir (const char *__path, __mode_t __mode);
> libc_hidden_proto (__mkdir)
> +
> extern int __mknod (const char *__path,
> __mode_t __mode, __dev_t __dev);
> -#if IS_IN (libc) || (IS_IN (rtld) && !defined NO_RTLD_HIDDEN)
> -hidden_proto (__fxstat)
> -hidden_proto (__fxstat64)
> -hidden_proto (__lxstat)
> -hidden_proto (__lxstat64)
> -hidden_proto (__xstat)
> -hidden_proto (__xstat64)
> -#endif
> -extern __inline__ int __stat (const char *__path, struct stat
> *__statbuf) -{
> - return __xstat (_STAT_VER, __path, __statbuf);
> -}
> libc_hidden_proto (__xmknod)
> extern __inline__ int __mknod (const char *__path, __mode_t __mode,
> __dev_t __dev)
> @@ -35,32 +40,47 @@ extern __inline__ int __mknod (const char
> *__path, __mode_t __mode, }
> libc_hidden_proto (__xmknodat)
>
> -libc_hidden_proto (__fxstatat)
> -libc_hidden_proto (__fxstatat64)
> -
> -# if IS_IN (rtld) && !defined NO_RTLD_HIDDEN
> -extern __typeof (__fxstatat64) __fxstatat64 attribute_hidden;
> +int __fxstat (int __ver, int __fildes, struct stat *__stat_buf);
> +int __xstat (int __ver, const char *__filename,
> + struct stat *__stat_buf);
> +int __lxstat (int __ver, const char *__filename, struct stat
> *__stat_buf); +int __fxstatat (int __ver, int __fildes, const char
> *__filename,
> + struct stat *__stat_buf, int __flag);
> +int __fxstat64 (int ver, int __fildes, struct stat64 *__stat_buf);
> +int __xstat64 (int ver, const char *__filename, struct stat64
> *__stat_buf); +int __lxstat64 (int ver, const char *__filename,
> struct stat64 *__stat_buf); +int __fxstatat64 (int ver, int __fildes,
> const char *__filename,
> + struct stat64 *__stat_buf, int __flag);
> +libc_hidden_proto (__fxstat);
> +libc_hidden_proto (__xstat);
> +libc_hidden_proto (__lxstat);
> +libc_hidden_proto (__fxstatat);
> +# if IS_IN (libc) || (IS_IN (rtld) && !defined NO_RTLD_HIDDEN)
> +hidden_proto (__fxstat64);
> +hidden_proto (__xstat64);
> +hidden_proto (__lxstat64);
> +hidden_proto (__fxstatat64);
> # endif
>
> -/* The `stat', `fstat', `lstat' functions have to be handled special
> since
> - even while not compiling the library with optimization calls to
> these
> - functions in the shared library must reference the `xstat' etc
> functions.
> - We have to use macros but we cannot define them in the normal
> headers
> - since on user level we must use real functions. */
> -#define stat(fname, buf) __xstat (_STAT_VER, fname, buf)
> -#define lstat(fname, buf) __lxstat (_STAT_VER, fname, buf)
> -#define __lstat(fname, buf) __lxstat (_STAT_VER, fname, buf)
> -#define lstat64(fname, buf) __lxstat64 (_STAT_VER, fname, buf)
> -#define __lstat64(fname, buf) __lxstat64 (_STAT_VER, fname, buf)
> -#define stat64(fname, buf) __xstat64 (_STAT_VER, fname, buf)
> -#define __stat64(fname, buf) __xstat64 (_STAT_VER, fname, buf)
> -#define fstat64(fd, buf) __fxstat64 (_STAT_VER, fd, buf)
> -#define __fstat64(fd, buf) __fxstat64 (_STAT_VER, fd, buf)
> -#define fstat(fd, buf) __fxstat (_STAT_VER, fd, buf)
> -#define __fstat(fd, buf) __fxstat (_STAT_VER, fd, buf)
> -#define __fstatat(dfd, fname, buf, flag) \
> - __fxstatat (_STAT_VER, dfd, fname, buf, flag)
> -#define __fstatat64(dfd, fname, buf, flag) \
> - __fxstatat64 (_STAT_VER, dfd, fname, buf, flag)
> +# ifdef NO_RTLD_HIDDEN
> +/* These are still required for Hurd. */
> +# define stat(fname, buf) __xstat (_STAT_VER, fname, buf)
> +# define lstat(fname, buf) __lxstat (_STAT_VER, fname, buf)
> +# define __lstat(fname, buf) __lxstat (_STAT_VER, fname, buf)
> +# define lstat64(fname, buf) __lxstat64 (_STAT_VER, fname, buf)
> +# define __lstat64(fname, buf) __lxstat64 (_STAT_VER, fname, buf)
> +# define stat64(fname, buf) __xstat64 (_STAT_VER, fname, buf)
> +# define __stat64(fname, buf) __xstat64 (_STAT_VER, fname, buf)
> +# define fstat64(fd, buf) __fxstat64 (_STAT_VER, fd, buf)
> +# define __fstat64(fd, buf) __fxstat64 (_STAT_VER, fd, buf)
> +# define fstat(fd, buf) __fxstat (_STAT_VER, fd, buf)
> +# define __fstat(fd, buf) __fxstat (_STAT_VER, fd, buf)
> +# define __fstatat(dfd, fname, buf, flag) \
> + __fxstatat (_STAT_VER, dfd, fname, buf, flag)
> +# define __fstatat64(dfd, fname, buf, flag) \
> + __fxstatat64 (_STAT_VER, dfd, fname, buf, flag)
> +# endif /* NO_RTLD_HIDDEN */
> +
> #endif
> +
> #endif
> diff --git a/io/Makefile b/io/Makefile
> index cf380f3516..cee356b666 100644
> --- a/io/Makefile
> +++ b/io/Makefile
> @@ -60,8 +60,7 @@ routines :=
> \ # These routines will be omitted from the
> libc shared object. # Instead the static object files will be
> included in a special archive # linked against when the shared
> library will be used. -static-only-routines = stat fstat lstat stat64
> fstat64 lstat64 \
> - fstatat fstatat64 mknod mknodat
> +static-only-routines = mknod mknodat
>
> others := pwd
> test-srcs := ftwtest
> @@ -78,6 +77,7 @@ tests := test-utime test-stat
> test-stat2 test-lfs tst-getcwd \
> # Likewise for statx, but we do not need static linking here.
> tests-internal += tst-statx
> +tests-static += tst-statx
>
> ifeq ($(run-built-tests),yes)
> tests-special += $(objpfx)ftwtest.out
> diff --git a/io/Versions b/io/Versions
> index ee468055ff..f6db0e84ad 100644
> --- a/io/Versions
> +++ b/io/Versions
> @@ -132,6 +132,9 @@ libc {
> fcntl64;
> statx;
> }
> + GLIBC_2.33 {
> + stat; stat64; fstat; fstat64; lstat; lstat64; fstatat; fstatat64;
> + }
> GLIBC_PRIVATE {
> __libc_fcntl64;
> __fcntl_nocancel;
> @@ -141,5 +144,6 @@ libc {
> __file_change_detection_for_stat;
> __file_change_detection_for_path;
> __file_change_detection_for_fp;
> + __fstat64;
> }
> }
> diff --git a/io/fstat.c b/io/fstat.c
> index 6ce077dc4a..faadd75e31 100644
> --- a/io/fstat.c
> +++ b/io/fstat.c
> @@ -1,4 +1,5 @@
> -/* Copyright (C) 1996-2020 Free Software Foundation, Inc.
> +/* Get file status.
> + Copyright (C) 1996-2020 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
> @@ -6,23 +7,6 @@
> License as published by the Free Software Foundation; either
> version 2.1 of the License, or (at your option) any later version.
>
> - In addition to the permissions in the GNU Lesser General Public
> - License, the Free Software Foundation gives you unlimited
> - permission to link the compiled version of this file with other
> - programs, and to distribute those programs without any restriction
> - coming from the use of this file. (The GNU Lesser General Public
> - License restrictions do apply in other respects; for example, they
> - cover modification of the file, and distribution when not linked
> - into another program.)
> -
> - Note that people who make modified versions of this file are not
> - obligated to grant this special exception for their modified
> - versions; it is their choice whether to do so. The GNU Lesser
> - General Public License gives permission to release a modified
> - version without this exception; this exception also makes it
> - possible to release a modified version which carries forward this
> - exception.
> -
> 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
> @@ -34,22 +18,11 @@
>
> #include <sys/stat.h>
>
> -/* This definition is only used if inlining fails for this function;
> see
> - the last page of <sys/stat.h>. The real work is done by the `x'
> - function which is passed a version number argument. We arrange
> in the
> - makefile that when not inlined this function is always statically
> - linked; that way a dynamically-linked executable always encodes
> the
> - version number corresponding to the data structures it uses, so
> the `x'
> - functions in the shared library can adapt without needing to
> recompile
> - all callers. */
> -
> -#undef fstat
> #undef __fstat
> int
> -attribute_hidden
> __fstat (int fd, struct stat *buf)
> {
> return __fxstat (_STAT_VER, fd, buf);
> }
>
> -weak_hidden_alias (__fstat, fstat)
> +weak_alias (__fstat, fstat)
> diff --git a/io/fstat64.c b/io/fstat64.c
> index c4dd3acd60..b1fc17e5bf 100644
> --- a/io/fstat64.c
> +++ b/io/fstat64.c
> @@ -1,4 +1,5 @@
> -/* Copyright (C) 1996-2020 Free Software Foundation, Inc.
> +/* Get file status.
> + Copyright (C) 1996-2020 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
> @@ -6,23 +7,6 @@
> License as published by the Free Software Foundation; either
> version 2.1 of the License, or (at your option) any later version.
>
> - In addition to the permissions in the GNU Lesser General Public
> - License, the Free Software Foundation gives you unlimited
> - permission to link the compiled version of this file with other
> - programs, and to distribute those programs without any restriction
> - coming from the use of this file. (The GNU Lesser General Public
> - License restrictions do apply in other respects; for example, they
> - cover modification of the file, and distribution when not linked
> - into another program.)
> -
> - Note that people who make modified versions of this file are not
> - obligated to grant this special exception for their modified
> - versions; it is their choice whether to do so. The GNU Lesser
> - General Public License gives permission to release a modified
> - version without this exception; this exception also makes it
> - possible to release a modified version which carries forward this
> - exception.
> -
> 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
> @@ -34,19 +18,11 @@
>
> #include <sys/stat.h>
>
> -/* This definition is only used if inlining fails for this function;
> see
> - the last page of <sys/stat.h>. The real work is done by the `x'
> - function which is passed a version number argument. We arrange
> in the
> - makefile that when not inlined this function is always statically
> - linked; that way a dynamically-linked executable always encodes
> the
> - version number corresponding to the data structures it uses, so
> the `x'
> - functions in the shared library can adapt without needing to
> recompile
> - all callers. */
> -
> -#undef fstat64
> +#undef __fstat64
> int
> -attribute_hidden
> -fstat64 (int fd, struct stat64 *buf)
> +__fstat64 (int fd, struct stat64 *buf)
> {
> return __fxstat64 (_STAT_VER, fd, buf);
> }
> +hidden_def (__fstat64)
> +weak_alias (__fstat64, fstat64)
> diff --git a/io/fstatat.c b/io/fstatat.c
> index edc773487a..12443c2ff4 100644
> --- a/io/fstatat.c
> +++ b/io/fstatat.c
> @@ -1,4 +1,5 @@
> -/* Copyright (C) 2005-2020 Free Software Foundation, Inc.
> +/* Get file status.
> + Copyright (C) 2005-2020 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
> @@ -6,23 +7,6 @@
> License as published by the Free Software Foundation; either
> version 2.1 of the License, or (at your option) any later version.
>
> - In addition to the permissions in the GNU Lesser General Public
> - License, the Free Software Foundation gives you unlimited
> - permission to link the compiled version of this file with other
> - programs, and to distribute those programs without any restriction
> - coming from the use of this file. (The GNU Lesser General Public
> - License restrictions do apply in other respects; for example, they
> - cover modification of the file, and distribution when not linked
> - into another program.)
> -
> - Note that people who make modified versions of this file are not
> - obligated to grant this special exception for their modified
> - versions; it is their choice whether to do so. The GNU Lesser
> - General Public License gives permission to release a modified
> - version without this exception; this exception also makes it
> - possible to release a modified version which carries forward this
> - exception.
> -
> 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
> @@ -34,19 +18,11 @@
>
> #include <sys/stat.h>
>
> -/* This definition is only used if inlining fails for this function;
> see
> - the last page of <sys/stat.h>. The real work is done by the `x'
> - function which is passed a version number argument. We arrange
> in the
> - makefile that when not inlined this function is always statically
> - linked; that way a dynamically-linked executable always encodes
> the
> - version number corresponding to the data structures it uses, so
> the `x'
> - functions in the shared library can adapt without needing to
> recompile
> - all callers. */
> -
> -#undef fstatat
> +#undef __fstatat
> int
> -attribute_hidden
> -fstatat (int fd, const char *file, struct stat *buf, int flag)
> +__fstatat (int fd, const char *file, struct stat *buf, int flag)
> {
> return __fxstatat (_STAT_VER, fd, file, buf, flag);
> }
> +
> +weak_alias (__fstatat, fstatat)
> diff --git a/io/fstatat64.c b/io/fstatat64.c
> index b57133bd90..5ba4cdf68a 100644
> --- a/io/fstatat64.c
> +++ b/io/fstatat64.c
> @@ -1,4 +1,5 @@
> -/* Copyright (C) 2005-2020 Free Software Foundation, Inc.
> +/* Get file status.
> + Copyright (C) 2005-2020 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
> @@ -6,23 +7,6 @@
> License as published by the Free Software Foundation; either
> version 2.1 of the License, or (at your option) any later version.
>
> - In addition to the permissions in the GNU Lesser General Public
> - License, the Free Software Foundation gives you unlimited
> - permission to link the compiled version of this file with other
> - programs, and to distribute those programs without any restriction
> - coming from the use of this file. (The GNU Lesser General Public
> - License restrictions do apply in other respects; for example, they
> - cover modification of the file, and distribution when not linked
> - into another program.)
> -
> - Note that people who make modified versions of this file are not
> - obligated to grant this special exception for their modified
> - versions; it is their choice whether to do so. The GNU Lesser
> - General Public License gives permission to release a modified
> - version without this exception; this exception also makes it
> - possible to release a modified version which carries forward this
> - exception.
> -
> 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
> @@ -34,19 +18,11 @@
>
> #include <sys/stat.h>
>
> -/* This definition is only used if inlining fails for this function;
> see
> - the last page of <sys/stat.h>. The real work is done by the `x'
> - function which is passed a version number argument. We arrange
> in the
> - makefile that when not inlined this function is always statically
> - linked; that way a dynamically-linked executable always encodes
> the
> - version number corresponding to the data structures it uses, so
> the `x'
> - functions in the shared library can adapt without needing to
> recompile
> - all callers. */
> -
> -#undef fstatat64
> +#undef __fstatat64
> int
> -attribute_hidden
> -fstatat64 (int fd, const char *file, struct stat64 *buf, int flag)
> +__fstatat64 (int fd, const char *file, struct stat64 *buf, int flag)
> {
> return __fxstatat64 (_STAT_VER, fd, file, buf, flag);
> }
> +hidden_def (__fstatat64)
> +weak_alias (__fstatat64, fstatat64)
> diff --git a/io/lstat.c b/io/lstat.c
> index 7134741106..2a046c05e1 100644
> --- a/io/lstat.c
> +++ b/io/lstat.c
> @@ -1,4 +1,5 @@
> -/* Copyright (C) 1996-2020 Free Software Foundation, Inc.
> +/* Get file status.
> + Copyright (C) 1996-2020 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
> @@ -6,23 +7,6 @@
> License as published by the Free Software Foundation; either
> version 2.1 of the License, or (at your option) any later version.
>
> - In addition to the permissions in the GNU Lesser General Public
> - License, the Free Software Foundation gives you unlimited
> - permission to link the compiled version of this file with other
> - programs, and to distribute those programs without any restriction
> - coming from the use of this file. (The GNU Lesser General Public
> - License restrictions do apply in other respects; for example, they
> - cover modification of the file, and distribution when not linked
> - into another program.)
> -
> - Note that people who make modified versions of this file are not
> - obligated to grant this special exception for their modified
> - versions; it is their choice whether to do so. The GNU Lesser
> - General Public License gives permission to release a modified
> - version without this exception; this exception also makes it
> - possible to release a modified version which carries forward this
> - exception.
> -
> 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
> @@ -34,22 +18,11 @@
>
> #include <sys/stat.h>
>
> -/* This definition is only used if inlining fails for this function;
> see
> - the last page of <sys/stat.h>. The real work is done by the `x'
> - function which is passed a version number argument. We arrange
> in the
> - makefile that when not inlined this function is always statically
> - linked; that way a dynamically-linked executable always encodes
> the
> - version number corresponding to the data structures it uses, so
> the `x'
> - functions in the shared library can adapt without needing to
> recompile
> - all callers. */
> -
> -#undef lstat
> #undef __lstat
> int
> -attribute_hidden
> __lstat (const char *file, struct stat *buf)
> {
> return __lxstat (_STAT_VER, file, buf);
> }
>
> -weak_hidden_alias (__lstat, lstat)
> +weak_alias (__lstat, lstat)
> diff --git a/io/lstat64.c b/io/lstat64.c
> index a890da71a8..a73c5a2541 100644
> --- a/io/lstat64.c
> +++ b/io/lstat64.c
> @@ -1,4 +1,5 @@
> -/* Copyright (C) 1996-2020 Free Software Foundation, Inc.
> +/* Get file status.
> + Copyright (C) 1996-2020 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
> @@ -6,23 +7,6 @@
> License as published by the Free Software Foundation; either
> version 2.1 of the License, or (at your option) any later version.
>
> - In addition to the permissions in the GNU Lesser General Public
> - License, the Free Software Foundation gives you unlimited
> - permission to link the compiled version of this file with other
> - programs, and to distribute those programs without any restriction
> - coming from the use of this file. (The GNU Lesser General Public
> - License restrictions do apply in other respects; for example, they
> - cover modification of the file, and distribution when not linked
> - into another program.)
> -
> - Note that people who make modified versions of this file are not
> - obligated to grant this special exception for their modified
> - versions; it is their choice whether to do so. The GNU Lesser
> - General Public License gives permission to release a modified
> - version without this exception; this exception also makes it
> - possible to release a modified version which carries forward this
> - exception.
> -
> 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
> @@ -34,19 +18,11 @@
>
> #include <sys/stat.h>
>
> -/* This definition is only used if inlining fails for this function;
> see
> - the last page of <sys/stat.h>. The real work is done by the `x'
> - function which is passed a version number argument. We arrange
> in the
> - makefile that when not inlined this function is always statically
> - linked; that way a dynamically-linked executable always encodes
> the
> - version number corresponding to the data structures it uses, so
> the `x'
> - functions in the shared library can adapt without needing to
> recompile
> - all callers. */
> -
> -#undef lstat64
> +#undef __lstat64
> int
> -attribute_hidden
> -lstat64 (const char *file, struct stat64 *buf)
> +__lstat64 (const char *file, struct stat64 *buf)
> {
> return __lxstat64 (_STAT_VER, file, buf);
> }
> +hidden_def (__lstat64)
> +weak_alias (__lstat64, lstat64)
> diff --git a/io/stat.c b/io/stat.c
> index 8c3cd877c8..b3d06107e3 100644
> --- a/io/stat.c
> +++ b/io/stat.c
> @@ -1,4 +1,5 @@
> -/* Copyright (C) 1996-2020 Free Software Foundation, Inc.
> +/* Get file status.
> + Copyright (C) 1996-2020 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
> @@ -6,23 +7,6 @@
> License as published by the Free Software Foundation; either
> version 2.1 of the License, or (at your option) any later version.
>
> - In addition to the permissions in the GNU Lesser General Public
> - License, the Free Software Foundation gives you unlimited
> - permission to link the compiled version of this file with other
> - programs, and to distribute those programs without any restriction
> - coming from the use of this file. (The GNU Lesser General Public
> - License restrictions do apply in other respects; for example, they
> - cover modification of the file, and distribution when not linked
> - into another program.)
> -
> - Note that people who make modified versions of this file are not
> - obligated to grant this special exception for their modified
> - versions; it is their choice whether to do so. The GNU Lesser
> - General Public License gives permission to release a modified
> - version without this exception; this exception also makes it
> - possible to release a modified version which carries forward this
> - exception.
> -
> 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
> @@ -34,21 +18,11 @@
>
> #include <sys/stat.h>
>
> -/* This definition is only used if inlining fails for this function;
> see
> - the last page of <sys/stat.h>. The real work is done by the `x'
> - function which is passed a version number argument. We arrange
> in the
> - makefile that when not inlined this function is always statically
> - linked; that way a dynamically-linked executable always encodes
> the
> - version number corresponding to the data structures it uses, so
> the `x'
> - functions in the shared library can adapt without needing to
> recompile
> - all callers. */
> -
> -#undef stat
> +#undef __stat
> int
> -attribute_hidden
> __stat (const char *file, struct stat *buf)
> {
> return __xstat (_STAT_VER, file, buf);
> }
>
> -weak_hidden_alias (__stat, stat)
> +weak_alias (__stat, stat)
> diff --git a/io/stat64.c b/io/stat64.c
> index 8b6b662f3a..41e8905c4e 100644
> --- a/io/stat64.c
> +++ b/io/stat64.c
> @@ -1,4 +1,5 @@
> -/* Copyright (C) 1996-2020 Free Software Foundation, Inc.
> +/* Get file status.
> + Copyright (C) 1996-2020 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
> @@ -6,23 +7,6 @@
> License as published by the Free Software Foundation; either
> version 2.1 of the License, or (at your option) any later version.
>
> - In addition to the permissions in the GNU Lesser General Public
> - License, the Free Software Foundation gives you unlimited
> - permission to link the compiled version of this file with other
> - programs, and to distribute those programs without any restriction
> - coming from the use of this file. (The GNU Lesser General Public
> - License restrictions do apply in other respects; for example, they
> - cover modification of the file, and distribution when not linked
> - into another program.)
> -
> - Note that people who make modified versions of this file are not
> - obligated to grant this special exception for their modified
> - versions; it is their choice whether to do so. The GNU Lesser
> - General Public License gives permission to release a modified
> - version without this exception; this exception also makes it
> - possible to release a modified version which carries forward this
> - exception.
> -
> 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
> @@ -34,19 +18,11 @@
>
> #include <sys/stat.h>
>
> -/* This definition is only used if inlining fails for this function;
> see
> - the last page of <sys/stat.h>. The real work is done by the `x'
> - function which is passed a version number argument. We arrange
> in the
> - makefile that when not inlined this function is always statically
> - linked; that way a dynamically-linked executable always encodes
> the
> - version number corresponding to the data structures it uses, so
> the `x'
> - functions in the shared library can adapt without needing to
> recompile
> - all callers. */
> -
> -#undef stat64
> +#undef __stat64
> int
> -attribute_hidden
> -stat64 (const char *file, struct stat64 *buf)
> +__stat64 (const char *file, struct stat64 *buf)
> {
> return __xstat64 (_STAT_VER, file, buf);
> }
> +hidden_def (__stat64)
> +weak_alias (__stat64, stat64)
> diff --git a/io/sys/stat.h b/io/sys/stat.h
> index ce014d03a5..83cf253c72 100644
> --- a/io/sys/stat.h
> +++ b/io/sys/stat.h
> @@ -368,73 +368,10 @@ extern int utimensat (int __fd, const char
> *__path, extern int futimens (int __fd, const struct timespec
> __times[2]) __THROW; #endif
> \f
> -/* To allow the `struct stat' structure and the file type `mode_t'
> - bits to vary without changing shared library major version number,
> - the `stat' family of functions and `mknod' are in fact inline
> - wrappers around calls to `xstat', `fxstat', `lxstat', and
> `xmknod',
> - which all take a leading version-number argument designating the
> - data structure and bits used. <bits/stat.h> defines _STAT_VER
> with
> - the version number corresponding to `struct stat' as defined in
> - that file; and _MKNOD_VER with the version number corresponding to
> - the S_IF* macros defined therein. It is arranged that when not
> - inlined these function are always statically linked; that way a
> - dynamically-linked executable always encodes the version number
> - corresponding to the data structures it uses, so the `x' functions
> - in the shared library can adapt without needing to recompile all
> - callers. */
> -
> -#ifndef _STAT_VER
> -# define _STAT_VER 0
> -#endif
> #ifndef _MKNOD_VER
> # define _MKNOD_VER 0
> #endif
>
> -/* Wrappers for stat and mknod system calls. */
> -#ifndef __USE_FILE_OFFSET64
> -extern int __fxstat (int __ver, int __fildes, struct stat
> *__stat_buf)
> - __THROW __nonnull ((3));
> -extern int __xstat (int __ver, const char *__filename,
> - struct stat *__stat_buf) __THROW __nonnull ((2,
> 3)); -extern int __lxstat (int __ver, const char *__filename,
> - struct stat *__stat_buf) __THROW __nonnull ((2,
> 3)); -extern int __fxstatat (int __ver, int __fildes, const char
> *__filename,
> - struct stat *__stat_buf, int __flag)
> - __THROW __nonnull ((3, 4));
> -#else
> -# ifdef __REDIRECT_NTH
> -extern int __REDIRECT_NTH (__fxstat, (int __ver, int __fildes,
> - struct stat *__stat_buf),
> __fxstat64)
> - __nonnull ((3));
> -extern int __REDIRECT_NTH (__xstat, (int __ver, const char
> *__filename,
> - struct stat *__stat_buf),
> __xstat64)
> - __nonnull ((2, 3));
> -extern int __REDIRECT_NTH (__lxstat, (int __ver, const char
> *__filename,
> - struct stat *__stat_buf),
> __lxstat64)
> - __nonnull ((2, 3));
> -extern int __REDIRECT_NTH (__fxstatat, (int __ver, int __fildes,
> - const char *__filename,
> - struct stat *__stat_buf, int
> __flag),
> - __fxstatat64) __nonnull ((3, 4));
> -
> -# else
> -# define __fxstat __fxstat64
> -# define __xstat __xstat64
> -# define __lxstat __lxstat64
> -# endif
> -#endif
> -
> -#ifdef __USE_LARGEFILE64
> -extern int __fxstat64 (int __ver, int __fildes, struct stat64
> *__stat_buf)
> - __THROW __nonnull ((3));
> -extern int __xstat64 (int __ver, const char *__filename,
> - struct stat64 *__stat_buf) __THROW __nonnull
> ((2, 3)); -extern int __lxstat64 (int __ver, const char *__filename,
> - struct stat64 *__stat_buf) __THROW __nonnull
> ((2, 3)); -extern int __fxstatat64 (int __ver, int __fildes, const
> char *__filename,
> - struct stat64 *__stat_buf, int __flag)
> - __THROW __nonnull ((3, 4));
> -#endif
> extern int __xmknod (int __ver, const char *__path, __mode_t __mode,
> __dev_t *__dev) __THROW __nonnull ((2, 4));
>
> @@ -447,37 +384,6 @@ extern int __xmknodat (int __ver, int __fd,
> const char *__path, #endif
>
> #ifdef __USE_EXTERN_INLINES
> -/* Inlined versions of the real stat and mknod functions. */
> -
> -__extern_inline int
> -__NTH (stat (const char *__path, struct stat *__statbuf))
> -{
> - return __xstat (_STAT_VER, __path, __statbuf);
> -}
> -
> -# if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
> -__extern_inline int
> -__NTH (lstat (const char *__path, struct stat *__statbuf))
> -{
> - return __lxstat (_STAT_VER, __path, __statbuf);
> -}
> -# endif
> -
> -__extern_inline int
> -__NTH (fstat (int __fd, struct stat *__statbuf))
> -{
> - return __fxstat (_STAT_VER, __fd, __statbuf);
> -}
> -
> -# ifdef __USE_ATFILE
> -__extern_inline int
> -__NTH (fstatat (int __fd, const char *__filename, struct stat
> *__statbuf,
> - int __flag))
> -{
> - return __fxstatat (_STAT_VER, __fd, __filename, __statbuf, __flag);
> -}
> -# endif
> -
> # ifdef __USE_MISC
> __extern_inline int
> __NTH (mknod (const char *__path, __mode_t __mode, __dev_t __dev))
> @@ -494,41 +400,6 @@ __NTH (mknodat (int __fd, const char *__path,
> __mode_t __mode, return __xmknodat (_MKNOD_VER, __fd, __path, __mode,
> &__dev); }
> # endif
> -
> -# if defined __USE_LARGEFILE64 \
> - && (! defined __USE_FILE_OFFSET64 \
> - || (defined __REDIRECT_NTH && defined __OPTIMIZE__))
> -__extern_inline int
> -__NTH (stat64 (const char *__path, struct stat64 *__statbuf))
> -{
> - return __xstat64 (_STAT_VER, __path, __statbuf);
> -}
> -
> -# if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
> -__extern_inline int
> -__NTH (lstat64 (const char *__path, struct stat64 *__statbuf))
> -{
> - return __lxstat64 (_STAT_VER, __path, __statbuf);
> -}
> -# endif
> -
> -__extern_inline int
> -__NTH (fstat64 (int __fd, struct stat64 *__statbuf))
> -{
> - return __fxstat64 (_STAT_VER, __fd, __statbuf);
> -}
> -
> -# ifdef __USE_ATFILE
> -__extern_inline int
> -__NTH (fstatat64 (int __fd, const char *__filename, struct stat64
> *__statbuf,
> - int __flag))
> -{
> - return __fxstatat64 (_STAT_VER, __fd, __filename, __statbuf,
> __flag); -}
> -# endif
> -
> -# endif
> -
> #endif
>
> __END_DECLS
> diff --git a/nscd/gai.c b/nscd/gai.c
> index 2e19530102..b0058bc873 100644
> --- a/nscd/gai.c
> +++ b/nscd/gai.c
> @@ -16,6 +16,7 @@
> along with this program; if not, see
> <https://www.gnu.org/licenses/>. */
> #include <alloca.h>
> +#include <sys/stat.h>
>
> /* This file uses the getaddrinfo code but it compiles it without
> NSCD support. We just need a few symbol renames. */
> @@ -32,6 +33,10 @@
> #define __libc_use_alloca(size) (size <= __MAX_ALLOCA_CUTOFF)
> #define __getifaddrs getifaddrs
> #define __freeifaddrs freeifaddrs
> +#undef __fstat64
> +#define __fstat64 fstat64
> +#undef __stat64
> +#define __stat64 stat64
>
> /* We are nscd, so we don't want to be talking to ourselves. */
> #undef USE_NSCD
> diff --git a/sysdeps/generic/xstatver.h b/sysdeps/generic/xstatver.h
> new file mode 100644
> index 0000000000..d727c98a16
> --- /dev/null
> +++ b/sysdeps/generic/xstatver.h
> @@ -0,0 +1,3 @@
> +/* Versions of the 'struct stat' data structure used in
> compatibility xstat
> + functions. */
> +#define _STAT_VER 0
> diff --git a/sysdeps/mach/hurd/i386/libc.abilist
> b/sysdeps/mach/hurd/i386/libc.abilist index 5f6154d518..74a4ed5c1d
> 100644 --- a/sysdeps/mach/hurd/i386/libc.abilist
> +++ b/sysdeps/mach/hurd/i386/libc.abilist
> @@ -2192,6 +2192,14 @@ GLIBC_2.32 thrd_current F
> GLIBC_2.32 thrd_equal F
> GLIBC_2.32 thrd_sleep F
> GLIBC_2.32 thrd_yield F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> GLIBC_2.4 __confstr_chk F
> GLIBC_2.4 __fgets_chk F
> GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
> index 82c898fe35..ad4923ddbc 100644
> --- a/sysdeps/posix/getaddrinfo.c
> +++ b/sysdeps/posix/getaddrinfo.c
> @@ -2138,7 +2138,7 @@ static void
> gaiconf_reload (void)
> {
> struct stat64 st;
> - if (stat64 (GAICONF_FNAME, &st) != 0
> + if (__stat64 (GAICONF_FNAME, &st) != 0
> || !check_gaiconf_mtime (&st))
> gaiconf_init ();
> }
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> b/sysdeps/unix/sysv/linux/aarch64/libc.abilist index
> 6cd61988b4..03e4ae9296 100644 ---
> a/sysdeps/unix/sysv/linux/aarch64/libc.abilist +++
> b/sysdeps/unix/sysv/linux/aarch64/libc.abilist @@ -2160,3 +2160,11 @@
> GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F
> GLIBC_2.32 strerrordesc_np F
> GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> diff --git a/sysdeps/unix/sysv/linux/alpha/bits/stat.h
> b/sysdeps/unix/sysv/linux/alpha/bits/stat.h index
> 0064ca09ff..1fc27936b9 100644 ---
> a/sysdeps/unix/sysv/linux/alpha/bits/stat.h +++
> b/sysdeps/unix/sysv/linux/alpha/bits/stat.h @@ -22,15 +22,6 @@
> #ifndef _BITS_STAT_H
> #define _BITS_STAT_H 1
>
> -/* Versions of the `struct stat' data structure. */
> -#define _STAT_VER_KERNEL 0
> -#define _STAT_VER_GLIBC2 1
> -#define _STAT_VER_GLIBC2_1 2
> -#define _STAT_VER_KERNEL64 3
> -#define _STAT_VER_GLIBC2_3_4 3
> -#define _STAT_VER_LINUX 3
> -#define _STAT_VER _STAT_VER_LINUX
> -
> /* Versions of the `xmknod' interface. */
> #define _MKNOD_VER_LINUX 0
>
> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist
> b/sysdeps/unix/sysv/linux/alpha/libc.abilist index
> 8edb5deea1..5b752ef4a8 100644 ---
> a/sysdeps/unix/sysv/linux/alpha/libc.abilist +++
> b/sysdeps/unix/sysv/linux/alpha/libc.abilist @@ -2242,6 +2242,14 @@
> GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F
> GLIBC_2.32 strerrordesc_np F
> GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> GLIBC_2.4 _IO_fprintf F
> GLIBC_2.4 _IO_printf F
> GLIBC_2.4 _IO_sprintf F
> diff --git a/sysdeps/unix/sysv/linux/alpha/xstatver.h
> b/sysdeps/unix/sysv/linux/alpha/xstatver.h new file mode 100644
> index 0000000000..bbb9469617
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/alpha/xstatver.h
> @@ -0,0 +1,9 @@
> +/* Versions of the 'struct stat' data structure used in
> compatibility xstat
> + functions. */
> +#define _STAT_VER_KERNEL 0
> +#define _STAT_VER_GLIBC2 1
> +#define _STAT_VER_GLIBC2_1 2
> +#define _STAT_VER_KERNEL64 3
> +#define _STAT_VER_GLIBC2_3_4 3
> +#define _STAT_VER_LINUX 3
> +#define _STAT_VER _STAT_VER_LINUX
> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist
> b/sysdeps/unix/sysv/linux/arc/libc.abilist index
> df13f49e15..925b532383 100644 ---
> a/sysdeps/unix/sysv/linux/arc/libc.abilist +++
> b/sysdeps/unix/sysv/linux/arc/libc.abilist @@ -1920,3 +1920,11 @@
> GLIBC_2.32 wprintf F GLIBC_2.32 write F
> GLIBC_2.32 writev F
> GLIBC_2.32 wscanf F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> b/sysdeps/unix/sysv/linux/arm/le/libc.abilist index
> a83cc81958..a4c1a7c03c 100644 ---
> a/sysdeps/unix/sysv/linux/arm/le/libc.abilist +++
> b/sysdeps/unix/sysv/linux/arm/le/libc.abilist @@ -141,6 +141,14 @@
> GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F
> GLIBC_2.32 strerrordesc_np F
> GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> GLIBC_2.4 _Exit F
> GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
> GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
> diff --git a/sysdeps/unix/sysv/linux/bits/stat.h
> b/sysdeps/unix/sysv/linux/bits/stat.h index 240628a6f4..b542623208
> 100644 --- a/sysdeps/unix/sysv/linux/bits/stat.h
> +++ b/sysdeps/unix/sysv/linux/bits/stat.h
> @@ -23,12 +23,6 @@
> #define _BITS_STAT_H 1
>
> /* Versions of the `struct stat' data structure. */
> -#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. */
> #define _MKNOD_VER_LINUX 1
> #define _MKNOD_VER_SVR4 2
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist
> b/sysdeps/unix/sysv/linux/csky/libc.abilist index
> 32887b1c58..799873e189 100644 ---
> a/sysdeps/unix/sysv/linux/csky/libc.abilist +++
> b/sysdeps/unix/sysv/linux/csky/libc.abilist @@ -2104,3 +2104,11 @@
> GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F
> GLIBC_2.32 strerrordesc_np F
> GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> diff --git a/sysdeps/unix/sysv/linux/generic/bits/stat.h
> b/sysdeps/unix/sysv/linux/generic/bits/stat.h index
> 8d0980f0f5..35e14a47c6 100644 ---
> a/sysdeps/unix/sysv/linux/generic/bits/stat.h +++
> b/sysdeps/unix/sysv/linux/generic/bits/stat.h @@ -26,17 +26,6 @@
> #include <bits/endian.h>
> #include <bits/wordsize.h>
>
> -/* 64-bit libc uses the kernel's 'struct stat', accessed via the
> - stat() syscall; 32-bit libc uses the kernel's 'struct stat64'
> - and accesses it via the stat64() syscall. All the various
> - APIs offered by libc use the kernel shape for their struct stat
> - structure; the only difference is that 32-bit programs not
> - using __USE_FILE_OFFSET64 only see the low 32 bits of some
> - of the fields (specifically st_ino, st_size, and st_blocks). */
> -#define _STAT_VER_KERNEL 0
> -#define _STAT_VER_LINUX 0
> -#define _STAT_VER _STAT_VER_KERNEL
> -
> /* Versions of the `xmknod' interface. */
> #define _MKNOD_VER_LINUX 0
>
> diff --git a/sysdeps/unix/sysv/linux/generic/xstatver.h
> b/sysdeps/unix/sysv/linux/generic/xstatver.h new file mode 100644
> index 0000000000..8675db494c
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/generic/xstatver.h
> @@ -0,0 +1,5 @@
> +/* Versions of the 'struct stat' data structure used in
> compatibility xstat
> + functions. */
> +#define _STAT_VER_KERNEL 0
> +#define _STAT_VER_LINUX 0
> +#define _STAT_VER _STAT_VER_KERNEL
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> b/sysdeps/unix/sysv/linux/hppa/libc.abilist index
> baf425072b..95c7bf4f06 100644 ---
> a/sysdeps/unix/sysv/linux/hppa/libc.abilist +++
> b/sysdeps/unix/sysv/linux/hppa/libc.abilist @@ -2063,6 +2063,14 @@
> GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F
> GLIBC_2.32 strerrordesc_np F
> GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> GLIBC_2.4 __confstr_chk F
> GLIBC_2.4 __fgets_chk F
> GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist
> b/sysdeps/unix/sysv/linux/i386/libc.abilist index
> 8b0242a9b1..e7cf5cdb98 100644 ---
> a/sysdeps/unix/sysv/linux/i386/libc.abilist +++
> b/sysdeps/unix/sysv/linux/i386/libc.abilist @@ -2229,6 +2229,14 @@
> GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F
> GLIBC_2.32 strerrordesc_np F
> GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> GLIBC_2.4 __confstr_chk F
> GLIBC_2.4 __fgets_chk F
> GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/unix/sysv/linux/ia64/bits/stat.h
> b/sysdeps/unix/sysv/linux/ia64/bits/stat.h index
> 608e988ae6..8ec2e4c81f 100644 ---
> a/sysdeps/unix/sysv/linux/ia64/bits/stat.h +++
> b/sysdeps/unix/sysv/linux/ia64/bits/stat.h @@ -22,11 +22,6 @@
> #ifndef _BITS_STAT_H
> #define _BITS_STAT_H 1
>
> -/* Versions of the `struct stat' data structure. */
> -#define _STAT_VER_KERNEL 0
> -#define _STAT_VER_LINUX 1
> -#define _STAT_VER _STAT_VER_LINUX
> -
> /* Versions of the `xmknod' interface. */
> #define _MKNOD_VER_LINUX 0
>
> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist
> b/sysdeps/unix/sysv/linux/ia64/libc.abilist index
> b6ba86dbe9..beeb905efd 100644 ---
> a/sysdeps/unix/sysv/linux/ia64/libc.abilist +++
> b/sysdeps/unix/sysv/linux/ia64/libc.abilist @@ -2095,6 +2095,14 @@
> GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F
> GLIBC_2.32 strerrordesc_np F
> GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> GLIBC_2.4 __confstr_chk F
> GLIBC_2.4 __fgets_chk F
> GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/unix/sysv/linux/ia64/xstatver.h
> b/sysdeps/unix/sysv/linux/ia64/xstatver.h new file mode 100644
> index 0000000000..4f02f697ad
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/ia64/xstatver.h
> @@ -0,0 +1,5 @@
> +/* Versions of the 'struct stat' data structure used in
> compatibility xstat
> + functions. */
> +#define _STAT_VER_KERNEL 0
> +#define _STAT_VER_LINUX 1
> +#define _STAT_VER _STAT_VER_LINUX
> diff --git a/sysdeps/unix/sysv/linux/m68k/bits/stat.h
> b/sysdeps/unix/sysv/linux/m68k/bits/stat.h index
> 453dcac709..bf41776e6c 100644 ---
> a/sysdeps/unix/sysv/linux/m68k/bits/stat.h +++
> b/sysdeps/unix/sysv/linux/m68k/bits/stat.h @@ -22,13 +22,6 @@
> #ifndef _BITS_STAT_H
> #define _BITS_STAT_H 1
>
> -/* Versions of the `struct stat' data structure. */
> -#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. */
> #define _MKNOD_VER_LINUX 1
> #define _MKNOD_VER_SVR4 2
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist index
> 2d726097ca..ed34e1fc82 100644 ---
> a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist +++
> b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist @@ -2175,6
> +2175,14 @@ GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F
> GLIBC_2.32 strerrordesc_np F
> GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> GLIBC_2.4 __confstr_chk F
> GLIBC_2.4 __fgets_chk F
> GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/unix/sysv/linux/m68k/xstatver.h
> b/sysdeps/unix/sysv/linux/m68k/xstatver.h new file mode 100644
> index 0000000000..59dba71dd1
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/m68k/xstatver.h
> @@ -0,0 +1,7 @@
> +/* Versions of the 'struct stat' data structure used in
> compatibility xstat
> + functions. */
> +#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
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist index
> 7c78649e03..e00f5115b2 100644 ---
> a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist +++
> b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist @@ -2155,3
> +2155,11 @@ GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F
> GLIBC_2.32 strerrordesc_np F
> GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/bits/stat.h
> b/sysdeps/unix/sysv/linux/microblaze/bits/stat.h index
> c5817e5b77..51316a8c1b 100644 ---
> a/sysdeps/unix/sysv/linux/microblaze/bits/stat.h +++
> b/sysdeps/unix/sysv/linux/microblaze/bits/stat.h @@ -23,13 +23,6 @@
> #ifndef _BITS_STAT_H
> #define _BITS_STAT_H 1
>
> -/* Versions of the `struct stat' data structure. */
> -#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. */
> #define _MKNOD_VER_LINUX 1
> #define _MKNOD_VER_SVR4 2
> diff --git a/sysdeps/unix/sysv/linux/microblaze/xstatver.h
> b/sysdeps/unix/sysv/linux/microblaze/xstatver.h new file mode 100644
> index 0000000000..bddaa0d5ec
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/microblaze/xstatver.h
> @@ -0,0 +1,7 @@
> +/* Versions of the 'struct stat' data structure used in
> compatibility xstat
> + functions. */
> +#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. */ diff --git a/sysdeps/unix/sysv/linux/mips/bits/stat.h
> b/sysdeps/unix/sysv/linux/mips/bits/stat.h index
> b0e6726655..cfeb4ce6a4 100644 ---
> a/sysdeps/unix/sysv/linux/mips/bits/stat.h +++
> b/sysdeps/unix/sysv/linux/mips/bits/stat.h @@ -24,13 +24,6 @@
>
> #include <sgidefs.h>
>
> -/* Versions of the `struct stat' data structure. */
> -#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. */
> #define _MKNOD_VER_LINUX 1
> #define _MKNOD_VER_SVR4 2
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist index
> 9fa655b3a5..fe9ba4e982 100644 ---
> a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist +++
> b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist @@ -2146,6
> +2146,14 @@ GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F
> GLIBC_2.32 strerrordesc_np F
> GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> GLIBC_2.4 __confstr_chk F
> GLIBC_2.4 __fgets_chk F
> GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist index
> de990933cf..e67591e710 100644 ---
> a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist +++
> b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist @@ -2152,6
> +2152,14 @@ GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F
> GLIBC_2.32 strerrordesc_np F
> GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> GLIBC_2.4 __confstr_chk F
> GLIBC_2.4 __fgets_chk F
> GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist index
> 754491f209..e4eb9e6bbf 100644 ---
> a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist +++
> b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist @@ -2146,6
> +2146,14 @@ GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F
> GLIBC_2.32 strerrordesc_np F
> GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> GLIBC_2.4 __confstr_chk F
> GLIBC_2.4 __fgets_chk F
> GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/unix/sysv/linux/mips/xstatver.h
> b/sysdeps/unix/sysv/linux/mips/xstatver.h new file mode 100644
> index 0000000000..59dba71dd1
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/mips/xstatver.h
> @@ -0,0 +1,7 @@
> +/* Versions of the 'struct stat' data structure used in
> compatibility xstat
> + functions. */
> +#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
> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist
> b/sysdeps/unix/sysv/linux/nios2/libc.abilist index
> 36a875115c..0878998441 100644 ---
> a/sysdeps/unix/sysv/linux/nios2/libc.abilist +++
> b/sysdeps/unix/sysv/linux/nios2/libc.abilist @@ -2193,3 +2193,11 @@
> GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F
> GLIBC_2.32 strerrordesc_np F
> GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/stat.h
> b/sysdeps/unix/sysv/linux/powerpc/bits/stat.h index
> 61781bd902..40ea9a96d4 100644 ---
> a/sysdeps/unix/sysv/linux/powerpc/bits/stat.h +++
> b/sysdeps/unix/sysv/linux/powerpc/bits/stat.h @@ -24,17 +24,6 @@
>
> #include <bits/wordsize.h>
>
> -/* Versions of the `struct stat' data structure. */
> -#define _STAT_VER_LINUX_OLD 1
> -#define _STAT_VER_KERNEL 1
> -#define _STAT_VER_SVR4 2
> -#define _STAT_VER_LINUX 3
> -#if __WORDSIZE == 32
> -# define _STAT_VER _STAT_VER_LINUX
> -#else
> -# define _STAT_VER _STAT_VER_KERNEL
> -#endif
> -
> /* Versions of the `xmknod' interface. */
> #define _MKNOD_VER_LINUX 1
> #define _MKNOD_VER_SVR4 2
> diff --git
> a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist index
> 6de9bed51d..993c957e8e 100644 ---
> a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist +++
> b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist @@
> -2202,6 +2202,14 @@ GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np
> F GLIBC_2.32 strerrordesc_np F GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> GLIBC_2.4 _IO_fprintf F
> GLIBC_2.4 _IO_printf F
> GLIBC_2.4 _IO_sprintf F
> diff --git
> a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist index
> 92114806ac..25a8e828e9 100644 ---
> a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist +++
> b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist @@
> -2065,6 +2065,14 @@ GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np
> F GLIBC_2.32 strerrordesc_np F GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> GLIBC_2.4 _IO_fprintf F
> GLIBC_2.4 _IO_printf F
> GLIBC_2.4 _IO_sprintf F
> diff --git
> a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist index
> b01fdcfae1..46ae28e552 100644 ---
> a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist +++
> b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist @@
> -2355,3 +2355,11 @@ GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np
> F GLIBC_2.32 strerrordesc_np F GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/xstatver.h
> b/sysdeps/unix/sysv/linux/powerpc/xstatver.h new file mode 100644
> index 0000000000..1656e2f7e4
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/powerpc/xstatver.h
> @@ -0,0 +1,11 @@
> +/* Versions of the 'struct stat' data structure used in
> compatibility xstat
> + functions. */
> +#define _STAT_VER_LINUX_OLD 1
> +#define _STAT_VER_KERNEL 1
> +#define _STAT_VER_SVR4 2
> +#define _STAT_VER_LINUX 3
> +#if __WORDSIZE == 32
> +# define _STAT_VER _STAT_VER_LINUX
> +#else
> +# define _STAT_VER _STAT_VER_KERNEL
> +#endif
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist index
> 45cbeb1d98..1044aa6be2 100644 ---
> a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist +++
> b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist @@ -2122,3 +2122,11
> @@ GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F
> GLIBC_2.32 strerrordesc_np F
> GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> diff --git a/sysdeps/unix/sysv/linux/s390/bits/stat.h
> b/sysdeps/unix/sysv/linux/s390/bits/stat.h index
> b383a98692..d12055529a 100644 ---
> a/sysdeps/unix/sysv/linux/s390/bits/stat.h +++
> b/sysdeps/unix/sysv/linux/s390/bits/stat.h @@ -25,21 +25,9 @@
> #include <bits/wordsize.h>
>
> #if __WORDSIZE == 64
> -/* Versions of the `struct stat' data structure. */
> -# define _STAT_VER_KERNEL 0
> -# define _STAT_VER_LINUX 1
> -# define _STAT_VER _STAT_VER_LINUX
> -
> /* Versions of the `xmknod' interface. */
> #define _MKNOD_VER_LINUX 0
> #else
> -/* Versions of the `struct stat' data structure. */
> -# 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
> -
> /* Versions of the `xmknod' interface. */
> # define _MKNOD_VER_LINUX 1
> # define _MKNOD_VER_SVR4 2
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist index
> d0752dba6c..6b1fa7e67f 100644 ---
> a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist +++
> b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist @@ -2200,6
> +2200,14 @@ GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F
> GLIBC_2.32 strerrordesc_np F
> GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> GLIBC_2.4 _IO_fprintf F
> GLIBC_2.4 _IO_printf F
> GLIBC_2.4 _IO_sprintf F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist index
> af5f14d1c6..0aec094e7b 100644 ---
> a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist +++
> b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist @@ -2101,6
> +2101,14 @@ GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F
> GLIBC_2.32 strerrordesc_np F
> GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> GLIBC_2.4 _IO_fprintf F
> GLIBC_2.4 _IO_printf F
> GLIBC_2.4 _IO_sprintf F
> diff --git a/sysdeps/unix/sysv/linux/s390/xstatver.h
> b/sysdeps/unix/sysv/linux/s390/xstatver.h new file mode 100644
> index 0000000000..5ad0db2797
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/s390/xstatver.h
> @@ -0,0 +1,16 @@
> +/* Versions of the 'struct stat' data structure used in
> compatibility xstat
> + functions. */
> +
> +#include <bits/wordsize.h>
> +
> +#if __WORDSIZE == 64
> +# define _STAT_VER_KERNEL 0
> +# define _STAT_VER_LINUX 1
> +# define _STAT_VER _STAT_VER_LINUX
> +#else
> +# 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
> +#endif
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> b/sysdeps/unix/sysv/linux/sh/le/libc.abilist index
> 182970a708..e2ae13d4fa 100644 ---
> a/sysdeps/unix/sysv/linux/sh/le/libc.abilist +++
> b/sysdeps/unix/sysv/linux/sh/le/libc.abilist @@ -2067,6 +2067,14 @@
> GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F
> GLIBC_2.32 strerrordesc_np F
> GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> GLIBC_2.4 __confstr_chk F
> GLIBC_2.4 __fgets_chk F
> GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/stat.h
> b/sysdeps/unix/sysv/linux/sparc/bits/stat.h index
> 7379f2232d..7af17b5c40 100644 ---
> a/sysdeps/unix/sysv/linux/sparc/bits/stat.h +++
> b/sysdeps/unix/sysv/linux/sparc/bits/stat.h @@ -22,13 +22,6 @@
> #ifndef _BITS_STAT_H
> #define _BITS_STAT_H 1
>
> -/* Versions of the `struct stat' data structure. */
> -#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. */
> #define _MKNOD_VER_LINUX 1
> #define _MKNOD_VER_SVR4 2
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist index
> a2521c3ee3..886e01960f 100644 ---
> a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist +++
> b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist @@ -2191,6
> +2191,14 @@ GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F
> GLIBC_2.32 strerrordesc_np F
> GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> GLIBC_2.4 _IO_fprintf F
> GLIBC_2.4 _IO_printf F
> GLIBC_2.4 _IO_sprintf F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist index
> d8188903f9..33b068201a 100644 ---
> a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist +++
> b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist @@ -2118,6
> +2118,14 @@ GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F
> GLIBC_2.32 strerrordesc_np F
> GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> GLIBC_2.4 __confstr_chk F
> GLIBC_2.4 __fgets_chk F
> GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/unix/sysv/linux/sparc/xstatver.h
> b/sysdeps/unix/sysv/linux/sparc/xstatver.h new file mode 100644
> index 0000000000..ae92b530e7
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/sparc/xstatver.h
> @@ -0,0 +1,7 @@
> +/* Versions of the 'struct stat' data structure used in
> compatibility xstat
> + functions. */
> +#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. */ diff --git
> a/sysdeps/unix/sysv/linux/x86/bits/stat.h
> b/sysdeps/unix/sysv/linux/x86/bits/stat.h index
> 25dec69dda..f132569e9d 100644 ---
> a/sysdeps/unix/sysv/linux/x86/bits/stat.h +++
> b/sysdeps/unix/sysv/linux/x86/bits/stat.h @@ -24,25 +24,15 @@
> /* 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
> -
> /* 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. */
> diff --git a/sysdeps/unix/sysv/linux/x86/xstatver.h
> b/sysdeps/unix/sysv/linux/x86/xstatver.h new file mode 100644
> index 0000000000..6f047a346d
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/x86/xstatver.h
> @@ -0,0 +1,13 @@
> +/* Versions of the 'struct stat' data structure used in
> compatibility xstat
> + functions. */
> +#ifndef __x86_64__
> +# define _STAT_VER_LINUX_OLD 1
> +# define _STAT_VER_KERNEL 1
> +# define _STAT_VER_SVR4 2
> +# define _STAT_VER_LINUX 3
> +#else
> +# define _STAT_VER_KERNEL 0
> +# define _STAT_VER_LINUX 1
> +#endif
> +#define _STAT_VER _STAT_VER_LINUX
> +
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist index
> 1a96103c68..f767bdde24 100644 ---
> a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist +++
> b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist @@ -2076,6 +2076,14
> @@ GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F
> GLIBC_2.32 strerrordesc_np F
> GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> GLIBC_2.4 __confstr_chk F
> GLIBC_2.4 __fgets_chk F
> GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist index
> 35745a75b6..535862a51e 100644 ---
> a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist +++
> b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist @@ -2173,3 +2173,11
> @@ GLIBC_2.32 sigabbrev_np F GLIBC_2.32 sigdescr_np F
> GLIBC_2.32 strerrordesc_np F
> GLIBC_2.32 strerrorname_np F
> +GLIBC_2.33 fstat F
> +GLIBC_2.33 fstat64 F
> +GLIBC_2.33 fstatat F
> +GLIBC_2.33 fstatat64 F
> +GLIBC_2.33 lstat F
> +GLIBC_2.33 lstat64 F
> +GLIBC_2.33 stat F
> +GLIBC_2.33 stat64 F
> diff --git a/sysdeps/unix/sysv/linux/xstatver.h
> b/sysdeps/unix/sysv/linux/xstatver.h new file mode 100644
> index 0000000000..59dba71dd1
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/xstatver.h
> @@ -0,0 +1,7 @@
> +/* Versions of the 'struct stat' data structure used in
> compatibility xstat
> + functions. */
> +#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
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
next prev parent reply other threads:[~2020-07-24 9:24 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-23 19:46 [PATCH 00/16] Add y2038 support for stat functions Adhemerval Zanella via Libc-alpha
2020-07-23 19:46 ` [PATCH 01/16] linux: Always define STAT_IS_KERNEL_STAT Adhemerval Zanella via Libc-alpha
2020-07-24 8:17 ` Lukasz Majewski
2020-07-23 19:46 ` [PATCH 02/16] linux: Define STAT64_IS_KERNEL_STAT64 Adhemerval Zanella via Libc-alpha
2020-07-24 8:20 ` Lukasz Majewski
2020-07-23 19:46 ` [PATCH 03/16] linux: Consolidate xstat{64} Adhemerval Zanella via Libc-alpha
2020-07-23 20:51 ` Joseph Myers
2020-07-24 8:34 ` Lukasz Majewski
2020-09-09 14:46 ` Lukasz Majewski
2020-09-09 18:05 ` Adhemerval Zanella via Libc-alpha
2020-09-10 7:10 ` Lukasz Majewski
2020-07-23 19:46 ` [PATCH 04/16] linux: Consolidate lxstat{64} Adhemerval Zanella via Libc-alpha
2020-07-24 8:43 ` Lukasz Majewski
2020-07-23 19:46 ` [PATCH 05/16] linux: Consolidate fxstat{64} Adhemerval Zanella via Libc-alpha
2020-07-24 9:04 ` Lukasz Majewski
2020-07-23 19:46 ` [PATCH 06/16] linux: Consolidate fxstatat{64} Adhemerval Zanella via Libc-alpha
2020-07-24 9:14 ` Lukasz Majewski
2020-07-23 19:46 ` [PATCH 07/16] Linux: Consolidate xmknod Adhemerval Zanella via Libc-alpha
2020-07-24 9:14 ` Lukasz Majewski
2020-07-23 19:46 ` [PATCH 08/16] Remove internal usage of extensible stat functions Adhemerval Zanella via Libc-alpha
2020-07-24 9:16 ` Lukasz Majewski
2020-07-23 19:46 ` [PATCH 09/16] Remove stat wrapper functions, move them to exported symbols Adhemerval Zanella via Libc-alpha
2020-07-24 9:23 ` Lukasz Majewski [this message]
2020-07-23 19:46 ` [PATCH 10/16] Remove mknod wrapper functions, move them to symbols Adhemerval Zanella via Libc-alpha
2020-07-23 20:53 ` Joseph Myers
2020-07-23 20:58 ` Adhemerval Zanella via Libc-alpha
2020-07-23 21:01 ` Joseph Myers
2020-07-24 9:25 ` Lukasz Majewski
2020-10-12 22:27 ` Joseph Myers
2020-10-13 0:58 ` Adhemerval Zanella via Libc-alpha
2020-07-23 19:46 ` [PATCH 11/16] linux: Move the struct stat{64} to struct_stat.h Adhemerval Zanella via Libc-alpha
2020-07-24 9:27 ` Lukasz Majewski
2020-07-23 19:46 ` [PATCH 12/16] linux: Implement {l}fstat{at} in terms of fstatat Adhemerval Zanella via Libc-alpha
2020-07-24 9:29 ` Lukasz Majewski
2020-07-23 19:46 ` [PATCH 13/16] linux: Disentangle fstatat from fxstatat Adhemerval Zanella via Libc-alpha
2020-07-24 9:39 ` Lukasz Majewski
2020-07-24 10:25 ` Florian Weimer via Libc-alpha
2020-07-24 14:39 ` Adhemerval Zanella via Libc-alpha
2020-07-23 19:46 ` [PATCH 14/16] linux: Move {f}xstat{at} to compat symbols Adhemerval Zanella via Libc-alpha
2020-07-24 9:40 ` Lukasz Majewski
2020-10-21 5:21 ` __xstat et al. as compat symbols (was: Re: [PATCH 14/16] linux: Move {f}xstat{at} to compat symbols) Florian Weimer via Libc-alpha
2020-10-21 11:59 ` Adhemerval Zanella via Libc-alpha
2020-10-21 12:57 ` __xstat et al. as compat symbols Florian Weimer via Libc-alpha
2020-10-21 13:09 ` Adhemerval Zanella via Libc-alpha
2020-10-22 10:08 ` Florian Weimer via Libc-alpha
2020-10-22 12:43 ` Adhemerval Zanella via Libc-alpha
2020-10-22 15:37 ` Florian Weimer via Libc-alpha
2020-10-22 16:40 ` Adhemerval Zanella via Libc-alpha
2020-10-22 18:04 ` Adhemerval Zanella via Libc-alpha
2020-07-23 19:46 ` [PATCH 15/16] linux: Add {f}stat{at} y2038 support Adhemerval Zanella via Libc-alpha
2020-07-23 20:55 ` Joseph Myers
2020-07-23 21:00 ` Adhemerval Zanella via Libc-alpha
2020-07-24 10:53 ` Lukasz Majewski
2020-07-30 12:42 ` Adhemerval Zanella via Libc-alpha
2020-08-02 19:46 ` Maciej W. Rozycki via Libc-alpha
2020-10-06 9:48 ` Lukasz Majewski
2020-10-07 12:52 ` Adhemerval Zanella via Libc-alpha
2020-10-07 14:25 ` Adhemerval Zanella via Libc-alpha
2020-10-07 20:20 ` Lukasz Majewski
2020-10-07 21:01 ` Adhemerval Zanella via Libc-alpha
2020-10-07 21:07 ` Adhemerval Zanella via Libc-alpha
2020-10-08 7:57 ` Lukasz Majewski
2020-10-09 14:05 ` Adhemerval Zanella via Libc-alpha
2020-10-09 15:39 ` Lukasz Majewski
2020-10-09 20:06 ` Adhemerval Zanella via Libc-alpha
2020-10-13 13:58 ` Lukasz Majewski
2020-10-13 14:18 ` Adhemerval Zanella via Libc-alpha
2020-10-13 14:23 ` H.J. Lu via Libc-alpha
2020-10-13 14:27 ` Adhemerval Zanella via Libc-alpha
2020-10-13 18:14 ` Adhemerval Zanella via Libc-alpha
2020-10-13 21:20 ` Lukasz Majewski
2020-10-13 21:40 ` Lukasz Majewski
2020-10-14 13:15 ` Lukasz Majewski
2020-10-14 13:39 ` Adhemerval Zanella via Libc-alpha
2020-07-23 19:46 ` [PATCH 16/16] linux: Move xmknoda{at} to compat symbols Adhemerval Zanella via Libc-alpha
2020-07-24 10:30 ` Florian Weimer via Libc-alpha
2020-07-24 12:34 ` Adhemerval Zanella via Libc-alpha
2020-07-24 12:43 ` Florian Weimer via Libc-alpha
2020-07-24 12:49 ` Adhemerval Zanella via Libc-alpha
2020-07-24 10:43 ` Lukasz Majewski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/libc/involved.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200724112356.3d03e17d@jawa \
--to=lukma@denx.de \
--cc=adhemerval.zanella@linaro.org \
--cc=alistair.francis@wdc.com \
--cc=libc-alpha@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).