diff options
-rw-r--r-- | Makefile.def | 3 | ||||
-rw-r--r-- | Makefile.in | 29 | ||||
-rwxr-xr-x | configure | 48 | ||||
-rw-r--r-- | configure.ac | 44 |
4 files changed, 89 insertions, 35 deletions
diff --git a/Makefile.def b/Makefile.def index 35e994e..9b4a8a2 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 b559454..45f09f9 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 @@ -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 11b68b7..dddab2a 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 |