[PATCH v2] Replace --enable-static-pie with --disable-default-pie
Adhemerval Zanella
adhemerval.zanella@linaro.org
Fri Dec 10 19:28:10 GMT 2021
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 <siddhesh@sourceware.org>
LGTM, thanks.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
> ---
> 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
>
More information about the Libc-alpha
mailing list