Message ID | 5523DCD1.4050005@linaro.org |
---|---|
State | New |
Headers | show |
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 >
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