This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[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: Tue, 07 Apr 2015 10:34:09 -0300
- Subject: [PATCH] powerpc: Fix __wcschr static build
- Authentication-results: sourceware.org; auth=none
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