[v3,5/6] powerpc64le: blacklist broken GCC compilers (e.g GCC 7.5.0)
Commit Message
GCC 7.5.0 (BZ# 94200) will refuse to compile if both -mabi=% and
-mlong-double-128 are passed on the command line. Surprisingly,
it will work happily if the latter is not. For the sake of
maintianing status quo, test for and blacklist such compilers.
Tested with a GCC 8.3.1 and GCC 7.5.0 compiler for ppc64le.
---
sysdeps/ieee754/ldbl-128ibm-compat/Makefile | 12 ---------
sysdeps/powerpc/powerpc64/le/configure | 27 +++++++++++++++++++++
sysdeps/powerpc/powerpc64/le/configure.ac | 15 ++++++++++++
3 files changed, 42 insertions(+), 12 deletions(-)
Comments
* Paul E. Murphy via Libc-alpha:
> GCC 7.5.0 (BZ# 94200) will refuse to compile if both -mabi=% and
> -mlong-double-128 are passed on the command line. Surprisingly,
> it will work happily if the latter is not. For the sake of
> maintianing status quo, test for and blacklist such compilers.
GCC PR reference syntax (as mentioned before), and typo: maintianing
> diff --git a/sysdeps/powerpc/powerpc64/le/configure.ac b/sysdeps/powerpc/powerpc64/le/configure.ac
> index 630086bd88..dde956505c 100644
> --- a/sysdeps/powerpc/powerpc64/le/configure.ac
> +++ b/sysdeps/powerpc/powerpc64/le/configure.ac
> @@ -51,6 +51,21 @@ CFLAGS="$save_CFLAGS"])
> AS_IF([test "$libc_cv_compiler_powerpc64le_ice" != "yes"],
> [critic_missing="$critic_missing __builtin_signbit is broken. GCC 7.4 or newer is required to resolve (BZ 83862)."])
>
> +dnl Some old compiler versions give out error messages when combining
> +dnl -mabi=% and -mlong-double-128. i.e GCC 7.5.0 (BZ# 94200)
PR reference.
> +AC_CACHE_CHECK([if $CC compiles with -mabi=ieeelongdouble and -mlong-double-128],
> + libc_cv_compiler_powerpc64le_ldbl128_mabi, [dnl
> +save_CFLAGS="$CFLAGS"
> +CFLAGS="$CFLAGS -mabi=ieeelongdouble -mlong-double-128"
> +AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
> +long double x;
> +]])],
> + [libc_cv_compiler_powerpc64le_ldbl128_mabi=yes],
> + [libc_cv_compiler_powerpc64le_ldbl128_mabi=no])
> +CFLAGS="$save_CFLAGS"])
> +AS_IF([test "$libc_cv_compiler_powerpc64le_ldbl128_mabi" == "no"],
> + [critic_missing="$critic_missing The compiler must support -mabi=ieeelongdouble and -mlongdouble simultaneously."])
> +
> # Binutils (objcopy) 2.26 or newer required to support the --update-section
> # feature for fixing up .gnu.attribute section with IEEE ldbl.
> AC_CHECK_PROG_VER(OBJCOPY, $OBJCOPY, --version,
This change looks reasonable to me.
Maybe add the @c comment to the install.texi file with this patch?
Something like this:
@c See this autoconf check:
@c if $CC compiles with -mabi=ieeelongdouble and -mlong-double-128
@@ -249,13 +249,6 @@ ldbl-extra-routines += err \
CFLAGS-ieee128-qefgcvt.c += -mabi=ieeelongdouble -Wno-psabi -mno-gnu-attribute
CFLAGS-ieee128-qefgcvt_r.c += -mabi=ieeelongdouble -Wno-psabi -mno-gnu-attribute
-# Remove -mlong-double-128 because it does not work correctly with
-# -mabi=ibmlongdoule in some GCC versions, e.g. GCC 7.
-$(foreach o,$(all-object-suffixes),$(objpfx)ieee128-qefgcvt$(o)): \
- sysdep-CFLAGS := $(filter-out -mlong-double-128, $(sysdep-CFLAGS))
-$(foreach o,$(all-object-suffixes),$(objpfx)ieee128-qefgcvt_r$(o)): \
- sysdep-CFLAGS := $(filter-out -mlong-double-128, $(sysdep-CFLAGS))
-
tests-internal += tst-ibm128-warn tst-ieee128-warn
tests-internal += tst-ibm128-error tst-ieee128-error
tests-internal += tst-ibm128-efgcvt tst-ieee128-efgcvt
@@ -348,11 +341,6 @@ ldbl-ibm128-files := $(objpfx)test-%-ibm128^ \
$(foreach r,$(ldbl-extra-routines),$(objpfx)$(r)-internal^)
obj-suf-foreach = $(foreach suf,$(all-object-suffixes),$(subst ^,$(suf),$(1)))
-# Remove -mlong-double-128 because it does not work correctly with
-# -mabi=ibmlongdoule in some GCC versions, e.g. GCC 7.
-$(call obj-suf-foreach,$(ldbl-ibm128-files)): \
- sysdep-CFLAGS := $(filter-out -mlong-double-128, $(sysdep-CFLAGS))
-
# Explicitly add -mabi=ibm-long-double to required files.
$(call obj-suf-foreach,$(ldbl-ibm128-files)): \
sysdep-CFLAGS += -mabi=ibmlongdouble
@@ -90,6 +90,33 @@ if test "$libc_cv_compiler_powerpc64le_ice" != "yes"; then :
critic_missing="$critic_missing __builtin_signbit is broken. GCC 7.4 or newer is required to resolve (BZ 83862)."
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC compiles with -mabi=ieeelongdouble and -mlong-double-128" >&5
+$as_echo_n "checking if $CC compiles with -mabi=ieeelongdouble and -mlong-double-128... " >&6; }
+if ${libc_cv_compiler_powerpc64le_ldbl128_mabi+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -mabi=ieeelongdouble -mlong-double-128"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+long double x;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ libc_cv_compiler_powerpc64le_ldbl128_mabi=yes
+else
+ libc_cv_compiler_powerpc64le_ldbl128_mabi=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS="$save_CFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_compiler_powerpc64le_ldbl128_mabi" >&5
+$as_echo "$libc_cv_compiler_powerpc64le_ldbl128_mabi" >&6; }
+if test "$libc_cv_compiler_powerpc64le_ldbl128_mabi" == "no"; then :
+ critic_missing="$critic_missing The compiler must support -mabi=ieeelongdouble and -mlongdouble simultaneously."
+fi
+
# Binutils (objcopy) 2.26 or newer required to support the --update-section
# feature for fixing up .gnu.attribute section with IEEE ldbl.
for ac_prog in $OBJCOPY
@@ -51,6 +51,21 @@ CFLAGS="$save_CFLAGS"])
AS_IF([test "$libc_cv_compiler_powerpc64le_ice" != "yes"],
[critic_missing="$critic_missing __builtin_signbit is broken. GCC 7.4 or newer is required to resolve (BZ 83862)."])
+dnl Some old compiler versions give out error messages when combining
+dnl -mabi=% and -mlong-double-128. i.e GCC 7.5.0 (BZ# 94200)
+AC_CACHE_CHECK([if $CC compiles with -mabi=ieeelongdouble and -mlong-double-128],
+ libc_cv_compiler_powerpc64le_ldbl128_mabi, [dnl
+save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -mabi=ieeelongdouble -mlong-double-128"
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+long double x;
+]])],
+ [libc_cv_compiler_powerpc64le_ldbl128_mabi=yes],
+ [libc_cv_compiler_powerpc64le_ldbl128_mabi=no])
+CFLAGS="$save_CFLAGS"])
+AS_IF([test "$libc_cv_compiler_powerpc64le_ldbl128_mabi" == "no"],
+ [critic_missing="$critic_missing The compiler must support -mabi=ieeelongdouble and -mlongdouble simultaneously."])
+
# Binutils (objcopy) 2.26 or newer required to support the --update-section
# feature for fixing up .gnu.attribute section with IEEE ldbl.
AC_CHECK_PROG_VER(OBJCOPY, $OBJCOPY, --version,