diff mbox series

[1/2] Revert "linux: Move {f}xstat{at} to compat symbols"

Message ID 20201022190302.2000118-1-adhemerval.zanella@linaro.org
State New
Headers show
Series [1/2] Revert "linux: Move {f}xstat{at} to compat symbols" | expand

Commit Message

Adhemerval Zanella Oct. 22, 2020, 7:03 p.m. UTC
This reverts commit 20b39d59467b0c1d858e89ded8b0cebe55e22f60 to
moke {f}xstat{at} default symbols.  It also only builds them for
compat mode to avoid export them for newer ABIs that supports
the stat symbol, such as riscv32.

The idea is to not force static libraries built against old glibc
to update against new glibcs (since they reference the the
{f}xstat{at} symbols).

Checked on x86_64-linux-gnu and i686-linux-gnu.
---
 sysdeps/unix/sysv/linux/alpha/fxstat64.c      | 12 +----
 sysdeps/unix/sysv/linux/alpha/fxstatat64.c    |  9 +---
 sysdeps/unix/sysv/linux/alpha/lxstat64.c      | 12 +----
 sysdeps/unix/sysv/linux/alpha/xstat64.c       | 12 +----
 sysdeps/unix/sysv/linux/fxstat.c              | 29 +++++-------
 sysdeps/unix/sysv/linux/fxstat64.c            | 34 ++++++--------
 sysdeps/unix/sysv/linux/fxstatat.c            | 23 ++++-----
 sysdeps/unix/sysv/linux/fxstatat64.c          | 31 +++++-------
 sysdeps/unix/sysv/linux/lxstat.c              | 27 +++++------
 sysdeps/unix/sysv/linux/lxstat64.c            | 47 +++++++++----------
 sysdeps/unix/sysv/linux/mips/fxstat.c         |  8 ----
 sysdeps/unix/sysv/linux/mips/lxstat.c         |  8 ----
 .../unix/sysv/linux/mips/mips64/fxstat64.c    |  8 ----
 .../unix/sysv/linux/mips/mips64/fxstatat.c    |  8 ----
 .../unix/sysv/linux/mips/mips64/fxstatat64.c  |  8 ----
 .../unix/sysv/linux/mips/mips64/lxstat64.c    |  8 ----
 sysdeps/unix/sysv/linux/mips/mips64/xstat64.c |  9 +---
 sysdeps/unix/sysv/linux/mips/xstat.c          |  8 ----
 sysdeps/unix/sysv/linux/xstat.c               | 27 +++++------
 sysdeps/unix/sysv/linux/xstat64.c             | 43 ++++++++---------
 20 files changed, 122 insertions(+), 249 deletions(-)
diff mbox series

Patch

diff --git a/sysdeps/unix/sysv/linux/alpha/fxstat64.c b/sysdeps/unix/sysv/linux/alpha/fxstat64.c
index bcfb55050c..9d6b8eca32 100644
--- a/sysdeps/unix/sysv/linux/alpha/fxstat64.c
+++ b/sysdeps/unix/sysv/linux/alpha/fxstat64.c
@@ -22,11 +22,9 @@ 
 #include <kernel_stat.h>
 #include <sysdep.h>
 #include <xstatconv.h>
-#include <shlib-compat.h>
 
 /* Get information about the file NAME in BUF.  */
 int
-attribute_compat_text_section
 __fxstat64 (int vers, int fd, struct stat64 *buf)
 {
   switch (vers)
@@ -44,12 +42,4 @@  __fxstat64 (int vers, int fd, struct stat64 *buf)
       }
     }
 }
-
-#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
-strong_alias (__fxstat64, __fxstat_compat)
-compat_symbol (libc, __fxstat_compat, __fxstat, GLIBC_2_0);
-#endif
-
-#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_33)
-compat_symbol (libc, __fxstat64, __fxstat64, GLIBC_2_1);
-#endif
+strong_alias (__fxstat64, __fxstat);
diff --git a/sysdeps/unix/sysv/linux/alpha/fxstatat64.c b/sysdeps/unix/sysv/linux/alpha/fxstatat64.c
index fa3074eeca..997fb87ac6 100644
--- a/sysdeps/unix/sysv/linux/alpha/fxstatat64.c
+++ b/sysdeps/unix/sysv/linux/alpha/fxstatat64.c
@@ -22,18 +22,11 @@ 
 #include <kernel_stat.h>
 #include <sysdep.h>
 #include <xstatconv.h>
-#include <shlib-compat.h>
 
-#if SHLIB_COMPAT(libc, GLIBC_2_4, GLIBC_2_33)
 /* Get information about the file NAME in BUF.  */
 int
-attribute_compat_text_section
 __fxstatat64 (int vers, int fd, const char *file, struct stat64 *st, int flag)
 {
   return INLINE_SYSCALL_CALL (fstatat64, fd, file, st, flag);
 }
