aboutsummaryrefslogtreecommitdiff
path: root/config
diff options
context:
space:
mode:
authorIain Sandoe <iain@sandoe.co.uk>2023-08-07 13:07:23 +0200
committerAlan Modra <amodra@gmail.com>2023-08-12 10:24:26 +0930
commit3c4e12ba885df77650038870684396945eae867f (patch)
treefc3b29f5bd31aaf8852f483eafbf4112d90b39ef /config
parent3a712247e2c3fee69e682b2bea336df1b9649e60 (diff)
downloadgdb-3c4e12ba885df77650038870684396945eae867f.zip
gdb-3c4e12ba885df77650038870684396945eae867f.tar.gz
gdb-3c4e12ba885df77650038870684396945eae867f.tar.bz2
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/ * mh-darwin: Make this specific to handling the mdynamic-no-pic case.
Diffstat (limited to 'config')
-rw-r--r--config/mh-darwin57
1 files changed, 33 insertions, 24 deletions
diff --git a/config/mh-darwin b/config/mh-darwin
index 148b730..fb2bb5a 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