From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk1-x72a.google.com (mail-qk1-x72a.google.com [IPv6:2607:f8b0:4864:20::72a]) by sourceware.org (Postfix) with ESMTPS id 12507385801D for ; Fri, 10 Dec 2021 19:28:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 12507385801D Received: by mail-qk1-x72a.google.com with SMTP id m186so8729597qkb.4 for ; Fri, 10 Dec 2021 11:28:14 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to :content-transfer-encoding; bh=fP6OalFj+x6dSVHkII4Hz5dCUKsBLftE+Pvc8qxE95A=; b=1C6gUyVnfMUwuZjSlPMKnjDKjbzN/kIOaWQf0/EVVFmGc5HHTZvW6geqFsSmgXPSsZ bURHWv8wqUei7zrO4jGZo1lXOlaAM/vR39DvdYKlfhcj3C0bFwOWcQtJ/g/UHuPc7InY 7nhsqV80tclwYWgBxTzpLoQwscLI369CtKZ4r230OORMh1jZjA+4vpbBqH2rEG6zOmXC Y2sFzbF7R6oqHzLna2VkMwBlid7y9bKLb1KP/OEHV/MRL3tHJUlQCzOPu7iqmxavK5MT PPt60i6ycBR7vrhRHpNFxODDGajQid1ifBtpeFD4zvqeKWxJipf3rNi+odjDrq9DUhot 9fIQ== X-Gm-Message-State: AOAM532IPOEiaBmb/dm4jX5DeCurVjut3fxfNGA9y3NKnGQXdxrLKNll IwiV5FJqHrULOtJAeKF6bmxFMOvRyEeA3w== X-Google-Smtp-Source: ABdhPJwOA7KI2COsDrVrZwdieoxFY8TpTvf6yTe9SMeYWnDRDK8nljGkTzCKmTwzNRA1nVePzajNkg== X-Received: by 2002:a05:620a:4307:: with SMTP id u7mr20343658qko.15.1639164493250; Fri, 10 Dec 2021 11:28:13 -0800 (PST) Received: from ?IPV6:2804:431:c7ca:a776:ce11:d591:8bd5:613f? ([2804:431:c7ca:a776:ce11:d591:8bd5:613f]) by smtp.gmail.com with ESMTPSA id m9sm2258285qtn.73.2021.12.10.11.28.11 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 10 Dec 2021 11:28:12 -0800 (PST) Message-ID: Date: Fri, 10 Dec 2021 16:28:10 -0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.3.2 Subject: Re: [PATCH v2] Replace --enable-static-pie with --disable-default-pie Content-Language: en-US To: Siddhesh Poyarekar , libc-alpha@sourceware.org Cc: fweimer@redhat.com References: <20211207082638.1960585-1-siddhesh@sourceware.org> <20211208063904.1999478-1-siddhesh@sourceware.org> From: Adhemerval Zanella In-Reply-To: <20211208063904.1999478-1-siddhesh@sourceware.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-12.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, 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: Fri, 10 Dec 2021 19:28:19 -0000 On 08/12/2021 03:39, Siddhesh Poyarekar 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, alpha 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. All these targets have default PIE disabled > at the moment and I have left it to the target maintainers to enable PIE > on their targets. > > build-many-glibcs runs clean for all 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. > > Signed-off-by: Siddhesh Poyarekar LGTM, thanks. Reviewed-by: Adhemerval Zanella > --- > Changes from v1: > - Filed bugs for build-many-glibcs failures and mentioned them. > - Updated comments and documentation based on review comments. > > INSTALL | 18 ++++--- > Makeconfig | 21 ++++++--- > NEWS | 13 ++++++ > config.h.in | 3 ++ > config.make.in | 3 -- > configure | 83 +++++++++++++++++++++------------ > configure.ac | 56 ++++++++++++---------- > manual/install.texi | 16 +++---- > scripts/build-many-glibcs.py | 13 +++--- > sysdeps/alpha/configure | 5 ++ > sysdeps/alpha/configure.ac | 4 ++ > sysdeps/csky/configure | 7 +++ > sysdeps/csky/configure.ac | 5 ++ > sysdeps/hppa/configure | 7 +++ > sysdeps/hppa/configure.ac | 5 ++ > sysdeps/ia64/configure | 5 ++ > sysdeps/ia64/configure.ac | 4 ++ > sysdeps/mach/hurd/configure | 6 +++ > sysdeps/mach/hurd/configure.ac | 5 ++ > sysdeps/microblaze/configure | 8 ++++ > sysdeps/microblaze/configure.ac | 7 +++ > sysdeps/sparc/Makefile | 1 + > 22 files changed, 205 insertions(+), 90 deletions(-) > create mode 100755 sysdeps/microblaze/configure > create mode 100644 sysdeps/microblaze/configure.ac > > diff --git a/INSTALL b/INSTALL > index 02dcf6b1ca..d6d93ec9be 100644 > --- a/INSTALL > +++ b/INSTALL > @@ -111,16 +111,14 @@ 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 the testsuite as position > + independent executables (PIE). By default, glibc programs and tests > + are created as position independent executables on targets that > + support it. If the toolchain and architecture support it, static > + executables 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. > > '--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 > @@ -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..f808764de9 100644 > --- a/NEWS > +++ b/NEWS > @@ -68,6 +68,15 @@ 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 the testsuite in glibc are now built as position independent > + executables (PIE) by default on toolchains and architectures that support it. > + Further, if the toolchain and architecture supports it, even static programs > + are built as PIE and the resultant glibc can be used to build static PIE > + executables. A new option --disable-default-pie has been added to disable > + this behavior and get a non-PIE build. This option replaces > + --enable-static-pie, which no longer has any effect on the build > + configuration. > + > Deprecated and removed features, and other changes affecting compatibility: > > * The r_version update in the debugger interface makes the glibc binary > @@ -80,6 +89,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..0d295e2913 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 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..b5f89d0bd5 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 the testsuite as PIE @<:@default=no@:>@]), > + [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..1320ac69b3 100644 > --- a/manual/install.texi > +++ b/manual/install.texi > @@ -141,15 +141,13 @@ 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 the testsuite as position independent > +executables (PIE). By default, glibc programs and tests are created as > +position independent executables on targets that support it. If the toolchain > +and architecture support it, static executables 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. > > @item --enable-cet > @itemx --enable-cet=permissive > diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py > index 6ae2172956..2f0f435166 100755 > --- a/scripts/build-many-glibcs.py > +++ b/scripts/build-many-glibcs.py > @@ -1,6 +1,7 @@ > #!/usr/bin/python3 > # Build many configurations of glibc. > # Copyright (C) 2016-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 > @@ -437,15 +438,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/alpha/configure b/sysdeps/alpha/configure > index 464b596527..3d665d96f2 100644 > --- a/sysdeps/alpha/configure > +++ b/sysdeps/alpha/configure > @@ -5,4 +5,9 @@ > # symbols in a position independent way. > $as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h > > + > +# PIE builds fail on binutils 2.37 and earlier, see: > +# https://sourceware.org/bugzilla/show_bug.cgi?id=28672 > +$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/alpha/configure.ac b/sysdeps/alpha/configure.ac > index 38e52e71ac..8f9a39ed2e 100644 > --- a/sysdeps/alpha/configure.ac > +++ b/sysdeps/alpha/configure.ac > @@ -4,4 +4,8 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. > # With required gcc+binutils, we can always access static and hidden > # symbols in a position independent way. > AC_DEFINE(PI_STATIC_AND_HIDDEN) > + > +# PIE builds fail on binutils 2.37 and earlier, see: > +# https://sourceware.org/bugzilla/show_bug.cgi?id=28672 > +AC_DEFINE(PIE_UNSUPPORTED) > # work around problem with autoconf and empty lines at the end of files > diff --git a/sysdeps/csky/configure b/sysdeps/csky/configure > index 19acb084fb..27464eb707 100644 > --- a/sysdeps/csky/configure > +++ b/sysdeps/csky/configure > @@ -2,3 +2,10 @@ > # Local configure fragment for sysdeps/csky. > > $as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h > + > + > +# PIE builds fail on binutils 2.37 and earlier, see: > +# https://sourceware.org/bugzilla/show_bug.cgi?id=28672 > +$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..8e00824909 100644 > --- a/sysdeps/csky/configure.ac > +++ b/sysdeps/csky/configure.ac > @@ -2,3 +2,8 @@ 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 fail on binutils 2.37 and earlier, see: > +# https://sourceware.org/bugzilla/show_bug.cgi?id=28672 > +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..cf5acf966d 100644 > --- a/sysdeps/hppa/configure > +++ b/sysdeps/hppa/configure > @@ -30,3 +30,10 @@ $as_echo "$libc_cv_asm_line_sep" >&6; } > cat >>confdefs.h <<_ACEOF > #define ASM_LINE_SEP $libc_cv_asm_line_sep > _ACEOF > + > + > +# PIE builds fail on binutils 2.37 and earlier, see: > +# https://sourceware.org/bugzilla/show_bug.cgi?id=28672 > +$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..3e1c35bbd9 100644 > --- a/sysdeps/hppa/configure.ac > +++ b/sysdeps/hppa/configure.ac > @@ -19,3 +19,8 @@ else > fi > rm -f conftest*]) > AC_DEFINE_UNQUOTED(ASM_LINE_SEP, $libc_cv_asm_line_sep) > + > +# PIE builds fail on binutils 2.37 and earlier, see: > +# https://sourceware.org/bugzilla/show_bug.cgi?id=28672 > +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..748cb52601 100644 > --- a/sysdeps/ia64/configure > +++ b/sysdeps/ia64/configure > @@ -3,4 +3,9 @@ > > $as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h > > + > +# PIE builds fail on binutils 2.37 and earlier, see: > +# https://sourceware.org/bugzilla/show_bug.cgi?id=28672 > +$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..8e5fba32c3 100644 > --- a/sysdeps/ia64/configure.ac > +++ b/sysdeps/ia64/configure.ac > @@ -4,4 +4,8 @@ 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 fail on binutils 2.37 and earlier, see: > +# https://sourceware.org/bugzilla/show_bug.cgi?id=28672 > +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..3303e5dff8 100644 > --- a/sysdeps/mach/hurd/configure > +++ b/sysdeps/mach/hurd/configure > @@ -49,3 +49,9 @@ fi > > # Hurd has libpthread as a separate library. > pthread_in_libc=no > + > +# Hurd build needs to be updated to support static pie, see: > +# https://sourceware.org/bugzilla/show_bug.cgi?id=28671 > +$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..022c2eff79 100644 > --- a/sysdeps/mach/hurd/configure.ac > +++ b/sysdeps/mach/hurd/configure.ac > @@ -29,3 +29,8 @@ fi > > # Hurd has libpthread as a separate library. > pthread_in_libc=no > + > +# Hurd build needs to be updated to support static pie, see: > +# https://sourceware.org/bugzilla/show_bug.cgi?id=28671 > +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..e6652562d2 > --- /dev/null > +++ b/sysdeps/microblaze/configure > @@ -0,0 +1,8 @@ > +# This file is generated from configure.ac by Autoconf. DO NOT EDIT! > + # Local configure fragment for sysdeps/microblaze. > + > +# gcc 11.2.1 and earlier crash with an internal compiler error, see: > +# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103613 > +$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..1c58f70a7b > --- /dev/null > +++ b/sysdeps/microblaze/configure.ac > @@ -0,0 +1,7 @@ > +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. > +# Local configure fragment for sysdeps/microblaze. > + > +# gcc 11.2.1 and earlier crash with an internal compiler error, see: > +# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103613 > +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 >