blob: addecb4bd871deba3dafd7a0a21f5ac2e5dc0a65 [file] [log] [blame]
Andrew Geisslerd1e89492021-02-12 15:35:20 -06001From 2824d2418605e092899117e77bc8ebf332321807 Mon Sep 17 00:00:00 2001
2From: Jakub Jelinek <jakub@redhat.com>
3Date: Fri, 15 Jan 2021 13:12:59 +0100
4Subject: [PATCH] libatomic, libgomp, libitc: Fix bootstrap [PR70454]
5
6The recent changes to error on mixing -march=i386 and -fcf-protection broke
7bootstrap. This patch changes lib{atomic,gomp,itm} configury, so that it
8only adds -march=i486 to flags if really needed (i.e. when 486 or later isn't
9on by default already). Similarly, it will not use ifuncs if -mcx16
10(or -march=i686 for 32-bit) is on by default.
11
122021-01-15 Jakub Jelinek <jakub@redhat.com>
13
14 PR target/70454
15libatomic/
16 * configure.tgt: For i?86 and x86_64 determine if -march=i486 needs to
17 be added through preprocessor check on
18 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4. Determine if try_ifunc is needed
19 based on preprocessor check on __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16
20 or __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8.
21libgomp/
22 * configure.tgt: For i?86 and x86_64 determine if -march=i486 needs to
23 be added through preprocessor check on
24 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4.
25libitm/
26 * configure.tgt: For i?86 and x86_64 determine if -march=i486 needs to
27 be added through preprocessor check on
28 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4.
29
30Upstream-Status: Backport [master post 10.x release]
31---
32 libatomic/configure.tgt | 56 +++++++++++++++++++++++------------------
33 libgomp/configure.tgt | 35 +++++++++++---------------
34 libitm/configure.tgt | 37 +++++++++++++--------------
35 3 files changed, 64 insertions(+), 64 deletions(-)
36
37diff --git a/libatomic/configure.tgt b/libatomic/configure.tgt
38index 5dd0926d20..6ea082a29b 100644
39--- a/libatomic/configure.tgt
40+++ b/libatomic/configure.tgt
41@@ -81,32 +81,40 @@ case "${target_cpu}" in
42 ARCH=sparc
43 ;;
44
45- i[3456]86)
46- case " ${CC} ${CFLAGS} " in
47- *" -m64 "*|*" -mx32 "*)
48- ;;
49- *)
50- if test -z "$with_arch"; then
51- XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}"
52- XCFLAGS="${XCFLAGS} -fomit-frame-pointer"
53- fi
54- esac
55- ARCH=x86
56- # ??? Detect when -march=i686 is already enabled.
57- try_ifunc=yes
58- ;;
59- x86_64)
60- case " ${CC} ${CFLAGS} " in
61- *" -m32 "*)
62+ i[3456]86 | x86_64)
63+ cat > conftestx.c <<EOF
64+#ifndef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
65+#error need -march=i486
66+#endif
67+EOF
68+ if ${CC} ${CFLAGS} -E conftestx.c > /dev/null 2>&1; then
69+ :
70+ else
71+ if test "${target_cpu}" = x86_64; then
72 XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
73- XCFLAGS="${XCFLAGS} -fomit-frame-pointer"
74- ;;
75- *)
76- ;;
77- esac
78+ else
79+ XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}"
80+ fi
81+ XCFLAGS="${XCFLAGS} -fomit-frame-pointer"
82+ fi
83+ cat > conftestx.c <<EOF
84+#ifdef __x86_64__
85+#ifndef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16
86+#error need -mcx16
87+#endif
88+#else
89+#ifndef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8
90+#error need -march=i686
91+#endif
92+#endif
93+EOF
94+ if ${CC} ${CFLAGS} -E conftestx.c > /dev/null 2>&1; then
95+ try_ifunc=no
96+ else
97+ try_ifunc=yes
98+ fi
99+ rm -f conftestx.c
100 ARCH=x86
101- # ??? Detect when -mcx16 is already enabled.
102- try_ifunc=yes
103 ;;
104
105 *) ARCH="${target_cpu}" ;;
106diff --git a/libgomp/configure.tgt b/libgomp/configure.tgt
107index 4790a31e39..761ef2a7db 100644
108--- a/libgomp/configure.tgt
109+++ b/libgomp/configure.tgt
110@@ -70,28 +70,23 @@ if test x$enable_linux_futex = xyes; then
111 ;;
112
113 # Note that bare i386 is not included here. We need cmpxchg.
114- i[456]86-*-linux*)
115+ i[456]86-*-linux* | x86_64-*-linux*)
116 config_path="linux/x86 linux posix"
117- case " ${CC} ${CFLAGS} " in
118- *" -m64 "*|*" -mx32 "*)
119- ;;
120- *)
121- if test -z "$with_arch"; then
122- XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}"
123- fi
124- esac
125- ;;
126-
127- # Similar jiggery-pokery for x86_64 multilibs, except here we
128- # can't rely on the --with-arch configure option, since that
129- # applies to the 64-bit side.
130- x86_64-*-linux*)
131- config_path="linux/x86 linux posix"
132- case " ${CC} ${CFLAGS} " in
133- *" -m32 "*)
134+ cat > conftestx.c <<EOF
135+#ifndef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
136+#error need -march=i486
137+#endif
138+EOF
139+ if ${CC} ${CFLAGS} -E conftestx.c > /dev/null 2>&1; then
140+ :
141+ else
142+ if test "${target_cpu}" = x86_64; then
143 XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
144- ;;
145- esac
146+ else
147+ XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}"
148+ fi
149+ fi
150+ rm -f conftestx.c
151 ;;
152
153 # Note that sparcv7 and sparcv8 is not included here. We need cas.
154diff --git a/libitm/configure.tgt b/libitm/configure.tgt
155index 04109160e9..ca62bac627 100644
156--- a/libitm/configure.tgt
157+++ b/libitm/configure.tgt
158@@ -58,16 +58,23 @@ case "${target_cpu}" in
159
160 arm*) ARCH=arm ;;
161
162- i[3456]86)
163- case " ${CC} ${CFLAGS} " in
164- *" -m64 "*|*" -mx32 "*)
165- ;;
166- *)
167- if test -z "$with_arch"; then
168- XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}"
169- XCFLAGS="${XCFLAGS} -fomit-frame-pointer"
170- fi
171- esac
172+ i[3456]86 | x86_64)
173+ cat > conftestx.c <<EOF
174+#ifndef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
175+#error need -march=i486
176+#endif
177+EOF
178+ if ${CC} ${CFLAGS} -E conftestx.c > /dev/null 2>&1; then
179+ :
180+ else
181+ if test "${target_cpu}" = x86_64; then
182+ XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
183+ else
184+ XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}"
185+ fi
186+ XCFLAGS="${XCFLAGS} -fomit-frame-pointer"
187+ fi
188+ rm -f conftestx.c
189 XCFLAGS="${XCFLAGS} -mrtm"
190 ARCH=x86
191 ;;
192@@ -102,16 +109,6 @@ case "${target_cpu}" in
193 ARCH=sparc
194 ;;
195
196- x86_64)
197- case " ${CC} ${CFLAGS} " in
198- *" -m32 "*)
199- XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
200- XCFLAGS="${XCFLAGS} -fomit-frame-pointer"
201- ;;
202- esac
203- XCFLAGS="${XCFLAGS} -mrtm"
204- ARCH=x86
205- ;;
206 s390|s390x)
207 XCFLAGS="${XCFLAGS} -mzarch -mhtm"
208 ARCH=s390