-strong_alias (__fxstatat64, __fxstatat_compat)
-compat_symbol (libc, __fxstatat_compat, __fxstatat, GLIBC_2_4);
-
-compat_symbol (libc, __fxstatat64, __fxstatat64, GLIBC_2_4);
-#endif
+strong_alias (__fxstatat64, __fxstatat);
diff --git a/sysdeps/unix/sysv/linux/alpha/lxstat64.c b/sysdeps/unix/sysv/linux/alpha/lxstat64.c
index 7424b2f621..38f132f15e 100644
--- a/sysdeps/unix/sysv/linux/alpha/lxstat64.c
+++ b/sysdeps/unix/sysv/linux/alpha/lxstat64.c
@@ -23,11 +23,9 @@ 
 #include <kernel_stat.h>
 #include <sysdep.h>
 #include <xstatconv.h>
-#include <shlib-compat.h>
 
 /* Get information about the file NAME in BUF.  */
 int
-attribute_compat_text_section
 __lxstat64 (int vers, const char *name, struct stat64 *buf)
 {
   switch (vers)
@@ -45,12 +43,4 @@  __lxstat64 (int vers, const char *name, struct stat64 *buf)
       }
     }
 }
-
-#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
-strong_alias (__lxstat64, __lxstat_compat)
-compat_symbol (libc, __lxstat_compat, __lxstat, GLIBC_2_0);
-#endif
-
-#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_33)
-compat_symbol (libc, __lxstat64, __lxstat64, GLIBC_2_1);
-#endif
+weak_alias (__lxstat64, __lxstat);
diff --git a/sysdeps/unix/sysv/linux/alpha/xstat64.c b/sysdeps/unix/sysv/linux/alpha/xstat64.c
index 59f7ddae7f..c856c95dc5 100644
--- a/sysdeps/unix/sysv/linux/alpha/xstat64.c
+++ b/sysdeps/unix/sysv/linux/alpha/xstat64.c
@@ -23,11 +23,9 @@ 
 #include <kernel_stat.h>
 #include <sysdep.h>
 #include <xstatconv.h>
-#include <shlib-compat.h>
 
 /* Get information about the file NAME in BUF.  */
 int
-attribute_compat_text_section
 __xstat64 (int vers, const char *name, struct stat64 *buf)
 {
   switch (vers)
@@ -45,12 +43,4 @@  __xstat64 (int vers, const char *name, struct stat64 *buf)
       }
     }
 }
-
-#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
-strong_alias (__xstat64, __xstat_compat)
-compat_symbol (libc, __xstat_compat, __xstat, GLIBC_2_0);
-#endif
-
-#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_33)
-compat_symbol (libc, __xstat64, __xstat64, GLIBC_2_1);
-#endif
+weak_alias (__xstat64, __xstat);
diff --git a/sysdeps/unix/sysv/linux/fxstat.c b/sysdeps/unix/sysv/linux/fxstat.c
index 649bb95252..c2c28b9096 100644
--- a/sysdeps/unix/sysv/linux/fxstat.c
+++ b/sysdeps/unix/sysv/linux/fxstat.c
@@ -20,49 +20,46 @@ 
 #include <fcntl.h>
 #include <kernel_stat.h>
 #include <sysdep.h>
+#include <shlib-compat.h>
 
-#if !XSTAT_IS_XSTAT64
-# include <xstatconv.h>
-# include <xstatover.h>
-# include <shlib-compat.h>
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
 
-# if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
+# if !XSTAT_IS_XSTAT64
+#  include <xstatconv.h>
+#  include <xstatover.h>
 
 /* Get information about the file FD in BUF.  */
 int
-attribute_compat_text_section
 __fxstat (int vers, int fd, struct stat *buf)
 {
   switch (vers)
     {
     case _STAT_VER_KERNEL:
       {
-# if STAT_IS_KERNEL_STAT
+#  if STAT_IS_KERNEL_STAT
 	/* New kABIs which uses generic pre 64-bit time Linux ABI,
 	   e.g. csky, nios2  */
 	int r = INLINE_SYSCALL_CALL (fstat64, fd, buf);
 	return r ?: stat_overflow (buf);
-# else
+#  else
 	/* Old kABIs with old non-LFS support, e.g. arm, i386, hppa, m68k,
 	   microblaze, s390, sh, powerpc, and sparc.  */
 	return INLINE_SYSCALL_CALL (fstat, fd, buf);
-# endif
+#  endif
       }
 
     default:
       {
-# if STAT_IS_KERNEL_STAT
+#  if STAT_IS_KERNEL_STAT
 	return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL);
-# else
+#  else
 	struct stat64 buf64;
 	int r = INLINE_SYSCALL_CALL (fstat64, fd, &buf64);
 	return r ?: __xstat32_conv (vers, &buf64, buf);
-#endif
+# endif
       }
     }
 }
+# endif /* XSTAT_IS_XSTAT64  */
 
