From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp002.apm-internet.net (smtp002.apm-internet.net [85.119.248.221]) by sourceware.org (Postfix) with ESMTPS id D924E3858023 for ; Tue, 7 Sep 2021 20:11:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D924E3858023 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=sandoe.co.uk Authentication-Results: sourceware.org; spf=none smtp.mailfrom=sandoe.co.uk Received: (qmail 31175 invoked from network); 7 Sep 2021 20:11:22 -0000 X-APM-Out-ID: 16310454823117 X-APM-Authkey: 257869/1(257869/1) 8 Received: from unknown (HELO ?192.168.1.214?) (81.138.1.83) by smtp002.apm-internet.net with SMTP; 7 Sep 2021 20:11:22 -0000 From: Iain Sandoe Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.21\)) Subject: [PATCH] configure: Avoid unnecessary constraints on executables for $build. Message-Id: <743F3094-16FF-46CB-9564-6BA7B610E3EA@sandoe.co.uk> Date: Tue, 7 Sep 2021 21:11:21 +0100 Cc: Richard Biener , "H.J. Lu" , Richard Sandiford , Rainer Orth To: GCC Patches X-Mailer: Apple Mail (2.3445.104.21) X-Spam-Status: No, score=-15.5 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_COUK, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, KAM_SHORT, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 07 Sep 2021 20:11:29 -0000 Hi Folks, So, looking through the various email threads and the PR, I think that what has happened is : As the PR points out, our existing PCH model does not work if the = compiler executable is PIE - which manifests on platforms like Darwin (which is = PIE by default) or Linux when configured =E2=80=94enable-default-pie. H.J=E2=80=99s original patch forces no-PIE onto the compiler = executables, and because of shared code on $host also to the driver etc. However, the patch also forces no-PIE onto executables that run on $build (e.g. the generators etc) which is not needed (and breaks = bootstrap for at least one case, albeit one not often tested). Marcus, observed that there was no separation in the treatment of $build and $host, and a follow-on patch was applied that made the no-PIE change to $build distinct. However, IMHO, the correct change there would really be to remove the code applying no-PIE to $build (where it is not required). The patch below makes this change and thus fixes the bootstrap = regression. Testing - all supported languages : x86_64, powerpc64le, powerpc64, aarch64 - linux x64_64, powerpc, i686 - darwin aix (nop, since ASLR is not used) solaris, thanks to Rainer (since the machine on the cfarm doesn=E2=80=99t = support PIE). All Linux platforms configured =E2=80=94enable-default-pie (without = which one cannot observe this anyway). crosses and =E2=80=9Ccanadians=E2=80=9D (actually all those here are = $target=3D$host). $build =3D x86_64-linux, $host=3D$target =3D aarch64-linux $build =3D powerpcle-linux $host=3D$target =3D x86_64-linux $build=3D x86_64-darwin, $target =3D powerpc-darwin $build =3D x86_64-darwin $host=3D$target=3Daarch64-darwin20 The seems to be a problem in building the native-crossed libgo, but that is not a result of this patch. Other than this - nothing untoward is = observed and I=E2=80=99ve manually checked that the $build exes are PIE and the = $host ones are not... OK for master, and eventually backports? Iain [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D71934 [2] https://gcc.gnu.org/pipermail/gcc-patches/2015-October/432180.html [3] https://gcc.gnu.org/pipermail/gcc-patches/2021-August/578169.html =E2=80=94=E2=80=94 commit log The executables for GCC's c-family compilers must be built with no-PIE because they use PCH and the current model for this requires that the exe is always lauched at the same address. Since the other language compilers share code with the c-family this constraint is also applied to them. However, the executables that run on $build (generators, and parsers for md and def files) need not have any such constraint; they do not consume PCH files. This change simplifies the configuration and Makefile content by removing the code enforcing no-PIE on these exes. This also fixes a bootstrap issue with some Darwin versions and clang as the bootstrap compiler, where -no-PIE causes the correct relocation model to be switched off leading to invalid user-space code. Signed-off-by: Iain Sandoe gcc/ChangeLog: * Makefile.in: Remove variables related to applying no-PIE to the exes on $build. * configure: Regenerate. * configure.ac: Remove configuration related to applying no-PIE to the exes on $build. --- gcc/Makefile.in | 7 ------- gcc/configure | 18 ++---------------- gcc/configure.ac | 10 ---------- 3 files changed, 2 insertions(+), 33 deletions(-) diff --git a/gcc/Makefile.in b/gcc/Makefile.in index f0c560fe45b..d0c5ca214c9 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -799,13 +799,8 @@ DIR =3D ../gcc # Native compiler for the build machine and its switches. CC_FOR_BUILD =3D @CC_FOR_BUILD@ CXX_FOR_BUILD =3D @CXX_FOR_BUILD@ -NO_PIE_CFLAGS_FOR_BUILD =3D @NO_PIE_CFLAGS_FOR_BUILD@ -NO_PIE_FLAG_FOR_BUILD =3D @NO_PIE_FLAG_FOR_BUILD@ BUILD_CFLAGS=3D @BUILD_CFLAGS@ $(GENERATOR_CFLAGS) -DGENERATOR_FILE BUILD_CXXFLAGS =3D @BUILD_CXXFLAGS@ $(GENERATOR_CFLAGS) = -DGENERATOR_FILE -BUILD_NO_PIE_CFLAGS =3D @BUILD_NO_PIE_CFLAGS@ -BUILD_CFLAGS +=3D $(BUILD_NO_PIE_CFLAGS) -BUILD_CXXFLAGS +=3D $(BUILD_NO_PIE_CFLAGS) =20 # Native compiler that we use. This may be C++ some day. COMPILER_FOR_BUILD =3D $(CXX_FOR_BUILD) @@ -817,8 +812,6 @@ BUILD_LINKERFLAGS =3D $(BUILD_CXXFLAGS) =20 # Native linker and preprocessor flags. For x-fragment overrides. BUILD_LDFLAGS=3D@BUILD_LDFLAGS@ -BUILD_NO_PIE_FLAG =3D @BUILD_NO_PIE_FLAG@ -BUILD_LDFLAGS +=3D $(BUILD_NO_PIE_FLAG) BUILD_CPPFLAGS=3D -I. -I$(@D) -I$(srcdir) -I$(srcdir)/$(@D) \ -I$(srcdir)/../include @INCINTL@ $(CPPINC) $(CPPFLAGS) =20 diff --git a/gcc/configure b/gcc/configure index 500e3f68215..87d7b9c435b 100755 --- a/gcc/configure +++ b/gcc/configure @@ -753,10 +753,6 @@ FGREP SED LIBTOOL collect2 -NO_PIE_FLAG_FOR_BUILD -NO_PIE_CFLAGS_FOR_BUILD -BUILD_NO_PIE_FLAG -BUILD_NO_PIE_CFLAGS STMP_FIXINC BUILD_LDFLAGS BUILD_CXXFLAGS @@ -13336,24 +13332,14 @@ BUILD_CXXFLAGS=3D'$(ALL_CXXFLAGS)' BUILD_LDFLAGS=3D'$(LDFLAGS)' STMP_FIXINC=3Dstmp-fixinc =20 -BUILD_NO_PIE_CFLAGS=3D'$(NO_PIE_CFLAGS)' -BUILD_NO_PIE_FLAG=3D'$(NO_PIE_FLAG)' - # And these apply if build !=3D host, or we are generating coverage = data if test x$build !=3D x$host || test "x$coverage_flags" !=3D x then BUILD_CFLAGS=3D'$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS-$@) = $(CFLAGS_FOR_BUILD)' BUILD_CXXFLAGS=3D'$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS-$@) = $(CXXFLAGS_FOR_BUILD)' BUILD_LDFLAGS=3D'$(LDFLAGS_FOR_BUILD)' - - NO_PIE_CFLAGS_FOR_BUILD=3D${NO_PIE_CFLAGS_FOR_BUILD-${NO_PIE_CFLAGS}}= - NO_PIE_FLAG_FOR_BUILD=3D${NO_PIE_FLAG_FOR_BUILD-${NO_PIE_FLAG}} - BUILD_NO_PIE_CFLAGS=3D'$(NO_PIE_CFLAGS_FOR_BUILD)' - BUILD_NO_PIE_FLAG=3D'$(NO_PIE_FLAG_FOR_BUILD)' fi =20 - - # Expand extra_headers to include complete path. # This substitutes for lots of t-* files. extra_headers_list=3D @@ -19480,7 +19466,7 @@ else lt_dlunknown=3D0; lt_dlno_uscore=3D1; lt_dlneed_uscore=3D2 lt_status=3D$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 19483 "configure" +#line 19469 "configure" #include "confdefs.h" =20 #if HAVE_DLFCN_H @@ -19586,7 +19572,7 @@ else lt_dlunknown=3D0; lt_dlno_uscore=3D1; lt_dlneed_uscore=3D2 lt_status=3D$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 19589 "configure" +#line 19575 "configure" #include "confdefs.h" =20 #if HAVE_DLFCN_H diff --git a/gcc/configure.ac b/gcc/configure.ac index 6f768e02aa4..3ba78aa9dee 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -2473,23 +2473,13 @@ BUILD_CXXFLAGS=3D'$(ALL_CXXFLAGS)' = AC_SUBST(BUILD_CXXFLAGS) BUILD_LDFLAGS=3D'$(LDFLAGS)' AC_SUBST(BUILD_LDFLAGS) STMP_FIXINC=3Dstmp-fixinc AC_SUBST(STMP_FIXINC) =20 -BUILD_NO_PIE_CFLAGS=3D'$(NO_PIE_CFLAGS)' AC_SUBST(BUILD_NO_PIE_CFLAGS) -BUILD_NO_PIE_FLAG=3D'$(NO_PIE_FLAG)' AC_SUBST(BUILD_NO_PIE_FLAG) - # And these apply if build !=3D host, or we are generating coverage = data if test x$build !=3D x$host || test "x$coverage_flags" !=3D x then BUILD_CFLAGS=3D'$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS-$@) = $(CFLAGS_FOR_BUILD)' BUILD_CXXFLAGS=3D'$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS-$@) = $(CXXFLAGS_FOR_BUILD)' BUILD_LDFLAGS=3D'$(LDFLAGS_FOR_BUILD)' - - NO_PIE_CFLAGS_FOR_BUILD=3D${NO_PIE_CFLAGS_FOR_BUILD-${NO_PIE_CFLAGS}}= - NO_PIE_FLAG_FOR_BUILD=3D${NO_PIE_FLAG_FOR_BUILD-${NO_PIE_FLAG}} - BUILD_NO_PIE_CFLAGS=3D'$(NO_PIE_CFLAGS_FOR_BUILD)' - BUILD_NO_PIE_FLAG=3D'$(NO_PIE_FLAG_FOR_BUILD)' fi -AC_SUBST(NO_PIE_CFLAGS_FOR_BUILD) -AC_SUBST(NO_PIE_FLAG_FOR_BUILD) =20 # Expand extra_headers to include complete path. # This substitutes for lots of t-* files. --=20