Hi Marek, > On 16 May 2023, at 16:29, Marek Polacek via Gcc-patches > <gcc-patches@gcc.gnu.org> wrote: > > Ping.
I’m trying this on Darwin (since I have a local patch to do this for modern [darwin20+] versions, which do not allow non-PIE) I think you are missing a hunk to deal with Ada. thanks for the patch Iain > > 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: >> <https://gcc.gnu.org/pipermail/gcc-patches/2022-November/607082.html>. >> 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 >