| From 2824d2418605e092899117e77bc8ebf332321807 Mon Sep 17 00:00:00 2001 |
| From: Jakub Jelinek <jakub@redhat.com> |
| Date: Fri, 15 Jan 2021 13:12:59 +0100 |
| Subject: [PATCH] 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. |
| |
| Upstream-Status: Backport [master post 10.x release] |
| --- |
| 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 5dd0926d20..6ea082a29b 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 4790a31e39..761ef2a7db 100644 |
| --- a/libgomp/configure.tgt |
| +++ b/libgomp/configure.tgt |
| @@ -70,28 +70,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 04109160e9..ca62bac627 100644 |
| --- a/libitm/configure.tgt |
| +++ b/libitm/configure.tgt |
| @@ -58,16 +58,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 |
| ;; |
| @@ -102,16 +109,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 |