-compat_symbol (libc, __fxstat, __fxstat, GLIBC_2_0);
-# endif /* SHLIB_COMPAT  */
-
-#endif /* XSTAT_IS_XSTAT64  */
+#endif /* SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)  */
diff --git a/sysdeps/unix/sysv/linux/fxstat64.c b/sysdeps/unix/sysv/linux/fxstat64.c
index 4bd926bf01..a80b3fd4a3 100644
--- a/sysdeps/unix/sysv/linux/fxstat64.c
+++ b/sysdeps/unix/sysv/linux/fxstat64.c
@@ -27,15 +27,13 @@ 
 #include <shlib-compat.h>
 
 #if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
-
 /* Get information about the file FD in BUF.  */
 
 int
-attribute_compat_text_section
 ___fxstat64 (int vers, int fd, struct stat64 *buf)
 {
-#if XSTAT_IS_XSTAT64
-# ifdef __NR_fstat64
+# if XSTAT_IS_XSTAT64
+#  ifdef __NR_fstat64
   /* 64-bit kABI outlier, e.g. sparc64.  */
   if (vers == _STAT_VER_KERNEL)
     return INLINE_SYSCALL_CALL (fstat, fd, buf);
@@ -45,13 +43,13 @@  ___fxstat64 (int vers, int fd, struct stat64 *buf)
       int r = INLINE_SYSCALL_CALL (fstat64, fd, &st64);
       return r ?: __xstat32_conv (vers, &st64, (struct stat *) buf);
     }
-# elif defined __NR_fstat
+#  elif defined __NR_fstat
   /* 64-bit kABI, e.g. aarch64, ia64, powerpc64*, s390x, riscv64,
      and x86_64.  */
   if (vers == _STAT_VER_KERNEL || vers == _STAT_VER_LINUX)
     return INLINE_SYSCALL_CALL (fstat, fd, buf);
   return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL);
-# else
+#  else
   /* New 32-bit kABIs with only 64-bit time_t support, e.g. arc, riscv32.  */
   struct statx tmp;
   int r = INLINE_SYSCALL_CALL (statx, fd, "", AT_EMPTY_PATH,
@@ -59,26 +57,24 @@  ___fxstat64 (int vers, int fd, struct stat64 *buf)
   if (r == 0)
     __cp_stat64_statx (buf, &tmp);
   return r;
-# endif
-#else
+#  endif
+# else
   /* All kABIs with non-LFS support, e.g. arm, csky, i386, hppa, m68k,
      microblaze, mips32, nios2, sh, powerpc32, and sparc32.  */
   return INLINE_SYSCALL_CALL (fstat64, fd, buf);
-#endif /* XSTAT_IS_XSTAT64  */
+# endif /* XSTAT_IS_XSTAT64  */
 }
 
-#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
-compat_symbol (libc, ___fxstat64, __fxstat64, GLIBC_2_2);
+# if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
+versioned_symbol (libc, ___fxstat64, __fxstat64, GLIBC_2_2);
 strong_alias (___fxstat64, __old__fxstat64)
 compat_symbol (libc, __old__fxstat64, __fxstat64, GLIBC_2_1);
-#else
+# else
 strong_alias (___fxstat64, __fxstat64)
-compat_symbol (libc, ___fxstat64, __fxstat64, GLIBC_2_2);
-#endif
+# endif
 
-#if XSTAT_IS_XSTAT64
-strong_alias (___fxstat64, __fxstat_compat)
-compat_symbol (libc, __fxstat_compat, __fxstat, GLIBC_2_2);
-#endif
+# if XSTAT_IS_XSTAT64
+strong_alias (__fxstat64, __fxstat);
+# endif
 
-#endif /* SHLIB_COMPAT  */
+#endif /* SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)  */
diff --git a/sysdeps/unix/sysv/linux/fxstatat.c b/sysdeps/unix/sysv/linux/fxstatat.c
index 2083e18eac..186d9bf7af 100644
--- a/sysdeps/unix/sysv/linux/fxstatat.c
+++ b/sysdeps/unix/sysv/linux/fxstatat.c
@@ -20,20 +20,19 @@ 
 #include <fcntl.h>
 #include <kernel_stat.h>
 #include <sysdep.h>
+#include <shlib-compat.h>
 
-#if !XSTAT_IS_XSTAT64
-# include <xstatconv.h>
-# include <xstatover.h>
-# include <shlib-compat.h>
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
 
-# if SHLIB_COMPAT(libc, GLIBC_2_4, GLIBC_2_33)
+# if !XSTAT_IS_XSTAT64
+#  include <xstatconv.h>
+#  include <xstatover.h>
 
 /* Get information about the file FD in BUF.  */
 int
-attribute_compat_text_section
 __fxstatat (int vers, int fd, const char *file, struct stat *st, int flag)
 {
-#if STAT_IS_KERNEL_STAT
+# if STAT_IS_KERNEL_STAT
   /* New kABIs which uses generic pre 64-bit time Linux ABI, e.g.
      csky, nios2  */
   if (vers == _STAT_VER_KERNEL)
@@ -42,16 +41,14 @@  __fxstatat (int vers, int fd, const char *file, struct stat *st, int flag)
       return r ?: stat_overflow (st);
     }
   return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL);
