From 0bb163df97340ec2b9817f552a8cb9d9794fa6f9 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Tue, 8 Apr 2025 14:57:05 +0200 Subject: [PATCH] bootstrap/119680 - fix cross-compiler build with --enable-host-shared 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. PR bootstrap/119680 libbacktrace/ * configure.ac (--enable-host-pie): Handle by setting PIC_FLAG to -fPIE. * configure: Regenerate. --- configure | 16 ++++++++++++---- configure.ac | 7 ++++++- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/configure b/configure index ad1f3a9..6137fd5 100755 --- a/configure +++ b/configure @@ -812,6 +812,7 @@ enable_darwin_at_rpath enable_largefile enable_werror with_system_libunwind +enable_host_pie enable_host_shared ' ac_precious_vars='build_alias @@ -1461,6 +1462,7 @@ Optional Features: rpaths to be added to executables --disable-largefile omit support for large files --disable-werror disable building with -Werror + --enable-host-pie build host code as PIE --enable-host-shared build host code as shared libraries Optional Packages: @@ -11395,7 +11397,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11398 "configure" +#line 11400 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11501,7 +11503,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11504 "configure" +#line 11506 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12190,12 +12192,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/configure.ac b/configure.ac index df23b3d..2267cc5 100644 --- a/configure.ac +++ b/configure.ac @@ -176,11 +176,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) # Test for __sync support.