diff options
Diffstat (limited to 'sys-devel/gcc/files/gcc-10.3.0-clang-bootstrap.patch')
-rw-r--r-- | sys-devel/gcc/files/gcc-10.3.0-clang-bootstrap.patch | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/sys-devel/gcc/files/gcc-10.3.0-clang-bootstrap.patch b/sys-devel/gcc/files/gcc-10.3.0-clang-bootstrap.patch new file mode 100644 index 0000000000..b79f421695 --- /dev/null +++ b/sys-devel/gcc/files/gcc-10.3.0-clang-bootstrap.patch @@ -0,0 +1,142 @@ +Noticed when looking through git logs for Darwin but wasn't +sure until I saw it in macports as well: +https://raw.githubusercontent.com/macports/macports-ports/master/lang/gcc10/files/patch-gcc10-i686-clang-bootstrap-fix.diff +https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=54258e22b0846aaa6bd3265f592feb161eecda75 + +From 54258e22b0846aaa6bd3265f592feb161eecda75 Mon Sep 17 00:00:00 2001 +From: Iain Sandoe <iain@sandoe.co.uk> +Date: Sat, 3 Jul 2021 15:42:16 +0100 +Subject: [PATCH] Darwin, config: Revise host config fragment. + +There were two uses for the Darwin host config fragment: + +The first is to arrange for targets that support mdynamic-no-pic +to be built with that enabled (since it makes a significant +difference to the compiler performance). We can be more specific +in the application of this, since it only applies to 32b hosts +plus powerpc64-darwin9. + +The second was to work around a tool bug where -fno-PIE was not +propagated to the link stage. This second use is redundant, +since the buggy toolchain cannot bootstrap current GCC sources +anyway. + +This makes the host fragment more specific and reduces the number +of toolchains for which it is included which reduces clutter in +configure lines. + +Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> + +config/ChangeLog: + + * mh-darwin: Make this specific to handling the + mdynamic-no-pic case. + +ChangeLog: + + * configure: Regenerate. + * configure.ac: Adjust cases for which it is necessary to + include the Darwin host config fragment. +--- + config/mh-darwin | 57 ++++++++++++++++++++++++++++-------------------- + configure | 2 +- + configure.ac | 2 +- + 3 files changed, 35 insertions(+), 26 deletions(-) + +diff --git a/config/mh-darwin b/config/mh-darwin +index 148b73038c3..fb2bb5ad1d9 100644 +--- a/config/mh-darwin ++++ b/config/mh-darwin +@@ -1,29 +1,38 @@ + # The -mdynamic-no-pic ensures that the compiler executable is built without +-# position-independent-code -- the usual default on Darwin. This fix speeds +-# compiles by 3-5%. Don't add it if the compiler doesn't also support +-# -mno-dynamic-no-pic to undo it. +-DARWIN_MDYNAMIC_NO_PIC := \ +-`case ${host} in i?86-*-darwin* | powerpc-*-darwin*) \ +- $(CC) -S -xc /dev/null -o /dev/null -mno-dynamic-no-pic 2>/dev/null \ +- && echo -mdynamic-no-pic ;; esac` +-DARWIN_GCC_MDYNAMIC_NO_PIC := \ +-`case ${host} in i?86-*-darwin* | powerpc-*-darwin*) \ +- $(CC) -S -xc /dev/null -o /dev/null -mno-dynamic-no-pic 2>/dev/null \ +- || echo -mdynamic-no-pic ;; esac` ++# position-independent-code -- the usual default on Darwin. This speeds compiles ++# by 8-20% (measurements made against GCC-11). ++# However, we cannot add it unless the bootstrap compiler supports ++# -mno-dynamic-no-pic to undo it, since libiberty, at least, needs this. + +-# ld on Darwin versions >= 10.7 defaults to PIE executables. Disable this for +-# gcc components, since it is incompatible with our pch implementation. +-DARWIN_NO_PIE := `case ${host} in *-*-darwin[1][1-9]*) echo -Wl,-no_pie ;; esac;` ++#Â We use Werror, since some versions of clang report unknown command line flags ++# as a warning only. + +-BOOT_CFLAGS += $(DARWIN_MDYNAMIC_NO_PIC) +-BOOT_LDFLAGS += $(DARWIN_NO_PIE) ++# We only need to determine this for the host tool used to build stage1 (or a ++# non-bootstrapped compiler), later stages will be built by GCC which supports ++# the required flags. + +-# Similarly, for cross-compilation. +-STAGE1_CFLAGS += $(DARWIN_MDYNAMIC_NO_PIC) +-STAGE1_LDFLAGS += $(DARWIN_NO_PIE) ++BOOTSTRAP_TOOL_CAN_USE_MDYNAMIC_NO_PIC := $(shell \ ++ $(CC) -S -xc /dev/null -o /dev/null -Werror -mno-dynamic-no-pic 2>/dev/null \ ++ && echo true) + +-# Without -mno-dynamic-no-pic support, add -mdynamic-no-pic just to later +-# stages when we know it is built with gcc. +-STAGE2_CFLAGS += $(DARWIN_GCC_MDYNAMIC_NO_PIC) +-STAGE3_CFLAGS += $(DARWIN_GCC_MDYNAMIC_NO_PIC) +-STAGE4_CFLAGS += $(DARWIN_GCC_MDYNAMIC_NO_PIC) ++@if gcc-bootstrap ++ifeq (${BOOTSTRAP_TOOL_CAN_USE_MDYNAMIC_NO_PIC},true) ++STAGE1_CFLAGS += -mdynamic-no-pic ++else ++STAGE1_CFLAGS += -fPIC ++endif ++# Add -mdynamic-no-pic to later stages when we know it is built with GCC. ++BOOT_CFLAGS += -mdynamic-no-pic ++@endif gcc-bootstrap ++ ++@unless gcc-bootstrap ++ifeq (${BOOTSTRAP_TOOL_CAN_USE_MDYNAMIC_NO_PIC},true) ++# FIXME: we should also enable this for cross and non-bootstrap builds but ++# that needs amendment to libcc1. ++# CFLAGS += -mdynamic-no-pic ++# CXXFLAGS += -mdynamic-no-pic ++else ++CFLAGS += -fPIC ++CXXFLAGS += -fPIC ++endif ++@endunless gcc-bootstrap +diff --git a/configure b/configure +index 732d1870b3d..85ab9915402 100755 +--- a/configure ++++ b/configure +@@ -4074,7 +4074,7 @@ fi + hppa*-*) + host_makefile_frag="config/mh-pa" + ;; +- *-*-darwin*) ++ i?86-*-darwin[89]* | i?86-*-darwin1[0-7]* | powerpc*-*-darwin*) + host_makefile_frag="config/mh-darwin" + ;; + powerpc-*-aix*) +diff --git a/configure.ac b/configure.ac +index 041ee249bac..1df038b04f3 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1318,7 +1318,7 @@ case "${host}" in + hppa*-*) + host_makefile_frag="config/mh-pa" + ;; +- *-*-darwin*) ++ i?86-*-darwin[[89]]* | i?86-*-darwin1[[0-7]]* | powerpc*-*-darwin*) + host_makefile_frag="config/mh-darwin" + ;; + powerpc-*-aix*) +-- +2.27.0 + + |