aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.def3
-rw-r--r--Makefile.in29
-rwxr-xr-xconfigure48
-rw-r--r--configure.ac44
4 files changed, 89 insertions, 35 deletions
diff --git a/Makefile.def b/Makefile.def
index 35e994eb77e..9b4a8a2bf7a 100644
--- a/Makefile.def
+++ b/Makefile.def
@@ -47,7 +47,8 @@ host_modules= { module= fixincludes; bootstrap=true;
host_modules= { module= flex; no_check_cross= true; };
host_modules= { module= gas; bootstrap=true; };
host_modules= { module= gcc; bootstrap=true;
- extra_make_flags="$(EXTRA_GCC_FLAGS)"; };
+ extra_make_flags="$(EXTRA_GCC_FLAGS)";
+ extra_configure_flags='@gcc_host_pie@'; };
host_modules= { module= gmp; lib_path=.libs; bootstrap=true;
// Work around in-tree gmp configure bug with missing flex.
extra_configure_flags='--disable-shared LEX="touch lex.yy.c" @host_libs_picflag@';
diff --git a/Makefile.in b/Makefile.in
index b559454cc90..45f09f9308f 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -12021,7 +12021,7 @@ configure-gcc:
$$s/$$module_srcdir/configure \
--srcdir=$${topdir}/$$module_srcdir \
$(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
- --target=${target_alias} \
+ --target=${target_alias} @gcc_host_pie@ \
|| exit 1
@endif gcc
@@ -12056,7 +12056,8 @@ configure-stage1-gcc:
$(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
--target=${target_alias} \
\
- $(STAGE1_CONFIGURE_FLAGS)
+ $(STAGE1_CONFIGURE_FLAGS) \
+ @gcc_host_pie@
@endif gcc-bootstrap
.PHONY: configure-stage2-gcc maybe-configure-stage2-gcc
@@ -12089,7 +12090,8 @@ configure-stage2-gcc:
$(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
--target=${target_alias} \
--with-build-libsubdir=$(HOST_SUBDIR) \
- $(STAGE2_CONFIGURE_FLAGS)
+ $(STAGE2_CONFIGURE_FLAGS) \
+ @gcc_host_pie@
@endif gcc-bootstrap
.PHONY: configure-stage3-gcc maybe-configure-stage3-gcc
@@ -12122,7 +12124,8 @@ configure-stage3-gcc:
$(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
--target=${target_alias} \
--with-build-libsubdir=$(HOST_SUBDIR) \
- $(STAGE3_CONFIGURE_FLAGS)
+ $(STAGE3_CONFIGURE_FLAGS) \
+ @gcc_host_pie@
@endif gcc-bootstrap
.PHONY: configure-stage4-gcc maybe-configure-stage4-gcc
@@ -12155,7 +12158,8 @@ configure-stage4-gcc:
$(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
--target=${target_alias} \
--with-build-libsubdir=$(HOST_SUBDIR) \
- $(STAGE4_CONFIGURE_FLAGS)
+ $(STAGE4_CONFIGURE_FLAGS) \
+ @gcc_host_pie@
@endif gcc-bootstrap
.PHONY: configure-stageprofile-gcc maybe-configure-stageprofile-gcc
@@ -12188,7 +12192,8 @@ configure-stageprofile-gcc:
$(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
--target=${target_alias} \
--with-build-libsubdir=$(HOST_SUBDIR) \
- $(STAGEprofile_CONFIGURE_FLAGS)
+ $(STAGEprofile_CONFIGURE_FLAGS) \
+ @gcc_host_pie@
@endif gcc-bootstrap
.PHONY: configure-stagetrain-gcc maybe-configure-stagetrain-gcc
@@ -12221,7 +12226,8 @@ configure-stagetrain-gcc:
$(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
--target=${target_alias} \
--with-build-libsubdir=$(HOST_SUBDIR) \
- $(STAGEtrain_CONFIGURE_FLAGS)
+ $(STAGEtrain_CONFIGURE_FLAGS) \
+ @gcc_host_pie@
@endif gcc-bootstrap
.PHONY: configure-stagefeedback-gcc maybe-configure-stagefeedback-gcc
@@ -12254,7 +12260,8 @@ configure-stagefeedback-gcc:
$(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
--target=${target_alias} \
--with-build-libsubdir=$(HOST_SUBDIR) \
- $(STAGEfeedback_CONFIGURE_FLAGS)
+ $(STAGEfeedback_CONFIGURE_FLAGS) \
+ @gcc_host_pie@
@endif gcc-bootstrap
.PHONY: configure-stageautoprofile-gcc maybe-configure-stageautoprofile-gcc
@@ -12287,7 +12294,8 @@ configure-stageautoprofile-gcc:
$(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
--target=${target_alias} \
--with-build-libsubdir=$(HOST_SUBDIR) \
- $(STAGEautoprofile_CONFIGURE_FLAGS)
+ $(STAGEautoprofile_CONFIGURE_FLAGS) \
+ @gcc_host_pie@
@endif gcc-bootstrap
.PHONY: configure-stageautofeedback-gcc maybe-configure-stageautofeedback-gcc
@@ -12320,7 +12328,8 @@ configure-stageautofeedback-gcc:
$(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
--target=${target_alias} \
--with-build-libsubdir=$(HOST_SUBDIR) \
- $(STAGEautofeedback_CONFIGURE_FLAGS)
+ $(STAGEautofeedback_CONFIGURE_FLAGS) \
+ @gcc_host_pie@
@endif gcc-bootstrap
diff --git a/configure b/configure
index 57159126f3c..0d3f5c6455d 100755
--- a/configure
+++ b/configure
@@ -689,6 +689,7 @@ stage1_languages
host_libs_picflag
PICFLAG
host_shared
+gcc_host_pie
host_pie
extra_linker_plugin_flags
extra_linker_plugin_configure_flags
@@ -8649,23 +8650,31 @@ fi
-# Enable --enable-host-pie.
-# Checked early to determine whether jit is an 'all' language
+# Handle --enable-host-pie
+# If host PIE executables are the default (or must be forced on) for some host,
+# we must pass that configuration to the gcc directory.
+gcc_host_pie=
# Check whether --enable-host-pie was given.
if test "${enable_host_pie+set}" = set; then :
enableval=$enable_host_pie; host_pie=$enableval
case $host in
- x86_64-*-darwin* | aarch64-*-darwin*)
+ *-*-darwin2*)
if test x$host_pie != xyes ; then
- # PIC is the default, and actually cannot be switched off.
- echo configure.ac: warning: PIC code is required for the configured target, host-shared setting ignored. 1>&2
+ # for Darwin20+ this is required.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: PIE executables are required for the configured host, host-pie setting ignored." >&5
+$as_echo "$as_me: WARNING: PIE executables are required for the configured host, host-pie setting ignored." >&2;}
host_pie=yes
+ gcc_host_pie=--enable-host-pie
fi ;;
*) ;;
esac
else
case $host in
- *-*-darwin2*) host_pie=yes ;;
+ *-*-darwin2*)
+ # Default to PIE (mandatory for aarch64).
+ host_pie=yes
+ gcc_host_pie=--enable-host-pie
+ ;;
*) host_pie=no ;;
esac
fi
@@ -8673,6 +8682,7 @@ fi
+
# Enable --enable-host-shared.
# Checked early to determine whether jit is an 'all' language
# Check whether --enable-host-shared was given.
@@ -8682,21 +8692,24 @@ if test "${enable_host_shared+set}" = set; then :
x86_64-*-darwin* | aarch64-*-darwin*)
if test x$host_shared != xyes ; then
# PIC is the default, and actually cannot be switched off.
- echo configure.ac: warning: PIC code is required for the configured target, host-shared setting ignored. 1>&2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: PIC code is required for the configured host; host-shared setting ignored." >&5
+$as_echo "$as_me: WARNING: PIC code is required for the configured host; host-shared setting ignored." >&2;}
host_shared=yes
fi ;;
*-*-darwin*)
- if test x$host_pie == xyes ; then
- echo configure.ac: warning: PIC code is required for PIE executables. 1>&2
+ if test x$host_pie = xyes -a x$host_shared != xyes ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: PIC code is required for PIE host executables host-shared setting ignored." >&5
+$as_echo "$as_me: WARNING: PIC code is required for PIE host executables host-shared setting ignored." >&2;}
host_shared=yes
fi ;;
*) ;;
esac
else
case $host in
+ # 64B x86_64 and Aarch64 Darwin default to PIC.
x86_64-*-darwin* | aarch64-*-darwin*) host_shared=yes ;;
- # Darwin needs PIC objects to link PIE executables.
- *-*-darwin*) host_shared=host_pie ;;
+ # 32B and powerpc64 Darwin must use PIC to link PIE exes.
+ *-*-darwin*) host_shared=$host_pie ;;
*) host_shared=no;;
esac
fi
@@ -8705,7 +8718,18 @@ fi
if test x$host_shared = xyes; then
- PICFLAG=-fPIC
+ case $host in
+ *-*-darwin*)
+ # Since host shared is the default for 64b Darwin, and also enabled for
+ # host_pie, ensure that we present the PIE flag when host_pie is active.
+ if test x$host_pie = xyes; then
+ PICFLAG=-fPIE
+ fi
+ ;;
+ *)
+ PICFLAG=-fPIC
+ ;;
+ esac
elif test x$host_pie = xyes; then
PICFLAG=-fPIE
else
diff --git a/configure.ac b/configure.ac
index 11b68b7b614..dddab2a56d8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1891,27 +1891,35 @@ AC_ARG_ENABLE(linker-plugin-flags,
extra_linker_plugin_flags=)
AC_SUBST(extra_linker_plugin_flags)
-# Enable --enable-host-pie.
-# Checked early to determine whether jit is an 'all' language
+# Handle --enable-host-pie
+# If host PIE executables are the default (or must be forced on) for some host,
+# we must pass that configuration to the gcc directory.
+gcc_host_pie=
AC_ARG_ENABLE(host-pie,
[AS_HELP_STRING([--enable-host-pie],
[build position independent host executables])],
[host_pie=$enableval
case $host in
- x86_64-*-darwin* | aarch64-*-darwin*)
+ *-*-darwin2*)
if test x$host_pie != xyes ; then
- # PIC is the default, and actually cannot be switched off.
- echo configure.ac: warning: PIC code is required for the configured target, host-shared setting ignored. 1>&2
+ # for Darwin20+ this is required.
+ AC_MSG_WARN([PIE executables are required for the configured host, host-pie setting ignored.])
host_pie=yes
+ gcc_host_pie=--enable-host-pie
fi ;;
*) ;;
esac],
[case $host in
- *-*-darwin2*) host_pie=yes ;;
+ *-*-darwin2*)
+ # Default to PIE (mandatory for aarch64).
+ host_pie=yes
+ gcc_host_pie=--enable-host-pie
+ ;;
*) host_pie=no ;;
esac])
AC_SUBST(host_pie)
+AC_SUBST(gcc_host_pie)
# Enable --enable-host-shared.
# Checked early to determine whether jit is an 'all' language
@@ -1923,27 +1931,39 @@ AC_ARG_ENABLE(host-shared,
x86_64-*-darwin* | aarch64-*-darwin*)
if test x$host_shared != xyes ; then
# PIC is the default, and actually cannot be switched off.
- echo configure.ac: warning: PIC code is required for the configured target, host-shared setting ignored. 1>&2
+ AC_MSG_WARN([PIC code is required for the configured host; host-shared setting ignored.])
host_shared=yes
fi ;;
*-*-darwin*)
- if test x$host_pie == xyes ; then
- echo configure.ac: warning: PIC code is required for PIE executables. 1>&2
+ if test x$host_pie = xyes -a x$host_shared != xyes ; then
+ AC_MSG_WARN([PIC code is required for PIE host executables host-shared setting ignored.])
host_shared=yes
fi ;;
*) ;;
esac],
[case $host in
+ # 64B x86_64 and Aarch64 Darwin default to PIC.
x86_64-*-darwin* | aarch64-*-darwin*) host_shared=yes ;;
- # Darwin needs PIC objects to link PIE executables.
- *-*-darwin*) host_shared=host_pie ;;
+ # 32B and powerpc64 Darwin must use PIC to link PIE exes.
+ *-*-darwin*) host_shared=$host_pie ;;
*) host_shared=no;;
esac])
AC_SUBST(host_shared)
if test x$host_shared = xyes; then
- PICFLAG=-fPIC
+ case $host in
+ *-*-darwin*)
+ # Since host shared is the default for 64b Darwin, and also enabled for
+ # host_pie, ensure that we present the PIE flag when host_pie is active.
+ if test x$host_pie = xyes; then
+ PICFLAG=-fPIE
+ fi
+ ;;
+ *)
+ PICFLAG=-fPIC
+ ;;
+ esac
elif test x$host_pie = xyes; then
PICFLAG=-fPIE
else