[gcc r11-6709] libatomic, libgomp, libitc: Fix bootstrap [PR70454]

Jakub Jelinek jakub@gcc.gnu.org
Fri Jan 15 12:17:00 GMT 2021


https://gcc.gnu.org/g:0411ae7f08e0f5a8b02ff313d26d27a0f6d1bb34

commit r11-6709-g0411ae7f08e0f5a8b02ff313d26d27a0f6d1bb34
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Fri Jan 15 13:12:59 2021 +0100

    libatomic, libgomp, libitc: Fix bootstrap [PR70454]
    
    The recent changes to error on mixing -march=i386 and -fcf-protection broke
    bootstrap.  This patch changes lib{atomic,gomp,itm} configury, so that it
    only adds -march=i486 to flags if really needed (i.e. when 486 or later isn't
    on by default already).  Similarly, it will not use ifuncs if -mcx16
    (or -march=i686 for 32-bit) is on by default.
    
    2021-01-15  Jakub Jelinek  <jakub@redhat.com>
    
            PR target/70454
    libatomic/
            * configure.tgt: For i?86 and x86_64 determine if -march=i486 needs to
            be added through preprocessor check on
            __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4.  Determine if try_ifunc is needed
            based on preprocessor check on __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16
            or __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8.
    libgomp/
            * configure.tgt: For i?86 and x86_64 determine if -march=i486 needs to
            be added through preprocessor check on
            __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4.
    libitm/
            * configure.tgt: For i?86 and x86_64 determine if -march=i486 needs to
            be added through preprocessor check on
            __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4.

Diff:
---
 libatomic/configure.tgt | 56 ++++++++++++++++++++++++++++---------------------
 libgomp/configure.tgt   | 35 +++++++++++++------------------
 libitm/configure.tgt    | 37 +++++++++++++++-----------------
 3 files changed, 64 insertions(+), 64 deletions(-)

diff --git a/libatomic/configure.tgt b/libatomic/configure.tgt
index 2f24817b454..670b0d72cfe 100644
--- a/libatomic/configure.tgt
+++ b/libatomic/configure.tgt
@@ -81,32 +81,40 @@ case "${target_cpu}" in
 	ARCH=sparc
 	;;
 
-  i[3456]86)
-	case " ${CC} ${CFLAGS} " in
-	  *" -m64 "*|*" -mx32 "*)
-	    ;;
-	  *)
-	    if test -z "$with_arch"; then
-	      XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}"
-	      XCFLAGS="${XCFLAGS} -fomit-frame-pointer"
-	    fi
-	esac
-	ARCH=x86
-	# ??? Detect when -march=i686 is already enabled.
-	try_ifunc=yes
-	;;
-  x86_64)
-	case " ${CC} ${CFLAGS} " in
-	  *" -m32 "*)
+  i[3456]86 | x86_64)
+	cat > conftestx.c <<EOF
+#ifndef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
+#error need -march=i486
+#endif
+EOF
+	if ${CC} ${CFLAGS} -E conftestx.c > /dev/null 2>&1; then
+	  :
+	else
+	  if test "${target_cpu}" = x86_64; then
 	    XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
-	    XCFLAGS="${XCFLAGS} -fomit-frame-pointer"
-	    ;;
-	  *)
-	    ;;
-	esac
+	  else
+	    XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}"
+	  fi
+	  XCFLAGS="${XCFLAGS} -fomit-frame-pointer"
+	fi
+	cat > conftestx.c <<EOF
+#ifdef __x86_64__
+#ifndef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16
+#error need -mcx16
+#endif
+#else
+#ifndef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8
+#error need -march=i686
+#endif
+#endif
+EOF
+	if ${CC} ${CFLAGS} -E conftestx.c > /dev/null 2>&1; then
+	  try_ifunc=no
+	else
+	  try_ifunc=yes
+	fi
+	rm -f conftestx.c
 	ARCH=x86
-	# ??? Detect when -mcx16 is already enabled.
-	try_ifunc=yes
 	;;
 
   *)			ARCH="${target_cpu}" ;;
diff --git a/libgomp/configure.tgt b/libgomp/configure.tgt
index 1863287fa0d..be06be0e52b 100644
--- a/libgomp/configure.tgt
+++ b/libgomp/configure.tgt
@@ -73,28 +73,23 @@ if test x$enable_linux_futex = xyes; then
 	;;
 
     # Note that bare i386 is not included here.  We need cmpxchg.
-    i[456]86-*-linux*)
+    i[456]86-*-linux* | x86_64-*-linux*)
 	config_path="linux/x86 linux posix"
-	case " ${CC} ${CFLAGS} " in
-	  *" -m64 "*|*" -mx32 "*)
-	    ;;
-	  *)
-	    if test -z "$with_arch"; then
-	      XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}"
-	    fi
-	esac
-	;;
-
-    # Similar jiggery-pokery for x86_64 multilibs, except here we
-    # can't rely on the --with-arch configure option, since that
-    # applies to the 64-bit side.
-    x86_64-*-linux*)
-	config_path="linux/x86 linux posix"
-	case " ${CC} ${CFLAGS} " in
-	  *" -m32 "*)
+	cat > conftestx.c <<EOF
+#ifndef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
+#error need -march=i486
+#endif
+EOF
+	if ${CC} ${CFLAGS} -E conftestx.c > /dev/null 2>&1; then
+	  :
+	else
+	  if test "${target_cpu}" = x86_64; then
 	    XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
-	    ;;
-	esac
+	  else
+	    XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}"
+	  fi
+	fi
+	rm -f conftestx.c
 	;;
 
     # Note that sparcv7 and sparcv8 is not included here.  We need cas.
diff --git a/libitm/configure.tgt b/libitm/configure.tgt
index 6ac206f1005..a3d84896cc5 100644
--- a/libitm/configure.tgt
+++ b/libitm/configure.tgt
@@ -59,16 +59,23 @@ case "${target_cpu}" in
 
   arm*)		ARCH=arm ;;
 
-  i[3456]86)
-	case " ${CC} ${CFLAGS} " in
-	  *" -m64 "*|*" -mx32 "*)
-	    ;;
-	  *)
-	    if test -z "$with_arch"; then
-	      XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}"
-	      XCFLAGS="${XCFLAGS} -fomit-frame-pointer"
-	    fi
-	esac
+  i[3456]86 | x86_64)
+	cat > conftestx.c <<EOF
+#ifndef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
+#error need -march=i486
+#endif
+EOF
+	if ${CC} ${CFLAGS} -E conftestx.c > /dev/null 2>&1; then
+	  :
+	else
+	  if test "${target_cpu}" = x86_64; then
+	    XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
+	  else
+	    XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}"
+	  fi
+	  XCFLAGS="${XCFLAGS} -fomit-frame-pointer"
+	fi
+	rm -f conftestx.c
 	XCFLAGS="${XCFLAGS} -mrtm"
 	ARCH=x86
 	;;
@@ -103,16 +110,6 @@ case "${target_cpu}" in
 	ARCH=sparc
 	;;
 
-  x86_64)
-	case " ${CC} ${CFLAGS} " in
-	  *" -m32 "*)
-	    XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
-	    XCFLAGS="${XCFLAGS} -fomit-frame-pointer"
-	    ;;
-	esac
-	XCFLAGS="${XCFLAGS} -mrtm"
-	ARCH=x86
-	;;
   s390|s390x)
 	XCFLAGS="${XCFLAGS} -mzarch -mhtm"
 	ARCH=s390


More information about the Gcc-cvs mailing list