summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan Rossi <nathan@nathanrossi.com>2021-01-19 08:12:51 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2021-01-20 00:41:39 +0000
commitd430f425e1a5725e93833a652e5c6988576f7347 (patch)
tree25b8e0443d2847673c676aa85426f0aa5fba64c4
parente21f0afbb8d88004aa33a181e09bb3e671983bb3 (diff)
downloadopenembedded-core-contrib-d430f425e1a5725e93833a652e5c6988576f7347.tar.gz
openembedded-core-contrib-d430f425e1a5725e93833a652e5c6988576f7347.tar.bz2
openembedded-core-contrib-d430f425e1a5725e93833a652e5c6988576f7347.zip
gcc: Backport patch to resolve i*86 tune configuration overrides
Upstream has merged a change to handle detection of target overrides so that they are only applied as required. Backport this patch from upstream and remove the OE specific patch. Signed-off-by: Nathan Rossi <nathan@nathanrossi.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/recipes-devtools/gcc/gcc-10.2.inc2
-rw-r--r--meta/recipes-devtools/gcc/gcc/0001-lib-Remove-i-86-march-overrides.patch113
-rw-r--r--meta/recipes-devtools/gcc/gcc/0001-libatomic-libgomp-libitc-Fix-bootstrap-PR70454.patch208
3 files changed, 209 insertions, 114 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-10.2.inc b/meta/recipes-devtools/gcc/gcc-10.2.inc
index 1e69c91311..c0cd8b31d5 100644
--- a/meta/recipes-devtools/gcc/gcc-10.2.inc
+++ b/meta/recipes-devtools/gcc/gcc-10.2.inc
@@ -69,7 +69,7 @@ SRC_URI = "\
file://0002-aarch64-Introduce-SLS-mitigation-for-RET-and-BR-inst.patch \
file://0003-aarch64-Mitigate-SLS-for-BLR-instruction.patch \
file://0001-aarch64-Fix-up-__aarch64_cas16_acq_rel-fallback.patch \
- file://0001-lib-Remove-i-86-march-overrides.patch \
+ file://0001-libatomic-libgomp-libitc-Fix-bootstrap-PR70454.patch \
"
SRC_URI[sha256sum] = "b8dd4368bb9c7f0b98188317ee0254dd8cc99d1e3a18d0ff146c855fe16c1d8c"
diff --git a/meta/recipes-devtools/gcc/gcc/0001-lib-Remove-i-86-march-overrides.patch b/meta/recipes-devtools/gcc/gcc/0001-lib-Remove-i-86-march-overrides.patch
deleted file mode 100644
index 3f04e121ba..0000000000
--- a/meta/recipes-devtools/gcc/gcc/0001-lib-Remove-i-86-march-overrides.patch
+++ /dev/null
@@ -1,113 +0,0 @@
-From 3776789cde95916f95deef48acf9532b0ebf91ae Mon Sep 17 00:00:00 2001
-From: Nathan Rossi <nathan@nathanrossi.com>
-Date: Tue, 15 Dec 2020 11:43:36 +1000
-Subject: [PATCH] lib*: Remove i*86 march overrides
-
-OE does not pass the '--with-arch' option to gccs configure, as such
-some gcc-runtime libraries try to override the value of '-march' and
-'-mtune' which OE already provides. This causes conflicts with other
-i*86 instruction/architecture flags (e.g. -msse* and -mfpmath=*).
-Additionally this caused the following libraries to be built with less
-optimized tune configurations.
-
-Upstream suggests that this should be detecting or otherwise checking if
-the target supports the desired functionality before overriding.
-
- https://gcc.gnu.org/legacy-ml/gcc-patches/2016-04/msg01344.html
-
-libatomic also overrides the '-march' specifically for IFUNC objects.
-OE already supplies the correct march flag, so remove setting.
-
-Upstream-Status: Inappropriate [OE Specific]
-Signed-off-by: Nathan Rossi <nathan@nathanrossi.com>
----
- libatomic/Makefile.am | 1 -
- libatomic/Makefile.in | 1 -
- libatomic/configure.tgt | 9 ---------
- libgomp/configure.tgt | 8 --------
- libitm/configure.tgt | 9 ---------
- 5 files changed, 28 deletions(-)
-
-diff --git a/libatomic/Makefile.am b/libatomic/Makefile.am
-index ac1ca64587..5aa16e0699 100644
---- a/libatomic/Makefile.am
-+++ b/libatomic/Makefile.am
-@@ -133,7 +133,6 @@ libatomic_la_LIBADD += $(foreach s,$(SIZES),$(addsuffix _$(s)_1_.lo,$(SIZEOBJS))
- libatomic_la_LIBADD += $(addsuffix _8_2_.lo,$(SIZEOBJS))
- endif
- if ARCH_I386
--IFUNC_OPTIONS = -march=i586
- libatomic_la_LIBADD += $(addsuffix _8_1_.lo,$(SIZEOBJS))
- endif
- if ARCH_X86_64
-diff --git a/libatomic/Makefile.in b/libatomic/Makefile.in
-index 97df2d7ff0..82c511d420 100644
---- a/libatomic/Makefile.in
-+++ b/libatomic/Makefile.in
-@@ -432,7 +432,6 @@ libatomic_la_LIBADD = $(foreach s,$(SIZES),$(addsuffix \
- _$(s)_.lo,$(SIZEOBJS))) $(am__append_1) $(am__append_2) \
- $(am__append_3) $(am__append_4)
- @ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS = -march=armv7-a+fp -DHAVE_KERNEL64
--@ARCH_I386_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS = -march=i586
- @ARCH_X86_64_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS = -mcx16
- libatomic_convenience_la_SOURCES = $(libatomic_la_SOURCES)
- libatomic_convenience_la_LIBADD = $(libatomic_la_LIBADD)
-diff --git a/libatomic/configure.tgt b/libatomic/configure.tgt
-index 5dd0926d20..3cc41773c3 100644
---- a/libatomic/configure.tgt
-+++ b/libatomic/configure.tgt
-@@ -82,15 +82,6 @@ case "${target_cpu}" in
- ;;
-
- 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
-diff --git a/libgomp/configure.tgt b/libgomp/configure.tgt
-index 4790a31e39..46c4c958e6 100644
---- a/libgomp/configure.tgt
-+++ b/libgomp/configure.tgt
-@@ -72,14 +72,6 @@ if test x$enable_linux_futex = xyes; then
- # Note that bare i386 is not included here. We need cmpxchg.
- i[456]86-*-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
-diff --git a/libitm/configure.tgt b/libitm/configure.tgt
-index 04109160e9..3d78ea609d 100644
---- a/libitm/configure.tgt
-+++ b/libitm/configure.tgt
-@@ -59,15 +59,6 @@ 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
- XCFLAGS="${XCFLAGS} -mrtm"
- ARCH=x86
- ;;
diff --git a/meta/recipes-devtools/gcc/gcc/0001-libatomic-libgomp-libitc-Fix-bootstrap-PR70454.patch b/meta/recipes-devtools/gcc/gcc/0001-libatomic-libgomp-libitc-Fix-bootstrap-PR70454.patch
new file mode 100644
index 0000000000..addecb4bd8
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc/0001-libatomic-libgomp-libitc-Fix-bootstrap-PR70454.patch
@@ -0,0 +1,208 @@
+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