about summary refs log tree commit diff
diff options
context:
space:
mode:
authorTulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>2017-09-15 15:07:28 -0300
committerTulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>2017-09-15 15:09:19 -0300
commit61c45f250528dae431391823a9766053e61ccde1 (patch)
treece8ebae0443249c1a20936161e7c06d81275ce45
parent5bcdb315295f3bb73c082fc944d9e10a304adb0a (diff)
downloadglibc-61c45f250528dae431391823a9766053e61ccde1.tar.gz
glibc-61c45f250528dae431391823a9766053e61ccde1.tar.xz
glibc-61c45f250528dae431391823a9766053e61ccde1.zip
[BZ #21745] powerpc: build some IFUNC math functions for libc and libm
Some math functions have to be distributed in libc because they're
required by printf.
libc and libm require their own builds of these functions, e.g. libc
functions have to call __stack_chk_fail_local in order to bypass the
PLT, while libm functions have to call __stack_chk_fail.

While math/Makefile treat the generic cases, i.e. s_isinff, the
multiarch Makefile has to treat its own files, i.e. s_isinff-ppc64.

	[BZ #21745]
	* sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile:
	[$(subdir) = math] (sysdep_calls): New variable.  Has the
	previous contents of sysdep_routines, but re-sorted..
	[$(subdir) = math] (sysdep_routines): Re-use the contents from
	sysdep_calls.
	[$(subdir) = math] (libm-sysdep_routines): Remove the functions
	defined in sysdep_calls and replace by the respective m_* names.
	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-ppc64.S:
	(compat_symbol): Undefine to avoid duplicated compat symbols in
	libc.
-rw-r--r--ChangeLog14
-rw-r--r--sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile36
-rw-r--r--sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-ppc64.S3
3 files changed, 36 insertions, 17 deletions
diff --git a/ChangeLog b/ChangeLog
index 56f9c6809b..29e514aef0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2017-09-15  Tulio Magno Quites Machado Filho  <tuliom@linux.vnet.ibm.com>
+
+	[BZ #21745]
+	* sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile:
+	[$(subdir) = math] (sysdep_calls): New variable.  Has the
+	previous contents of sysdep_routines, but re-sorted..
+	[$(subdir) = math] (sysdep_routines): Re-use the contents from
+	sysdep_calls.
+	[$(subdir) = math] (libm-sysdep_routines): Remove the functions
+	defined in sysdep_calls and replace by the respective m_* names.
+	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-ppc64.S:
+	(compat_symbol): Undefine to avoid duplicated compat symbols in
+	libc.
+
 2017-09-15  Joseph Myers  <joseph@codesourcery.com>
 
 	* math/s_fmaf.c: Include <libm-alias-float.h>.
diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile b/sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile
index d6f14f360a..73f2f69377 100644
--- a/sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile
+++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile
@@ -1,33 +1,35 @@
 ifeq ($(subdir),math)
-sysdep_routines += s_isnan-power7 s_isnan-power6x s_isnan-power6 \
-		   s_isnan-power5 s_isnan-ppc64 s_copysign-power6 \
-		   s_copysign-ppc64 s_finite-power7 s_finite-ppc64 \
-		   s_finitef-ppc64 s_isinff-ppc64 s_isinf-power7 \
-		   s_isinf-ppc64 s_modf-power5+ s_modf-ppc64 \
-		   s_modff-power5+ s_modff-ppc64 s_isnan-power8 \
-		   s_isinf-power8 s_finite-power8
+# These functions are built both for libc and libm because they're required
+# by printf.  While the libc objects have the prefix s_, the libm ones are
+# prefixed with  m_.
+sysdep_calls := s_copysign-power6 s_copysign-ppc64 \
+		s_finite-power8 s_finite-power7 s_finite-ppc64 \
+		s_finitef-ppc64 \
+		s_isinf-power8 s_isinf-ppc64 \
+		s_isinff-ppc64 s_isinf-power7 \
+		s_isnan-power8 s_isnan-power7 s_isnan-power6x s_isnan-power6 \
+		s_isnan-power5 s_isnan-ppc64 \
+		s_modf-power5+ s_modf-ppc64 \
+		s_modff-power5+ s_modff-ppc64
 
-libm-sysdep_routines += s_isnan-power7 s_isnan-power6x s_isnan-power6 \
-			s_isnan-power5 s_isnan-ppc64 s_llround-power6x \
+sysdep_routines += $(sysdep_calls)
+libm-sysdep_routines += s_llround-power6x \
 			s_llround-power5+ s_llround-ppc64 s_ceil-power5+ \
 			s_ceil-ppc64 s_ceilf-power5+ s_ceilf-ppc64 \
 			s_floor-power5+ s_floor-ppc64 s_floorf-power5+ \
 			s_floorf-ppc64 s_round-power5+ s_round-ppc64 \
 			s_roundf-power5+ s_roundf-ppc64 s_trunc-power5+ \
 			s_trunc-ppc64 s_truncf-power5+ s_truncf-ppc64 \
-			s_copysign-power6 s_copysign-ppc64 s_llrint-power6x \
-			s_llrint-ppc64 s_finite-power7 s_finite-ppc64 \
-			s_finitef-ppc64 s_isinff-ppc64 s_isinf-power7 \
-			s_isinf-ppc64 s_logb-power7 s_logbf-power7 \
+			s_llrint-power6x s_llrint-ppc64 \
+			s_logb-power7 s_logbf-power7 \
 			s_logbl-power7 s_logb-ppc64 s_logbf-ppc64 \
-			s_logbl-ppc64 s_modf-power5+ s_modf-ppc64 \
-			s_modff-power5+ s_modff-ppc64 e_hypot-ppc64 \
+			s_logbl-ppc64 e_hypot-ppc64 \
 			e_hypot-power7 e_hypotf-ppc64 e_hypotf-power7 \
-			s_isnan-power8 s_isinf-power8 s_finite-power8 \
 			s_llrint-power8 s_llround-power8 s_llroundf-ppc64 \
 			e_expf-power8 e_expf-ppc64 \
 			s_sinf-ppc64 s_sinf-power8 \
-			s_cosf-ppc64 s_cosf-power8
+			s_cosf-ppc64 s_cosf-power8 \
+			$(sysdep_calls:s_%=m_%)
 
 CFLAGS-s_logbf-power7.c = -mcpu=power7
 CFLAGS-s_logbl-power7.c = -mcpu=power7
diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-ppc64.S b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-ppc64.S
index ee219c14be..eba0d4ff5e 100644
--- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-ppc64.S
+++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-ppc64.S
@@ -23,6 +23,9 @@
 #define weak_alias(a,b)
 #undef strong_alias
 #define strong_alias(a,b)
+#undef compat_symbol
+#define compat_symbol(a,b,c,d)
+
 
 #define __isnan __isnan_ppc64
 #undef hidden_def