]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - configure.ac
posix/glob.c: update from gnulib
[thirdparty/glibc.git] / configure.ac
index f41ed6decb71ab0eb7bdf904e1948260d9573f2c..a045f6608e60a314e6011e315f1041a8329ee06d 100644 (file)
@@ -1,12 +1,13 @@
 dnl Process this file with autoconf to produce a configure script.
 dnl Note we do not use AC_PREREQ here!  See aclocal.m4 for what we use instead.
-AC_INIT([GNU C Library], [(see version.h)], [https://sourceware.org/bugzilla/], [glibc])
+AC_INIT([GNU C Library], [(see version.h)], [https://sourceware.org/bugzilla/],
+  [glibc], [https://www.gnu.org/software/glibc/])
 AC_CONFIG_SRCDIR([include/features.h])
 AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_AUX_DIR([scripts])
 
 ACX_PKGVERSION([GNU libc])
-ACX_BUGURL([http://www.gnu.org/software/libc/bugs.html])
+ACX_BUGURL([https://www.gnu.org/software/libc/bugs.html])
 AC_DEFINE_UNQUOTED([PKGVERSION], ["$PKGVERSION"],
                   [Package description])
 AC_DEFINE_UNQUOTED([REPORT_BUGS_TO], ["$REPORT_BUGS_TO"],
@@ -89,7 +90,7 @@ config_vars=
 
 # Check for a --with-gd argument and set libgd-LDFLAGS in config.make.
 AC_ARG_WITH([gd],
-           AC_HELP_STRING([--with-gd=DIR],
+           AS_HELP_STRING([--with-gd=DIR],
                           [find libgd include dir and library with prefix DIR]),
            [dnl
 case "$with_gd" in
@@ -99,7 +100,7 @@ yes|''|no) ;;
 esac
 ])
 AC_ARG_WITH([gd-include],
-           AC_HELP_STRING([--with-gd-include=DIR],
+           AS_HELP_STRING([--with-gd-include=DIR],
                           [find libgd include files in DIR]),
            [dnl
 case "$with_gd_include" in
@@ -108,7 +109,7 @@ case "$with_gd_include" in
 esac
 ])
 AC_ARG_WITH([gd-lib],
-           AC_HELP_STRING([--with-gd-lib=DIR],
+           AS_HELP_STRING([--with-gd-lib=DIR],
                           [find libgd library files in DIR]),
            [dnl
 case "$with_gd_lib" in
@@ -128,18 +129,18 @@ fi
 
 dnl Arguments to specify presence of other packages/features.
 AC_ARG_WITH([binutils],
-           AC_HELP_STRING([--with-binutils=PATH],
+           AS_HELP_STRING([--with-binutils=PATH],
                           [specify location of binutils (as and ld)]),
            [path_binutils=$withval],
            [path_binutils=''])
 AC_ARG_WITH([selinux],
-           AC_HELP_STRING([--with-selinux],
+           AS_HELP_STRING([--with-selinux],
                           [if building with SELinux support]),
            [with_selinux=$withval],
            [with_selinux=auto])
 
 AC_ARG_WITH([headers],
-           AC_HELP_STRING([--with-headers=PATH],
+           AS_HELP_STRING([--with-headers=PATH],
                           [location of system headers to use
                            (for example /usr/src/linux/include)
                            @<:@default=compiler default@:>@]),
@@ -149,57 +150,69 @@ AC_SUBST(sysheaders)
 
 AC_SUBST(use_default_link)
 AC_ARG_WITH([default-link],
-           AC_HELP_STRING([--with-default-link],
+           AS_HELP_STRING([--with-default-link],
                           [do not use explicit linker scripts]),
            [use_default_link=$withval],
-           [use_default_link=default])
+           [use_default_link=no])
+
+dnl Additional build flags injection.
+AC_ARG_WITH([nonshared-cflags],
+           AS_HELP_STRING([--with-nonshared-cflags=CFLAGS],
+                          [build nonshared libraries with additional CFLAGS]),
+           [extra_nonshared_cflags=$withval],
+           [extra_nonshared_cflags=])
+AC_SUBST(extra_nonshared_cflags)
+AC_ARG_WITH([rtld-early-cflags],
+           AS_HELP_STRING([--with-rtld-early-cflags=CFLAGS],
+                          [build early initialization with additional CFLAGS]),
+           [rtld_early_cflags=$withval],
+           [rtld_early_cflags=])
+AC_SUBST(rtld_early_cflags)
+
+AC_ARG_WITH([timeoutfactor],
+           AS_HELP_STRING([--with-timeoutfactor=NUM],
+                          [specify an integer to scale the timeout]),
+           [timeoutfactor=$withval],
+           [timeoutfactor=1])
+AC_DEFINE_UNQUOTED(TIMEOUTFACTOR, $timeoutfactor)
 
 AC_ARG_ENABLE([sanity-checks],
-             AC_HELP_STRING([--disable-sanity-checks],
+             AS_HELP_STRING([--disable-sanity-checks],
                             [really do not use threads (should not be used except in special situations) @<:@default=yes@:>@]),
              [enable_sanity=$enableval],
              [enable_sanity=yes])
 
 AC_ARG_ENABLE([shared],
-             AC_HELP_STRING([--enable-shared],
+             AS_HELP_STRING([--enable-shared],
                             [build shared library @<:@default=yes if GNU ld@:>@]),
              [shared=$enableval],
              [shared=yes])
 AC_ARG_ENABLE([profile],
-             AC_HELP_STRING([--enable-profile],
+             AS_HELP_STRING([--enable-profile],
                             [build profiled library @<:@default=no@:>@]),
              [profile=$enableval],
              [profile=no])
-AC_ARG_ENABLE([static-pie],
-             AC_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],
-             AC_HELP_STRING([--disable-timezone-tools],
+             AS_HELP_STRING([--disable-timezone-tools],
                             [do not install timezone tools @<:@default=install@:>@]),
              [enable_timezone_tools=$enableval],
              [enable_timezone_tools=yes])
 AC_SUBST(enable_timezone_tools)
 
 AC_ARG_ENABLE([hardcoded-path-in-tests],
-             AC_HELP_STRING([--enable-hardcoded-path-in-tests],
+             AS_HELP_STRING([--enable-hardcoded-path-in-tests],
                             [hardcode newly built glibc path in tests @<:@default=no@:>@]),
              [hardcoded_path_in_tests=$enableval],
              [hardcoded_path_in_tests=no])
 AC_SUBST(hardcoded_path_in_tests)
 
-AC_ARG_ENABLE([stackguard-randomization],
-             AC_HELP_STRING([--enable-stackguard-randomization],
-                            [initialize __stack_chk_guard canary with a random number at program start]),
-             [enable_stackguard_randomize=$enableval],
-             [enable_stackguard_randomize=no])
-if test "$enable_stackguard_randomize" = yes; then
-  AC_DEFINE(ENABLE_STACKGUARD_RANDOMIZE)
-fi
-
 AC_ARG_ENABLE([hidden-plt],
-             AC_HELP_STRING([--disable-hidden-plt],
+             AS_HELP_STRING([--disable-hidden-plt],
                             [do not hide internal function calls to avoid PLT]),
              [hidden=$enableval],
              [hidden=yes])
@@ -208,7 +221,7 @@ if test "x$hidden" = xno; then
 fi
 
 AC_ARG_ENABLE([bind-now],
-             AC_HELP_STRING([--enable-bind-now],
+             AS_HELP_STRING([--enable-bind-now],
                             [disable lazy relocations in DSOs]),
              [bindnow=$enableval],
              [bindnow=no])
@@ -220,7 +233,7 @@ fi
 dnl Build glibc with -fstack-protector, -fstack-protector-all, or
 dnl -fstack-protector-strong.
 AC_ARG_ENABLE([stack-protector],
-             AC_HELP_STRING([--enable-stack-protector=@<:@yes|no|all|strong@:>@],
+             AS_HELP_STRING([--enable-stack-protector=@<:@yes|no|all|strong@:>@],
                             [Use -fstack-protector[-all|-strong] to detect glibc buffer overflows]),
              [enable_stack_protector=$enableval],
              [enable_stack_protector=no])
@@ -232,7 +245,7 @@ esac
 dnl On some platforms we cannot use dynamic loading.  We must provide
 dnl static NSS modules.
 AC_ARG_ENABLE([static-nss],
-             AC_HELP_STRING([--enable-static-nss],
+             AS_HELP_STRING([--enable-static-nss],
                             [build static NSS modules @<:@default=no@:>@]),
              [static_nss=$enableval],
              [static_nss=no])
@@ -243,14 +256,14 @@ if test x"$static_nss" = xyes || test x"$shared" = xno; then
 fi
 
 AC_ARG_ENABLE([force-install],
-             AC_HELP_STRING([--disable-force-install],
+             AS_HELP_STRING([--disable-force-install],
                             [don't force installation of files from this package, even if they are older than the installed files]),
              [force_install=$enableval],
              [force_install=yes])
 AC_SUBST(force_install)
 
 AC_ARG_ENABLE([maintainer-mode],
-             AC_HELP_STRING([--enable-maintainer-mode],
+             AS_HELP_STRING([--enable-maintainer-mode],
                             [enable make rules and dependencies not useful (and sometimes confusing) to the casual installer]),
              [maintainer=$enableval],
              [maintainer=no])
@@ -258,7 +271,7 @@ AC_ARG_ENABLE([maintainer-mode],
 dnl On some platforms we allow dropping compatibility with all kernel
 dnl versions.
 AC_ARG_ENABLE([kernel],
-             AC_HELP_STRING([--enable-kernel=VERSION],
+             AS_HELP_STRING([--enable-kernel=VERSION],
                             [compile for compatibility with kernel not older than VERSION]),
              [minimum_kernel=$enableval],
              [])
@@ -276,41 +289,56 @@ dnl For the development we sometimes want gcc to issue even more warnings.
 dnl This is not the default since many of the extra warnings are not
 dnl appropriate.
 AC_ARG_ENABLE([all-warnings],
-             AC_HELP_STRING([--enable-all-warnings],
+             AS_HELP_STRING([--enable-all-warnings],
                             [enable all useful warnings gcc can issue]),
              [all_warnings=$enableval],
              [])
 AC_SUBST(all_warnings)
 
 AC_ARG_ENABLE([werror],
-             AC_HELP_STRING([--disable-werror],
+             AS_HELP_STRING([--disable-werror],
                             [do not build with -Werror]),
              [enable_werror=$enableval],
              [enable_werror=yes])
 AC_SUBST(enable_werror)
 
 AC_ARG_ENABLE([multi-arch],
-             AC_HELP_STRING([--enable-multi-arch],
+             AS_HELP_STRING([--enable-multi-arch],
                             [enable single DSO with optimizations for multiple architectures]),
              [multi_arch=$enableval],
              [multi_arch=default])
 
 AC_ARG_ENABLE([experimental-malloc],
-             AC_HELP_STRING([--disable-experimental-malloc],
+             AS_HELP_STRING([--disable-experimental-malloc],
                             [disable experimental malloc features]),
              [experimental_malloc=$enableval],
              [experimental_malloc=yes])
 AC_SUBST(experimental_malloc)
 
+AC_ARG_ENABLE([memory-tagging],
+             AS_HELP_STRING([--enable-memory-tagging],
+                            [enable memory tagging if supported by the architecture @<:@default=no@:>@]),
+             [memory_tagging=$enableval],
+             [memory_tagging=no])
+if test "$memory_tagging" = yes; then
+  # Only enable this on architectures that support it.
+  case $host_cpu in
+    aarch64)
+      AC_DEFINE(USE_MTAG)
+      ;;
+  esac
+fi
+AC_SUBST(memory_tagging)
+
 AC_ARG_ENABLE([crypt],
-              AC_HELP_STRING([--disable-crypt],
+              AS_HELP_STRING([--disable-crypt],
                              [do not build nor install the passphrase hashing library, libcrypt]),
               [build_crypt=$enableval],
               [build_crypt=yes])
 AC_SUBST(build_crypt)
 
 AC_ARG_ENABLE([nss-crypt],
-             AC_HELP_STRING([--enable-nss-crypt],
+             AS_HELP_STRING([--enable-nss-crypt],
                             [enable libcrypt to use nss]),
              [nss_crypt=$enableval],
              [nss_crypt=no])
@@ -367,28 +395,6 @@ AC_SUBST(libc_cv_nss_crypt)
 AC_SUBST(libc_cv_static_nss_crypt)
 
 
-AC_ARG_ENABLE([obsolete-rpc],
-              AC_HELP_STRING([--enable-obsolete-rpc],
-                             [build and install the obsolete RPC code for link-time usage]),
-              [link_obsolete_rpc=$enableval],
-              [link_obsolete_rpc=no])
-AC_SUBST(link_obsolete_rpc)
-
-if test "$link_obsolete_rpc" = yes; then
-  AC_DEFINE(LINK_OBSOLETE_RPC)
-fi
-
-AC_ARG_ENABLE([obsolete-nsl],
-              AC_HELP_STRING([--enable-obsolete-nsl],
-                             [build and install the obsolete libnsl library and depending NSS modules]),
-              [build_obsolete_nsl=$enableval],
-              [build_obsolete_nsl=no])
-AC_SUBST(build_obsolete_nsl)
-
-if test "$build_obsolete_nsl" = yes; then
-  AC_DEFINE(LINK_OBSOLETE_NSL)
-fi
-
 AC_ARG_ENABLE([systemtap],
               [AS_HELP_STRING([--enable-systemtap],
               [enable systemtap static probe points @<:@default=no@:>@])],
@@ -464,6 +470,27 @@ AC_ARG_ENABLE([mathvec],
              [build_mathvec=$enableval],
              [build_mathvec=notset])
 
+AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[]], [[
+#ifndef __CET__
+# error no CET compiler support
+#endif]])],
+              [libc_cv_compiler_default_cet=yes],
+              [libc_cv_compiler_default_cet=no])
+
+AC_ARG_ENABLE([cet],
+             AS_HELP_STRING([--enable-cet],
+                            [enable Intel Control-flow Enforcement Technology (CET), x86 only]),
+             [enable_cet=$enableval],
+             [enable_cet=$libc_cv_compiler_default_cet])
+
+AC_ARG_ENABLE([scv],
+             AC_HELP_STRING([--disable-scv],
+                            [syscalls will not use scv instruction, even if the kernel supports it, powerpc only]),
+             [use_scv=$enableval],
+             [use_scv=yes])
+
+AS_IF([[test "$use_scv" != "no"]],[AC_DEFINE(USE_PPC_SCV)])
+
 # We keep the original values in `$config_*' and never modify them, so we
 # can write them unchanged into config.make.  Everything else uses
 # $machine, $vendor, and $os, and changes them whenever convenient.
@@ -627,7 +654,7 @@ if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
            -o conftest conftest.S 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
   # Do a link to see if the backend supports IFUNC relocs.
   $READELF -r conftest 1>&AS_MESSAGE_LOG_FD
-  LC_ALL=C $READELF -r conftest | grep 'no relocations' >/dev/null || {
+  LC_ALL=C $READELF -Wr conftest | grep -q 'IRELATIVE\|R_SPARC_JMP_IREL' && {
     libc_cv_ld_gnu_indirect_function=yes
   }
 fi
@@ -657,6 +684,58 @@ if ${CC-cc} -c conftest.c -o conftest.o 1>&AS_MESSAGE_LOG_FD \
 fi
 rm -f conftest*])
 
+# Check if linker supports textrel relocation with ifunc (used on elf/tests).
+# Note that it relies on libc_cv_ld_gnu_indirect_function test above.
+AC_CACHE_CHECK([whether the linker supports textrels along with ifunc],
+               libc_cv_textrel_ifunc, [dnl
+cat > conftest.S <<EOF
+.type foo,%gnu_indirect_function
+foo:
+.globl _start
+_start:
+.globl __start
+__start:
+.data
+#ifdef _LP64
+.quad foo
+#else
+.long foo
+#endif
+.text
+.globl address
+address:
+#ifdef _LP64
+.quad address
+#else
+.long address
+#endif
+EOF
+libc_cv_textrel_ifunc=no
+if test $libc_cv_ld_gnu_indirect_function = yes; then
+   if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -nostartfiles -nostdlib $no_ssp -pie -o conftest conftest.S); then
+     libc_cv_textrel_ifunc=yes
+   fi
+fi
+rm -f conftest*])
+AC_SUBST(libc_cv_textrel_ifunc)
+
+# Check if CC supports attribute retain as it is used in attribute_used_retain macro.
+AC_CACHE_CHECK([for GNU attribute retain support],
+              libc_cv_gnu_retain, [dnl
+cat > conftest.c <<EOF
+static int var  __attribute__ ((used, retain, section ("__libc_atexit")));
+EOF
+libc_cv_gnu_retain=no
+if ${CC-cc} -Werror -c conftest.c -o /dev/null 1>&AS_MESSAGE_LOG_FD \
+   2>&AS_MESSAGE_LOG_FD ; then
+  libc_cv_gnu_retain=yes
+fi
+rm -f conftest*])
+if test $libc_cv_gnu_retain = yes; then
+  AC_DEFINE(HAVE_GNU_RETAIN)
+fi
+LIBC_CONFIG_VAR([have-gnu-retain], [$libc_cv_gnu_retain])
+
 # Check if gcc warns about alias for function with incompatible types.
 AC_CACHE_CHECK([if compiler warns about alias for function with incompatible types],
               libc_cv_gcc_incompatible_alias, [dnl
@@ -688,7 +767,7 @@ if test x"$libc_cv_gcc_indirect_function" != xyes; then
   # GCC 8+ emits a warning for alias with incompatible types and it might
   # fail to build ifunc resolvers aliases to either weak or internal
   # symbols.  Disables multiarch build in this case.
-  if test x"$libc_cv_gcc_incompatible_alias" == xyes; then
+  if test x"$libc_cv_gcc_incompatible_alias" = xyes; then
     AC_MSG_WARN([gcc emits a warning for alias between functions of incompatible types])
     if test x"$multi_arch" = xyes; then
       AC_MSG_ERROR([--enable-multi-arch support requires a gcc with gnu-indirect-function support])
@@ -752,7 +831,8 @@ mach=
 tail=$machine${submachine:+/$submachine}
 while m=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$m"; do
   set $m
-  # Prepend the machine's FPU directory unless --without-fp.
+  # Prepend the machine's FPU directory unless the architecture specific
+  # preconfigure disables it.
   if test "$libc_cv_with_fp" = yes; then
     maybe_fpu=/fpu
   else
@@ -928,21 +1008,33 @@ AC_CHECK_PROG_VER(AS, $AS, --version,
                  [2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
                  AS=: critic_missing="$critic_missing as")
 
-if test -n "`$LD --version | sed -n 's/^GNU \(gold\).*$/\1/p'`"; then
+libc_cv_with_lld=no
+case $($LD --version) in
+  "GNU gold"*)
   # Accept gold 1.14 or higher
-  AC_CHECK_PROG_VER(LD, $LD, --version,
+    AC_CHECK_PROG_VER(LD, $LD, --version,
                    [GNU gold.* \([0-9][0-9]*\.[0-9.]*\)],
                    [1.1[4-9]*|1.[2-9][0-9]*|1.1[0-9][0-9]*|[2-9].*|[1-9][0-9]*],
                    LD=: critic_missing="$critic_missing GNU gold")
-else
-  AC_CHECK_PROG_VER(LD, $LD, --version,
+    ;;
+  "LLD"*)
+  # Accept LLD 13.0.0 or higher
+    AC_CHECK_PROG_VER(LD, $LD, --version,
+                   [LLD.* \([0-9][0-9]*\.[0-9.]*\)],
+                   [1[3-9].*|[2-9][0-9].*],
+                   LD=: critic_missing="$critic_missing LLD")
+    libc_cv_with_lld=yes
+    ;;
+  *)
+    AC_CHECK_PROG_VER(LD, $LD, --version,
                    [GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
                    [2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
                    LD=: critic_missing="$critic_missing GNU ld")
-fi
+    ;;
+esac
+LIBC_CONFIG_VAR([with-lld], [$libc_cv_with_lld])
 
 # These programs are version sensitive.
-AC_CHECK_TOOL_PREFIX
 AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
   [GNU Make[^0-9]*\([0-9][0-9.]*\)],
   [[4-9].* | [1-9][0-9]*], critic_missing="$critic_missing make")
@@ -967,10 +1059,10 @@ AC_CHECK_PROG_VER(BISON, bison, --version,
   [2.7*|[3-9].*|[1-9][0-9]*], critic_missing="$critic_missing bison")
 
 AC_CACHE_CHECK([if $CC is sufficient to build libc], libc_cv_compiler_ok, [
-AC_TRY_COMPILE([], [
-#if !defined __GNUC__ || __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 9)
+AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[]], [[
+#if !defined __GNUC__ || __GNUC__ < 6 || (__GNUC__ == 6 && __GNUC_MINOR__ < 2)
 #error insufficient compiler
-#endif],
+#endif]])],
               [libc_cv_compiler_ok=yes],
               [libc_cv_compiler_ok=no])])
 AS_IF([test $libc_cv_compiler_ok != yes],
@@ -1001,18 +1093,12 @@ else
 fi
 
 # Check for python3 if available, or else python.
-AC_CHECK_PROGS(PYTHON_PROG, python3 python,no)
-case "x$PYTHON_PROG" in
-xno|x|x:) PYTHON_PROG=no ;;
-*) ;;
-esac
-
-if test "x$PYTHON_PROG" = xno; then
-  aux_missing="$aux_missing python"
-else
-  PYTHON="$PYTHON_PROG -B"
-  AC_SUBST(PYTHON)
-fi
+AC_CHECK_PROG_VER(PYTHON_PROG, python3 python, --version,
+  [Python \([0-9][0-9.]*\)],
+  [3.[4-9]*|3.[1-9][0-9]*|[4-9].*|[1-9][0-9]*],
+  critic_missing="$critic_missing python")
+PYTHON="$PYTHON_PROG -B"
+AC_SUBST(PYTHON)
 
 test -n "$critic_missing" && AC_MSG_ERROR([
 *** These critical programs are missing or too old:$critic_missing
@@ -1144,7 +1230,7 @@ AC_SUBST(libc_cv_protected_data)
 AC_CACHE_CHECK(linker support for INSERT in linker script,
               libc_cv_insert,
               [cat > conftest.c <<EOF
-               const int __attribute__ ((section(".bar"))) bar = 0x12345678;
+               int __attribute__ ((section(".bar"))) bar = 0x12345678;
                int test (void) { return bar; }
 EOF
                cat > conftest.t <<EOF
@@ -1199,36 +1285,6 @@ if test $libc_cv_have_sdata_section = yes; then
   AC_DEFINE(HAVE_SDATA_SECTION)
 fi
 
-AC_CACHE_CHECK(whether to use .ctors/.dtors header and trailer,
-              libc_cv_ctors_header, [dnl
-  libc_cv_ctors_header=yes
-  LIBC_TRY_LINK_STATIC([
-__attribute__ ((constructor)) void ctor (void) { asm (""); }
-__attribute__ ((destructor))  void dtor (void) { asm (""); }
-],
-             [dnl
-      AS_IF([$READELF -WS conftest$ac_exeext | $AWK '
-       { gsub(/\@<:@ */, "@<:@") }
-       $2 == ".ctors" || $2 == ".dtors" {
-         size = strtonum("0x" $6)
-         align = strtonum("0x" $NF)
-         seen@<:@$2@:>@ = 1
-         stub@<:@$2@:>@ = size == align * 2
-       }
-       END {
-         ctors_ok = !seen@<:@".ctors"@:>@ || stub@<:@".ctors"@:>@
-         dtors_ok = !seen@<:@".dtors"@:>@ || stub@<:@".dtors"@:>@
-         exit ((ctors_ok && dtors_ok) ? 0 : 1)
-       }
-      '], [libc_cv_ctors_header=no])
-    ], [dnl
-      AC_MSG_ERROR([missing __attribute__ ((constructor)) support??])
-    ])
-])
-if test $libc_cv_ctors_header = no; then
-  AC_DEFINE(NO_CTORS_DTORS_SECTIONS)
-fi
-
 AC_CACHE_CHECK(for libunwind-support in compiler,
               libc_cv_cc_with_libunwind, [
   cat > conftest.c <<EOF
@@ -1268,41 +1324,23 @@ if test $libc_cv_as_noexecstack = yes; then
 fi
 AC_SUBST(ASFLAGS_config)
 
-AC_CACHE_CHECK(for -z combreloc,
-              libc_cv_z_combreloc, [dnl
-cat > conftest.c <<EOF
-extern int bar (int);
-extern int mumble;
-int foo (void) { return bar (mumble); }
-EOF
-if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
-                       -fPIC -shared $no_ssp -o conftest.so conftest.c
-                       -nostdlib -nostartfiles
-                       -Wl,-z,combreloc 1>&AS_MESSAGE_LOG_FD])
-then
-dnl The following test is a bit weak.  We must use a tool which can test
-dnl cross-platform since the gcc used can be a cross compiler.  Without
-dnl introducing new options this is not easily doable.  Instead use a tool
-dnl which always is cross-platform: readelf.  To detect whether -z combreloc
-dnl look for a section named .rel.dyn or .rela.dyn.
-  if $READELF -S conftest.so | grep -E '.rela?.dyn' > /dev/null; then
-    libc_cv_z_combreloc=yes
-  else
-    libc_cv_z_combreloc=no
-  fi
-else
-  libc_cv_z_combreloc=no
-fi
-rm -f conftest*])
-if test "$libc_cv_z_combreloc" = yes; then
-  AC_DEFINE(HAVE_Z_COMBRELOC)
-fi
-AC_SUBST(libc_cv_z_combreloc)
-
 LIBC_LINKER_FEATURE([-z execstack], [-Wl,-z,execstack],
                    [libc_cv_z_execstack=yes], [libc_cv_z_execstack=no])
 AC_SUBST(libc_cv_z_execstack)
 
+LIBC_LINKER_FEATURE([-z start-stop-gc], [-Wl,-z,start-stop-gc],
+                   [libc_cv_z_start_stop_gc=yes], [libc_cv_z_start_stop_gc=no])
+LIBC_CONFIG_VAR([have-z-start-stop-gc], [$libc_cv_z_start_stop_gc])
+
+LIBC_LINKER_FEATURE([--depaudit], [-Wl,--depaudit,x],
+                   [libc_cv_depaudit=yes], [libc_cv_depaudit=no])
+LIBC_CONFIG_VAR([have-depaudit], [$libc_cv_depaudit])
+
+LIBC_LINKER_FEATURE([-z pack-relative-relocs],
+                   [-Wl,-z,pack-relative-relocs],
+                   [libc_cv_dt_relr=yes], [libc_cv_dt_relr=no])
+LIBC_CONFIG_VAR([have-dt-relr], [$libc_cv_dt_relr])
+
 LIBC_LINKER_FEATURE([--no-dynamic-linker],
                    [-Wl,--no-dynamic-linker],
                    [libc_cv_no_dynamic_linker=yes],
@@ -1338,59 +1376,6 @@ fi
 rm -f conftest*])
 AC_SUBST(libc_cv_hashstyle)
 
-# The linker's default -shared behavior is good enough if it
-# does these things that our custom linker scripts ensure that
-# all allocated NOTE sections come first.
-if test "$use_default_link" = default; then
-  AC_CACHE_CHECK([for sufficient default -shared layout],
-                 libc_cv_use_default_link, [dnl
-  libc_cv_use_default_link=no
-  cat > conftest.s <<\EOF
-         .section .note.a,"a",%note
-         .balign 4
-         .long 4,4,9
-         .string "GNU"
-         .string "foo"
-         .section .note.b,"a",%note
-         .balign 4
-         .long 4,4,9
-         .string "GNU"
-         .string "bar"
-EOF
-  if AC_TRY_COMMAND([dnl
-  ${CC-cc} $ASFLAGS -shared -o conftest.so conftest.s 1>&AS_MESSAGE_LOG_FD]) &&
-       ac_try=`$READELF -S conftest.so | sed -n \
-        ['${x;p;}
-         s/^ *\[ *[1-9][0-9]*\]  *\([^ ][^ ]*\)  *\([^ ][^ ]*\) .*$/\2 \1/
-         t a
-         b
-         : a
-         H']`
-  then
-    libc_seen_a=no libc_seen_b=no
-    set -- $ac_try
-    while test $# -ge 2 -a "$1" = NOTE; do
-      case "$2" in
-      .note.a) libc_seen_a=yes ;;
-      .note.b) libc_seen_b=yes ;;
-      esac
-      shift 2
-    done
-    case "$libc_seen_a$libc_seen_b" in
-    yesyes)
-      libc_cv_use_default_link=yes
-      ;;
-    *)
-      echo >&AS_MESSAGE_LOG_FD "\
-$libc_seen_a$libc_seen_b from:
-$ac_try"
-      ;;
-    esac
-  fi
-  rm -f conftest*])
-  use_default_link=$libc_cv_use_default_link
-fi
-
 AC_CACHE_CHECK(for GLOB_DAT reloc,
               libc_cv_has_glob_dat, [dnl
 cat > conftest.c <<EOF
@@ -1414,17 +1399,6 @@ fi
 rm -f conftest*])
 AC_SUBST(libc_cv_has_glob_dat)
 
-AC_CACHE_CHECK(linker output format, libc_cv_output_format, [dnl
-if libc_cv_output_format=`
-${CC-cc} -nostartfiles -nostdlib $no_ssp -Wl,--print-output-format 2>&AS_MESSAGE_LOG_FD`
-then
-  :
-else
-  libc_cv_output_format=
-fi
-test -n "$libc_cv_output_format" || libc_cv_output_format=unknown])
-AC_SUBST(libc_cv_output_format)
-
 AC_CACHE_CHECK(for -fno-toplevel-reorder -fno-section-anchors, libc_cv_fno_toplevel_reorder, [dnl
 cat > conftest.c <<EOF
 int foo;
@@ -1453,8 +1427,8 @@ void foo (void)
   i = 10;
 }
 EOF
-if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -fPIC -mtls-dialect=gnu2
-                  conftest.c 1>&AS_MESSAGE_LOG_FD])
+if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -fPIC -mtls-dialect=gnu2 -nostdlib -nostartfiles
+                  conftest.c -o conftest 1>&AS_MESSAGE_LOG_FD])
 then
   libc_cv_mtls_dialect_gnu2=yes
 else
@@ -1575,7 +1549,8 @@ if test "$with_gd" != "no"; then
   LDFLAGS="$LDFLAGS $libgd_ldflags"
   old_LIBS="$LIBS"
   LIBS="$LIBS -lgd -lpng -lz -lm"
-  AC_TRY_LINK([#include <gd.h>], [gdImagePng (0, 0)], LIBGD=yes, LIBGD=no)
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <gd.h>]], [[gdImagePng (0, 0)]])],
+                [LIBGD=yes], [LIBGD=no])
   CFLAGS="$old_CFLAGS"
   LDFLAGS="$old_LDFLAGS"
   LIBS="$old_LIBS"
@@ -1623,11 +1598,14 @@ CPPUNDEFS=
 dnl Check for silly hacked compilers predefining _FORTIFY_SOURCE.
 dnl Since we are building the implementations of the fortified functions here,
 dnl having the macro defined interacts very badly.
+dnl _FORTIFY_SOURCE requires compiler optimization level 1 (gcc -O1)
+dnl and above (see "man FEATURE_TEST_MACROS").
+dnl So do NOT replace AC_COMPILE_IFELSE with AC_PREPROC_IFELSE.
 AC_CACHE_CHECK([for _FORTIFY_SOURCE predefine], libc_cv_predef_fortify_source,
-[AC_TRY_COMPILE([], [
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
 #ifdef _FORTIFY_SOURCE
 # error bogon
-#endif],
+#endif]])],
                [libc_cv_predef_fortify_source=no],
                [libc_cv_predef_fortify_source=yes])])
 if test $libc_cv_predef_fortify_source = yes; then
@@ -1635,44 +1613,33 @@ if test $libc_cv_predef_fortify_source = yes; then
 fi
 AC_SUBST(CPPUNDEFS)
 
-# Some linkers on some architectures support __ehdr_start but with
-# bugs.  Make sure usage of it does not create relocations in the
-# output (as the linker should resolve them all for us).
-AC_CACHE_CHECK([whether the linker provides working __ehdr_start],
-              libc_cv_ehdr_start, [
-old_CFLAGS="$CFLAGS"
-old_LDFLAGS="$LDFLAGS"
-old_LIBS="$LIBS"
-CFLAGS="$CFLAGS -fPIC"
-LDFLAGS="$LDFLAGS -nostdlib -nostartfiles -shared $no_ssp"
-LIBS=
-AC_LINK_IFELSE([AC_LANG_SOURCE([
-typedef struct {
-  char foo;
-  long val;
-} Ehdr;
-extern const Ehdr __ehdr_start __attribute__ ((visibility ("hidden")));
-long ehdr (void) { return __ehdr_start.val; }
-])],
-              [if $READELF -r conftest | grep -F __ehdr_start >/dev/null; then
-                 libc_cv_ehdr_start=broken
-               else
-                 libc_cv_ehdr_start=yes
-               fi], [libc_cv_ehdr_start=no])
-CFLAGS="$old_CFLAGS"
-LDFLAGS="$old_LDFLAGS"
-LIBS="$old_LIBS"
+dnl Starting with binutils 2.35, GAS can attach multiple symbol versions
+dnl to one symbol (PR 23840).
+AC_CACHE_CHECK(whether the assembler requires one version per symbol,
+               libc_cv_symver_needs_alias, [dnl
+  cat > conftest.s <<EOF
+        .text
+testfunc:
+        .globl testfunc
+        .symver testfunc, testfunc1@VERSION1
+        .symver testfunc, testfunc1@VERSION2
+EOF
+  libc_cv_symver_needs_alias=no
+  if ${CC-cc} $ASFLAGS -c conftest.s 2>&AS_MESSAGE_LOG_FD; then
+    libc_cv_symver_needs_alias=no
+  else
+    libc_cv_symver_needs_alias=yes
+  fi
+  rm conftest.*
 ])
-if test "$libc_cv_ehdr_start" = yes; then
-  AC_DEFINE([HAVE_EHDR_START])
-elif test "$libc_cv_ehdr_start" = broken; then
-  AC_MSG_WARN([linker is broken -- you should upgrade])
+if test "$libc_cv_symver_needs_alias" = yes; then
+  AC_DEFINE(SYMVER_NEEDS_ALIAS)
 fi
 
 AC_CACHE_CHECK(for __builtin_trap with no external dependencies,
               libc_cv_builtin_trap, [dnl
 libc_cv_builtin_trap=no
-AC_TRY_COMPILE([], [__builtin_trap ()], [
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[__builtin_trap ()]])],[
 libc_undefs=`$NM -u conftest.o |
   LC_ALL=C $AWK '$1 == "U" { print $2 | "sort -u"; next } { exit(1) }' \
     2>&AS_MESSAGE_LOG_FD` || {
@@ -1681,7 +1648,7 @@ libc_undefs=`$NM -u conftest.o |
 echo >&AS_MESSAGE_LOG_FD "libc_undefs='$libc_undefs'"
 if test -z "$libc_undefs"; then
   libc_cv_builtin_trap=yes
-fi])])
+fi],[])])
 if test $libc_cv_builtin_trap = yes; then
   AC_DEFINE([HAVE_BUILTIN_TRAP])
 fi
@@ -1729,6 +1696,7 @@ libc_cv_sysconfdir=$sysconfdir
 libc_cv_localstatedir=$localstatedir
 libc_cv_gcc_unwind_find_fde=no
 libc_cv_idn=no
+pthread_in_libc=yes
 
 # Iterate over all the sysdep directories we will use, running their
 # configure fragments.
@@ -1761,10 +1729,12 @@ AC_SUBST(libc_cv_gcc_unwind_find_fde)
 if test x"$libc_cv_ld_gnu_indirect_function" = xyes; then
   AC_DEFINE(HAVE_IFUNC)
 fi
+LIBC_CONFIG_VAR([have-ifunc], [$libc_cv_ld_gnu_indirect_function])
 
 if test x"$libc_cv_gcc_indirect_function" = xyes; then
   AC_DEFINE(HAVE_GCC_IFUNC)
 fi
+LIBC_CONFIG_VAR([have-gcc-ifunc], [$libc_cv_gcc_indirect_function])
 
 # This is far from the AC_ARG_ENABLE that sets it so that a sysdeps
 # configure fragment can override the value to prevent this AC_DEFINE.
@@ -1803,7 +1773,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
@@ -1816,26 +1786,50 @@ 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)
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#ifdef PIE_UNSUPPORTED
+# error PIE is not supported
+#endif]])], [libc_cv_pie_supported=yes], [libc_cv_pie_supported=no])
+AC_MSG_RESULT($libc_cv_pie_supported)
+# Disable build-pie-default if target does not support it or glibc is
+# configured with --disable-default-pie.
+if test "x$default_pie" = xno; then
+  build_pie_default=no
+else
+  build_pie_default=$libc_cv_pie_supported
+fi
+LIBC_CONFIG_VAR([build-pie-default], [$build_pie_default])
+
+AC_MSG_CHECKING(if we can build static PIE programs)
+libc_cv_static_pie_supported=$libc_cv_pie_supported
+if test "x$libc_cv_pie_supported" != xno \
+   -a "$libc_cv_no_dynamic_linker" = yes; then
+  AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#ifndef SUPPORT_STATIC_PIE
+# error static PIE is not supported
+#endif]])], [libc_cv_static_pie_supported=yes],
+           [libc_cv_static_pie_supported=no])
+fi
+AC_MSG_RESULT($libc_cv_static_pie_supported)
+
+# Enable static-pie only if it is available and glibc isn't configured
+# with --disable-default-pie.
+if test "x$default_pie" = xno; then
+  libc_cv_static_pie=no
+else
+  libc_cv_static_pie=$libc_cv_static_pie_supported
+fi
+if test "$libc_cv_static_pie" = "yes"; then
+  AC_DEFINE(ENABLE_STATIC_PIE)
+fi
+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
-  # 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)
 
@@ -1849,6 +1843,11 @@ RELEASE=`sed -n -e 's/^#define RELEASE "\([^"]*\)"/\1/p' < $srcdir/version.h`
 AC_SUBST(VERSION)
 AC_SUBST(RELEASE)
 
+if test "$pthread_in_libc" = yes; then
+  AC_DEFINE(PTHREAD_IN_LIBC)
+fi
+AC_SUBST(pthread_in_libc)
+
 AC_CONFIG_FILES([config.make Makefile])
 AC_CONFIG_COMMANDS([default],[[
 case $CONFIG_FILES in *config.make*)