It seems that at least when cross-compiling at least collect2 pulls in objects from libbacktrace.a which is linked via LIBDEPS. But libbacktrace for the host is only built -fPIC with --enable-host-shared but not -fPIE with --enable-host-pie so this fails. The following teaches libbacktrace about --enable-host-pie and handles it similar to libcpp.
This fixes the issues observed from my package cross compiler builds, I'll give this wider testing from package builds (native builds, builts with plugins, thus --enable-host-shared, and without either). OK if there are no issues showing up from this? Thanks, Richard. PR bootstrap/119680 libbacktrace/ * configure.ac (--enable-host-pie): Handle by setting PIC_FLAG to -fPIE. * configure: Regenerate. --- libbacktrace/configure | 16 ++++++++++++---- libbacktrace/configure.ac | 7 ++++++- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/libbacktrace/configure b/libbacktrace/configure index 0ecdd3ec0a3..85be043009a 100755 --- a/libbacktrace/configure +++ b/libbacktrace/configure @@ -814,6 +814,7 @@ enable_largefile enable_cet enable_werror with_system_libunwind +enable_host_pie enable_host_shared ' ac_precious_vars='build_alias @@ -1464,6 +1465,7 @@ Optional Features: --disable-largefile omit support for large files --enable-cet enable Intel CET in target libraries [default=auto] --disable-werror disable building with -Werror + --enable-host-pie build host code as PIE --enable-host-shared build host code as shared libraries --enable-cet enable Intel CET in host libraries [default=auto] @@ -11634,7 +11636,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11637 "configure" +#line 11639 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11740,7 +11742,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11743 "configure" +#line 11745 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12518,12 +12520,18 @@ $as_echo "#define HAVE_GETIPINFO 1" >>confdefs.h fi fi +# Enable --enable-host-pie. +# Check whether --enable-host-pie was given. +if test "${enable_host_pie+set}" = set; then : + enableval=$enable_host_pie; PIC_FLAG=-fPIE +else + PIC_FLAG= +fi + # Enable --enable-host-shared. # Check whether --enable-host-shared was given. if test "${enable_host_shared+set}" = set; then : enableval=$enable_host_shared; PIC_FLAG=-fPIC -else - PIC_FLAG= fi diff --git a/libbacktrace/configure.ac b/libbacktrace/configure.ac index 75b3a7536f1..6549cdeacf4 100644 --- a/libbacktrace/configure.ac +++ b/libbacktrace/configure.ac @@ -175,11 +175,16 @@ else fi fi +# Enable --enable-host-pie. +AC_ARG_ENABLE(host-pie, +[AS_HELP_STRING([--enable-host-pie], + [build host code as PIE])], +[PIC_FLAG=-fPIE], [PIC_FLAG=]) # Enable --enable-host-shared. AC_ARG_ENABLE(host-shared, [AS_HELP_STRING([--enable-host-shared], [build host code as shared libraries])], -[PIC_FLAG=-fPIC], [PIC_FLAG=]) +[PIC_FLAG=-fPIC]) AC_SUBST(PIC_FLAG) # Enable Intel CET on Intel CET enabled host if jit is enabled. -- 2.43.0