From patchwork Fri Mar 2 18:59:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella X-Patchwork-Id: 26161 Received: (qmail 98834 invoked by alias); 2 Mar 2018 18:59:55 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 98095 invoked by uid 89); 2 Mar 2018 18:59:49 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.1 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=Consolidate, 1517 X-HELO: mail-qt0-f196.google.com 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:in-reply-to :references; bh=jxEHhsSw28S7tJJuN0kt3HrlKOQzFYvoFdRyVEkLopU=; b=oe1iprSu/TywKvx9Qb+YS5+WIf6Xs0Oy5si/59CaAS/qqqJtFEjEs9rPnB+p+l8Jf8 QHeCwXYxD++IAaRRT3K4ijZ+zjBRKg5d6jhed+1zVq+Y7rgjH1z3i6qjtT3A/1NmBAjq dFcTUMcy8kONxcj03uW+EuH/Qxk+bK4kDUR22eNaIFk70qSjlcB7Y8z4mLziekDDVXJ5 H7YiSbJMOAZJLCvQFzfhrDMc/k+07WOudX7JjXo5dA1JOauQod5FX3nrS98lBftqyM2b 9PgFCAxD8dKaupzclxm0rcjWzchW9/07WbjCPGpF9HIVpU+zDABRudv9pCTcw1WNuaIK qdlg== X-Gm-Message-State: AElRT7HSp/szq2hWyDXzND//rK7zRSErSM8/6+ItO0H42WqZNsAJ58aq O7TIsTFZ7YgTg6i/pT+f7Vs4LNmrYL8= X-Google-Smtp-Source: AG47ELtPtQo2V+Jp+unwcuLS8XYgBm5JyLv1hMhalnCvq+MsGoNCho4uR/6oknAMbCB2wBKlySvroQ== X-Received: by 10.237.38.2 with SMTP id z2mr9907267qtc.319.1520017179283; Fri, 02 Mar 2018 10:59:39 -0800 (PST) From: Adhemerval Zanella To: libc-alpha@sourceware.org Subject: [PATCH 6/7] Consolidate alphasort{64} and versionsort{64} implementation Date: Fri, 2 Mar 2018 15:59:24 -0300 Message-Id: <1520017165-15830-6-git-send-email-adhemerval.zanella@linaro.org> In-Reply-To: <1520017165-15830-1-git-send-email-adhemerval.zanella@linaro.org> References: <1520017165-15830-1-git-send-email-adhemerval.zanella@linaro.org> This patch consolidates both alphasort{64} and versionsort{64} implementation on just the default dirent/alphasort{64}c and dirent/versionsort{64} respectively. It changes the logic to follow the conventions used on other code consolidation: * the non-LFS variant is only built for _DIRENT_MATCHES_DIRENT64 being 0. * the LFS variant is always built and aliased to getdents for ABIs that define _DIRENT_MATCHES_DIRENT64 to 1. Also on Linux the compat symbol for old non-LFS dirent64 definition requires a platform-specific scandir64.c. For powerpc32 and sparcv9 it requires to add specific arch-implementation to override the generic Linux one because neither ABI exports an compat symbol for non-LFS alphasort64 and versionsort64 variant. Considering both architectures do export other compat symbols for other dirent.h functions I think this is a bug (I need confirmation). Checked on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu, sparcv9-linux-gnu, sparc64-linux-gnu, powerpc-linux-gnu, and powerpc64le-linux-gnu. * dirent/alphasort.c (alphasort): Build iff _DIRENT_MATCHES_DIRENT64 is defined. * dirent/versionsort.c (versionsort): Likewise. * dirent/alphasort64.c (alphasort64): Build regardless and alias to alphasort if _DIRENT_MATCHES_DIRENT64 is defined. * dirent/versionsort64.c (versionsort64): Likewise. * sysdeps/unix/sysv/linux/i386/alphasort64.c: Remove file. * sysdeps/unix/sysv/linux/arm/alphasort64.c: Likewise. * sysdeps/unix/sysv/linux/arm/versionsort64.c: Likewise. * sysdeps/unix/sysv/linux/m68k/alphasort64.c: Likewise. * sysdeps/unix/sysv/linux/m68k/versionsort64.c: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/alphasort64.c: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/versionsort64.c: Likewise. * sysdeps/unix/sysv/linux/i386/versionsort64.c: Likewise. * sysdeps/unix/sysv/linux/alphasort64.c: New file. * sysdeps/unix/sysv/linux/versionsort64.c: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/alphasort64.c: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/versionsort64.c: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/alphasort64.c: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/versionsort64.c: Likewise. --- ChangeLog | 21 +++++++++++++++++++++ dirent/alphasort.c | 13 ++----------- dirent/alphasort64.c | 7 ++++--- dirent/versionsort.c | 12 ++---------- dirent/versionsort64.c | 7 ++++--- sysdeps/unix/sysv/linux/{i386 => }/alphasort64.c | 22 +++++++++++----------- sysdeps/unix/sysv/linux/arm/alphasort64.c | 1 - sysdeps/unix/sysv/linux/arm/versionsort64.c | 1 - sysdeps/unix/sysv/linux/m68k/alphasort64.c | 1 - sysdeps/unix/sysv/linux/m68k/versionsort64.c | 1 - .../sysv/linux/powerpc/powerpc32/alphasort64.c | 3 +++ .../sysv/linux/powerpc/powerpc32/versionsort64.c | 3 +++ sysdeps/unix/sysv/linux/s390/s390-32/alphasort64.c | 1 - .../unix/sysv/linux/s390/s390-32/versionsort64.c | 1 - .../unix/sysv/linux/sparc/sparc32/alphasort64.c | 3 +++ .../unix/sysv/linux/sparc/sparc32/versionsort64.c | 3 +++ sysdeps/unix/sysv/linux/{i386 => }/versionsort64.c | 22 +++++++++++----------- 17 files changed, 67 insertions(+), 55 deletions(-) rename sysdeps/unix/sysv/linux/{i386 => }/alphasort64.c (77%) delete mode 100644 sysdeps/unix/sysv/linux/arm/alphasort64.c delete mode 100644 sysdeps/unix/sysv/linux/arm/versionsort64.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/alphasort64.c delete mode 100644 sysdeps/unix/sysv/linux/m68k/versionsort64.c create mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/alphasort64.c create mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/versionsort64.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/alphasort64.c delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/versionsort64.c create mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/alphasort64.c create mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/versionsort64.c rename sysdeps/unix/sysv/linux/{i386 => }/versionsort64.c (77%) diff --git a/dirent/alphasort.c b/dirent/alphasort.c index a6cd151..6b2a707 100644 --- a/dirent/alphasort.c +++ b/dirent/alphasort.c @@ -15,23 +15,14 @@ License along with the GNU C Library; if not, see . */ -/* We need to avoid the header declaration of alphasort64, because - the types don't match alphasort and then the compiler will - complain about the mismatch when we do the alias below. */ -#define alphasort64 __renamed_alphasort64 - #include -#undef alphasort64 - -#include +#if !_DIRENT_MATCHES_DIRENT64 +# include int alphasort (const struct dirent **a, const struct dirent **b) { return strcoll ((*a)->d_name, (*b)->d_name); } - -#if _DIRENT_MATCHES_DIRENT64 -weak_alias (alphasort, alphasort64) #endif diff --git a/dirent/alphasort64.c b/dirent/alphasort64.c index 3a47a97..b822333 100644 --- a/dirent/alphasort64.c +++ b/dirent/alphasort64.c @@ -15,16 +15,17 @@ License along with the GNU C Library; if not, see . */ +#define alphasort __no_alphasort_decl #include +#undef alphasort #include -/* alphasort.c defines alphasort64 as an alias if _DIRENT_MATCHES_DIRENT64. */ -#if !_DIRENT_MATCHES_DIRENT64 - int alphasort64 (const struct dirent64 **a, const struct dirent64 **b) { return strcoll ((*a)->d_name, (*b)->d_name); } +#if _DIRENT_MATCHES_DIRENT64 +weak_alias (alphasort64, alphasort) #endif diff --git a/dirent/versionsort.c b/dirent/versionsort.c index 5ec15e8..ca38c2d 100644 --- a/dirent/versionsort.c +++ b/dirent/versionsort.c @@ -15,16 +15,10 @@ License along with the GNU C Library; if not, see . */ -/* We need to avoid the header declaration of versionsort64, because - the types don't match versionsort and then the compiler will - complain about the mismatch when we do the alias below. */ -#define versionsort64 __renamed_versionsort64 - #include -#undef versionsort64 - -#include +#if !_DIRENT_MATCHES_DIRENT64 +# include int versionsort (const struct dirent **a, const struct dirent **b) @@ -32,6 +26,4 @@ versionsort (const struct dirent **a, const struct dirent **b) return __strverscmp ((*a)->d_name, (*b)->d_name); } -#if _DIRENT_MATCHES_DIRENT64 -weak_alias (versionsort, versionsort64) #endif diff --git a/dirent/versionsort64.c b/dirent/versionsort64.c index 7689c26..8f47e60 100644 --- a/dirent/versionsort64.c +++ b/dirent/versionsort64.c @@ -15,16 +15,17 @@ License along with the GNU C Library; if not, see . */ +#define versionsort __no_versionsort_decl #include +#undef versionsort #include -/* versionsort.c defines a versionsort64 alias if _DIRENT_MATCHES_DIRENT64. */ -#if !_DIRENT_MATCHES_DIRENT64 - int versionsort64 (const struct dirent64 **a, const struct dirent64 **b) { return __strverscmp ((*a)->d_name, (*b)->d_name); } +#if !_DIRENT_MATCHES_DIRENT64 +weak_alias (versionsort64, versionsort) #endif diff --git a/sysdeps/unix/sysv/linux/i386/alphasort64.c b/sysdeps/unix/sysv/linux/alphasort64.c similarity index 77% rename from sysdeps/unix/sysv/linux/i386/alphasort64.c rename to sysdeps/unix/sysv/linux/alphasort64.c index ee3b00b..7eee9d0 100644 --- a/sysdeps/unix/sysv/linux/i386/alphasort64.c +++ b/sysdeps/unix/sysv/linux/alphasort64.c @@ -15,7 +15,9 @@ License along with the GNU C Library; if not, see . */ +#define alphasort __no_alphasort_decl #include +#undef alphasort #include int @@ -24,17 +26,14 @@ __alphasort64 (const struct dirent64 **a, const struct dirent64 **b) return strcoll ((*a)->d_name, (*b)->d_name); } -#include - +#ifdef _DIRENT_MATCHES_DIRENT64 +weak_alias (__alphasort64, alphasort64) +weak_alias (__alphasort64, alphasort) +#else +# include versioned_symbol (libc, __alphasort64, alphasort64, GLIBC_2_2); - -#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) - -#include - -int -__old_alphasort64 (const struct __old_dirent64 **a, - const struct __old_dirent64 **b); +# if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) +# include int attribute_compat_text_section @@ -45,4 +44,5 @@ __old_alphasort64 (const struct __old_dirent64 **a, } compat_symbol (libc, __old_alphasort64, alphasort64, GLIBC_2_1); -#endif +# endif /* SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) */ +#endif /* _DIRENT_MATCHES_DIRENT64 */ diff --git a/sysdeps/unix/sysv/linux/arm/alphasort64.c b/sysdeps/unix/sysv/linux/arm/alphasort64.c deleted file mode 100644 index 0b5ae47..0000000 --- a/sysdeps/unix/sysv/linux/arm/alphasort64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/arm/versionsort64.c b/sysdeps/unix/sysv/linux/arm/versionsort64.c deleted file mode 100644 index 144b691..0000000 --- a/sysdeps/unix/sysv/linux/arm/versionsort64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/m68k/alphasort64.c b/sysdeps/unix/sysv/linux/m68k/alphasort64.c deleted file mode 100644 index 0b5ae47..0000000 --- a/sysdeps/unix/sysv/linux/m68k/alphasort64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/m68k/versionsort64.c b/sysdeps/unix/sysv/linux/m68k/versionsort64.c deleted file mode 100644 index 144b691..0000000 --- a/sysdeps/unix/sysv/linux/m68k/versionsort64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/alphasort64.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/alphasort64.c new file mode 100644 index 0000000..c7de3a7 --- /dev/null +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/alphasort64.c @@ -0,0 +1,3 @@ +/* Although powerpc32 define _DIRENT_MATCHES_DIRENT64=0 and have compat + mode for 2.1, it does have a compat symbol for alphasort64. */ +#include diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/versionsort64.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/versionsort64.c new file mode 100644 index 0000000..ee0e866 --- /dev/null +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/versionsort64.c @@ -0,0 +1,3 @@ +/* Although powerpc32 define _DIRENT_MATCHES_DIRENT64=0 and have compat + mode for 2.1, it does have a compat symbol for alphasort64. */ +#include diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/alphasort64.c b/sysdeps/unix/sysv/linux/s390/s390-32/alphasort64.c deleted file mode 100644 index 0b5ae47..0000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/alphasort64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/versionsort64.c b/sysdeps/unix/sysv/linux/s390/s390-32/versionsort64.c deleted file mode 100644 index 144b691..0000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/versionsort64.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/alphasort64.c b/sysdeps/unix/sysv/linux/sparc/sparc32/alphasort64.c new file mode 100644 index 0000000..3970086 --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/alphasort64.c @@ -0,0 +1,3 @@ +/* Although sparc32 define _DIRENT_MATCHES_DIRENT64=0 and have compat + mode for 2.1, it does have a compat symbol for alphasort64. */ +#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/versionsort64.c b/sysdeps/unix/sysv/linux/sparc/sparc32/versionsort64.c new file mode 100644 index 0000000..b195442 --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/versionsort64.c @@ -0,0 +1,3 @@ +/* Although sparc32 define _DIRENT_MATCHES_DIRENT64=0 and have compat + mode for 2.1, it does have a compat symbol for alphasort64. */ +#include diff --git a/sysdeps/unix/sysv/linux/i386/versionsort64.c b/sysdeps/unix/sysv/linux/versionsort64.c similarity index 77% rename from sysdeps/unix/sysv/linux/i386/versionsort64.c rename to sysdeps/unix/sysv/linux/versionsort64.c index 1777eb2..a3a3a66 100644 --- a/sysdeps/unix/sysv/linux/i386/versionsort64.c +++ b/sysdeps/unix/sysv/linux/versionsort64.c @@ -15,7 +15,9 @@ License along with the GNU C Library; if not, see . */ +#define versionsort __no_versionsort_decl #include +#undef versionsort #include int @@ -24,17 +26,14 @@ __versionsort64 (const struct dirent64 **a, const struct dirent64 **b) return __strverscmp ((*a)->d_name, (*b)->d_name); } -#include - +#if _DIRENT_MATCHES_DIRENT64 +weak_alias (__versionsort64, versionsort64) +weak_alias (__versionsort64, versionsort) +#else +# include versioned_symbol (libc, __versionsort64, versionsort64, GLIBC_2_2); - -#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) - -#include - -int -__old_versionsort64 (const struct __old_dirent64 **a, - const struct __old_dirent64 **b); +# if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) +# include int attribute_compat_text_section @@ -45,4 +44,5 @@ __old_versionsort64 (const struct __old_dirent64 **a, } compat_symbol (libc, __old_versionsort64, versionsort64, GLIBC_2_1); -#endif +# endif /* SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) */ +#endif /* _DIRENT_MATCHES_DIRENT64 */