-#else
+# else
   /* Old kABIs with old non-LFS support, e.g. arm, i386, hppa, m68k, mips32,
      microblaze, s390, sh, powerpc32, and sparc32.  */
   struct stat64 st64;
   int r = INLINE_SYSCALL_CALL (fstatat64, fd, file, &st64, flag);
   return r ?: __xstat32_conv (vers, &st64, st);
-#endif
+# endif
 }
+# endif /* XSTAT_IS_XSTAT64  */
 
-compat_symbol (libc, __fxstatat, __fxstatat, GLIBC_2_4);
-# endif /* SHLIB_COMPAT  */
-
-#endif /* XSTAT_IS_XSTAT64  */
+#endif /* SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)  */
diff --git a/sysdeps/unix/sysv/linux/fxstatat64.c b/sysdeps/unix/sysv/linux/fxstatat64.c
index 8a505451d9..7b214dfc14 100644
--- a/sysdeps/unix/sysv/linux/fxstatat64.c
+++ b/sysdeps/unix/sysv/linux/fxstatat64.c
@@ -26,26 +26,25 @@ 
 #include <statx_cp.h>
 #include <shlib-compat.h>
 
-#if SHLIB_COMPAT(libc, GLIBC_2_4, GLIBC_2_33)
-
 /* Get information about the file FD in BUF.  */
 
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
+
 int
-attribute_compat_text_section
 __fxstatat64 (int vers, int fd, const char *file, struct stat64 *st, int flag)
 {
-#if XSTAT_IS_XSTAT64
-# ifdef __NR_newfstatat
+# if XSTAT_IS_XSTAT64
+#  ifdef __NR_newfstatat
   /* 64-bit kABI, e.g. aarch64, ia64, powerpc64*, s390x, riscv64, and
      x86_64.  */
   if (vers == _STAT_VER_KERNEL || vers == _STAT_VER_LINUX)
     return INLINE_SYSCALL_CALL (newfstatat, fd, file, st, flag);
-# elif defined __NR_fstatat64
+#  elif defined __NR_fstatat64
   /* 64-bit kABI outlier, e.g. sparc64.  */
   struct stat64 st64;
   int r = INLINE_SYSCALL_CALL (fstatat64, fd, file, &st64, flag);
   return r ?: __xstat32_conv (vers, &st64, (struct stat *) st);
-# else
+#  else
   /* New 32-bit kABIs with only 64-bit time_t support, e.g. arc, riscv32.  */
   if (vers == _STAT_VER_KERNEL)
     {
@@ -56,21 +55,17 @@  __fxstatat64 (int vers, int fd, const char *file, struct stat64 *st, int flag)
 	__cp_stat64_statx (st, &tmp);
       return r;
     }
-# endif
-#else
+#  endif
+# else
   /* All kABIs with non-LFS support, e.g. arm, csky, i386, hppa, m68k,
      microblaze, mips32, nios2, sh, powerpc32, and sparc32.  */
   if (vers == _STAT_VER_LINUX)
     return INLINE_SYSCALL_CALL (fstatat64, fd, file, st, flag);
-#endif
+# endif
   return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL);
 }
+# if XSTAT_IS_XSTAT64
+strong_alias (__fxstatat64, __fxstatat);
+# endif
 
-compat_symbol (libc, __fxstatat64, __fxstatat64, GLIBC_2_4);
-
-#if XSTAT_IS_XSTAT64
-strong_alias (__fxstatat64, __fxstatat_compat)
-compat_symbol (libc, __fxstatat_compat, __fxstatat, GLIBC_2_4);
-#endif
-
-#endif /* SHLIB_COMPAT(libc, GLIBC_2_4, GLIBC_2_33)  */
+#endif /* SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)  */
diff --git a/sysdeps/unix/sysv/linux/lxstat.c b/sysdeps/unix/sysv/linux/lxstat.c
index 913618eab9..8d55a63057 100644
--- a/sysdeps/unix/sysv/linux/lxstat.c
+++ b/sysdeps/unix/sysv/linux/lxstat.c
@@ -22,48 +22,45 @@ 
 #include <sysdep.h>
 #include <shlib-compat.h>
 
-#if !XSTAT_IS_XSTAT64
-# include <xstatconv.h>
-# include <xstatover.h>
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
 
-# if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
+# if !XSTAT_IS_XSTAT64
+#  include <xstatconv.h>
+#  include <xstatover.h>
 
 /* Get information about the file NAME in BUF.  */
 int
