This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH 6/7] Consolidate alphasort{64} and versionsort{64} implementation
- From: Adhemerval Zanella <adhemerval dot zanella at linaro dot org>
- To: libc-alpha at sourceware dot org
- Date: Mon, 23 Apr 2018 15:00:51 -0300
- Subject: Re: [PATCH 6/7] Consolidate alphasort{64} and versionsort{64} implementation
- Autocrypt: addr=adhemerval dot zanella at linaro dot org; prefer-encrypt=mutual; keydata= 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
- Openpgp: preference=signencrypt
- References: <1520017165-15830-1-git-send-email-adhemerval.zanella@linaro.org> <1520017165-15830-6-git-send-email-adhemerval.zanella@linaro.org>
I will commit this shortly if no one opposes it.
On 02/03/2018 15:59, Adhemerval Zanella wrote:
> 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
> <http://www.gnu.org/licenses/>. */
>
> -/* 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 <dirent.h>
>
> -#undef alphasort64
> -
> -#include <string.h>
> +#if !_DIRENT_MATCHES_DIRENT64
> +# include <string.h>
>
> 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
> <http://www.gnu.org/licenses/>. */
>
> +#define alphasort __no_alphasort_decl
> #include <dirent.h>
> +#undef alphasort
> #include <string.h>
>
> -/* 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
> <http://www.gnu.org/licenses/>. */
>
> -/* 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 <dirent.h>
>
> -#undef versionsort64
> -
> -#include <string.h>
> +#if !_DIRENT_MATCHES_DIRENT64
> +# include <string.h>
>
> 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
> <http://www.gnu.org/licenses/>. */
>
> +#define versionsort __no_versionsort_decl
> #include <dirent.h>
> +#undef versionsort
> #include <string.h>
>
> -/* 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
> <http://www.gnu.org/licenses/>. */
>
> +#define alphasort __no_alphasort_decl
> #include <dirent.h>
> +#undef alphasort
> #include <string.h>
>
> int
> @@ -24,17 +26,14 @@ __alphasort64 (const struct dirent64 **a, const struct dirent64 **b)
> return strcoll ((*a)->d_name, (*b)->d_name);
> }
>
> -#include <shlib-compat.h>
> -
> +#ifdef _DIRENT_MATCHES_DIRENT64
> +weak_alias (__alphasort64, alphasort64)
> +weak_alias (__alphasort64, alphasort)
> +#else
> +# include <shlib-compat.h>
> versioned_symbol (libc, __alphasort64, alphasort64, GLIBC_2_2);
> -
> -#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
> -
> -#include <olddirent.h>
> -
> -int
> -__old_alphasort64 (const struct __old_dirent64 **a,
> - const struct __old_dirent64 **b);
> +# if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
> +# include <olddirent.h>
>
> 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 <sysdeps/unix/sysv/linux/i386/alphasort64.c>
> 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 <sysdeps/unix/sysv/linux/i386/versionsort64.c>
> 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 <sysdeps/unix/sysv/linux/i386/alphasort64.c>
> 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 <sysdeps/unix/sysv/linux/i386/versionsort64.c>
> 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 <dirent/alphasort64.c>
> 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 <dirent/versionsort64.c>
> 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 <sysdeps/unix/sysv/linux/i386/alphasort64.c>
> 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 <sysdeps/unix/sysv/linux/i386/versionsort64.c>
> 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 <dirent/alphasort64.c>
> 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 <dirent/versionsort64.c>
> 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
> <http://www.gnu.org/licenses/>. */
>
> +#define versionsort __no_versionsort_decl
> #include <dirent.h>
> +#undef versionsort
> #include <string.h>
>
> int
> @@ -24,17 +26,14 @@ __versionsort64 (const struct dirent64 **a, const struct dirent64 **b)
> return __strverscmp ((*a)->d_name, (*b)->d_name);
> }
>
> -#include <shlib-compat.h>
> -
> +#if _DIRENT_MATCHES_DIRENT64
> +weak_alias (__versionsort64, versionsort64)
> +weak_alias (__versionsort64, versionsort)
> +#else
> +# include <shlib-compat.h>
> versioned_symbol (libc, __versionsort64, versionsort64, GLIBC_2_2);
> -
> -#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
> -
> -#include <olddirent.h>
> -
> -int
> -__old_versionsort64 (const struct __old_dirent64 **a,
> - const struct __old_dirent64 **b);
> +# if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
> +# include <olddirent.h>
>
> 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 */
>