This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] powerpc: Fix __wcschr static build
- From: Adhemerval Zanella <adhemerval dot zanella at linaro dot org>
- To: libc-alpha at sourceware dot org, Steven Munroe <munroesj at linux dot vnet dot ibm dot com>
- Date: Wed, 15 Apr 2015 08:57:00 -0300
- Subject: Re: [PATCH] powerpc: Fix __wcschr static build
- Authentication-results: sourceware.org; auth=none
- References: <5523DCD1 dot 4050005 at linaro dot org>
If nobody opposes, I will commit this shortly.
On 07-04-2015 10:34, Adhemerval Zanella wrote:
> Hi,
>
> I am reposting this patch with my new email address. This patch fix
> the static build for strftime, which uses __wcschr. Current powerpc32
> implementation defines the __wcschr be an alias to __wcschr_ppc32 and
> current implementation misses the correct alias for static build.
>
> It also changes the default wcschr.c logic so a IFUNC implementation
> should just define WCSCHR and undefine the required alias/internal
> definitions.
>
> Tested on i386 and on cross powerpc32 build.
>
> Ok to apply?
>
> --
>
> 2015-04-07 Adhemerval Zanella <adhemerval.zanella@linaro.org>
>
> * wcsmbs/wcschr.c [WCSCHR] (wcschr): Define as __wcschr. Remove
> conditionals for weak_alias and libc_hidden_weak.
> * sysdeps/i386/i686/multiarch/wcschr-c.c [libc]: Undefine
> libc_hidden_weak and weak_alias.
> * sysdeps/powerpc/powerpc32/power4/multiarch/wcschr-ppc32.c [libc]:
> Undefine libc_hidden_weak. Define libc_hidden_def for SHARED builds
> and weak_alias for static one.
>
> ---
>
> diff --git a/sysdeps/i386/i686/multiarch/wcschr-c.c b/sysdeps/i386/i686/multiarch/wcschr-c.c
> index 786c132..38d41d0 100644
> --- a/sysdeps/i386/i686/multiarch/wcschr-c.c
> +++ b/sysdeps/i386/i686/multiarch/wcschr-c.c
> @@ -1,6 +1,12 @@
> #include <wchar.h>
>
> #if IS_IN (libc)
> +# undef libc_hidden_weak
> +# define libc_hidden_weak(name)
> +
> +# undef weak_alias
> +# define weak_alias(name,alias)
> +
> # ifdef SHARED
> # undef libc_hidden_def
> # define libc_hidden_def(name) \
> @@ -8,9 +14,9 @@
> strong_alias (__wcschr_ia32, __wcschr_ia32_1); \
> __hidden_ver1 (__wcschr_ia32_1, __GI___wcschr, __wcschr_ia32_1);
> # endif
> -# define WCSCHR __wcschr_ia32
> #endif
>
> extern __typeof (wcschr) __wcschr_ia32;
>
> -#include "wcsmbs/wcschr.c"
> +#define WCSCHR __wcschr_ia32
> +#include <wcsmbs/wcschr.c>
> diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/wcschr-ppc32.c b/sysdeps/powerpc/powerpc32/power4/multiarch/wcschr-ppc32.c
> index df586a6..3b2ab3a 100644
> --- a/sysdeps/powerpc/powerpc32/power4/multiarch/wcschr-ppc32.c
> +++ b/sysdeps/powerpc/powerpc32/power4/multiarch/wcschr-ppc32.c
> @@ -18,16 +18,26 @@
> #include <wchar.h>
>
> #if IS_IN (libc)
> +# undef libc_hidden_weak
> +# define libc_hidden_weak(name)
> +
> +# undef weak_alias
> +# undef libc_hidden_def
> +
> # ifdef SHARED
> -# undef libc_hidden_def
> -# define libc_hidden_def(name) \
> +# define libc_hidden_def(name) \
> __hidden_ver1 (__wcschr_ppc, __GI_wcschr, __wcschr_ppc); \
> strong_alias (__wcschr_ppc, __wcschr_ppc_1); \
> __hidden_ver1 (__wcschr_ppc_1, __GI___wcschr, __wcschr_ppc_1);
> -# endif
> -# define WCSCHR __wcschr_ppc
> +# define weak_alias(name,alias)
> +# else
> +# define weak_alias(name, alias) \
> + _weak_alias(__wcschr_ppc, __wcschr)
> +# define libc_hidden_def(name)
> +# endif /* SHARED */
> #endif
>
> extern __typeof (wcschr) __wcschr_ppc;
>
> +#define WCSCHR __wcschr_ppc
> #include <wcsmbs/wcschr.c>
> diff --git a/wcsmbs/wcschr.c b/wcsmbs/wcschr.c
> index a287283..77624be 100644
> --- a/wcsmbs/wcschr.c
> +++ b/wcsmbs/wcschr.c
> @@ -17,17 +17,13 @@
>
> #include <wchar.h>
>
> -/* Find the first occurrence of WC in WCS. */
> -#ifdef WCSCHR
> -# define wcschr WCSCHR
> -#else
> -# define wcschr __wcschr
> +#ifndef WCSCHR
> +# define WCSCHR __wcschr
> #endif
>
> +/* Find the first occurrence of WC in WCS. */
> wchar_t *
> -wcschr (wcs, wc)
> - const wchar_t *wcs;
> - const wchar_t wc;
> +WCSCHR (const wchar_t *wcs, const wchar_t wc)
> {
> do
> if (*wcs == wc)
> @@ -36,9 +32,6 @@ wcschr (wcs, wc)
>
> return NULL;
> }
> -libc_hidden_def (wcschr)
> -#ifndef WCSCHR
> -# undef wcschr
> +libc_hidden_def (__wcschr)
> weak_alias (__wcschr, wcschr)
> libc_hidden_weak (wcschr)
> -#endif
>