mirror of
https://github.com/gcc-mirror/gcc.git
synced 2024-11-21 13:40:47 +00:00
configure, Darwin: Ensure overrides to host-pie are passed to gcc configure.
The latest versions of Darwin on the Aarch64 platform mandate PIE executables. On x86_64 it remains optional, but produces tool warnings after Darwin20, so we default to PIE executables there too. All (non-PowerPC) 64b Darwin platforms mandate PIC code and therefore force host_shared on (we issue a diagnostic if the user tries to configure them non-shared). However, this also means we cannot test the host_shared setting independently of the host_pie setting so that the logic for setting PICFLAG must be amended for Darwin. For Darwin versions required to have PIE executables, in the event that the user tries to configure these as --disable-host-pie, we issue a warning and override the setting. These versions must also switch host_pie on even if it is not given in the configure line. To cater for this we pass the current value of host_pie, as determined by top-level configure, to the GCC configure. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> ChangeLog: * Makefile.def: Pass the enable-host-pie value to GCC configure. * Makefile.in: Regenerate. * configure: Regenerate. * configure.ac: Adjust the logic for shared and PIE host flags to ensure that PIE is passed for hosts that require it.
This commit is contained in:
parent
319e6fe960
commit
c1fecabe65
@ -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@';
|
||||
|
29
Makefile.in
29
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
|
||||
|
||||
|
||||
|
48
configure
vendored
48
configure
vendored
@ -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
|
||||
|
44
configure.ac
44
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
|
||||
|
Loading…
Reference in New Issue
Block a user