From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from fossa.birch.relay.mailchannels.net (fossa.birch.relay.mailchannels.net [23.83.209.62]) by sourceware.org (Postfix) with ESMTPS id 76F263858D3C for ; Wed, 8 Dec 2021 04:34:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 76F263858D3C X-Sender-Id: dreamhost|x-authsender|siddhesh@gotplt.org Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 5479C621659; Wed, 8 Dec 2021 04:34:49 +0000 (UTC) Received: from pdx1-sub0-mail-a304.dreamhost.com (unknown [127.0.0.6]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id ADA2F621698; Wed, 8 Dec 2021 04:34:48 +0000 (UTC) X-Sender-Id: dreamhost|x-authsender|siddhesh@gotplt.org Received: from pdx1-sub0-mail-a304.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.100.11.81 (trex/6.4.3); Wed, 08 Dec 2021 04:34:49 +0000 X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|siddhesh@gotplt.org X-MailChannels-Auth-Id: dreamhost X-Inform-Rock: 26f8da191cfcf36e_1638938089220_3889168126 X-MC-Loop-Signature: 1638938089219:1389544729 X-MC-Ingress-Time: 1638938089219 Received: from [192.168.52.116] (unknown [223.185.2.127]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: siddhesh@gotplt.org) by pdx1-sub0-mail-a304.dreamhost.com (Postfix) with ESMTPSA id 4J84855Mm7z4F; Tue, 7 Dec 2021 20:34:45 -0800 (PST) Message-ID: <862bc408-a56c-1954-5265-21867bc5d189@sourceware.org> Date: Wed, 8 Dec 2021 10:04:41 +0530 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.1.0 Subject: Re: [PATCH] Replace --enable-static-pie with --disable-default-pie Content-Language: en-US To: Adhemerval Zanella , libc-alpha@sourceware.org Cc: fweimer@redhat.com References: <20211207082638.1960585-1-siddhesh@sourceware.org> <664ad88e-05a7-3d16-d17a-faa16cd1653f@linaro.org> From: Siddhesh Poyarekar In-Reply-To: <664ad88e-05a7-3d16-d17a-faa16cd1653f@linaro.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-1172.5 required=5.0 tests=BAYES_00, GIT_PATCH_0, JMQ_SPF_NEUTRAL, KAM_DMARC_NONE, KAM_DMARC_STATUS, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NEUTRAL, 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: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Dec 2021 04:34:54 -0000 On 12/8/21 01:43, Adhemerval Zanella wrote: > > > On 07/12/2021 05:26, Siddhesh Poyarekar via Libc-alpha wrote: >> Build glibc programs and tests as PIE by default and enable static-pie >> automatically if the architecture and toolchain supports it. >> >> Also add a new configuration option --disable-default-pie to prevent >> building programs as PIE. >> >> Only the following architectures now have PIE disabled by default >> because they do not work at the moment. hppa, ia64 and csky don't work >> because the linker is unable to handle a pcrel relocation generated from >> PIE objects. The microblaze compiler is currently failing with an ICE. >> GNU hurd tries to enable static-pie, which does not work and hence >> fails. It could be made to work, but I've left the enabling for the >> Hurd maintainer. build-many-glibcs runs clean for all targets now; >> following are the failures before disabling PIE for these targets. I >> also tested x86_64 on Fedora and Ubuntu, to verify that the default >> build as well as --disable-default-pie work as expected with both system >> toolchains. >> >> FAIL: glibcs-microblazeel-linux-gnu check >> ICE >> >> FAIL: glibcs-csky-linux-gnuabiv2-soft check >> build-many-2/build/glibcs/csky-linux-gnuabiv2-soft/glibc/math/test-tgmath2.o: in function `main': >> build-many-2/src/glibc/math/../support/test-driver.c:124:(.text.startup+0x24): relocation truncated to fit: R_CKCORE_PCREL_IMM18BY2 against `.text' >> >> FAIL: glibcs-csky-linux-gnuabiv2 check >> /tmp/ccaEAi1b.s: Assembler messages: >> /tmp/ccaEAi1b.s:409254: Error: pcrel offset for branch to too far (0xfffffffffffc44a1) >> make[3]: *** [../o-iterator.mk:9: build-many-2/build/glibcs/csky-linux-gnuabiv2/glibc/math/test-tgmath3-fma.o] Error 1 >> >> FAIL: glibcs-ia64-linux-gnu build >> build-many-2/build/glibcs/ia64-linux-gnu/glibc/libc.a(dl-support.o): in function `_dl_aux_init': >> build-many-2/src/glibc/elf/dl-support.c:254:(.text+0x42): relocation truncated to fit: GPREL22 against `.text' >> build-many-2/build/glibcs/ia64-linux-gnu/glibc/libc.a(dl-support.o): in function `setup_vdso': >> build-many-2/src/glibc/elf/setup-vdso.h:108:(.text+0x1092): relocation truncated to fit: GPREL22 against `.text' >> >> FAIL: glibcs-microblaze-linux-gnu check >> ICE >> >> FAIL: glibcs-hppa-linux-gnu check >> build-many-2/install/compilers/hppa-linux-gnu/lib/gcc/hppa-glibc-linux-gnu/11.2.1/../../../../hppa-glibc-linux-gnu/bin/ld: build-many-2/build/glibcs/hppa-linux-gnu/glibc/nptl/tst-audit-threads.o(.text+0x22a58): cannot reach 0000004f_retNum6056+0, recompile with -ffunction-sections >> build-many-2/install/compilers/hppa-linux-gnu/lib/gcc/hppa-glibc-linux-gnu/11.2.1/../../../../hppa-glibc-linux-gnu/bin/ld: build-many-2/build/glibcs/hppa-linux-gnu/glibc/nptl/tst-audit-threads.o(.text+0x22a58): cannot handle R_PARISC_PCREL17F for retNum6056 >> build-many-2/install/compilers/hppa-linux-gnu/lib/gcc/hppa-glibc-linux-gnu/11.2.1/../../../../hppa-glibc-linux-gnu/bin/ld: final link failed: bad value >> >> FAIL: glibcs-i686-gnu build >> build-many-2/install/compilers/i686-gnu/lib/gcc/i686-glibc-gnu/11.2.1/../../../../i686-glibc-gnu/bin/ld: cannot find build-many-2/build/glibcs/i686-gnu/glibc/csu/rcrt0.o: No such file or directory >> collect2: error: ld returned 1 exit status >> make[3]: *** [../Rules:269: build-many-2/build/glibcs/i686-gnu/glibc/support/test-run-command] Error 1 >> >> Signed-off-by: Siddhesh Poyarekar >> --- >> INSTALL | 19 ++++---- >> Makeconfig | 21 ++++++--- >> NEWS | 12 +++++ >> config.h.in | 3 ++ >> config.make.in | 3 -- >> configure | 83 +++++++++++++++++++++------------ >> configure.ac | 56 ++++++++++++---------- >> manual/install.texi | 17 ++++--- >> scripts/build-many-glibcs.py | 12 ++--- >> sysdeps/csky/configure | 6 +++ >> sysdeps/csky/configure.ac | 4 ++ >> sysdeps/hppa/configure | 6 +++ >> sysdeps/hppa/configure.ac | 4 ++ >> sysdeps/ia64/configure | 4 ++ >> sysdeps/ia64/configure.ac | 3 ++ >> sysdeps/mach/hurd/configure | 5 ++ >> sysdeps/mach/hurd/configure.ac | 4 ++ >> sysdeps/microblaze/configure | 7 +++ >> sysdeps/microblaze/configure.ac | 6 +++ >> sysdeps/sparc/Makefile | 1 + >> 20 files changed, 186 insertions(+), 90 deletions(-) >> create mode 100755 sysdeps/microblaze/configure >> create mode 100644 sysdeps/microblaze/configure.ac >> >> diff --git a/INSTALL b/INSTALL >> index 02dcf6b1ca..56d2a31dad 100644 >> --- a/INSTALL >> +++ b/INSTALL >> @@ -111,16 +111,15 @@ if 'CFLAGS' is specified it must enable optimization. For example: >> systems support shared libraries; you need ELF support and >> (currently) the GNU linker. >> >> -'--enable-static-pie' >> - Enable static position independent executable (static PIE) support. >> - Static PIE is similar to static executable, but can be loaded at >> - any address without help from a dynamic linker. All static >> - programs as well as static tests are built as static PIE, except >> - for those marked with no-pie. The resulting glibc can be used with >> - the GCC option, -static-pie, which is available with GCC 8 or >> - above, to create static PIE. This option also implies that glibc >> - programs and tests are created as dynamic position independent >> - executables (PIE) by default. >> +'--disable-default-pie' >> + Don't build glibc programs and tests in the testsuite as position > > 'tests in the testsuite' sounds redundat, maybe only 'testsuite'. > >> + independent executables (PIE). By default, glibc programs and tests > > Double space after period. > >> + are created as position independent executables. If the toolchain >> + and architecture supports it, static executable are built as static > > I think it should be 'support' here and I also think it should be 'executables'. > >> + PIE and the resulting glibc can be used with the GCC option, >> + -static-pie, which is available with GCC 8 or above, to create >> + static PIE. PIE is not enabled by default on i686 GNU/Hurd, HPPA, >> + IA64, CSKY and Microblaze targets. > > Maybe not to reference which architecture are not supported? Otherwise we > will need to keep in sync and add a mark it should be updated. Agreed, I'll drop the target mentions. > >> >> '--enable-cet' >> '--enable-cet=permissive' >> diff --git a/Makeconfig b/Makeconfig >> index 3fa2f13003..775bf12b65 100644 >> --- a/Makeconfig >> +++ b/Makeconfig >> @@ -1,4 +1,5 @@ >> # Copyright (C) 1991-2021 Free Software Foundation, Inc. >> +# Copyright (C) The GNU Toolchain Authors. >> # This file is part of the GNU C Library. >> >> # The GNU C Library is free software; you can redistribute it and/or > > Can we re-license the file? My understanding is that we need to add the GNU Toolchain Authors copyright notice every time there is a non-trivial change; my changes are not assigned to FSF so the notice is necessary. Or did I misunderstand your question? > >> @@ -376,19 +377,24 @@ LDFLAGS.so += $(hashstyle-LDFLAGS) >> LDFLAGS-rtld += $(hashstyle-LDFLAGS) >> endif >> >> -ifeq (yes,$(enable-static-pie)) >> +ifeq (no,$(build-pie-default)) >> +pie-default = $(no-pie-ccflag) >> +else # build-pie-default >> pic-default = -DPIC >> # Compile libc.a and libc_p.a with -fPIE/-fpie for static PIE. >> pie-default = $(pie-ccflag) >> + >> +ifeq (yes,$(enable-static-pie)) >> ifeq (yes,$(have-static-pie)) >> -default-pie-ldflag = -static-pie >> +static-pie-ldflag = -static-pie >> else >> # Static PIE can't have dynamic relocations in read-only segments since >> # static PIE is mapped into memory by kernel. --eh-frame-hdr is needed >> # for PIE to support exception. >> -default-pie-ldflag = -Wl,-pie,--no-dynamic-linker,--eh-frame-hdr,-z,text >> -endif >> -endif >> +static-pie-ldflag = -Wl,-pie,--no-dynamic-linker,--eh-frame-hdr,-z,text >> +endif # have-static-pie >> +endif # enable-static-pie >> +endif # build-pie-default >> >> # If lazy relocations are disabled, add the -z now flag. Use >> # LDFLAGS-lib.so instead of LDFLAGS.so, to avoid adding the flag to >> @@ -444,7 +450,7 @@ endif >> # Command for statically linking programs with the C library. >> ifndef +link-static >> +link-static-before-inputs = -nostdlib -nostartfiles -static \ >> - $(if $($(@F)-no-pie),$(no-pie-ldflag),$(default-pie-ldflag)) \ >> + $(if $($(@F)-no-pie),$(no-pie-ldflag),$(static-pie-ldflag)) \ >> $(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \ >> $(firstword $(CRT-$(@F)) $(csu-objpfx)$(real-static-start-installed-name)) \ >> $(+preinit) $(+prectorT) >> @@ -479,7 +485,7 @@ ifeq (yes,$(build-pie-default)) >> +link-tests-after-inputs = $(link-libc-tests) $(+link-pie-after-libc) >> +link-printers-tests = $(+link-pie-printers-tests) >> else # not build-pie-default >> -+link-before-inputs = -nostdlib -nostartfiles \ >> ++link-before-inputs = -nostdlib -nostartfiles $(no-pie-ldflag) \ >> $(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \ >> $(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \ >> $(firstword $(CRT-$(@F)) $(csu-objpfx)$(start-installed-name)) \ >> @@ -1040,6 +1046,7 @@ PIC-ccflag = -fPIC >> endif >> # This can be changed by a sysdep makefile >> pie-ccflag = -fpie >> +no-pie-ccflag = -fno-pie >> # This one should always stay like this unless there is a very good reason. >> PIE-ccflag = -fPIE >> ifeq (yes,$(build-profile)) >> diff --git a/NEWS b/NEWS >> index f10971b180..f12f3ffde4 100644 >> --- a/NEWS >> +++ b/NEWS >> @@ -68,6 +68,14 @@ Major new features: >> to be used by compilers for optimizing usage of 'memcmp' when its >> return value is only used for its boolean status. >> >> +* All programs and tests in glibc are now built as position independent >> + executables (PIE) by default on architectures that support it. Further, if > > Maybe state that if both architecture and toolchain support it. OK. > >> + static-pie is available in the toolchain and the architecture, it is also >> + enabled and static programs also built as executable. A new option > > Maybe 'are also'? And state that --enable-static-pie is not replaced with > --disable-default-pie. OK, I assume you mean *now* replaced with. FWIW, I have also mentioned below that --enable-static-pie has been removed, so would it be redundant? >> + --disable-default-pie has been added to disable this behavior and get a >> + non-PIE build. Default PIE is not supported on GNU Hurd, HPPA, IA64, CSKY >> + and Microblaze targets. >> + >> Deprecated and removed features, and other changes affecting compatibility: >> >> * The r_version update in the debugger interface makes the glibc binary >> @@ -80,6 +88,10 @@ Deprecated and removed features, and other changes affecting compatibility: >> >> * Intel MPX support (lazy PLT, ld.so profile, and LD_AUDIT) has been removed. >> >> +* The --enable-static-pie option is no longer available. The glibc build >> + configuration script now automatically detects static-pie support in the >> + toolchain and architecture and enables it if available. >> + >> Changes to build and runtime requirements: >> >> [Add changes to build and runtime requirements here] >> diff --git a/config.h.in b/config.h.in >> index 0a6f57b006..acce608373 100644 >> --- a/config.h.in >> +++ b/config.h.in >> @@ -265,6 +265,9 @@ >> /* Build glibc with tunables support. */ >> #define HAVE_TUNABLES 0 >> >> +/* Define if PIE is unsupported. */ >> +#undef PIE_UNSUPPORTED >> + >> /* Define if static PIE is supported. */ >> #undef SUPPORT_STATIC_PIE >> >> diff --git a/config.make.in b/config.make.in >> index cbf59114b0..e8630a8d0c 100644 >> --- a/config.make.in >> +++ b/config.make.in >> @@ -90,9 +90,6 @@ static-nss-crypt = @libc_cv_static_nss_crypt@ >> >> # Configuration options. >> build-shared = @shared@ >> -build-pic-default= @libc_cv_pic_default@ >> -build-pie-default= @libc_cv_pie_default@ >> -cc-pie-default= @libc_cv_cc_pie_default@ >> build-profile = @profile@ >> build-static-nss = @static_nss@ >> cross-compiling = @cross_compiling@ >> diff --git a/configure b/configure >> index 2f9adca064..4dce154938 100755 >> --- a/configure >> +++ b/configure >> @@ -596,9 +596,6 @@ DEFINES >> static_nss >> profile >> libc_cv_multidir >> -libc_cv_pie_default >> -libc_cv_cc_pie_default >> -libc_cv_pic_default >> shared >> static >> ldd_rewrite_script >> @@ -767,7 +764,7 @@ with_nonshared_cflags >> enable_sanity_checks >> enable_shared >> enable_profile >> -enable_static_pie >> +enable_default_pie >> enable_timezone_tools >> enable_hardcoded_path_in_tests >> enable_hidden_plt >> @@ -1423,8 +1420,8 @@ Optional Features: >> in special situations) [default=yes] >> --enable-shared build shared library [default=yes if GNU ld] >> --enable-profile build profiled library [default=no] >> - --enable-static-pie enable static PIE support and use it in the >> - testsuite [default=no] >> + --disable-default-pie Do not build glibc programs and tests in the >> + testsuite as PIE [default=no] >> --disable-timezone-tools >> do not install timezone tools [default=install] >> --enable-hardcoded-path-in-tests >> @@ -3408,11 +3405,11 @@ else >> profile=no >> fi >> >> -# Check whether --enable-static-pie was given. >> -if test "${enable_static_pie+set}" = set; then : >> - enableval=$enable_static_pie; static_pie=$enableval >> +# Check whether --enable-default-pie was given. >> +if test "${enable_default_pie+set}" = set; then : >> + enableval=$enable_default_pie; default_pie=$enableval >> else >> - static_pie=no >> + default_pie=yes >> fi >> >> # Check whether --enable-timezone-tools was given. >> @@ -6959,7 +6956,8 @@ rm -f conftest.* >> fi >> { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_pic_default" >&5 >> $as_echo "$libc_cv_pic_default" >&6; } >> - >> +config_vars="$config_vars >> +build-pic-default = $libc_cv_pic_default" >> >> { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -fPIE is default" >&5 >> $as_echo_n "checking whether -fPIE is default... " >&6; } >> @@ -6979,17 +6977,37 @@ rm -f conftest.* >> fi >> { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_pie_default" >&5 >> $as_echo "$libc_cv_cc_pie_default" >&6; } >> -libc_cv_pie_default=$libc_cv_cc_pie_default >> - >> - >> - >> -# Set the `multidir' variable by grabbing the variable from the compiler. >> -# We do it once and save the result in a generated makefile. >> -libc_cv_multidir=`${CC-cc} $CFLAGS $CPPFLAGS -print-multi-directory` >> - >> +config_vars="$config_vars >> +cc-pie-default = $libc_cv_cc_pie_default" >> >> -if test "$static_pie" = yes; then >> - # Check target support for static PIE >> +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can build programs as PIE" >&5 >> +$as_echo_n "checking if we can build programs as PIE... " >&6; } >> +if test "x$default_pie" != xno; then >> + # Disable build-pie-default if target does not support it. >> + cat confdefs.h - <<_ACEOF >conftest.$ac_ext >> +/* end confdefs.h. */ >> +#ifdef PIE_UNSUPPORTED >> +# error PIE is not supported >> +#endif >> +_ACEOF >> +if ac_fn_c_try_compile "$LINENO"; then : >> + libc_cv_pie_default=yes >> +else >> + libc_cv_pie_default=no >> +fi >> +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext >> +fi >> +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_pie_default" >&5 >> +$as_echo "$libc_cv_pie_default" >&6; } >> +config_vars="$config_vars >> +build-pie-default = $libc_cv_pie_default" >> + >> +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can build static PIE programs" >&5 >> +$as_echo_n "checking if we can build static PIE programs... " >&6; } >> +libc_cv_static_pie=$libc_cv_pie_default >> +if test "x$libc_cv_pie_default" != xno \ >> + -a "$libc_cv_no_dynamic_linker" = yes; then >> + # Enable static-pie if available >> cat confdefs.h - <<_ACEOF >conftest.$ac_ext >> /* end confdefs.h. */ >> #ifndef SUPPORT_STATIC_PIE >> @@ -6997,22 +7015,25 @@ if test "$static_pie" = yes; then >> #endif >> _ACEOF >> if ac_fn_c_try_compile "$LINENO"; then : >> - >> + libc_cv_static_pie=yes >> else >> - as_fn_error $? "the architecture does not support static PIE" "$LINENO" 5 >> + libc_cv_static_pie=no >> fi >> rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext >> - # The linker must support --no-dynamic-linker. >> - if test "$libc_cv_no_dynamic_linker" != yes; then >> - as_fn_error $? "linker support for --no-dynamic-linker needed" "$LINENO" 5 >> - fi >> - # Default to PIE. >> - libc_cv_pie_default=yes >> - $as_echo "#define ENABLE_STATIC_PIE 1" >>confdefs.h >> + if test "$libc_cv_static_pie" = "yes"; then >> + $as_echo "#define ENABLE_STATIC_PIE 1" >>confdefs.h >> >> + fi >> fi >> +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_static_pie" >&5 >> +$as_echo "$libc_cv_static_pie" >&6; } >> config_vars="$config_vars >> -enable-static-pie = $static_pie" >> +enable-static-pie = $libc_cv_static_pie" >> + >> +# Set the `multidir' variable by grabbing the variable from the compiler. >> +# We do it once and save the result in a generated makefile. >> +libc_cv_multidir=`${CC-cc} $CFLAGS $CPPFLAGS -print-multi-directory` >> + >> >> >> >> diff --git a/configure.ac b/configure.ac >> index 7eb4239359..55d3162a4d 100644 >> --- a/configure.ac >> +++ b/configure.ac >> @@ -179,11 +179,11 @@ AC_ARG_ENABLE([profile], >> [build profiled library @<:@default=no@:>@]), >> [profile=$enableval], >> [profile=no]) >> -AC_ARG_ENABLE([static-pie], >> - AS_HELP_STRING([--enable-static-pie], >> - [enable static PIE support and use it in the testsuite @<:@default=no@:>@]), >> - [static_pie=$enableval], >> - [static_pie=no]) >> +AC_ARG_ENABLE([default-pie], >> + AS_HELP_STRING([--disable-default-pie], >> + [Do not build glibc programs and tests in the testsuite as PIE @<:@default=no@:>@]), > > Maybe just 'tests' or 'testsuite'. I'll make it 'testsuite' to be consistent with the above. > >> + [default_pie=$enableval], >> + [default_pie=yes]) >> AC_ARG_ENABLE([timezone-tools], >> AS_HELP_STRING([--disable-timezone-tools], >> [do not install timezone tools @<:@default=install@:>@]), >> @@ -1839,7 +1839,7 @@ if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then >> libc_cv_pic_default=no >> fi >> rm -f conftest.*]) >> -AC_SUBST(libc_cv_pic_default) >> +LIBC_CONFIG_VAR([build-pic-default], [$libc_cv_pic_default]) >> >> AC_CACHE_CHECK([whether -fPIE is default], libc_cv_cc_pie_default, >> [libc_cv_cc_pie_default=yes >> @@ -1852,30 +1852,38 @@ if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then >> libc_cv_cc_pie_default=no >> fi >> rm -f conftest.*]) >> -libc_cv_pie_default=$libc_cv_cc_pie_default >> -AC_SUBST(libc_cv_cc_pie_default) >> -AC_SUBST(libc_cv_pie_default) >> +LIBC_CONFIG_VAR([cc-pie-default], [$libc_cv_cc_pie_default]) >> + >> +AC_MSG_CHECKING(if we can build programs as PIE) >> +if test "x$default_pie" != xno; then >> + # Disable build-pie-default if target does not support it. >> + AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#ifdef PIE_UNSUPPORTED >> +# error PIE is not supported >> +#endif]])], [libc_cv_pie_default=yes], [libc_cv_pie_default=no]) >> +fi >> +AC_MSG_RESULT($libc_cv_pie_default) >> +LIBC_CONFIG_VAR([build-pie-default], [$libc_cv_pie_default]) >> + >> +AC_MSG_CHECKING(if we can build static PIE programs) >> +libc_cv_static_pie=$libc_cv_pie_default >> +if test "x$libc_cv_pie_default" != xno \ >> + -a "$libc_cv_no_dynamic_linker" = yes; then >> + # Enable static-pie if available >> + AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#ifndef SUPPORT_STATIC_PIE >> +# error static PIE is not supported >> +#endif]])], [libc_cv_static_pie=yes], [libc_cv_static_pie=no]) >> + if test "$libc_cv_static_pie" = "yes"; then >> + AC_DEFINE(ENABLE_STATIC_PIE) >> + fi >> +fi >> +AC_MSG_RESULT($libc_cv_static_pie) >> +LIBC_CONFIG_VAR([enable-static-pie], [$libc_cv_static_pie]) >> >> # Set the `multidir' variable by grabbing the variable from the compiler. >> # We do it once and save the result in a generated makefile. >> libc_cv_multidir=`${CC-cc} $CFLAGS $CPPFLAGS -print-multi-directory` >> AC_SUBST(libc_cv_multidir) >> >> -if test "$static_pie" = yes; then >> - # Check target support for static PIE >> - AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#ifndef SUPPORT_STATIC_PIE >> -# error static PIE is not supported >> -#endif]])], , AC_MSG_ERROR([the architecture does not support static PIE])) >> - # The linker must support --no-dynamic-linker. >> - if test "$libc_cv_no_dynamic_linker" != yes; then >> - AC_MSG_ERROR([linker support for --no-dynamic-linker needed]) >> - fi >> - # Default to PIE. >> - libc_cv_pie_default=yes >> - AC_DEFINE(ENABLE_STATIC_PIE) >> -fi >> -LIBC_CONFIG_VAR([enable-static-pie], [$static_pie]) >> - >> AC_SUBST(profile) >> AC_SUBST(static_nss) >> >> diff --git a/manual/install.texi b/manual/install.texi >> index 46f73b538d..dff20fefa1 100644 >> --- a/manual/install.texi >> +++ b/manual/install.texi >> @@ -141,15 +141,14 @@ Don't build shared libraries even if it is possible. Not all systems >> support shared libraries; you need ELF support and (currently) the GNU >> linker. >> >> -@item --enable-static-pie >> -Enable static position independent executable (static PIE) support. >> -Static PIE is similar to static executable, but can be loaded at any >> -address without help from a dynamic linker. All static programs as >> -well as static tests are built as static PIE, except for those marked >> -with no-pie. The resulting glibc can be used with the GCC option, >> --static-pie, which is available with GCC 8 or above, to create static >> -PIE. This option also implies that glibc programs and tests are created >> -as dynamic position independent executables (PIE) by default. >> +@item --disable-default-pie >> +Don't build glibc programs and tests in the testsuite as position independent >> +executables (PIE). By default, glibc programs and tests are created as >> +position independent executables. If the toolchain and architecture supports >> +it, static executable are built as static PIE and the resulting glibc can be >> +used with the GCC option, -static-pie, which is available with GCC 8 or above, >> +to create static PIE. PIE is not enabled by default on i686 GNU/Hurd, HPPA, >> +IA64, CSKY and Microblaze targets. >> >> @item --enable-cet >> @itemx --enable-cet=permissive >> diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py >> index 6ae2172956..89bd06881f 100755 >> --- a/scripts/build-many-glibcs.py >> +++ b/scripts/build-many-glibcs.py >> @@ -437,15 +437,15 @@ class Context(object): >> '--disable-experimental-malloc', >> '--disable-build-nscd', >> '--disable-nscd']}, >> - {'variant': 'static-pie', >> - 'cfg': ['--enable-static-pie']}, >> - {'variant': 'x32-static-pie', >> + {'variant': 'no-pie', >> + 'cfg': ['--disable-default-pie']}, >> + {'variant': 'x32-no-pie', >> 'ccopts': '-mx32', >> - 'cfg': ['--enable-static-pie']}, >> - {'variant': 'static-pie', >> + 'cfg': ['--disable-default-pie']}, >> + {'variant': 'no-pie', >> 'arch': 'i686', >> 'ccopts': '-m32 -march=i686', >> - 'cfg': ['--enable-static-pie']}, >> + 'cfg': ['--disable-default-pie']}, >> {'variant': 'disable-multi-arch', >> 'arch': 'i686', >> 'ccopts': '-m32 -march=i686', >> diff --git a/sysdeps/csky/configure b/sysdeps/csky/configure >> index 19acb084fb..08caa633b1 100644 >> --- a/sysdeps/csky/configure >> +++ b/sysdeps/csky/configure >> @@ -2,3 +2,9 @@ >> # Local configure fragment for sysdeps/csky. >> >> $as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h >> + >> + >> +# PIE builds don't work. >> +$as_echo "#define PIE_UNSUPPORTED 1" >>confdefs.h >> + >> +# work around problem with autoconf and empty lines at the end of files >> diff --git a/sysdeps/csky/configure.ac b/sysdeps/csky/configure.ac >> index 5656b665da..9613c68338 100644 >> --- a/sysdeps/csky/configure.ac >> +++ b/sysdeps/csky/configure.ac >> @@ -2,3 +2,7 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. >> # Local configure fragment for sysdeps/csky. >> >> AC_DEFINE(PI_STATIC_AND_HIDDEN) >> + >> +# PIE builds don't work. >> +AC_DEFINE(PIE_UNSUPPORTED) >> +# work around problem with autoconf and empty lines at the end of files >> diff --git a/sysdeps/hppa/configure b/sysdeps/hppa/configure >> index 2cfe6cbea1..1a0530ef9f 100644 >> --- a/sysdeps/hppa/configure >> +++ b/sysdeps/hppa/configure >> @@ -30,3 +30,9 @@ $as_echo "$libc_cv_asm_line_sep" >&6; } >> cat >>confdefs.h <<_ACEOF >> #define ASM_LINE_SEP $libc_cv_asm_line_sep >> _ACEOF >> + >> + >> +# PIE builds don't work. >> +$as_echo "#define PIE_UNSUPPORTED 1" >>confdefs.h >> + >> +# work around problem with autoconf and empty lines at the end of files >> diff --git a/sysdeps/hppa/configure.ac b/sysdeps/hppa/configure.ac >> index 1ec417b947..3aa5cde7ce 100644 >> --- a/sysdeps/hppa/configure.ac >> +++ b/sysdeps/hppa/configure.ac >> @@ -19,3 +19,7 @@ else >> fi >> rm -f conftest*]) >> AC_DEFINE_UNQUOTED(ASM_LINE_SEP, $libc_cv_asm_line_sep) >> + >> +# PIE builds don't work. >> +AC_DEFINE(PIE_UNSUPPORTED) >> +# work around problem with autoconf and empty lines at the end of files >> diff --git a/sysdeps/ia64/configure b/sysdeps/ia64/configure >> index 1ef70921bc..c13b11d5af 100644 >> --- a/sysdeps/ia64/configure >> +++ b/sysdeps/ia64/configure >> @@ -3,4 +3,8 @@ >> >> $as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h >> >> + >> +# PIE builds don't work. >> +$as_echo "#define PIE_UNSUPPORTED 1" >>confdefs.h >> + >> # work around problem with autoconf and empty lines at the end of files >> diff --git a/sysdeps/ia64/configure.ac b/sysdeps/ia64/configure.ac >> index 3bae9fc5e1..8f16c49d4d 100644 >> --- a/sysdeps/ia64/configure.ac >> +++ b/sysdeps/ia64/configure.ac >> @@ -4,4 +4,7 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. >> dnl It is always possible to access static and hidden symbols in an >> dnl position independent way. >> AC_DEFINE(PI_STATIC_AND_HIDDEN) >> + >> +# PIE builds don't work. >> +AC_DEFINE(PIE_UNSUPPORTED) >> # work around problem with autoconf and empty lines at the end of files >> diff --git a/sysdeps/mach/hurd/configure b/sysdeps/mach/hurd/configure >> index 8d0702ad43..1192a5261d 100644 >> --- a/sysdeps/mach/hurd/configure >> +++ b/sysdeps/mach/hurd/configure >> @@ -49,3 +49,8 @@ fi >> >> # Hurd has libpthread as a separate library. >> pthread_in_libc=no >> + >> +# PIE builds don't work. >> +$as_echo "#define PIE_UNSUPPORTED 1" >>confdefs.h >> + >> +# work around problem with autoconf and empty lines at the end of files >> diff --git a/sysdeps/mach/hurd/configure.ac b/sysdeps/mach/hurd/configure.ac >> index 82d085af33..115d809cec 100644 >> --- a/sysdeps/mach/hurd/configure.ac >> +++ b/sysdeps/mach/hurd/configure.ac >> @@ -29,3 +29,7 @@ fi >> >> # Hurd has libpthread as a separate library. >> pthread_in_libc=no >> + >> +# PIE builds don't work. >> +AC_DEFINE(PIE_UNSUPPORTED) >> +# work around problem with autoconf and empty lines at the end of files >> diff --git a/sysdeps/microblaze/configure b/sysdeps/microblaze/configure >> new file mode 100755 >> index 0000000000..2805a4568d >> --- /dev/null >> +++ b/sysdeps/microblaze/configure >> @@ -0,0 +1,7 @@ >> +# This file is generated from configure.ac by Autoconf. DO NOT EDIT! >> + # Local configure fragment for sysdeps/microblaze. >> + >> +# PIE builds don't work. >> +$as_echo "#define PIE_UNSUPPORTED 1" >>confdefs.h >> + >> +# work around problem with autoconf and empty lines at the end of files >> diff --git a/sysdeps/microblaze/configure.ac b/sysdeps/microblaze/configure.ac >> new file mode 100644 >> index 0000000000..3dce7167db >> --- /dev/null >> +++ b/sysdeps/microblaze/configure.ac >> @@ -0,0 +1,6 @@ >> +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. >> +# Local configure fragment for sysdeps/microblaze. >> + >> +# PIE builds don't work. >> +AC_DEFINE(PIE_UNSUPPORTED) >> +# work around problem with autoconf and empty lines at the end of files >> diff --git a/sysdeps/sparc/Makefile b/sysdeps/sparc/Makefile >> index 1be9a3db2c..12c2c1b085 100644 >> --- a/sysdeps/sparc/Makefile >> +++ b/sysdeps/sparc/Makefile >> @@ -2,6 +2,7 @@ >> long-double-fcts = yes >> >> pie-ccflag = -fPIE >> +no-pie-ccflag = -fno-PIE >> >> ifeq ($(subdir),gmon) >> sysdep_routines += sparc-mcount >> > Thanks, Siddhesh