libatomic, libgomp, libitc: Fix bootstrap [PR70454]
authorJakub Jelinek <jakub@redhat.com>
Fri, 15 Jan 2021 12:12:59 +0000 (13:12 +0100)
committerJakub Jelinek <jakub@redhat.com>
Fri, 15 Jan 2021 12:16:42 +0000 (13:16 +0100)
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.

libatomic/configure.tgt
libgomp/configure.tgt
libitm/configure.tgt

index 2f24817..670b0d7 100644 (file)
@@ -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}" ;;
index 1863287..be06be0 100644 (file)
@@ -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.
index 6ac206f..a3d8489 100644 (file)
@@ -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