-attribute_compat_text_section
 __lxstat (int vers, const char *name, struct stat *buf)
 {
   switch (vers)
     {
     case _STAT_VER_KERNEL:
       {
-# if STAT_IS_KERNEL_STAT
+#  if STAT_IS_KERNEL_STAT
 	/* New kABIs which uses generic pre 64-bit time Linux ABI,
 	   e.g. csky, nios2  */
 	int r = INLINE_SYSCALL_CALL (fstatat64, AT_FDCWD, name, buf,
 				     AT_SYMLINK_NOFOLLOW);
 	return r ?: stat_overflow (buf);
-# else
+#  else
 	/* Old kABIs with old non-LFS support, e.g. arm, i386, hppa, m68k,
 	   microblaze, s390, sh, powerpc, and sparc.  */
 	return INLINE_SYSCALL_CALL (lstat, name, buf);
-# endif
+#  endif
       }
 
     default:
       {
-# if STAT_IS_KERNEL_STAT
+#  if STAT_IS_KERNEL_STAT
 	return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL);
-# else
+#  else
 	struct stat64 buf64;
 	int r = INLINE_SYSCALL_CALL (lstat64, name, &buf64);
 	return r ?: __xstat32_conv (vers, &buf64, buf);
-#endif
+#  endif
       }
     }
 }
+# endif /* XSTAT_IS_XSTAT64  */
 
-compat_symbol (libc, __lxstat, __lxstat, GLIBC_2_0);
-# endif /* SHLIB_COMPAT  */
-
-#endif /* XSTAT_IS_XSTAT64  */
+#endif /* #if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)  */
diff --git a/sysdeps/unix/sysv/linux/lxstat64.c b/sysdeps/unix/sysv/linux/lxstat64.c
index 277b54b305..3f11501c62 100644
--- a/sysdeps/unix/sysv/linux/lxstat64.c
+++ b/sysdeps/unix/sysv/linux/lxstat64.c
@@ -26,16 +26,14 @@ 
 #include <statx_cp.h>
 #include <shlib-compat.h>
 
-#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_33)
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
 
 /* Get information about the file NAME in BUF.  */
-
 int
-attribute_compat_text_section
 ___lxstat64 (int vers, const char *name, struct stat64 *buf)
 {
-#if XSTAT_IS_XSTAT64
-# ifdef __NR_lstat64
+# if XSTAT_IS_XSTAT64
+#  ifdef __NR_lstat64
   /* 64-bit kABI outlier, e.g. sparc64.  */
   if (vers == _STAT_VER_KERNEL)
     return INLINE_SYSCALL_CALL (lstat, name, buf);
@@ -45,16 +43,16 @@  ___lxstat64 (int vers, const char *name, struct stat64 *buf)
       int r = INLINE_SYSCALL_CALL (lstat64, name, &st64);
       return r ?: __xstat32_conv (vers, &st64, (struct stat *) buf);
     }
-# elif defined __NR_lstat
+#  elif defined __NR_lstat
   /* Old 64-bit kABI, e.g. ia64, powerpc64*, s390x, and x86_64.  */
   if (vers == _STAT_VER_KERNEL || vers == _STAT_VER_LINUX)
     return INLINE_SYSCALL_CALL (lstat, name, buf);
-# elif defined __NR_newfstatat
+#  elif defined __NR_newfstatat
   /* New kABIs which uses generic 64-bit Linux ABI, e.g. aarch64, riscv64.  */
   if (vers == _STAT_VER_KERNEL)
     return INLINE_SYSCALL_CALL (newfstatat, AT_FDCWD, name, buf,
 				AT_SYMLINK_NOFOLLOW);
-# else
+#  else
   /* New 32-bit kABIs with only 64-bit time_t support, e.g. arc, riscv32.  */
   if (vers == _STAT_VER_KERNEL)
     {
@@ -66,36 +64,35 @@  ___lxstat64 (int vers, const char *name, struct stat64 *buf)
 	__cp_stat64_statx (buf, &tmp);
       return r;
      }
-# endif
-#else
-# if STAT_IS_KERNEL_STAT
+#  endif
+# else
+#  if STAT_IS_KERNEL_STAT
   /* New kABIs which uses generic pre 64-bit time Linux ABI,
      e.g. csky, nios2  */
   if (vers == _STAT_VER_KERNEL)
     return INLINE_SYSCALL_CALL (fstatat64, AT_FDCWD, name, buf,
 				AT_SYMLINK_NOFOLLOW);
-# else
+#  else
   /* Old kABIs with old non-LFS support, e.g. arm, i386, hppa, m68k,
      microblaze, s390, sh, mips32, powerpc32, and sparc32.  */
   return INLINE_SYSCALL_CALL (lstat64, name, buf);
-# endif /* STAT_IS_KERNEL_STAT  */
-#endif /* XSTAT_IS_XSTAT64  */
+#  endif /* STAT_IS_KERNEL_STAT  */
+# endif /* XSTAT_IS_XSTAT64  */
 
   return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL);
 }
 
-#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
-compat_symbol (libc, ___lxstat64, __lxstat64, GLIBC_2_2);
+# if XSTAT_IS_XSTAT64
+weak_alias (___lxstat64, __lxstat);
+weak_alias (___lxstat64, __GI___lxstat);
+# endif
+
+# if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
+versioned_symbol (libc, ___lxstat64, __lxstat64, GLIBC_2_2);
 strong_alias (___lxstat64, __old__lxstat64)
 compat_symbol (libc, __old__lxstat64, __lxstat64, GLIBC_2_1);
