From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id C57DD3857005 for ; Tue, 16 May 2023 15:29:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C57DD3857005 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1684250946; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=mPO+KC5WHmhzQZElxerG5mnRkP2/Qv3SUKlRi0niud4=; b=ClpFgGmRn+CDt+tCgVZvr1M3DRM65dXrvBltM6v6XANyG+Opstg2N/MHyAvV+Ar9wFTqM7 XFN7vv2/KRl25N0xmIr+CT3EaftOUt/MMpyYR3yd7RbLyc0n0TIdtN6IL5zGUbaTYiyNL8 C6k1voJDSe4dUAUkmVolsesDGGmUbWI= Received: from mail-qv1-f72.google.com (mail-qv1-f72.google.com [209.85.219.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-417-3BKhpF-ONHWtmABttNw2sA-1; Tue, 16 May 2023 11:29:04 -0400 X-MC-Unique: 3BKhpF-ONHWtmABttNw2sA-1 Received: by mail-qv1-f72.google.com with SMTP id 6a1803df08f44-61afc445dd5so83312636d6.3 for ; Tue, 16 May 2023 08:29:04 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684250944; x=1686842944; h=user-agent:in-reply-to:content-disposition:mime-version:references :message-id:subject:to:from:date:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mPO+KC5WHmhzQZElxerG5mnRkP2/Qv3SUKlRi0niud4=; b=ZRMkzse0S+i+60TXEVoF+oBBQoCywFAvXXpOifqZVRNfsLEyasYD0Jc1IbgCjqwFL7 Q3tdRvacA8okgfd2la3O45eD6kR2vHVt6D36gGwiVUje0OChfV0vgCIJN7bOC5h01b5L hceRQL4BMzdfv45wYsSaM1PNmEGmH/OF3Yoo2VJ/0pNZsV8XTYIpmaX94nRD1+FC42Nu 3KqYiI5UjBM+MQ6rL3SmE4uJPWpBu9V7Iv23lYIDs7CP4omEHZEJf6X9xnVlIcgj740X BeVDbUuusNw2p2ARrn8rn9mwT0VKWynxfOYt4MRyElw3ixCzv0LLGruaHbQ6jKUxtXDb +JBg== X-Gm-Message-State: AC+VfDyNpF3TE3KqddPvxsRxg/YJJOLWo1LbLf0DvTKhu57npMzunyp0 6u8oQwkssZQTw+KfN148sj3ofE5V8VkZMUQNVxyLS0ZIoIAMkDo+tQ5U3M74sS6PJPIZvoK6/gy vusetdT8uIXeyz+lf+bGvalNG6DMjAQQlFaukYxEIpNxsaGSXqgZenFwvmHdvXazAA4133Jq/0Z 45 X-Received: by 2002:a05:6214:519e:b0:621:6548:d192 with SMTP id kl30-20020a056214519e00b006216548d192mr26554892qvb.49.1684250943244; Tue, 16 May 2023 08:29:03 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4KW+z5puiutdWbnrCdsrmQk96R+GdVK8pQrteHNm5CNaAoqhURsvc+J+I749OlG3YNgORMeA== X-Received: by 2002:a05:6214:519e:b0:621:6548:d192 with SMTP id kl30-20020a056214519e00b006216548d192mr26554810qvb.49.1684250942388; Tue, 16 May 2023 08:29:02 -0700 (PDT) Received: from redhat.com (2603-7000-9500-34a5-0000-0000-0000-1db4.res6.spectrum.com. [2603:7000:9500:34a5::1db4]) by smtp.gmail.com with ESMTPSA id n2-20020a0c8c02000000b005fdbcab3065sm5669665qvb.72.2023.05.16.08.29.01 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 May 2023 08:29:02 -0700 (PDT) Date: Tue, 16 May 2023 11:29:00 -0400 From: Marek Polacek To: GCC Patches Subject: Re: [PATCH] configure: Implement --enable-host-pie Message-ID: References: <20230509194158.329137-1-polacek@redhat.com> MIME-Version: 1.0 In-Reply-To: <20230509194158.329137-1-polacek@redhat.com> User-Agent: Mutt/2.2.9 (2022-11-12) X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Ping. On Tue, May 09, 2023 at 03:41:58PM -0400, Marek Polacek via Gcc-patches wrote: > [ This is my third attempt to add this configure option. The first > version was approved but it came too late in the development cycle. > The second version was also approved, but I had to revert it: > . > I've fixed the problem (by moving $(PICFLAG) from INTERNAL_CFLAGS to > ALL_COMPILERFLAGS). Another change is that since r13-4536 I no longer > need to touch Makefile.def, so this patch is simplified. ] > > This patch implements the --enable-host-pie configure option which > makes the compiler executables PIE. This can be used to enhance > protection against ROP attacks, and can be viewed as part of a wider > trend to harden binaries. > > It is similar to the option --enable-host-shared, except that --e-h-s > won't add -shared to the linker flags whereas --e-h-p will add -pie. > It is different from --enable-default-pie because that option just > adds an implicit -fPIE/-pie when the compiler is invoked, but the > compiler itself isn't PIE. > > Since r12-5768-gfe7c3ecf, PCH works well with PIE, so there are no PCH > regressions. > > When building the compiler, the build process may use various in-tree > libraries; these need to be built with -fPIE so that it's possible to > use them when building a PIE. For instance, when --with-included-gettext > is in effect, intl object files must be compiled with -fPIE. Similarly, > when building in-tree gmp, isl, mpfr and mpc, they must be compiled with > -fPIE. > > With this patch and --enable-host-pie used to configure gcc: > > $ file gcc/cc1{,plus,obj} gcc/f951 gcc/lto1 gcc/cpp > gcc/cc1: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, with debug_info, not stripped > gcc/cc1plus: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, with debug_info, not stripped > gcc/f951: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, with debug_info, not stripped > gcc/cc1obj: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, with debug_info, not stripped > gcc/lto1: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, with debug_info, not stripped > gcc/cpp: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, with debug_info, not stripped > > I plan to add an option to link with -Wl,-z,now. > > Bootstrapped on x86_64-pc-linux-gnu with --with-included-gettext > --enable-host-pie as well as without --enable-host-pie. Also tested > on a Debian system where the system gcc was configured with > --enable-default-pie. > > ChangeLog: > > * configure.ac (--enable-host-pie): New check. Set PICFLAG after this > check. > * configure: Regenerate. > > c++tools/ChangeLog: > > * Makefile.in: Rename PIEFLAG to PICFLAG. Set LD_PICFLAG. Use it. > Use pic/libiberty.a if PICFLAG is set. > * configure.ac (--enable-default-pie): Set PICFLAG instead of PIEFLAG. > (--enable-host-pie): New check. > * configure: Regenerate. > > fixincludes/ChangeLog: > > * Makefile.in: Set and use PICFLAG and LD_PICFLAG. Use the "pic" > build of libiberty if PICFLAG is set. > * configure.ac: > * configure: Regenerate. > > gcc/ChangeLog: > > * Makefile.in: Set LD_PICFLAG. Use it. Set enable_host_pie. > Remove NO_PIE_CFLAGS and NO_PIE_FLAG. Pass LD_PICFLAG to > ALL_LINKERFLAGS. Use the "pic" build of libiberty if --enable-host-pie. > * configure.ac (--enable-host-shared): Don't set PICFLAG here. > (--enable-host-pie): New check. Set PICFLAG and LD_PICFLAG after this > check. > * configure: Regenerate. > * doc/install.texi: Document --enable-host-pie. > > gcc/d/ChangeLog: > > * Make-lang.in: Remove NO_PIE_CFLAGS. > > intl/ChangeLog: > > * Makefile.in: Use @PICFLAG@ in COMPILE as well. > * configure.ac (--enable-host-shared): Don't set PICFLAG here. > (--enable-host-pie): New check. Set PICFLAG after this check. > * configure: Regenerate. > > libcody/ChangeLog: > > * Makefile.in: Pass LD_PICFLAG to LDFLAGS. > * configure.ac (--enable-host-shared): Don't set PICFLAG here. > (--enable-host-pie): New check. Set PICFLAG and LD_PICFLAG after this > check. > * configure: Regenerate. > > libcpp/ChangeLog: > > * configure.ac (--enable-host-shared): Don't set PICFLAG here. > (--enable-host-pie): New check. Set PICFLAG after this check. > * configure: Regenerate. > > libdecnumber/ChangeLog: > > * configure.ac (--enable-host-shared): Don't set PICFLAG here. > (--enable-host-pie): New check. Set PICFLAG after this check. > * configure: Regenerate. > > libiberty/ChangeLog: > > * configure.ac: Also set shared when enable_host_pie. > * configure: Regenerate. > > zlib/ChangeLog: > > * configure.ac (--enable-host-shared): Don't set PICFLAG here. > (--enable-host-pie): New check. Set PICFLAG after this check. > * configure: Regenerate. > --- > c++tools/Makefile.in | 11 ++++++--- > c++tools/configure | 17 +++++++++++--- > c++tools/configure.ac | 11 +++++++-- > configure | 24 +++++++++++++++++++- > configure.ac | 18 ++++++++++++++- > fixincludes/Makefile.in | 12 ++++++---- > fixincludes/configure | 13 +++++++++++ > fixincludes/configure.ac | 8 +++++++ > gcc/Makefile.in | 32 +++++++++++++++----------- > gcc/configure | 47 +++++++++++++++++++++++++++------------ > gcc/configure.ac | 36 +++++++++++++++++++++--------- > gcc/d/Make-lang.in | 2 +- > gcc/doc/install.texi | 16 +++++++++++-- > intl/Makefile.in | 2 +- > intl/configure | 24 ++++++++++++++++++-- > intl/configure.ac | 19 ++++++++++++++-- > libcody/Makefile.in | 2 +- > libcody/configure | 30 ++++++++++++++++++++++++- > libcody/configure.ac | 26 ++++++++++++++++++++-- > libcpp/configure | 22 +++++++++++++++++- > libcpp/configure.ac | 19 ++++++++++++++-- > libdecnumber/configure | 22 +++++++++++++++++- > libdecnumber/configure.ac | 19 ++++++++++++++-- > libiberty/configure | 4 ++-- > libiberty/configure.ac | 4 ++-- > zlib/configure | 28 +++++++++++++++++++---- > zlib/configure.ac | 21 ++++++++++++++--- > 27 files changed, 409 insertions(+), 80 deletions(-) > > diff --git a/c++tools/Makefile.in b/c++tools/Makefile.in > index 77bda3d56dc..dcb1029e064 100644 > --- a/c++tools/Makefile.in > +++ b/c++tools/Makefile.in > @@ -29,8 +29,9 @@ AUTOCONF := @AUTOCONF@ > AUTOHEADER := @AUTOHEADER@ > CXX := @CXX@ > CXXFLAGS := @CXXFLAGS@ > -PIEFLAG := @PIEFLAG@ > -CXXOPTS := $(CXXFLAGS) $(PIEFLAG) -fno-exceptions -fno-rtti > +PICFLAG := @PICFLAG@ > +LD_PICFLAG := @LD_PICFLAG@ > +CXXOPTS := $(CXXFLAGS) $(PICFLAG) -fno-exceptions -fno-rtti > LDFLAGS := @LDFLAGS@ > exeext := @EXEEXT@ > LIBIBERTY := ../libiberty/libiberty.a > @@ -90,11 +91,15 @@ ifeq (@CXX_AUX_TOOLS@,yes) > > all::g++-mapper-server$(exeext) > > +ifneq ($(PICFLAG),) > +override LIBIBERTY := ../libiberty/pic/libiberty.a > +endif > + > MAPPER.O := server.o resolver.o > CODYLIB = ../libcody/libcody.a > CXXINC += -I$(srcdir)/../libcody -I$(srcdir)/../include -I$(srcdir)/../gcc -I. -I../gcc > g++-mapper-server$(exeext): $(MAPPER.O) $(CODYLIB) > - +$(CXX) $(LDFLAGS) $(PIEFLAG) -o $@ $^ $(LIBIBERTY) $(NETLIBS) > + +$(CXX) $(LDFLAGS) $(PICFLAG) $(LD_PICFLAG) -o $@ $^ $(LIBIBERTY) $(NETLIBS) > > # copy to gcc dir so tests there can run > all::../gcc/g++-mapper-server$(exeext) > diff --git a/c++tools/configure b/c++tools/configure > index 742816e4253..88087009383 100755 > --- a/c++tools/configure > +++ b/c++tools/configure > @@ -627,7 +627,8 @@ get_gcc_base_ver > EGREP > GREP > CXXCPP > -PIEFLAG > +LD_PICFLAG > +PICFLAG > MAINTAINER > CXX_AUX_TOOLS > AUTOHEADER > @@ -700,6 +701,7 @@ enable_c___tools > enable_maintainer_mode > enable_checking > enable_default_pie > +enable_host_pie > with_gcc_major_version_only > ' > ac_precious_vars='build_alias > @@ -1333,6 +1335,7 @@ Optional Features: > only specific categories of checks. Categories are: > yes,no,all,none,release. > --enable-default-pie enable Position Independent Executable as default > + --enable-host-pie build host code as PIE > > Optional Packages: > --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] > @@ -2990,12 +2993,20 @@ fi > # Check whether --enable-default-pie was given. > # Check whether --enable-default-pie was given. > if test "${enable_default_pie+set}" = set; then : > - enableval=$enable_default_pie; PIEFLAG=-fPIE > + enableval=$enable_default_pie; PICFLAG=-fPIE > else > - PIEFLAG= > + PICFLAG= > fi > > > +# Enable --enable-host-pie > +# Check whether --enable-host-pie was given. > +if test "${enable_host_pie+set}" = set; then : > + enableval=$enable_host_pie; PICFLAG=-fPIE; LD_PICFLAG=-pie > +fi > + > + > + > > # Check if O_CLOEXEC is defined by fcntl > > diff --git a/c++tools/configure.ac b/c++tools/configure.ac > index 23e98c8e721..44dfaccbbfa 100644 > --- a/c++tools/configure.ac > +++ b/c++tools/configure.ac > @@ -102,8 +102,15 @@ fi > AC_ARG_ENABLE(default-pie, > [AS_HELP_STRING([--enable-default-pie], > [enable Position Independent Executable as default])], > -[PIEFLAG=-fPIE], [PIEFLAG=]) > -AC_SUBST([PIEFLAG]) > +[PICFLAG=-fPIE], [PICFLAG=]) > + > +# Enable --enable-host-pie > +AC_ARG_ENABLE(host-pie, > +[AS_HELP_STRING([--enable-host-pie], > + [build host code as PIE])], > +[PICFLAG=-fPIE; LD_PICFLAG=-pie], []) > +AC_SUBST(PICFLAG) > +AC_SUBST(LD_PICFLAG) > > # Check if O_CLOEXEC is defined by fcntl > AC_CACHE_CHECK(for O_CLOEXEC, ac_cv_o_cloexec, [ > diff --git a/configure b/configure > index 0494e2fa2bf..f5cf9b84c06 100755 > --- a/configure > +++ b/configure > @@ -687,6 +687,8 @@ extra_host_zlib_configure_flags > extra_host_libiberty_configure_flags > stage1_languages > host_libs_picflag > +PICFLAG > +enable_host_pie > host_shared > extra_linker_plugin_flags > extra_linker_plugin_configure_flags > @@ -831,6 +833,7 @@ enable_lto > enable_linker_plugin_configure_flags > enable_linker_plugin_flags > enable_host_shared > +enable_host_pie > enable_stage1_languages > enable_objc_gc > with_target_bdw_gc > @@ -1559,6 +1562,7 @@ Optional Features: > additional flags for configuring and building linker > plugins [none] > --enable-host-shared build host code as shared libraries > + --enable-host-pie build host code as PIE > --enable-stage1-languages[=all] > choose additional languages to build during stage1. > Mostly useful for compiler development > @@ -8669,11 +8673,29 @@ fi > > > > +# Enable --enable-host-pie. > +# Check whether --enable-host-pie was given. > +if test "${enable_host_pie+set}" = set; then : > + enableval=$enable_host_pie; > +fi > + > + > + > +if test x$host_shared = xyes; then > + PICFLAG=-fPIC > +elif test x$enable_host_pie = xyes; then > + PICFLAG=-fPIE > +else > + PICFLAG= > +fi > + > + > + > # If we are building PIC/PIE host executables, and we are building dependent > # libs (e.g. GMP) in-tree those libs need to be configured to generate PIC > # code. > host_libs_picflag= > -if test "$host_shared" = "yes";then > +if test "$host_shared" = "yes" -o "$enable_host_pie" = "yes"; then > host_libs_picflag='--with-pic' > fi > > diff --git a/configure.ac b/configure.ac > index f5cce5830bc..2a85834f2b6 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -1913,11 +1913,27 @@ AC_ARG_ENABLE(host-shared, > > AC_SUBST(host_shared) > > +# Enable --enable-host-pie. > +AC_ARG_ENABLE(host-pie, > +[AS_HELP_STRING([--enable-host-pie], > + [build host code as PIE])]) > +AC_SUBST(enable_host_pie) > + > +if test x$host_shared = xyes; then > + PICFLAG=-fPIC > +elif test x$enable_host_pie = xyes; then > + PICFLAG=-fPIE > +else > + PICFLAG= > +fi > + > +AC_SUBST(PICFLAG) > + > # If we are building PIC/PIE host executables, and we are building dependent > # libs (e.g. GMP) in-tree those libs need to be configured to generate PIC > # code. > host_libs_picflag= > -if test "$host_shared" = "yes";then > +if test "$host_shared" = "yes" -o "$enable_host_pie" = "yes"; then > host_libs_picflag='--with-pic' > fi > AC_SUBST(host_libs_picflag) > diff --git a/fixincludes/Makefile.in b/fixincludes/Makefile.in > index 1937dcaa32d..e6ce41dba39 100644 > --- a/fixincludes/Makefile.in > +++ b/fixincludes/Makefile.in > @@ -73,7 +73,7 @@ default : all > # Now figure out from those variables how to compile and link. > > .c.o: > - $(CC) -c $(CFLAGS) $(WARN_CFLAGS) $(CPPFLAGS) $(FIXINC_CFLAGS) $< > + $(CC) -c $(CFLAGS) $(PICFLAG) $(WARN_CFLAGS) $(CPPFLAGS) $(FIXINC_CFLAGS) $< > > # The only suffixes we want for implicit rules are .c and .o. > .SUFFIXES: > @@ -87,7 +87,11 @@ default : all > ## > ## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # > > +ifeq ($(PICFLAG),) > LIBIBERTY=../libiberty/libiberty.a > +else > +LIBIBERTY=../libiberty/pic/libiberty.a > +endif > > ALLOBJ = fixincl.o fixtests.o fixfixes.o server.o procopen.o \ > fixlib.o fixopts.o > @@ -107,15 +111,15 @@ oneprocess : full-stamp > twoprocess : test-stamp $(AF) > > full-stamp : $(ALLOBJ) $(LIBIBERTY) > - $(CC) $(CFLAGS) $(LDFLAGS) -o $(FI) $(ALLOBJ) $(LIBIBERTY) > + $(CC) $(CFLAGS) $(PICFLAG) $(LDFLAGS) $(LD_PICFLAG) -o $(FI) $(ALLOBJ) $(LIBIBERTY) > $(STAMP) $@ > > test-stamp : $(TESTOBJ) $(LIBIBERTY) > - $(CC) $(CFLAGS) $(LDFLAGS) -o $(FI) $(TESTOBJ) $(LIBIBERTY) > + $(CC) $(CFLAGS) $(PICFLAG) $(LDFLAGS) $(LD_PICFLAG) -o $(FI) $(TESTOBJ) $(LIBIBERTY) > $(STAMP) $@ > > $(AF): $(FIXOBJ) $(LIBIBERTY) > - $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(FIXOBJ) $(LIBIBERTY) > + $(CC) $(CFLAGS) $(PICFLAG) $(LDFLAGS) $(LD_PICFLAG) -o $@ $(FIXOBJ) $(LIBIBERTY) > > $(ALLOBJ) : $(HDR) > fixincl.o : fixincl.c $(srcdir)/fixincl.x > diff --git a/fixincludes/configure b/fixincludes/configure > index bdcc41f6ddc..f1748ebef74 100755 > --- a/fixincludes/configure > +++ b/fixincludes/configure > @@ -623,6 +623,8 @@ ac_subst_vars='LTLIBOBJS > LIBOBJS > get_gcc_base_ver > MAINT > +LD_PICFLAG > +PICFLAG > TARGET > target_noncanonical > WERROR > @@ -695,6 +697,7 @@ enable_option_checking > enable_werror_always > with_local_prefix > enable_twoprocess > +enable_host_pie > enable_maintainer_mode > with_gcc_major_version_only > ' > @@ -1323,6 +1326,7 @@ Optional Features: > --enable-FEATURE[=ARG] include FEATURE [ARG=yes] > --enable-werror-always enable -Werror despite compiler version > --enable-twoprocess Use a separate process to apply the fixes > + --enable-host-pie build host code as PIE > --enable-maintainer-mode enable make rules and dependencies not useful > (and sometimes confusing) to the casual installer > > @@ -4835,6 +4839,15 @@ $as_echo "#define SEPARATE_FIX_PROC 1" >>confdefs.h > > fi > > +# Enable --enable-host-pie. > +# Check whether --enable-host-pie was given. > +if test "${enable_host_pie+set}" = set; then : > + enableval=$enable_host_pie; PICFLAG=-fPIE; LD_PICFLAG=-pie > +fi > + > + > + > + > case $host in > vax-dec-bsd* ) > > diff --git a/fixincludes/configure.ac b/fixincludes/configure.ac > index ef2227e3c93..4e78511d20f 100644 > --- a/fixincludes/configure.ac > +++ b/fixincludes/configure.ac > @@ -68,6 +68,14 @@ if test $TARGET = twoprocess; then > [Define if testing and fixing are done by separate process]) > fi > > +# Enable --enable-host-pie. > +AC_ARG_ENABLE(host-pie, > +[AS_HELP_STRING([--enable-host-pie], > + [build host code as PIE])], > +[PICFLAG=-fPIE; LD_PICFLAG=-pie], []) > +AC_SUBST(PICFLAG) > +AC_SUBST(LD_PICFLAG) > + > case $host in > vax-dec-bsd* ) > AC_DEFINE(exit, xexit, [Define to xexit if the host system does not support atexit]) > diff --git a/gcc/Makefile.in b/gcc/Makefile.in > index bb63b5c501d..860fd9af81a 100644 > --- a/gcc/Makefile.in > +++ b/gcc/Makefile.in > @@ -158,6 +158,9 @@ LDFLAGS = @LDFLAGS@ > # Should we build position-independent host code? > PICFLAG = @PICFLAG@ > > +# The linker flag for the above. > +LD_PICFLAG = @LD_PICFLAG@ > + > # Flags to determine code coverage. When coverage is disabled, this will > # contain the optimization flags, as you normally want code coverage > # without optimization. > @@ -283,19 +286,19 @@ LINKER = $(CC) > LINKER_FLAGS = $(CFLAGS) > endif > > +enable_host_pie = @enable_host_pie@ > + > # Enable Intel CET on Intel CET enabled host if needed. > CET_HOST_FLAGS = @CET_HOST_FLAGS@ > COMPILER += $(CET_HOST_FLAGS) > > -NO_PIE_CFLAGS = @NO_PIE_CFLAGS@ > -NO_PIE_FLAG = @NO_PIE_FLAG@ > DO_LINK_MUTEX = @DO_LINK_MUTEX@ > > -# We don't want to compile the compilers with -fPIE, it make PCH fail. > -COMPILER += $(NO_PIE_CFLAGS) > +# Maybe compile the compilers with -fPIE or -fPIC. > +COMPILER += $(PICFLAG) > > -# Link with -no-pie since we compile the compiler with -fno-PIE. > -LINKER += $(NO_PIE_FLAG) > +# Link with -pie, or -no-pie, depending on the above. > +LINKER += $(LD_PICFLAG) > > # Like LINKER, but use a mutex for serializing front end links. > ifeq (@DO_LINK_MUTEX@,true) > @@ -1067,7 +1070,7 @@ RTL_SSA_H = $(PRETTY_PRINT_H) insn-config.h splay-tree-utils.h \ > # programs built during a bootstrap. > # autoconf inserts -DCROSS_DIRECTORY_STRUCTURE if we are building a > # cross compiler which does not use the native headers and libraries. > -INTERNAL_CFLAGS = -DIN_GCC $(PICFLAG) @CROSS@ > +INTERNAL_CFLAGS = -DIN_GCC @CROSS@ > > # This is the variable actually used when we compile. If you change this, > # you probably want to update BUILD_CFLAGS in configure.ac > @@ -1085,21 +1088,24 @@ ALL_CXXFLAGS = $(T_CFLAGS) $(CFLAGS-$@) $(CXXFLAGS) $(INTERNAL_CFLAGS) \ > ALL_CPPFLAGS = $(INCLUDES) $(CPPFLAGS) > > # This is the variable to use when using $(COMPILER). > -ALL_COMPILERFLAGS = $(ALL_CXXFLAGS) > +ALL_COMPILERFLAGS = $(ALL_CXXFLAGS) $(PICFLAG) > > # This is the variable to use when using $(LINKER). > -ALL_LINKERFLAGS = $(ALL_CXXFLAGS) > +ALL_LINKERFLAGS = $(ALL_CXXFLAGS) $(LD_PICFLAG) > > # Build and host support libraries. > > -# Use the "pic" build of libiberty if --enable-host-shared, unless we are > -# building for mingw. > +# Use the "pic" build of libiberty if --enable-host-shared or --enable-host-pie, > +# unless we are building for mingw. > LIBIBERTY_PICDIR=$(if $(findstring mingw,$(target)),,pic) > -ifeq ($(enable_host_shared),yes) > +ifneq ($(enable_host_shared)$(enable_host_pie),) > LIBIBERTY = ../libiberty/$(LIBIBERTY_PICDIR)/libiberty.a > -BUILD_LIBIBERTY = $(build_libobjdir)/libiberty/$(LIBIBERTY_PICDIR)/libiberty.a > else > LIBIBERTY = ../libiberty/libiberty.a > +endif > +ifeq ($(enable_host_shared),yes) > +BUILD_LIBIBERTY = $(build_libobjdir)/libiberty/$(LIBIBERTY_PICDIR)/libiberty.a > +else > BUILD_LIBIBERTY = $(build_libobjdir)/libiberty/libiberty.a > endif > > diff --git a/gcc/configure b/gcc/configure > index 191f68581b3..629446ecf3b 100755 > --- a/gcc/configure > +++ b/gcc/configure > @@ -632,10 +632,10 @@ ac_includes_default="\ > ac_subst_vars='LTLIBOBJS > LIBOBJS > CET_HOST_FLAGS > -NO_PIE_FLAG > -NO_PIE_CFLAGS > -enable_default_pie > +LD_PICFLAG > PICFLAG > +enable_default_pie > +enable_host_pie > enable_host_shared > enable_plugin > pluginlibs > @@ -1030,6 +1030,7 @@ enable_link_serialization > enable_version_specific_runtime_libs > enable_plugin > enable_host_shared > +enable_host_pie > enable_libquadmath_support > with_linker_hash_style > with_diagnostics_color > @@ -1792,6 +1793,7 @@ Optional Features: > in a compiler-specific directory > --enable-plugin enable plugin support > --enable-host-shared build host code as shared libraries > + --enable-host-pie build host code as PIE > --disable-libquadmath-support > disable libquadmath support for Fortran > --enable-default-pie enable Position Independent Executable as default > @@ -19850,7 +19852,7 @@ else > lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 > lt_status=$lt_dlunknown > cat > conftest.$ac_ext <<_LT_EOF > -#line 19853 "configure" > +#line 19867 "configure" > #include "confdefs.h" > > #if HAVE_DLFCN_H > @@ -19956,7 +19958,7 @@ else > lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 > lt_status=$lt_dlunknown > cat > conftest.$ac_ext <<_LT_EOF > -#line 19959 "configure" > +#line 19973 "configure" > #include "confdefs.h" > > #if HAVE_DLFCN_H > @@ -32090,13 +32092,17 @@ fi > # Enable --enable-host-shared > # Check whether --enable-host-shared was given. > if test "${enable_host_shared+set}" = set; then : > - enableval=$enable_host_shared; PICFLAG=-fPIC > -else > - PICFLAG= > + enableval=$enable_host_shared; > fi > > > > +# Enable --enable-host-pie > +# Check whether --enable-host-pie was given. > +if test "${enable_host_pie+set}" = set; then : > + enableval=$enable_host_pie; > +fi > + > > > # Check whether --enable-libquadmath-support was given. > @@ -32250,10 +32256,6 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext > fi > { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_c_no_fpie" >&5 > $as_echo "$gcc_cv_c_no_fpie" >&6; } > -if test "$gcc_cv_c_no_fpie" = "yes"; then > - NO_PIE_CFLAGS="-fno-PIE" > -fi > - > > # Check if -no-pie works. > { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -no-pie option" >&5 > @@ -32278,11 +32280,28 @@ rm -f core conftest.err conftest.$ac_objext \ > fi > { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_no_pie" >&5 > $as_echo "$gcc_cv_no_pie" >&6; } > -if test "$gcc_cv_no_pie" = "yes"; then > - NO_PIE_FLAG="-no-pie" > + > +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 > > > + > + > # Enable Intel CET on Intel CET enabled host if jit is enabled. > # Check whether --enable-cet was given. > if test "${enable_cet+set}" = set; then : > diff --git a/gcc/configure.ac b/gcc/configure.ac > index 075424669c9..9c69a55668e 100644 > --- a/gcc/configure.ac > +++ b/gcc/configure.ac > @@ -7418,11 +7418,14 @@ fi > # Enable --enable-host-shared > AC_ARG_ENABLE(host-shared, > [AS_HELP_STRING([--enable-host-shared], > - [build host code as shared libraries])], > -[PICFLAG=-fPIC], [PICFLAG=]) > + [build host code as shared libraries])]) > AC_SUBST(enable_host_shared) > -AC_SUBST(PICFLAG) > > +# Enable --enable-host-pie > +AC_ARG_ENABLE(host-pie, > +[AS_HELP_STRING([--enable-host-pie], > + [build host code as PIE])]) > +AC_SUBST(enable_host_pie) > > AC_ARG_ENABLE(libquadmath-support, > [AS_HELP_STRING([--disable-libquadmath-support], > @@ -7544,10 +7547,6 @@ AC_CACHE_CHECK([for -fno-PIE option], > [gcc_cv_c_no_fpie=yes], > [gcc_cv_c_no_fpie=no]) > CXXFLAGS="$saved_CXXFLAGS"]) > -if test "$gcc_cv_c_no_fpie" = "yes"; then > - NO_PIE_CFLAGS="-fno-PIE" > -fi > -AC_SUBST([NO_PIE_CFLAGS]) > > # Check if -no-pie works. > AC_CACHE_CHECK([for -no-pie option], > @@ -7558,10 +7557,27 @@ AC_CACHE_CHECK([for -no-pie option], > [gcc_cv_no_pie=yes], > [gcc_cv_no_pie=no]) > LDFLAGS="$saved_LDFLAGS"]) > -if test "$gcc_cv_no_pie" = "yes"; then > - NO_PIE_FLAG="-no-pie" > + > +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 > -AC_SUBST([NO_PIE_FLAG]) > + > +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 > + > +AC_SUBST([PICFLAG]) > +AC_SUBST([LD_PICFLAG]) > > # Enable Intel CET on Intel CET enabled host if jit is enabled. > GCC_CET_HOST_FLAGS(CET_HOST_FLAGS) > diff --git a/gcc/d/Make-lang.in b/gcc/d/Make-lang.in > index 1679fb81097..4fbf2096416 100644 > --- a/gcc/d/Make-lang.in > +++ b/gcc/d/Make-lang.in > @@ -64,7 +64,7 @@ ALL_DFLAGS = $(DFLAGS-$@) $(GDCFLAGS) -fversion=IN_GCC $(CHECKING_DFLAGS) \ > $(PICFLAG) $(ALIASING_FLAGS) $(NOEXCEPTION_DFLAGS) $(COVERAGE_FLAGS) \ > $(WARN_DFLAGS) > > -DCOMPILE.base = $(GDC) $(NO_PIE_CFLAGS) -c $(ALL_DFLAGS) -o $@ > +DCOMPILE.base = $(GDC) -c $(ALL_DFLAGS) -o $@ > DCOMPILE = $(DCOMPILE.base) -MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(*F).TPo > DPOSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(*F).TPo $(@D)/$(DEPDIR)/$(*F).Po > DLINKER = $(GDC) $(NO_PIE_FLAG) -lstdc++ > diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi > index fa91ce1953d..2248308dbdf 100644 > --- a/gcc/doc/install.texi > +++ b/gcc/doc/install.texi > @@ -1072,14 +1072,26 @@ code. > > @item --enable-host-shared > Specify that the @emph{host} code should be built into position-independent > -machine code (with -fPIC), allowing it to be used within shared libraries, > -but yielding a slightly slower compiler. > +machine code (with @option{-fPIC}), allowing it to be used within shared > +libraries, but yielding a slightly slower compiler. > > This option is required when building the libgccjit.so library. > > Contrast with @option{--enable-shared}, which affects @emph{target} > libraries. > > +@item --enable-host-pie > +Specify that the @emph{host} executables should be built into > +position-independent executables (with @option{-fPIE} and @option{-pie}), > +yielding a slightly slower compiler (but faster than > +@option{--enable-host-shared}). Position-independent executables are loaded > +at random addresses each time they are executed, therefore provide additional > +protection against Return Oriented Programming (ROP) attacks. > + > +@option{--enable-host-pie}) may be used with @option{--enable-host-shared}), > +in which case @option{-fPIC} is used when compiling, and @option{-pie} when > +linking. > + > @item @anchor{with-gnu-as}--with-gnu-as > Specify that the compiler should assume that the > assembler it finds is the GNU assembler. However, this does not modify > diff --git a/intl/Makefile.in b/intl/Makefile.in > index 409d693c48e..5beebdc152c 100644 > --- a/intl/Makefile.in > +++ b/intl/Makefile.in > @@ -54,7 +54,7 @@ CTAGS = @CTAGS@ > ETAGS = @ETAGS@ > MKID = @MKID@ > > -COMPILE = $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(DEFS-$@) $(INCLUDES) > +COMPILE = $(CC) -c $(CPPFLAGS) $(CFLAGS) @PICFLAG@ $(DEFS) $(DEFS-$@) $(INCLUDES) > > HEADERS = \ > gmo.h \ > diff --git a/intl/configure b/intl/configure > index 03f40487a92..79bb5831a47 100755 > --- a/intl/configure > +++ b/intl/configure > @@ -623,6 +623,8 @@ ac_header_list= > ac_subst_vars='LTLIBOBJS > LIBOBJS > PICFLAG > +enable_host_pie > +enable_host_shared > BISON3_NO > BISON3_YES > INCINTL > @@ -731,6 +733,7 @@ with_libintl_prefix > with_libintl_type > enable_maintainer_mode > enable_host_shared > +enable_host_pie > ' > ac_precious_vars='build_alias > host_alias > @@ -1356,6 +1359,7 @@ Optional Features: > --disable-rpath do not hardcode runtime library paths > --enable-maintainer-mode enable rules only needed by maintainers > --enable-host-shared build host code as shared libraries > + --enable-host-pie build host code as PIE > > Optional Packages: > --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] > @@ -6852,15 +6856,31 @@ fi > > > > +# Enable --enable-host-shared. > # Check whether --enable-host-shared was given. > if test "${enable_host_shared+set}" = set; then : > - enableval=$enable_host_shared; PICFLAG=-fPIC > + enableval=$enable_host_shared; > +fi > + > + > + > +# Enable --enable-host-pie. > +# Check whether --enable-host-pie was given. > +if test "${enable_host_pie+set}" = set; then : > + enableval=$enable_host_pie; > +fi > + > + > + > +if test x$enable_host_shared = xyes; then > + PICFLAG=-fPIC > +elif test x$enable_host_pie = xyes; then > + PICFLAG=-fPIE > else > PICFLAG= > fi > > > - > ac_config_files="$ac_config_files Makefile config.intl" > > cat >confcache <<\_ACEOF > diff --git a/intl/configure.ac b/intl/configure.ac > index 16a740aa230..81aa831f59f 100644 > --- a/intl/configure.ac > +++ b/intl/configure.ac > @@ -83,10 +83,25 @@ fi > AC_SUBST(BISON3_YES) > AC_SUBST(BISON3_NO) > > +# Enable --enable-host-shared. > AC_ARG_ENABLE(host-shared, > [AS_HELP_STRING([--enable-host-shared], > - [build host code as shared libraries])], > -[PICFLAG=-fPIC], [PICFLAG=]) > + [build host code as shared libraries])]) > +AC_SUBST(enable_host_shared) > + > +# Enable --enable-host-pie. > +AC_ARG_ENABLE(host-pie, > +[AS_HELP_STRING([--enable-host-pie], > + [build host code as PIE])]) > +AC_SUBST(enable_host_pie) > + > +if test x$enable_host_shared = xyes; then > + PICFLAG=-fPIC > +elif test x$enable_host_pie = xyes; then > + PICFLAG=-fPIE > +else > + PICFLAG= > +fi > AC_SUBST(PICFLAG) > > AC_CONFIG_FILES(Makefile config.intl) > diff --git a/libcody/Makefile.in b/libcody/Makefile.in > index bb87468cb9a..cb01b0092d8 100644 > --- a/libcody/Makefile.in > +++ b/libcody/Makefile.in > @@ -31,7 +31,7 @@ endif > CXXOPTS += $(filter-out -DHAVE_CONFIG_H,@DEFS@) -include config.h > > # Linker options > -LDFLAGS := @LDFLAGS@ > +LDFLAGS := @LDFLAGS@ @LD_PICFLAG@ > LIBS := @LIBS@ > > # Per-source & per-directory compile flags (warning: recursive) > diff --git a/libcody/configure b/libcody/configure > index da52a5cfca5..0e536c0ccb0 100755 > --- a/libcody/configure > +++ b/libcody/configure > @@ -591,7 +591,10 @@ configure_args > AR > RANLIB > EXCEPTIONS > +LD_PICFLAG > PICFLAG > +enable_host_pie > +enable_host_shared > OBJEXT > EXEEXT > ac_ct_CXX > @@ -653,6 +656,7 @@ enable_maintainer_mode > with_compiler > enable_checking > enable_host_shared > +enable_host_pie > enable_exceptions > ' > ac_precious_vars='build_alias > @@ -1286,6 +1290,7 @@ Optional Features: > yes,no,all,none,release. Flags are: misc,valgrind or > other strings > --enable-host-shared build host code as shared libraries > + --enable-host-pie build host code as PIE > --enable-exceptions enable exceptions & rtti > > Optional Packages: > @@ -2635,11 +2640,34 @@ fi > # Enable --enable-host-shared. > # Check whether --enable-host-shared was given. > if test "${enable_host_shared+set}" = set; then : > - enableval=$enable_host_shared; PICFLAG=-fPIC > + enableval=$enable_host_shared; > +fi > + > + > + > +# Enable --enable-host-pie. > +# Check whether --enable-host-pie was given. > +if test "${enable_host_pie+set}" = set; then : > + enableval=$enable_host_pie; > +fi > + > + > + > +if test x$enable_host_shared = xyes; then > + PICFLAG=-fPIC > +elif test x$enable_host_pie = xyes; then > + PICFLAG=-fPIE > else > PICFLAG= > fi > > +if test x$enable_host_pie = xyes; then > + LD_PICFLAG=-pie > +else > + LD_PICFLAG= > +fi > + > + > > > # Check whether --enable-exceptions was given. > diff --git a/libcody/configure.ac b/libcody/configure.ac > index 960191ecb72..14e8dd4a226 100644 > --- a/libcody/configure.ac > +++ b/libcody/configure.ac > @@ -63,9 +63,31 @@ fi > # Enable --enable-host-shared. > AC_ARG_ENABLE(host-shared, > [AS_HELP_STRING([--enable-host-shared], > - [build host code as shared libraries])], > -[PICFLAG=-fPIC], [PICFLAG=]) > + [build host code as shared libraries])]) > +AC_SUBST(enable_host_shared) > + > +# Enable --enable-host-pie. > +AC_ARG_ENABLE(host-pie, > +[AS_HELP_STRING([--enable-host-pie], > + [build host code as PIE])]) > +AC_SUBST(enable_host_pie) > + > +if test x$enable_host_shared = xyes; then > + PICFLAG=-fPIC > +elif test x$enable_host_pie = xyes; then > + PICFLAG=-fPIE > +else > + PICFLAG= > +fi > + > +if test x$enable_host_pie = xyes; then > + LD_PICFLAG=-pie > +else > + LD_PICFLAG= > +fi > + > AC_SUBST(PICFLAG) > +AC_SUBST(LD_PICFLAG) > > NMS_ENABLE_EXCEPTIONS > > diff --git a/libcpp/configure b/libcpp/configure > index e9937cde330..1389ddab544 100755 > --- a/libcpp/configure > +++ b/libcpp/configure > @@ -625,6 +625,8 @@ ac_includes_default="\ > ac_subst_vars='LTLIBOBJS > CET_HOST_FLAGS > PICFLAG > +enable_host_pie > +enable_host_shared > MAINT > USED_CATALOGS > PACKAGE > @@ -738,6 +740,7 @@ enable_maintainer_mode > enable_checking > enable_canonical_system_headers > enable_host_shared > +enable_host_pie > enable_cet > enable_valgrind_annotations > ' > @@ -1379,6 +1382,7 @@ Optional Features: > --enable-canonical-system-headers > enable or disable system headers canonicalization > --enable-host-shared build host code as shared libraries > + --enable-host-pie build host code as PIE > --enable-cet enable Intel CET in host libraries [default=auto] > --enable-valgrind-annotations > enable valgrind runtime interaction > @@ -7605,7 +7609,23 @@ esac > # Enable --enable-host-shared. > # Check whether --enable-host-shared was given. > if test "${enable_host_shared+set}" = set; then : > - enableval=$enable_host_shared; PICFLAG=-fPIC > + enableval=$enable_host_shared; > +fi > + > + > + > +# Enable --enable-host-pie. > +# Check whether --enable-host-pie was given. > +if test "${enable_host_pie+set}" = set; then : > + enableval=$enable_host_pie; > +fi > + > + > + > +if test x$enable_host_shared = xyes; then > + PICFLAG=-fPIC > +elif test x$enable_host_pie = xyes; then > + PICFLAG=-fPIE > else > PICFLAG= > fi > diff --git a/libcpp/configure.ac b/libcpp/configure.ac > index 89ac99b04bd..b29b4d6acf1 100644 > --- a/libcpp/configure.ac > +++ b/libcpp/configure.ac > @@ -211,8 +211,23 @@ esac > # Enable --enable-host-shared. > AC_ARG_ENABLE(host-shared, > [AS_HELP_STRING([--enable-host-shared], > - [build host code as shared libraries])], > -[PICFLAG=-fPIC], [PICFLAG=]) > + [build host code as shared libraries])]) > +AC_SUBST(enable_host_shared) > + > +# Enable --enable-host-pie. > +AC_ARG_ENABLE(host-pie, > +[AS_HELP_STRING([--enable-host-pie], > + [build host code as PIE])]) > +AC_SUBST(enable_host_pie) > + > +if test x$enable_host_shared = xyes; then > + PICFLAG=-fPIC > +elif test x$enable_host_pie = xyes; then > + PICFLAG=-fPIE > +else > + PICFLAG= > +fi > + > AC_SUBST(PICFLAG) > > # Enable Intel CET on Intel CET enabled host if jit is enabled. > diff --git a/libdecnumber/configure b/libdecnumber/configure > index fb6db05565a..84bc4ffc767 100755 > --- a/libdecnumber/configure > +++ b/libdecnumber/configure > @@ -626,6 +626,8 @@ ac_subst_vars='LTLIBOBJS > LIBOBJS > CET_HOST_FLAGS > PICFLAG > +enable_host_pie > +enable_host_shared > ADDITIONAL_OBJS > enable_decimal_float > target_os > @@ -706,6 +708,7 @@ enable_werror_always > enable_maintainer_mode > enable_decimal_float > enable_host_shared > +enable_host_pie > enable_cet > ' > ac_precious_vars='build_alias > @@ -1338,6 +1341,7 @@ Optional Features: > or 'dpd' choses which decimal floating point format > to use > --enable-host-shared build host code as shared libraries > + --enable-host-pie build host code as PIE > --enable-cet enable Intel CET in host libraries [default=auto] > > Some influential environment variables: > @@ -5186,7 +5190,23 @@ $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h > # Enable --enable-host-shared. > # Check whether --enable-host-shared was given. > if test "${enable_host_shared+set}" = set; then : > - enableval=$enable_host_shared; PICFLAG=-fPIC > + enableval=$enable_host_shared; > +fi > + > + > + > +# Enable --enable-host-pie. > +# Check whether --enable-host-pie was given. > +if test "${enable_host_pie+set}" = set; then : > + enableval=$enable_host_pie; > +fi > + > + > + > +if test x$enable_host_shared = xyes; then > + PICFLAG=-fPIC > +elif test x$enable_host_pie = xyes; then > + PICFLAG=-fPIE > else > PICFLAG= > fi > diff --git a/libdecnumber/configure.ac b/libdecnumber/configure.ac > index aafd06f8a64..30a51ca410b 100644 > --- a/libdecnumber/configure.ac > +++ b/libdecnumber/configure.ac > @@ -100,8 +100,23 @@ AC_C_BIGENDIAN > # Enable --enable-host-shared. > AC_ARG_ENABLE(host-shared, > [AS_HELP_STRING([--enable-host-shared], > - [build host code as shared libraries])], > -[PICFLAG=-fPIC], [PICFLAG=]) > + [build host code as shared libraries])]) > +AC_SUBST(enable_host_shared) > + > +# Enable --enable-host-pie. > +AC_ARG_ENABLE(host-pie, > +[AS_HELP_STRING([--enable-host-pie], > + [build host code as PIE])]) > +AC_SUBST(enable_host_pie) > + > +if test x$enable_host_shared = xyes; then > + PICFLAG=-fPIC > +elif test x$enable_host_pie = xyes; then > + PICFLAG=-fPIE > +else > + PICFLAG= > +fi > + > AC_SUBST(PICFLAG) > > # Enable Intel CET on Intel CET enabled host if jit is enabled. > diff --git a/libiberty/configure b/libiberty/configure > index 860f981fa18..b8a19c42110 100755 > --- a/libiberty/configure > +++ b/libiberty/configure > @@ -5258,8 +5258,8 @@ case "${enable_shared}" in > *) shared=yes ;; > esac > > -# ...unless --enable-host-shared was passed from top-level config: > -if [ "${enable_host_shared}" = "yes" ]; then > +# ...unless --enable-host-{shared,pie} was passed from top-level config: > +if [ "${enable_host_shared}" = "yes" ] || [ "${enable_host_pie}" = "yes" ]; then > shared=yes > fi > > diff --git a/libiberty/configure.ac b/libiberty/configure.ac > index 28d996f9cf7..6747a7b5cff 100644 > --- a/libiberty/configure.ac > +++ b/libiberty/configure.ac > @@ -233,8 +233,8 @@ case "${enable_shared}" in > *) shared=yes ;; > esac > > -# ...unless --enable-host-shared was passed from top-level config: > -if [[ "${enable_host_shared}" = "yes" ]]; then > +# ...unless --enable-host-{shared,pie} was passed from top-level config: > +if [[ "${enable_host_shared}" = "yes" ]] || [[ "${enable_host_pie}" = "yes" ]]; then > shared=yes > fi > > diff --git a/zlib/configure b/zlib/configure > index e35ac6e7e17..77be6c284e3 100755 > --- a/zlib/configure > +++ b/zlib/configure > @@ -635,6 +635,8 @@ am__EXEEXT_TRUE > LTLIBOBJS > LIBOBJS > PICFLAG > +enable_host_pie > +enable_host_shared > TARGET_LIBRARY_FALSE > TARGET_LIBRARY_TRUE > toolexeclibdir > @@ -778,6 +780,7 @@ with_gnu_ld > enable_libtool_lock > with_toolexeclibdir > enable_host_shared > +enable_host_pie > ' > ac_precious_vars='build_alias > host_alias > @@ -1420,6 +1423,7 @@ Optional Features: > optimize for fast installation [default=yes] > --disable-libtool-lock avoid locking (might break parallel builds) > --enable-host-shared build host code as shared libraries > + --enable-host-pie build host code as PIE > > Optional Packages: > --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] > @@ -10759,7 +10763,7 @@ else > lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 > lt_status=$lt_dlunknown > cat > conftest.$ac_ext <<_LT_EOF > -#line 10762 "configure" > +#line 10778 "configure" > #include "confdefs.h" > > #if HAVE_DLFCN_H > @@ -10865,7 +10869,7 @@ else > lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 > lt_status=$lt_dlunknown > cat > conftest.$ac_ext <<_LT_EOF > -#line 10868 "configure" > +#line 10884 "configure" > #include "confdefs.h" > > #if HAVE_DLFCN_H > @@ -11548,15 +11552,31 @@ else > multilib_arg= > fi > > +# Enable --enable-host-shared. > # Check whether --enable-host-shared was given. > if test "${enable_host_shared+set}" = set; then : > - enableval=$enable_host_shared; PICFLAG=-fPIC > + enableval=$enable_host_shared; > +fi > + > + > + > +# Enable --enable-host-pie. > +# Check whether --enable-host-pie was given. > +if test "${enable_host_pie+set}" = set; then : > + enableval=$enable_host_pie; > +fi > + > + > + > +if test x$enable_host_shared = xyes; then > + PICFLAG=-fPIC > +elif test x$enable_host_pie = xyes; then > + PICFLAG=-fPIE > else > PICFLAG= > fi > > > - > ac_config_files="$ac_config_files Makefile" > > cat >confcache <<\_ACEOF > diff --git a/zlib/configure.ac b/zlib/configure.ac > index be1cfe29651..adf7aad4e51 100644 > --- a/zlib/configure.ac > +++ b/zlib/configure.ac > @@ -122,11 +122,26 @@ else > multilib_arg= > fi > > +# Enable --enable-host-shared. > AC_ARG_ENABLE(host-shared, > [AS_HELP_STRING([--enable-host-shared], > - [build host code as shared libraries])], > -[PICFLAG=-fPIC], [PICFLAG=]) > -AC_SUBST(PICFLAG) > + [build host code as shared libraries])]) > +AC_SUBST(enable_host_shared) > + > +# Enable --enable-host-pie. > +AC_ARG_ENABLE(host-pie, > +[AS_HELP_STRING([--enable-host-pie], > + [build host code as PIE])]) > +AC_SUBST(enable_host_pie) > + > +if test x$enable_host_shared = xyes; then > + PICFLAG=-fPIC > +elif test x$enable_host_pie = xyes; then > + PICFLAG=-fPIE > +else > + PICFLAG= > +fi > > +AC_SUBST(PICFLAG) > AC_CONFIG_FILES([Makefile]) > AC_OUTPUT > > base-commit: bbb6cf926f1732559b3a8aaf2796d34e8651c066 > -- > 2.40.1 > Marek