]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
[BZ #21745] powerpc: build some IFUNC math functions for libc and libm
authorTulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
Fri, 15 Sep 2017 18:07:28 +0000 (15:07 -0300)
committerTulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
Fri, 15 Sep 2017 18:09:19 +0000 (15:09 -0300)
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.

ChangeLog
sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile
sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-ppc64.S

index 56f9c6809bf05c4708391467f9d6ab1e20828e5d..29e514aef085b450d1261a11a8efec2dbe14fef5 100644 (file)
--- 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>.
index d6f14f360a38ba339d13b5efb4da145c23b4e806..73f2f693771027a97dd8db8c3240dc0d6f1840e2 100644 (file)
@@ -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
index ee219c14bea7ddb6f85fb5d219f246f6b7d901c2..eba0d4ff5eaf0412c7d2d565f39b5da990c185fc 100644 (file)
@@ -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