-#else
+# else
 strong_alias (___lxstat64, __lxstat64);
-compat_symbol (libc, ___lxstat64, __lxstat64, GLIBC_2_2);
-#endif
-
-#if XSTAT_IS_XSTAT64
-strong_alias (___lxstat64,__lxstat_compat)
-compat_symbol (libc, __lxstat_compat, __lxstat, GLIBC_2_2);
-#endif
+# endif
 
-#endif /* SHLIB_COMPAT  */
+#endif /* SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)  */
diff --git a/sysdeps/unix/sysv/linux/mips/fxstat.c b/sysdeps/unix/sysv/linux/mips/fxstat.c
index cb9f656628..4585c2362b 100644
--- a/sysdeps/unix/sysv/linux/mips/fxstat.c
+++ b/sysdeps/unix/sysv/linux/mips/fxstat.c
@@ -21,13 +21,9 @@ 
 #include <kernel_stat.h>
 #include <sysdep.h>
 #include <xstatconv.h>
-#include <shlib-compat.h>
-
-#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
 
 /* Get information about the file NAME in BUF.  */
 int
-attribute_compat_text_section
 __fxstat (int vers, int fd, struct stat *buf)
 {
   switch (vers)
@@ -43,7 +39,3 @@  __fxstat (int vers, int fd, struct stat *buf)
       }
     }
 }
-
-compat_symbol (libc, __fxstat, __fxstat, GLIBC_2_0);
-
-#endif
diff --git a/sysdeps/unix/sysv/linux/mips/lxstat.c b/sysdeps/unix/sysv/linux/mips/lxstat.c
index ebd05cca50..62a3b15b32 100644
--- a/sysdeps/unix/sysv/linux/mips/lxstat.c
+++ b/sysdeps/unix/sysv/linux/mips/lxstat.c
@@ -21,13 +21,9 @@ 
 #include <kernel_stat.h>
 #include <sysdep.h>
 #include <xstatconv.h>
-#include <shlib-compat.h>
-
-#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
 
 /* Get information about the file NAME in BUF.  */
 int
-attribute_compat_text_section
 __lxstat (int vers, const char *name, struct stat *buf)
 {
   switch (vers)
@@ -43,7 +39,3 @@  __lxstat (int vers, const char *name, struct stat *buf)
       }
     }
 }
-
-compat_symbol (libc, __lxstat, __lxstat, GLIBC_2_0);
-
-#endif
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/fxstat64.c b/sysdeps/unix/sysv/linux/mips/mips64/fxstat64.c
index 855c650814..e6c1cacd4b 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/fxstat64.c
+++ b/sysdeps/unix/sysv/linux/mips/mips64/fxstat64.c
@@ -20,14 +20,10 @@ 
 #include <kernel_stat.h>
 #include <sysdep.h>
 #include <xstatconv.h>
-#include <shlib-compat.h>
-
-#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_33)
 
 /* Get information about the file FD in BUF.  */
 
 int
-attribute_compat_text_section
 __fxstat64 (int vers, int fd, struct stat64 *buf)
 {
   struct kernel_stat kbuf;
@@ -35,7 +31,3 @@  __fxstat64 (int vers, int fd, struct stat64 *buf)
   return r ?: __xstat64_conv (vers, &kbuf, buf);
 
 }
-
-compat_symbol (libc, __fxstat64, __fxstat64, GLIBC_2_2);
-
-#endif
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/fxstatat.c b/sysdeps/unix/sysv/linux/mips/mips64/fxstatat.c
index 1c1fbb02c2..e384dbab8b 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/fxstatat.c
+++ b/sysdeps/unix/sysv/linux/mips/mips64/fxstatat.c
@@ -21,20 +21,12 @@ 
 #include <kernel_stat.h>
 #include <sysdep.h>
 #include <xstatconv.h>
-#include <shlib-compat.h>
-
-#if SHLIB_COMPAT(libc, GLIBC_2_4, GLIBC_2_33)
 
 /* Get information about the file FD in BUF.  */
 int
-attribute_compat_text_section
 __fxstatat (int vers, int fd, const char *file, struct stat *st, int flag)
 {
   struct kernel_stat kst;
   int r = INLINE_SYSCALL_CALL (newfstatat, fd, file, &kst, flag);
   return r ?: __xstat_conv (vers, &kst, st);
 }
-
-compat_symbol (libc, __fxstatat, __fxstatat, GLIBC_2_4);
-
-#endif
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/fxstatat64.c b/sysdeps/unix/sysv/linux/mips/mips64/fxstatat64.c
index f40a2c5aa8..cfd172d301 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/fxstatat64.c
+++ b/sysdeps/unix/sysv/linux/mips/mips64/fxstatat64.c
@@ -19,14 +19,10 @@ 
 #include <kernel_stat.h>
 #include <sysdep.h>
 #include <xstatconv.h>
