From patchwork Thu Oct 22 19:03:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 40824 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E80153987451; Thu, 22 Oct 2020 19:03:21 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E80153987451 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1603393402; bh=2sCOxvRjmMphkM/CnhoDjMdbodDUc7YGIgFhQkuWE94=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=I0ZRYtksI3WqCzwdnHMxcRxVu/2haACP2zi3i0dd5EJZ6mEFcIbfutSS1RBtuMi7z 5ir2k4hQSrq41cp9qJtDrsled6aeokhxqv5RlKBujtNtXbhM7V+qTJgknYU2VvQY/k AOZqoah5e5UPOLbKvTYYLucrIr1o5ocSruYSe0rk= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-qt1-x844.google.com (mail-qt1-x844.google.com [IPv6:2607:f8b0:4864:20::844]) by sourceware.org (Postfix) with ESMTPS id 37FE63857C4D for ; Thu, 22 Oct 2020 19:03:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 37FE63857C4D Received: by mail-qt1-x844.google.com with SMTP id r8so2049509qtp.13 for ; Thu, 22 Oct 2020 12:03:17 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=2sCOxvRjmMphkM/CnhoDjMdbodDUc7YGIgFhQkuWE94=; b=Ggf+sb+y+DmBHBJ+ifVrUGxqYhotoYJRj20q6+5xACOX0ZUgTUngLWtsGPrbaBJMWe 9AjB/pv1JOr+c3fSDZB7EmRMhqOH10ZJy8H/zFIT/yy2QfN/TM5FdTW1k5PCDDux9rUx LbO98naWIp3kOYeKYYOnIvbEsFp9qw3zNFOsThIaeBziEHlxbzfRP3TJjIBpN5fTt7IG 8FG58sqK4IuwHZQIfS1E+Ma1/Uj62PbPbtmQPr0mzNmNwm97NcIyGFP0Bl85uatSBNOE F3HDkla/BTwI35lNYmWzESt5DkYS6L6P0LzD5BZzA8vBQxgm799LZnv5kWVOLhSKY/cf q79Q== X-Gm-Message-State: AOAM530VNi8NfsSp9o7JQm33/3MAX7Iqcb5NUgQKtxSxdAnG3JaGy8vR 5PzEF8HlPPP+Ed9x3/YtLQGW+R+wbXAzig== X-Google-Smtp-Source: ABdhPJxSKOPRRKu/FU6RiuVSZC7zf8y5yMS+4TzCddMc210sMsVhPKPyAPtLqLNBUUAOlVFjv4p+QA== X-Received: by 2002:ac8:5952:: with SMTP id 18mr3418430qtz.21.1603393395500; Thu, 22 Oct 2020 12:03:15 -0700 (PDT) Received: from localhost.localdomain ([177.194.48.209]) by smtp.googlemail.com with ESMTPSA id h7sm1628272qtd.82.2020.10.22.12.03.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Oct 2020 12:03:15 -0700 (PDT) To: libc-alpha@sourceware.org, Florian Weimer Subject: [PATCH 1/2] Revert "linux: Move {f}xstat{at} to compat symbols" Date: Thu, 22 Oct 2020 16:03:01 -0300 Message-Id: <20201022190302.2000118-1-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-Spam-Status: No, score=-14.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Adhemerval Zanella via Libc-alpha From: Adhemerval Zanella Netto Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" 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 --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 #include #include -#include /* 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 #include #include -#include -#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 #include #include -#include /* 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 #include #include -#include /* 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 #include #include +#include -#if !XSTAT_IS_XSTAT64 -# include -# include -# include +#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 +# include /* 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 #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 #include #include +#include -#if !XSTAT_IS_XSTAT64 -# include -# include -# include +#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 +# include /* 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 #include -#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 #include -#if !XSTAT_IS_XSTAT64 -# include -# include +#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 +# include /* 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 #include -#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 #include #include -#include - -#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 #include #include -#include - -#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 #include #include -#include - -#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 #include #include -#include - -#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 #include #include -#include - -#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 #include #include -#include - -#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 #include #include -#include - -#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 #include #include -#include - -#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 #include -#if !XSTAT_IS_XSTAT64 -# include -# include +#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 +# include /* 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) */