about summary refs log tree commit diff
path: root/sysdeps/powerpc
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2022-10-31 23:20:08 +0000
committerJoseph Myers <joseph@codesourcery.com>2022-10-31 23:20:08 +0000
commitf66780ba46805760a328f01967836416b06c93ca (patch)
treeb8a849cc06de88841f75424706ab0ebdd3423b48 /sysdeps/powerpc
parentbbff275fb1b16f5b7dd95933bde6e1e496414dbf (diff)
downloadglibc-f66780ba46805760a328f01967836416b06c93ca.tar.gz
glibc-f66780ba46805760a328f01967836416b06c93ca.tar.xz
glibc-f66780ba46805760a328f01967836416b06c93ca.zip
Fix build with GCC 13 _FloatN, _FloatNx built-in functions
GCC 13 has added more _FloatN and _FloatNx versions of existing
<math.h> and <complex.h> built-in functions, for use in libstdc++-v3.

This breaks the glibc build because of how those functions are defined
as aliases to functions with the same ABI but different types.  Add
appropriate -fno-builtin-* options for compiling relevant files, as
already done for the case of long double functions aliasing double
ones and based on the list of files used there.

I fixed some mistakes in that list of double files that I noticed
while implementing this fix, but there may well be more such
(harmless) cases, in this list or the new one (files that don't
actually exist or don't define the named functions as aliases so don't
need the options).  I did try to exclude cases where glibc doesn't
define certain functions for _FloatN or _FloatNx types at all from the
new uses of -fno-builtin-* options.  As with the options for double
files (see the commit message for commit
49348beafe9ba150c9bd48595b3f372299bddbb0, "Fix build with GCC 10 when
long double = double."), it's deliberate that the options are used
even if GCC currently doesn't have a built-in version of a given
functions, so providing some level of future-proofing against more
such built-in functions being added in future.

Tested with build-many-glibcs.py for aarch64-linux-gnu
powerpc-linux-gnu powerpc64le-linux-gnu x86_64-linux-gnu (compilers
and glibcs builds) with GCC mainline.
Diffstat (limited to 'sysdeps/powerpc')
-rw-r--r--sysdeps/powerpc/powerpc32/fpu/Makefile4
-rw-r--r--sysdeps/powerpc/powerpc64/fpu/Makefile6
-rw-r--r--sysdeps/powerpc/powerpc64/le/fpu/multiarch/Makefile125
3 files changed, 131 insertions, 4 deletions
diff --git a/sysdeps/powerpc/powerpc32/fpu/Makefile b/sysdeps/powerpc/powerpc32/fpu/Makefile
index b8b6bb0fa2..4c0c65c18a 100644
--- a/sysdeps/powerpc/powerpc32/fpu/Makefile
+++ b/sysdeps/powerpc/powerpc32/fpu/Makefile
@@ -1,8 +1,8 @@
 ifeq ($(subdir),math)
 # lrint is aliased to lrintf, so suppress compiler builtins to
 # avoid mismatched signatures.
-CFLAGS-s_lrint.c += -fno-builtin-lrintf
-CFLAGS-s_lround.c += -fno-builtin-lroundf
+CFLAGS-s_lrint.c += -fno-builtin-lrintf -fno-builtin-lrintf32
+CFLAGS-s_lround.c += -fno-builtin-lroundf -fno-builtin-lroundf32
 endif
 
 ifeq ($(subdir),misc)
diff --git a/sysdeps/powerpc/powerpc64/fpu/Makefile b/sysdeps/powerpc/powerpc64/fpu/Makefile
index 05075c2a75..9359049b55 100644
--- a/sysdeps/powerpc/powerpc64/fpu/Makefile
+++ b/sysdeps/powerpc/powerpc64/fpu/Makefile
@@ -1,7 +1,9 @@
 ifeq ($(subdir),math)
 # lrintf and llrintf are aliased to llrint, so suppress compiler builtins to
 # avoid mismatched signatures.
-CFLAGS-s_llrint.c += -fno-builtin-lrintf -fno-builtin-llrintf
+CFLAGS-s_llrint.c += -fno-builtin-lrintf -fno-builtin-llrintf \
+		     -fno-builtin-lrintf32 -fno-builtin-llrintf32
 # Same as before but for lroundf and llroundf
-CFLAGS-s_llround.c += -fno-builtin-lroundf -fno-builtin-llroundf
+CFLAGS-s_llround.c += -fno-builtin-lroundf -fno-builtin-llroundf \
+		      -fno-builtin-lroundf32 -fno-builtin-llroundf32
 endif
diff --git a/sysdeps/powerpc/powerpc64/le/fpu/multiarch/Makefile b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/Makefile
index cc073b53d3..858061484e 100644
--- a/sysdeps/powerpc/powerpc64/le/fpu/multiarch/Makefile
+++ b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/Makefile
@@ -207,6 +207,131 @@ endef
 object-suffixes-left := $(all-object-suffixes)
 include $(o-iterator)
 
+CFLAGS-w_acosf128-ifunc.c += -fno-builtin-acosf64x
+CFLAGS-w_acoshf128-ifunc.c += -fno-builtin-acoshf64x
+CFLAGS-w_asinf128-ifunc.c += -fno-builtin-asinf64x
+CFLAGS-s_asinhf128-ifunc.c += -fno-builtin-asinhf64x
+CFLAGS-s_atanf128-ifunc.c += -fno-builtin-atanf64x
+CFLAGS-w_atan2f128-ifunc.c += -fno-builtin-atan2f64x
+CFLAGS-w_atanhf128-ifunc.c += -fno-builtin-atanhf64x
+CFLAGS-s_cabsf128-ifunc.c += -fno-builtin-cabsf64x
+CFLAGS-s_cacosf128-ifunc.c += -fno-builtin-cacosf64x
+CFLAGS-s_cacoshf128-ifunc.c += -fno-builtin-cacoshf64x
+CFLAGS-s_canonicalizef128-ifunc.c += -fno-builtin-canonicalizef64x
+CFLAGS-s_cargf128-ifunc.c += -fno-builtin-cargf64x
+CFLAGS-s_casinf128-ifunc.c += -fno-builtin-casinf64x
+CFLAGS-s_casinhf128-ifunc.c += -fno-builtin-casinhf64x
+CFLAGS-s_catanf128-ifunc.c += -fno-builtin-catanf64x
+CFLAGS-s_catanhf128-ifunc.c += -fno-builtin-catanhf64x
+CFLAGS-s_cbrtf128-ifunc.c += -fno-builtin-cbrtf64x
+CFLAGS-s_ccosf128-ifunc.c += -fno-builtin-ccosf64x
+CFLAGS-s_ccoshf128-ifunc.c += -fno-builtin-ccoshf64x
+CFLAGS-s_ceilf128-ifunc.c += -fno-builtin-ceilf64x
+CFLAGS-s_cexpf128-ifunc.c += -fno-builtin-cexpf64x
+CFLAGS-s_cimagf128-ifunc.c += -fno-builtin-cimagf64x
+CFLAGS-s_clogf128-ifunc.c += -fno-builtin-clogf64x
+CFLAGS-s_clog10f128-ifunc.c += -fno-builtin-clog10f64x
+CFLAGS-s_conjf128-ifunc.c += -fno-builtin-conjf64x
+CFLAGS-s_copysignf128-ifunc.c += -fno-builtin-copysignf64x
+CFLAGS-s_cosf128-ifunc.c += -fno-builtin-cosf64x
+CFLAGS-w_coshf128-ifunc.c += -fno-builtin-coshf64x
+CFLAGS-s_cpowf128-ifunc.c += -fno-builtin-cpowf64x
+CFLAGS-s_cprojf128-ifunc.c += -fno-builtin-cprojf64x
+CFLAGS-s_crealf128-ifunc.c += -fno-builtin-crealf64x
+CFLAGS-s_csinf128-ifunc.c += -fno-builtin-csinf64x
+CFLAGS-s_csinhf128-ifunc.c += -fno-builtin-csinhf64x
+CFLAGS-s_csqrtf128-ifunc.c += -fno-builtin-csqrtf64x
+CFLAGS-s_ctanf128-ifunc.c += -fno-builtin-ctanf64x
+CFLAGS-s_ctanhf128-ifunc.c += -fno-builtin-ctanhf64x
+CFLAGS-s_daddf128-ifunc.c += -fno-builtin-f64addf64x
+CFLAGS-s_ddivf128-ifunc.c += -fno-builtin-f64divf64x
+CFLAGS-s_dfmaf128-ifunc.c += -fno-builtin-f64fmaf64x
+CFLAGS-s_dmulf128-ifunc.c += -fno-builtin-f64mulf64x
+CFLAGS-s_dsqrtf128-ifunc.c += -fno-builtin-f64sqrtf64x
+CFLAGS-s_dsubf128-ifunc.c += -fno-builtin-f64subf64x
+CFLAGS-s_erff128-ifunc.c += -fno-builtin-erff64x
+CFLAGS-s_erfcf128-ifunc.c += -fno-builtin-erfcf64x
+CFLAGS-e_expf128-ifunc.c += -fno-builtin-expf64x
+CFLAGS-w_exp10f128-ifunc.c += -fno-builtin-exp10f64x
+CFLAGS-e_exp2f128-ifunc.c += -fno-builtin-exp2f64x
+CFLAGS-s_expm1f128-ifunc.c += -fno-builtin-expm1f64x
+CFLAGS-s_fabsf128-ifunc.c += -fno-builtin-fabsf64x
+CFLAGS-s_faddf128-ifunc.c += -fno-builtin-f32addf64x
+CFLAGS-s_fdimf128-ifunc.c += -fno-builtin-fdimf64x
+CFLAGS-s_fdivf128-ifunc.c += -fno-builtin-f32divf64x
+CFLAGS-s_ffmaf128-ifunc.c += -fno-builtin-f32fmaf64x
+CFLAGS-s_floorf128-ifunc.c += -fno-builtin-floorf64x
+CFLAGS-s_fmaf128-ifunc.c += -fno-builtin-fmaf64x
+CFLAGS-s_fmaxf128-ifunc.c += -fno-builtin-fmaxf64x
+CFLAGS-s_fmaximumf128-ifunc.c += -fno-builtin-fmaximumf64x
+CFLAGS-s_fmaximum_magf128-ifunc.c += -fno-builtin-fmaximum_magf64x
+CFLAGS-s_fmaximum_mag_numf128-ifunc.c += -fno-builtin-fmaximum_mag_numf64x
+CFLAGS-s_fmaximum_numf128-ifunc.c += -fno-builtin-fmaximum_numf64x
+CFLAGS-s_fmaxmagf128-ifunc.c += -fno-builtin-fmaxmagf64x
+CFLAGS-s_fminf128-ifunc.c += -fno-builtin-fminf64x
+CFLAGS-s_fminimumf128-ifunc.c += -fno-builtin-fminimumf64x
+CFLAGS-s_fminimum_magf128-ifunc.c += -fno-builtin-fminimum_magf64x
+CFLAGS-s_fminimum_mag_numf128-ifunc.c += -fno-builtin-fminimum_mag_numf64x
+CFLAGS-s_fminimum_numf128-ifunc.c += -fno-builtin-fminimum_numf64x
+CFLAGS-s_fminmagf128-ifunc.c += -fno-builtin-fminmagf64x
+CFLAGS-w_fmodf128-ifunc.c += -fno-builtin-fmodf64x
+CFLAGS-s_fmulf128-ifunc.c += -fno-builtin-f32mulf64x
+CFLAGS-s_frexpf128-ifunc.c += -fno-builtin-frexpf64x
+CFLAGS-s_fromfpf128-ifunc.c += -fno-builtin-fromfpf64x
+CFLAGS-s_fromfpxf128-ifunc.c += -fno-builtin-fromfpxf64x
+CFLAGS-s_fsqrtf128-ifunc.c += -fno-builtin-f32sqrtf64x
+CFLAGS-s_fsubf128-ifunc.c += -fno-builtin-f32subf64x
+CFLAGS-s_getpayloadf128-ifunc.c += -fno-builtin-getpayloadf64x
+CFLAGS-w_hypotf128-ifunc.c += -fno-builtin-hypotf64x
+CFLAGS-w_ilogbf128-ifunc.c += -fno-builtin-ilogbf64x
+CFLAGS-w_j0f128-ifunc.c += -fno-builtin-j0f64x
+CFLAGS-w_j1f128-ifunc.c += -fno-builtin-j1f64x
+CFLAGS-w_jnf128-ifunc.c += -fno-builtin-jnf64x
+CFLAGS-s_ldexpf128-ifunc.c += -fno-builtin-ldexpf64x
+CFLAGS-w_lgammaf128-ifunc.c += -fno-builtin-lgammaf64x
+CFLAGS-w_lgammaf128_r-ifunc.c += -fno-builtin-lgammaf64x_r
+CFLAGS-w_llogbf128-ifunc.c += -fno-builtin-llogbf64x
+CFLAGS-s_llrintf128-ifunc.c += -fno-builtin-llrintf64x
+CFLAGS-s_llroundf128-ifunc.c += -fno-builtin-llroundf64x
+CFLAGS-e_logf128-ifunc.c += -fno-builtin-logf64x
+CFLAGS-w_log10f128-ifunc.c += -fno-builtin-log10f64x
+CFLAGS-w_log1pf128-ifunc.c += -fno-builtin-log1pf64x
+CFLAGS-e_log2f128-ifunc.c += -fno-builtin-log2f64x
+CFLAGS-s_logbf128-ifunc.c += -fno-builtin-logbf64x
+CFLAGS-s_lrintf128-ifunc.c += -fno-builtin-lrintf64x
+CFLAGS-s_lroundf128-ifunc.c += -fno-builtin-lroundf64x
+CFLAGS-s_modff128-ifunc.c += -fno-builtin-modff64x
+CFLAGS-s_nanf128-ifunc.c += -fno-builtin-nanf64x
+CFLAGS-s_nearbyintf128-ifunc.c += -fno-builtin-nearbyintf64x
+CFLAGS-s_nextafterf128-ifunc.c += -fno-builtin-nextafterf64x
+CFLAGS-s_nextdownf128-ifunc.c += -fno-builtin-nextdownf64x
+CFLAGS-s_nextupf128-ifunc.c += -fno-builtin-nextupf64x
+CFLAGS-e_powf128-ifunc.c += -fno-builtin-powf64x
+CFLAGS-w_remainderf128-ifunc.c += -fno-builtin-remainderf64x
+CFLAGS-s_remquof128-ifunc.c += -fno-builtin-remquof64x
+CFLAGS-s_rintf128-ifunc.c += -fno-builtin-rintf64x
+CFLAGS-s_roundf128-ifunc.c += -fno-builtin-roundf64x
+CFLAGS-s_roundevenf128-ifunc.c += -fno-builtin-roundevenf64x
+CFLAGS-w_scalblnf128-ifunc.c += -fno-builtin-scalblnf64x
+CFLAGS-s_scalbnf128-ifunc.c += -fno-builtin-scalbnf64x
+CFLAGS-s_setpayloadf128-ifunc.c += -fno-builtin-setpayloadf64x
+CFLAGS-s_setpayloadsigf128-ifunc.c += -fno-builtin-setpayloadsigf64x
+CFLAGS-s_sinf128-ifunc.c += -fno-builtin-sinf64x
+CFLAGS-s_sincosf128-ifunc.c += -fno-builtin-sincosf64x
+CFLAGS-w_sinhf128-ifunc.c += -fno-builtin-sinhf64x
+CFLAGS-w_sqrtf128-ifunc.c += -fno-builtin-sqrtf64x
+CFLAGS-s_tanf128-ifunc.c += -fno-builtin-tanf64x
+CFLAGS-s_tanhf128-ifunc.c += -fno-builtin-tanhf64x
+CFLAGS-w_tgammaf128-ifunc.c += -fno-builtin-tgammaf64x
+CFLAGS-s_totalorderf128-ifunc.c += -fno-builtin-totalorderf64x
+CFLAGS-s_totalordermagf128-ifunc.c += -fno-builtin-totalordermagf64x
+CFLAGS-s_truncf128-ifunc.c += -fno-builtin-truncf64x
+CFLAGS-s_ufromfpf128-ifunc.c += -fno-builtin-ufromfpf64x
+CFLAGS-s_ufromfpxf128-ifunc.c += -fno-builtin-ufromfpxf64x
+CFLAGS-s_y0f128-ifunc.c += -fno-builtin-y0f64x
+CFLAGS-s_y1f128-ifunc.c += -fno-builtin-y1f64x
+CFLAGS-s_ynf128-ifunc.c += -fno-builtin-ynf64x
+
 endif # do_f128_multiarch
 
 libm-sysdep_routines += e_log-ppc64