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 Netto X-Patchwork-Id: 130576 Delivered-To: patch@linaro.org Received: by 10.46.66.2 with SMTP id p2csp1602667lja; Fri, 2 Mar 2018 11:01:11 -0800 (PST) X-Google-Smtp-Source: AG47ELvd8I9W5lrSTmVbOPCi7k7s7napcTSFJwF0pm9TNUrxgbFunjc/r4FRYNj+f0HMHErh0piG X-Received: by 2002:a17:902:6b48:: with SMTP id g8-v6mr6087731plt.151.1520017271798; Fri, 02 Mar 2018 11:01:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520017271; cv=none; d=google.com; s=arc-20160816; b=GRwaNWokVl+Hq1c/2hXSFgpndyXfe05UfY9RM9gBN/e7d5Y5OdMaUjkJnossey0Oox smr3g1TEFhM/qsdMv7OBb1HiY6R8abZRGks+ZpsXPsoxSeT5Zsd12x5P/drOG9B7h2fy 9h9KgTxGbtl6U0+88ggTyB/TR/KRU3gu0jC6Ox4x+eKtNb+hwmw4rCDlmWVs08wORpA7 Hj9oEcj8zobSVf1uFeK01EEvKb2fWX7Z+l+PW1+R2gdWzuhefEXi1Mjlp9qUqFvrHz/3 sESqfCz/qan6vpBKSSTGkXXu47r1eUWo1lTCKXTunX6v1H3VyLlfAoKfzfXBC6Os9pGz ukZg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:to:from:delivered-to :sender:list-help:list-post:list-archive:list-subscribe :list-unsubscribe:list-id:precedence:mailing-list:dkim-signature :domainkey-signature:arc-authentication-results; bh=jxEHhsSw28S7tJJuN0kt3HrlKOQzFYvoFdRyVEkLopU=; b=MH+88qcDZYU3itO77uAsjYuk99gm4vORcVWTaZSrFIWMoaz9kKZFx6lAMyNfXW7a/s 4DUth+Y2WreMXBPgmqxUNRywffWfm/ugIspjXKJv5jhcHDJ1G+pSHVhktOdh/lYDw70I NyKqZI+ajko9YD2tobMjhVJYmou310tFWYRX79FqC9za2WRuIJ/eAFtMdgdLWcGKfjga NmBF+8NPmMLgYb+7O541+d4RNT3d9xNmB4BDbMQHqlNRHq6U9COra4ChB1OD0CB66F6D oApVJPhs+yxlQKyU1WrUqTLjcCke10R6uMuE5Nb0HY2nmXZSvu/crp1Lptu97hYdn9vg HlHA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=DNRVo2C8; spf=pass (google.com: domain of libc-alpha-return-90742-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=libc-alpha-return-90742-patch=linaro.org@sourceware.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id h8-v6si5272895pli.210.2018.03.02.11.01.11 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 02 Mar 2018 11:01:11 -0800 (PST) Received-SPF: pass (google.com: domain of libc-alpha-return-90742-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=DNRVo2C8; spf=pass (google.com: domain of libc-alpha-return-90742-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=libc-alpha-return-90742-patch=linaro.org@sourceware.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:subject:date:message-id:in-reply-to :references; q=dns; s=default; b=bICJeYwJpgjLWyDTs5FeW0WgAcna/G3 yElCJfI1OvZL6AfHTUdTMKYoKIezBi8wE6PekM12E6XWCX4T36z0kv6ojut1P5hs hT+vg0utjt6Q+Su9mLIrgnqS86UU5n4gawtExv1iFMpWGhmiutFMKOaywWyFWa/L 7i4ClCycLObg= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:subject:date:message-id:in-reply-to :references; s=default; bh=7UcRI6FmznfmpcirIa5WDP/iXd0=; b=DNRVo 2C8Qkdu/VrwsWqdXTFemaR824A1fSNy7mgWlv20uiISX6qswdNgTSIz0HLrUcP48 lGoFjCDRHA48Sp/s5ii7vO/zSvtBHxNB0QshXT85lIfZ+mbX2nHg//g00Do/P2Hh BkOyGz09MFLBC6RxhywqpIpDdpEHNUU0IDVMtU= 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-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%) -- 2.7.4 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 */