-#include <shlib-compat.h>
-
-#if SHLIB_COMPAT(libc, GLIBC_2_4, GLIBC_2_33)
 
 /* Get information about the file NAME in BUF.  */
 
 int
-attribute_compat_text_section
 __fxstatat64 (int vers, int fd, const char *file, struct stat64 *st, int flag)
 {
   if (vers == _STAT_VER_LINUX)
@@ -37,7 +33,3 @@  __fxstatat64 (int vers, int fd, const char *file, struct stat64 *st, int flag)
     }
   return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL);
 }
-
-compat_symbol (libc, __fxstatat64, __fxstatat64, GLIBC_2_4);
-
-#endif
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/lxstat64.c b/sysdeps/unix/sysv/linux/mips/mips64/lxstat64.c
index 752c5284a7..0f3934f8c8 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/lxstat64.c
+++ b/sysdeps/unix/sysv/linux/mips/mips64/lxstat64.c
@@ -20,20 +20,12 @@ 
 #include <kernel_stat.h>
 #include <sysdep.h>
 #include <xstatconv.h>
-#include <shlib-compat.h>
-
-#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_33)
 
 /* Get information about the file NAME in BUF.  */
 int
-attribute_compat_text_section
 __lxstat64 (int vers, const char *name, struct stat64 *buf)
 {
   struct kernel_stat kbuf;
   int r = INLINE_SYSCALL_CALL (lstat, name, &kbuf);
   return r ?: __xstat64_conv (vers, &kbuf, buf);
 }
-
-compat_symbol (libc, __lxstat64, __lxstat64, GLIBC_2_2);
-
-#endif
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/xstat64.c b/sysdeps/unix/sysv/linux/mips/mips64/xstat64.c
index a620ba2f1f..64d2952276 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/xstat64.c
+++ b/sysdeps/unix/sysv/linux/mips/mips64/xstat64.c
@@ -20,20 +20,13 @@ 
 #include <kernel_stat.h>
 #include <sysdep.h>
 #include <xstatconv.h>
-#include <shlib-compat.h>
-
-#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_33)
 
 /* Get information about the file NAME in BUF.  */
+
 int
-attribute_compat_text_section
 __xstat64 (int vers, const char *name, struct stat64 *buf)
 {
   struct kernel_stat kbuf;
   int r = INLINE_SYSCALL_CALL (stat, name, &kbuf);
   return r ?: __xstat64_conv (vers, &kbuf, buf);
 }
-
-compat_symbol (libc, __xstat64, __xstat64, GLIBC_2_2);
-
-#endif
diff --git a/sysdeps/unix/sysv/linux/mips/xstat.c b/sysdeps/unix/sysv/linux/mips/xstat.c
index 0748a3422d..d6ff5ccbe0 100644
--- a/sysdeps/unix/sysv/linux/mips/xstat.c
+++ b/sysdeps/unix/sysv/linux/mips/xstat.c
@@ -21,13 +21,9 @@ 
 #include <kernel_stat.h>
 #include <sysdep.h>
 #include <xstatconv.h>
-#include <shlib-compat.h>
-
-#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
 
 /* Get information about the file NAME in BUF.  */
 int
-attribute_compat_text_section
 __xstat (int vers, const char *name, struct stat *buf)
 {
   switch (vers)
@@ -43,7 +39,3 @@  __xstat (int vers, const char *name, struct stat *buf)
       }
     }
 }
-
-compat_symbol (libc, __xstat, __xstat, GLIBC_2_0);
-
-#endif
diff --git a/sysdeps/unix/sysv/linux/xstat.c b/sysdeps/unix/sysv/linux/xstat.c
index 3eb2d8c51b..8e4d9929e2 100644
--- a/sysdeps/unix/sysv/linux/xstat.c
+++ b/sysdeps/unix/sysv/linux/xstat.c
@@ -22,47 +22,44 @@ 
 #include <sysdep.h>
 #include <shlib-compat.h>
 
-#if !XSTAT_IS_XSTAT64
-# include <xstatconv.h>
-# include <xstatover.h>
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
 
-# if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
+# if !XSTAT_IS_XSTAT64
+#  include <xstatconv.h>
+#  include <xstatover.h>
 
 /* Get information about the file NAME in BUF.  */
 int
-attribute_compat_text_section
 __xstat (int vers, const char *name, struct stat *buf)
 {
   switch (vers)
     {
     case _STAT_VER_KERNEL:
       {
-# if STAT_IS_KERNEL_STAT
+#  if STAT_IS_KERNEL_STAT
 	/* New kABIs which uses generic pre 64-bit time Linux ABI,
 	   e.g. csky, nios2  */
 	int r = INLINE_SYSCALL_CALL (fstatat64, AT_FDCWD, name, buf, 0);
 	return r ?: stat_overflow (buf);
-# else
+#  else
 	/* Old kABIs with old non-LFS support, e.g. arm, i386, hppa, m68k,
 	   microblaze, s390, sh, powerpc, and sparc32.  */
 	return INLINE_SYSCALL_CALL (stat, name, buf);
-# endif
+#  endif
       }
 
     default:
       {
-# if STAT_IS_KERNEL_STAT
+#  if STAT_IS_KERNEL_STAT
 	return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL);
-# else
+#  else
 	struct stat64 buf64;
 	int r = INLINE_SYSCALL_CALL (stat64, name, &buf64);
 	return r ?: __xstat32_conv (vers, &buf64, buf);
-#endif
+#  endif
       }
     }
 }
