https://gcc.gnu.org/g:5cf85a2fa38115b3fff2d0d7cd0770bef10f439b

commit r15-4290-g5cf85a2fa38115b3fff2d0d7cd0770bef10f439b
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Sat Oct 12 13:47:45 2024 +0200

    bootstrap: Fix genmatch build where system gcc defaults to -fPIE -pie
    
    Seems our buildbot is unhappy about my latest commit to link genmatch with
    libcommon.a in order to support gcc_diag diagnostics in libcpp.
    
    We have in gcc/configure.ac:
    if test x$enable_host_shared = xyes; then
      PICFLAG=-fPIC
    elif test x$enable_host_pie = xyes; then
      PICFLAG=-fPIE
    elif test x$gcc_cv_c_no_fpie = xyes; then
      PICFLAG=-fno-PIE
    else
      PICFLAG=
    fi
    
    if test x$enable_host_pie = xyes; then
      LD_PICFLAG=-pie
    elif test x$gcc_cv_no_pie = xyes; then
      LD_PICFLAG=-no-pie
    else
      LD_PICFLAG=
    fi
    
    if test x$enable_host_bind_now = xyes; then
      LD_PICFLAG="$LD_PICFLAG -Wl,-z,now"
    fi
    
    Now, for object files linked into cc1, cc1plus, xgcc etc. we carefully
    arrange for them to be compiled with $(PICFLAG) and do the link with
    $(LD_PICFLAG).
    For the generator programs, we don't do anything like that, we simply
    compile their objects without $(PICFLAG) and link without $(LD_PICFLAG).
    It isn't that big deal, the generator programs runs once or a couple of
    times during the build and that is it, we don't ship them and don't
    care much if they are PIE or not.
    Except that after my changes to link in libcommon.a into build/genmatch,
    we now link -fno-PIE compiled objects into a binary which is linked with
    default flags.  Our distro compiler just links a normal executable and
    everything works fine (-fPIE/-pie is added through spec file snippet and
    just added in rpm default flags), but seems the buildbot system gcc
    defaults to -fPIE -pie instead and so building build/genmatch fails.
    
    The following patch is a minimal fix for that, just add -no-pie when
    linking build/genmatch, but don't add -pie.
    
    If we wanted to start building even the build/gen* tools with $(PICFLAG)
    and $(LD_PICFLAG), that would be much larger change.
    
    2024-10-12  Jakub Jelinek  <ja...@redhat.com>
    
            * Makefile.in (LINKER_FOR_BUILD): Append -no-pie if it is in
            $(LD_PICFLAG) when building build/genmatch.

Diff:
---
 gcc/Makefile.in | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 38bdb7667c93..b7735908de7a 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -3145,6 +3145,11 @@ build/genmatch$(build_exeext): BUILD_LIBDEPS += 
$(LIBINTL_DEP) $(LIBICONV_DEP)
 build/genmatch$(build_exeext): BUILD_LIBS += $(LIBINTL) $(LIBICONV)
 endif
 
+# genmatch links in libcommon.a, which could have been compiled with
+# $(PICFLAG) set to -fno-PIE.  Make sure to link genmatch with -no-pie
+# in that case.
+build/genmatch$(build_exeext): LINKER_FOR_BUILD += $(findstring 
-no-pie,$(LD_PICFLAG))
+
 build/genmatch$(build_exeext) : $(BUILD_CPPLIB) \
   build/vec.o build/hash-table.o build/sort.o libcommon.a \
   $(LIBBACKTRACE)

Reply via email to