public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
To: Siddhesh Poyarekar <siddhesh@sourceware.org>, libc-alpha@sourceware.org
Cc: fweimer@redhat.com
Subject: Re: [PATCH] Replace --enable-static-pie with --disable-default-pie
Date: Tue, 7 Dec 2021 17:13:57 -0300	[thread overview]
Message-ID: <664ad88e-05a7-3d16-d17a-faa16cd1653f@linaro.org> (raw)
In-Reply-To: <20211207082638.1960585-1-siddhesh@sourceware.org>



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 <unknown> 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 <siddhesh@sourceware.org>
> ---
>  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.

>  
>  '--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?

> @@ -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.

> +  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.

> +  --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'.

> +	      [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
> 

  parent reply	other threads:[~2021-12-07 20:14 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-07  8:26 Siddhesh Poyarekar
2021-12-07 16:06 ` Florian Weimer
2021-12-07 16:21   ` Siddhesh Poyarekar
2021-12-07 16:30     ` Florian Weimer
2021-12-07 18:52 ` Joseph Myers
2021-12-07 20:13 ` Adhemerval Zanella [this message]
2021-12-08  4:34   ` Siddhesh Poyarekar
2021-12-08  6:39 ` [PATCH v2] " Siddhesh Poyarekar
2021-12-10 17:35   ` Siddhesh Poyarekar
2021-12-10 19:28   ` Adhemerval Zanella
2021-12-13  3:02 ` [COMMITTED] " Siddhesh Poyarekar
2021-12-13 13:22   ` H.J. Lu
2021-12-13 13:41     ` Siddhesh Poyarekar
2021-12-13 13:43       ` H.J. Lu
2021-12-13 14:28   ` Siddhesh Poyarekar
2021-12-13 15:29     ` Siddhesh Poyarekar
2021-12-16 19:26   ` Florian Weimer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=664ad88e-05a7-3d16-d17a-faa16cd1653f@linaro.org \
    --to=adhemerval.zanella@linaro.org \
    --cc=fweimer@redhat.com \
    --cc=libc-alpha@sourceware.org \
    --cc=siddhesh@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).