+# endif /* XSTAT_IS_XSTAT64  */
 
-compat_symbol (libc, __xstat, __xstat, GLIBC_2_0);
-# endif /* SHLIB_COMPAT  */
-
-#endif /* XSTAT_IS_XSTAT64  */
+#endif /* SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33) */
diff --git a/sysdeps/unix/sysv/linux/xstat64.c b/sysdeps/unix/sysv/linux/xstat64.c
index dd4f808c7a..27d6a876e8 100644
--- a/sysdeps/unix/sysv/linux/xstat64.c
+++ b/sysdeps/unix/sysv/linux/xstat64.c
@@ -29,13 +29,11 @@ 
 #if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
 
 /* Get information about the file NAME in BUF.  */
-
 int
-attribute_compat_text_section
 ___xstat64 (int vers, const char *name, struct stat64 *buf)
 {
-#if XSTAT_IS_XSTAT64
-# ifdef __NR_stat64
+# if XSTAT_IS_XSTAT64
+#  ifdef __NR_stat64
   /* 64-bit kABI outlier, e.g. sparc64.  */
   if (vers == _STAT_VER_KERNEL)
     return INLINE_SYSCALL_CALL (stat, name, buf);
@@ -45,15 +43,15 @@  ___xstat64 (int vers, const char *name, struct stat64 *buf)
       int r = INLINE_SYSCALL_CALL (stat64, name, &st64);
       return r ?: __xstat32_conv (vers, &st64, (struct stat *) buf);
     }
-# elif defined __NR_stat
+#  elif defined __NR_stat
   /* Old 64-bit kABI, e.g. ia64, powerpc64*, s390x, and x86_64.  */
   if (vers == _STAT_VER_KERNEL || vers == _STAT_VER_LINUX)
     return INLINE_SYSCALL_CALL (stat, name, buf);
-# elif defined __NR_newfstatat
+#  elif defined __NR_newfstatat
   /* New kABIs which uses generic 64-bit Linux ABI, e.g. aarch64, riscv64.  */
   if (vers == _STAT_VER_KERNEL)
     return INLINE_SYSCALL_CALL (newfstatat, AT_FDCWD, name, buf, 0);
-# else
+#  else
   /* New 32-bit kABIs with only 64-bit time_t support, e.g. arc, riscv32.  */
   if (vers == _STAT_VER_KERNEL)
     {
@@ -64,35 +62,34 @@  ___xstat64 (int vers, const char *name, struct stat64 *buf)
 	__cp_stat64_statx (buf, &tmp);
       return r;
      }
-# endif
-#else
-# if STAT_IS_KERNEL_STAT
+#  endif
+# else
+#  if STAT_IS_KERNEL_STAT
   /* New kABIs which uses generic pre 64-bit time Linux ABI,
      e.g. csky, nios2  */
   if (vers == _STAT_VER_KERNEL)
     return INLINE_SYSCALL_CALL (fstatat64, AT_FDCWD, name, buf, 0);
-# else
+#  else
   /* Old kABIs with old non-LFS support, e.g. arm, i386, hppa, m68k,
      microblaze, s390, sh, mips32, powerpc32, and sparc32.  */
   return INLINE_SYSCALL_CALL (stat64, name, buf);
-# endif /* STAT_IS_KERNEL_STAT  */
-#endif /* XSTAT_IS_XSTAT64  */
+#  endif /* STAT_IS_KERNEL_STAT  */
+# endif /* XSTAT_IS_XSTAT64  */
 
   return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL);
 }
 
-#if XSTAT_IS_XSTAT64
-strong_alias (___xstat64, __xstat_compat)
-compat_symbol (libc, __xstat_compat, __xstat, GLIBC_2_2);
-#endif
+# if XSTAT_IS_XSTAT64
+weak_alias (___xstat64, __xstat);
+weak_alias (___xstat64, __GI___xstat);
+# endif
 
-#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
-compat_symbol (libc, ___xstat64, __xstat64, GLIBC_2_2);
+# if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
+versioned_symbol (libc, ___xstat64, __xstat64, GLIBC_2_2);
 strong_alias (___xstat64, __old__xstat64)
 compat_symbol (libc, __old__xstat64, __xstat64, GLIBC_2_1);
-#else
+# else
 strong_alias (___xstat64, __xstat64)
-compat_symbol (libc, ___xstat64, __xstat64, GLIBC_2_2);
-#endif
+# endif
 
-#endif /* SHLIB_COMPAT  */
+#endif /* SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)  */