dnl Process this file with autoconf to produce a configure script.
-AC_REVISION([$CVSid$])
AC_PREREQ(2.53)dnl dnl Minimum Autoconf version required.
-AC_INIT([GNU C Library], [(see version.h)], [glibc])
+AC_INIT([GNU C Library], [(see version.h)], [http://sourceware.org/bugzilla/], [glibc])
AC_CONFIG_SRCDIR([include/features.h])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_AUX_DIR([scripts])
+dnl This is here so we can set $subdirs directly based on configure fragments.
+AC_CONFIG_SUBDIRS()
+
+AC_CANONICAL_HOST
+
+AC_PROG_CC
+if test $host != $build; then
+ AC_CHECK_PROGS(BUILD_CC, gcc cc)
+fi
+AC_SUBST(cross_compiling)
+AC_PROG_CPP
+# We need the C++ compiler only for testing.
+AC_PROG_CXX
+
if test "`cd $srcdir; /bin/pwd`" = "`/bin/pwd`"; then
AC_MSG_ERROR([you must configure in a separate build directory])
fi
# Check for a --with-gd argument and set libgd-LDFLAGS in config.make.
AC_ARG_WITH([gd],
- AC_HELP_STRING([--with-gd=DIR],
- [find libgd include dir and library with prefix DIR]),
+ AC_HELP_STRING([--with-gd=DIR],
+ [find libgd include dir and library with prefix DIR]),
[dnl
case "$with_gd" in
yes|''|no) ;;
esac
])
AC_ARG_WITH([gd-include],
- AC_HELP_STRING([--with-gd-include=DIR],
- [find libgd include files in DIR]),
- [dnl
+ AC_HELP_STRING([--with-gd-include=DIR],
+ [find libgd include files in DIR]),
+ [dnl
case "$with_gd_include" in
''|no) ;;
*) libgd_include="-I$withval" ;;
esac
])
AC_ARG_WITH([gd-lib],
- AC_HELP_STRING([--with-gd-lib=DIR],
- [find libgd library files in DIR]),
- [dnl
+ AC_HELP_STRING([--with-gd-lib=DIR],
+ [find libgd library files in DIR]),
+ [dnl
case "$with_gd_lib" in
''|no) ;;
*) libgd_ldflags="-L$withval" ;;
dnl Arguments to specify presence of other packages/features.
AC_ARG_WITH([fp],
- AC_HELP_STRING([--with-fp],
- [if using floating-point hardware @<:@default=yes@:>@]),
+ AC_HELP_STRING([--with-fp],
+ [if using floating-point hardware @<:@default=yes@:>@]),
[with_fp=$withval],
[with_fp=yes])
AC_SUBST(with_fp)
AC_ARG_WITH([binutils],
- AC_HELP_STRING([--with-binutils=PATH],
- [specify location of binutils (as and ld)]),
+ AC_HELP_STRING([--with-binutils=PATH],
+ [specify location of binutils (as and ld)]),
[path_binutils=$withval],
[path_binutils=''])
-AC_ARG_WITH([elf],
- AC_HELP_STRING([--with-elf],
- [if using the ELF object format]),
- [elf=$withval],
- [elf=no])
AC_ARG_WITH([selinux],
- AC_HELP_STRING([--with-selinux],
- [if building with SELinux support]),
+ AC_HELP_STRING([--with-selinux],
+ [if building with SELinux support]),
[with_selinux=$withval],
[with_selinux=auto])
-AC_ARG_WITH([xcoff],
- AC_HELP_STRING([--with-xcoff],
- [if using the XCOFF object format]),
- [xcoff=$withval],
- [xcoff=no])
-AC_ARG_WITH([cvs],
- AC_HELP_STRING([--without-cvs],
- [if CVS should not be used]),
- [with_cvs=$withval],
- [with_cvs=yes])
-if test "$with_cvs" = yes; then
- if test -d $srcdir/CVS && grep :pserver: $srcdir/CVS/Root > /dev/null
- then
- with_cvs=no
- fi
-fi
-AC_SUBST(with_cvs)
AC_ARG_WITH([headers],
- AC_HELP_STRING([--with-headers=PATH],
- [location of system headers to use
+ AC_HELP_STRING([--with-headers=PATH],
+ [location of system headers to use
(for example /usr/src/linux/include)
@<:@default=compiler default@:>@]),
[sysheaders=$withval],
[sysheaders=''])
+AC_SUBST(use_default_link)
+AC_ARG_WITH([default-link],
+ AC_HELP_STRING([--with-default-link],
+ [do not use explicit linker scripts]),
+ [use_default_link=$withval],
+ [use_default_link=default])
+
AC_ARG_ENABLE([sanity-checks],
- AC_HELP_STRING([--disable-sanity-checks],
- [really do not use threads (should not be used except in special situations) @<:@default=yes@:>@]),
+ AC_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_SUBST(enable_check_abi)
-AC_ARG_ENABLE([check-abi],
- AC_HELP_STRING([--enable-check-abi],
- [do "make check-abi" in "make check" (no/warn/yes)
- @<:@default=no@:>@]),
- [enable_check_abi=$enableval],
- [enable_check_abi=no])
-
-dnl Arguments to enable or disable building the static, shared, profiled,
-dnl and -fomit-frame-pointer libraries.
-dnl I've disabled this for now since we cannot build glibc without static
-dnl libraries built in the moment.
-dnl AC_ARG_ENABLE([static],
-dnl AC_HELP_STRING([--enable-static],
-dnl [build static library @<:@default=yes@:>@]),
-dnl [static=$enableval],
-dnl [static=yes])
-static=yes
AC_ARG_ENABLE([shared],
- AC_HELP_STRING([--enable-shared],
- [build shared library @<:@default=yes if GNU ld & ELF@:>@]),
+ AC_HELP_STRING([--enable-shared],
+ [build shared library @<:@default=yes if GNU ld@:>@]),
[shared=$enableval],
- [shared=default])
+ [shared=yes])
AC_ARG_ENABLE([profile],
- AC_HELP_STRING([--enable-profile],
- [build profiled library @<:@default=no@:>@]),
+ AC_HELP_STRING([--enable-profile],
+ [build profiled library @<:@default=no@:>@]),
[profile=$enableval],
[profile=no])
-AC_ARG_ENABLE([omitfp],
- AC_HELP_STRING([--enable-omitfp],
- [build undebuggable optimized library @<:@default=no@:>@]),
- [omitfp=$enableval],
- [omitfp=no])
-AC_ARG_ENABLE([bounded],
- AC_HELP_STRING([--enable-bounded],
- [build with runtime bounds checking @<:@default=no@:>@]),
- [bounded=$enableval],
- [bounded=no])
AC_ARG_ENABLE([versioning],
- AC_HELP_STRING([--disable-versioning],
- [do not include versioning information in the library objects @<:@default=yes if supported@:>@]),
+ AC_HELP_STRING([--disable-versioning],
+ [do not include versioning information in the library objects @<:@default=yes if supported@:>@]),
[enable_versioning=$enableval],
[enable_versioning=yes])
AC_ARG_ENABLE([oldest-abi],
- AC_HELP_STRING([--enable-oldest-abi=ABI],
- [configure the oldest ABI supported @<:@e.g. 2.2@:>@ @<:@default=glibc default@:>@]),
+ AC_HELP_STRING([--enable-oldest-abi=ABI],
+ [configure the oldest ABI supported @<:@e.g. 2.2@:>@ @<:@default=glibc default@:>@]),
[oldest_abi=$enableval],
[oldest_abi=no])
if test "$oldest_abi" = yes || test "$oldest_abi" = no; then
dnl Generic infrastructure for drop-in additions to libc.
AC_ARG_ENABLE([add-ons],
- AC_HELP_STRING([--enable-add-ons@<:@=DIRS...@:>@],
- [configure and build add-ons in DIR1,DIR2,...
- search for add-ons if no parameter given]),
+ AC_HELP_STRING([--enable-add-ons@<:@=DIRS...@:>@],
+ [configure and build add-ons in DIR1,DIR2,...
+ search for add-ons if no parameter given]),
, [enable_add_ons=yes])
-dnl Let the user avoid using TLS. Don't know why but...
-AC_ARG_WITH([tls],
- AC_HELP_STRING([--with-tls],
- [enable support for TLS]),
- [usetls=$withval],
- [usetls=yes])
-
-AC_ARG_WITH([__thread],
- AC_HELP_STRING([--without-__thread],
- [do not use TLS features even when supporting them]),
- [use__thread=$withval],
- [use__thread=yes])
-
AC_ARG_ENABLE([hidden-plt],
- AC_HELP_STRING([--disable-hidden-plt],
- [do not hide internal function calls to avoid PLT]),
+ AC_HELP_STRING([--disable-hidden-plt],
+ [do not hide internal function calls to avoid PLT]),
[hidden=$enableval],
[hidden=yes])
if test "x$hidden" = xno; then
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],
- [build static NSS modules @<:@default=no@:>@]),
+ AC_HELP_STRING([--enable-static-nss],
+ [build static NSS modules @<:@default=no@:>@]),
[static_nss=$enableval],
[static_nss=no])
dnl Enable static NSS also if we build no shared objects.
fi
AC_ARG_ENABLE([force-install],
- AC_HELP_STRING([--disable-force-install],
- [don't force installation of files from this package, even if they are older than the installed files]),
+ AC_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)
dnl On some platforms we allow dropping compatibility with all kernel
dnl versions.
AC_ARG_ENABLE([kernel],
- AC_HELP_STRING([--enable-kernel=VERSION],
- [compile for compatibility with kernel not older than VERSION]),
+ AC_HELP_STRING([--enable-kernel=VERSION],
+ [compile for compatibility with kernel not older than VERSION]),
[minimum_kernel=$enableval],
[])
dnl Prevent unreasonable values.
dnl appropriate.
AC_ARG_ENABLE([all-warnings],
AC_HELP_STRING([--enable-all-warnings],
- [enable all useful warnings gcc can issue]),
+ [enable all useful warnings gcc can issue]),
[all_warnings=$enableval],
[])
AC_SUBST(all_warnings)
-AC_CANONICAL_HOST
+AC_ARG_ENABLE([multi-arch],
+ AC_HELP_STRING([--enable-multi-arch],
+ [enable single DSO with optimizations for multiple architectures]),
+ [multi_arch=$enableval],
+ [multi_arch=default])
+
+AC_ARG_ENABLE([nss-crypt],
+ AC_HELP_STRING([--enable-nss-crypt],
+ [enable libcrypt to use nss]),
+ [nss_crypt=$enableval],
+ [nss_crypt=no])
+if test x$nss_crypt = xyes; then
+ nss_includes=-I$(nss-config --includedir 2>/dev/null)
+ if test $? -ne 0; then
+ AC_MSG_ERROR([cannot find include directory with nss-config])
+ fi
+ old_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $nss_includes"
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
+#include <hasht.h>
+#include <nsslowhash.h>
+void f (void) { NSSLOW_Init (); }])],
+ libc_cv_nss_crypt=yes,
+ AC_MSG_ERROR([
+cannot find NSS headers with lowlevel hash function interfaces]))
+ old_LIBS="$LIBS"
+ LIBS="$LIBS -lfreebl3"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([typedef int PRBool;
+#include <hasht.h>
+#include <nsslowhash.h>],
+ [NSSLOW_Init();])],
+ libc_cv_nss_crypt=yes,
+ AC_MSG_ERROR([
+cannot link program using lowlevel NSS hash functions]))
+ CFLAGS="$old_CFLAGS"
+ LIBS="$old_LIBS"
+else
+ libc_cv_nss_crypt=no
+fi
+AC_SUBST(libc_cv_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
# The way shlib-versions is used to generate soversions.mk uses a
# fairly simplistic model for name recognition that can't distinguish
config_os="`echo $config_os | sed 's/^unknown-//'`"
# Some configurations imply other options.
-case "$host_os" in
-# i586-linuxaout is mangled into i586-pc-linux-gnuaout
-linux*ecoff* | linux*aout* | gnu*aout* | gnu*ecoff*)
- ;;
-gnu* | linux* | freebsd* | netbsd* | sysv4* | solaris2* | irix6*)
- # These systems (almost) always use the ELF format.
- elf=yes
- ;;
-aix*)
- # These systems are always xcoff
- xcoff=yes
- elf=no
- ;;
-esac
+elf=yes
# The configure fragment of an add-on port can modify these to supplement
# or override the table in the case statement below. No fragment should
machine=$config_machine
vendor=$config_vendor
os=$config_os
+base_os=''
# config.guess on some IBM machines says `rs6000' instead of `powerpc'.
# Unify this here.
esac
])
+dnl Let sysdeps/*/preconfigure act here, like they can in add-ons.
+LIBC_PRECONFIGURE([$srcdir], [for sysdeps])
# An add-on can set this when it wants to disable the sanity check below.
libc_config_ok=no
;;
*)
test -d "$srcdir/$libc_add_on" || {
- if test -d "$libc_add_on"; then
+ if test -d "$libc_add_on"; then
libc_add_on="`pwd`/$libc_add_on"
else
AC_MSG_ERROR(add-on directory \"$libc_add_on\" does not exist)
libc_add_on_frag=$libc_add_on_srcdir/configure
libc_add_on_canonical=
+ libc_add_on_config_subdirs=
if test -r "$libc_add_on_frag"; then
AC_MSG_NOTICE(running configure fragment for add-on $libc_add_on)
libc_add_on_canonical=unknown
libc_add_on_subdirs=
. "$libc_add_on_frag"
test -z "$libc_add_on" || {
- configured_add_ons="$configured_add_ons $libc_add_on"
+ configured_add_ons="$configured_add_ons $libc_add_on"
if test "x$libc_add_on_canonical" = xunknown; then
AC_MSG_ERROR(fragment must set \$libc_add_on_canonical)
fi
test "$subdir_srcdir" = "\$(..)$d" || config_vars="$config_vars
$d-srcdir = $subdir_srcdir"
done
+ for d in $libc_add_on_config_subdirs; do
+ case "$d" in
+ /*) AC_MSG_ERROR(dnl
+fragment uses absolute path in \$libc_add_on_config_subdirs) ;;
+ esac
+ if test ! -d "$libc_add_on_srcdir/$d"; then
+ AC_MSG_ERROR(fragment wants to configure missing directory $d)
+ fi
+ case "$libc_add_on" in
+ /*) AC_MSG_ERROR(dnl
+relative path required for add-on using \$libc_add_on_config_subdirs) ;;
+ esac
+ subdirs="$subdirs $libc_add_on/$d"
+ done
}
fi
if test -n "$libc_add_on"; then
- if frags=`ls -d $libc_add_on_srcdir/sysdeps/*/preconfigure 2> /dev/null`
- then
- AC_MSG_CHECKING(add-on $libc_add_on for preconfigure fragments)
- for frag in $frags; do
- name=`echo "$frag" | sed 's@/[[^/]]*$@@;s@^.*/@@'`
- echo $ECHO_N "$name $ECHO_C" >&AS_MESSAGE_FD
- . "$frag"
- done
- AC_MSG_RESULT()
- fi
+ LIBC_PRECONFIGURE([$libc_add_on_srcdir], [add-on $libc_add_on for])
use_add_ons="$use_add_ons $libc_add_on"
add_ons_pfx="$add_ons_pfx $libc_add_on/"
test -z "$libc_add_on_canonical" ||
###
if test -z "$enable_hacker_mode" && test x"$libc_config_ok" != xyes; then
case "$machine-$host_os" in
- *-linux* | *-gnu* | arm*-none* | powerpc-aix4.3.*)
+ *-linux* | *-gnu*)
;;
*)
echo "*** The GNU C library is currently not available for this platform."
# type and particular chip. If an add-on configure fragment already set
# base_machine, we don't change it.
test -n "$base_machine" || case "$machine" in
-a29k | am29000) base_machine=a29k machine=a29k ;;
-alpha*) base_machine=alpha machine=alpha/$machine ;;
-c3[012]) base_machine=cx0 machine=cx0/c30 ;;
-c4[04]) base_machine=cx0 machine=cx0/c40 ;;
i[34567]86) base_machine=i386 machine=i386/$machine ;;
-ia64) base_machine=ia64 machine=ia64 ;;
-m88???) base_machine=m88k machine=m88k/$machine ;;
-m88k) base_machine=m88k machine=m88k/m88100 ;;
powerpc) base_machine=powerpc machine=powerpc/powerpc32 ;;
powerpc64) base_machine=powerpc machine=powerpc/powerpc64 ;;
s390) base_machine=s390 machine=s390/s390-32 ;;
AC_DEFINE(USE_REGPARMS)
fi
+# For the multi-arch option we need support in the assembler.
+AC_CACHE_CHECK([for assembler gnu_indirect_function symbol type support],
+ libc_cv_asm_gnu_indirect_function, [dnl
+cat > conftest.s <<EOF
+.type foo,%gnu_indirect_function
+EOF
+if ${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD;
+then
+ libc_cv_asm_gnu_indirect_function=yes
+else
+ libc_cv_asm_gnu_indirect_function=no
+fi
+rm -f conftest*])
+
+AC_MSG_CHECKING(whether .text pseudo-op must be used)
+AC_CACHE_VAL(libc_cv_dot_text, [dnl
+cat > conftest.s <<EOF
+.text
+EOF
+libc_cv_dot_text=
+if AC_TRY_COMMAND(${CC-cc} $ASFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
+ libc_cv_dot_text=.text
+fi
+rm -f conftest*])
+if test -z "$libc_cv_dot_text"; then
+ AC_MSG_RESULT(no)
+else
+ AC_MSG_RESULT(yes)
+fi
+
+AC_CACHE_CHECK(for assembler global-symbol directive,
+ libc_cv_asm_global_directive, [dnl
+libc_cv_asm_global_directive=UNKNOWN
+for ac_globl in .globl .global .EXPORT; do
+ cat > conftest.s <<EOF
+ ${libc_cv_dot_text}
+ ${ac_globl} foo
+foo:
+EOF
+ if AC_TRY_COMMAND(${CC-cc} $ASFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
+ libc_cv_asm_global_directive=${ac_globl}
+ fi
+ rm -f conftest*
+ test $libc_cv_asm_global_directive != UNKNOWN && break
+done])
+if test $libc_cv_asm_global_directive = UNKNOWN; then
+ AC_MSG_ERROR(cannot determine asm global directive)
+else
+ AC_DEFINE_UNQUOTED(ASM_GLOBAL_DIRECTIVE, ${libc_cv_asm_global_directive})
+fi
+
+AC_CACHE_CHECK(for assembler .type directive prefix,
+ libc_cv_asm_type_prefix, [dnl
+libc_cv_asm_type_prefix=no
+for ac_try_prefix in '@' '%' '#'; do
+ cat > conftest.s <<EOF
+ ${libc_cv_dot_text}
+ ${libc_cv_asm_global_directive} foo
+ .type foo, ${ac_try_prefix}object
+ .size foo, 1
+foo:
+ .byte 1
+EOF
+ if AC_TRY_COMMAND(${CC-cc} $ASFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
+ libc_cv_asm_type_prefix=${ac_try_prefix}
+ fi
+ rm -f conftest*
+ test "x$libc_cv_asm_type_prefix" != xno && break
+done])
+if test "x$libc_cv_asm_type_prefix" != xno; then
+ AC_DEFINE_UNQUOTED(ASM_TYPE_DIRECTIVE_PREFIX, ${libc_cv_asm_type_prefix})
+fi
+
+if test x"$libc_cv_asm_gnu_indirect_function" != xyes -o x"$libc_cv_asm_type_prefix" = xno; then
+ if test x"$multi_arch" = xyes; then
+ AC_MSG_ERROR([--enable-multi-arch support requires assembler and linker support])
+ else
+ multi_arch=no
+ fi
+fi
+if test x"$multi_arch" != xno; then
+ multi_arch_d=/multiarch
+fi
+
# Compute the list of sysdep directories for this configuration.
# This can take a while to compute.
sysdep_dir=$srcdir/sysdeps
# Make sco3.2v4 become sco3.2.4 and sunos4.1.1_U1 become sunos4.1.1.U1.
os="`echo $os | sed 's/\([0-9A-Z]\)[v_]\([0-9A-Z]\)/\1.\2/g'`"
-case "$os" in
+test "x$base_os" != x || case "$os" in
gnu*)
base_os=mach/hurd ;;
-netbsd* | 386bsd* | freebsd* | bsdi*)
- base_os=unix/bsd/bsd4.4 ;;
-osf* | sunos* | ultrix* | newsos* | dynix* | *bsd*)
- base_os=unix/bsd ;;
-sysv* | isc* | esix* | sco* | minix* | irix4* | linux*)
+linux*)
base_os=unix/sysv ;;
-irix6*)
- base_os=unix/sysv/irix6/$os ;;
-solaris[2-9]*)
- base_os=unix/sysv/sysv4 ;;
-hpux*)
- base_os=unix/sysv/hpux/$os ;;
-aix4.3*)
- base_os=unix/sysv/aix/aix4.3 ;;
-none)
- base_os=standalone ;;
-*)
- base_os='' ;;
esac
# For sunos4.1.1, try sunos4.1.1, then sunos4.1, then sunos4, then sunos.
test "$v" = / && continue
for o in /$ostry ''; do
test "$o" = / && continue
- for m in $mach ''; do
+ for m in $multi_arch_d $mach ''; do
for d in $add_ons_pfx ''; do
for a in $add_ons_sfx ''; do
if test -n "$m0$m0sub$b$v$o$m$msub"; then
- try_srcdir="${srcdir}/"
- case "$d" in
+ try_srcdir="${srcdir}/"
+ case "$d" in
/*) try_srcdir= ;;
esac
try="${d}sysdeps$m0$m0sub$b$v$o$m$msub$a"
done
done
+# If the assembler supports gnu_indirect_function symbol type and the
+# architecture supports multi-arch, we enable multi-arch by default.
+case $sysnames_add_ons$sysnames in
+*"$multi_arch_d"*)
+ ;;
+*)
+ test x"$multi_arch" = xdefault && multi_arch=no
+ ;;
+esac
+if test x"$multi_arch" != xno; then
+ AC_DEFINE(USE_MULTIARCH)
+fi
+AC_SUBST(multi_arch)
+
if test -z "$os_used" && test "$os" != none; then
AC_MSG_ERROR(Operating system $os is not supported.)
fi
# We have now validated the configuration.
-
-# If using ELF, look for an `elf' subdirectory of each machine directory.
-# We prepend these rather than inserting them whereever the machine appears
-# because things specified by the machine's ELF ABI should override
-# OS-specific things, and should always be the same for any OS on the
-# machine (otherwise what's the point of an ABI?).
-if test "$elf" = yes; then
- elf_dirs=
- for d in $add_ons_pfx ''; do
- for m in $mach; do
- if test -d $srcdir/${d}sysdeps$m/elf; then
- elf_dirs="$elf_dirs ${d}sysdeps$m/elf"
- fi
- done
- done
- sysnames="`echo $elf_dirs | sed -e 's,//,/,g'` $sysnames"
-fi
-
-
# Expand the list of system names into a full list of directories
# from each element's parent name and Implies file (if present).
set $sysnames
test -n "$enable_debug_configure" &&
echo "[DEBUG]: name/Implies $xsrcdir$name/Implies" >&2
- if test -f $xsrcdir$name/Implies; then
- # Collect more names from the `Implies' file (removing comments).
- implied_candidate="`sed 's/#.*$//' < $xsrcdir$name/Implies`"
- implied=
- for x in $implied_candidate; do
- found=no
- if test -d $xsrcdir$name_base/$x; then
- implied="$implied $name_base/$x";
- found=yes
- fi
- for d in $add_ons_pfx ''; do
- try="${d}sysdeps/$x"
- case $d in
- /*) try_srcdir= ;;
- *) try_srcdir=$srcdir/ ;;
- esac
- test -n "$enable_debug_configure" &&
- echo "[DEBUG]: $name implied $x try($d) {$try_srcdir}$try" >&2
- if test $try != $xsrcdir$name_base/$x && test -d $try_srcdir$try;
- then
- implied="$implied $try"
+ for implies_file in Implies Implies-before Implies-after; do
+ implies_type=`echo $implies_file | sed s/-/_/`
+ eval ${implies_type}=
+ if test -f $xsrcdir$name/$implies_file; then
+ # Collect more names from the `Implies' file (removing comments).
+ implied_candidate="`sed 's/#.*$//' < $xsrcdir$name/$implies_file`"
+ for x in $implied_candidate; do
+ found=no
+ if test -d $xsrcdir$name_base/$x; then
+ eval "${implies_type}=\"\$${implies_type} \$name_base/\$x\""
found=yes
- case "$sysnames_add_ons" in
- *" $d "*) ;;
- *|'') sysnames_add_ons="$sysnames_add_ons $d" ;;
+ fi
+ for d in $add_ons_pfx ''; do
+ try="${d}sysdeps/$x"
+ case $d in
+ /*) try_srcdir= ;;
+ *) try_srcdir=$srcdir/ ;;
esac
+ test -n "$enable_debug_configure" &&
+ echo "[DEBUG]: $name $implies_file $x try($d) {$try_srcdir}$try" >&2
+ if test $try != $xsrcdir$name_base/$x && test -d $try_srcdir$try;
+ then
+ eval "${implies_type}=\"\$${implies_type} \$try\""
+ found=yes
+ case "$sysnames_add_ons" in
+ *" $d "*) ;;
+ *|'') sysnames_add_ons="$sysnames_add_ons $d" ;;
+ esac
+ fi
+ done
+ if test $found = no; then
+ AC_MSG_WARN($name/$implies_file specifies nonexistent $x)
fi
done
- if test $found = no; then
- AC_MSG_WARN($name/Implies specifies nonexistent $x)
- fi
- done
- else
- implied=
- fi
+ fi
+ done
# Add NAME to the list of names.
names="$names $name"
parent="`echo $name | sed -n -e 's=/[^/]*$==' -e '/sysdeps$/q' -e p`"
changequote([,])dnl
+ test -n "$enable_debug_configure" &&
+ echo "[DEBUG]: $name Implies='$Implies' rest='$*' parent='$parent' \
+Implies_before='$Implies_after' Implies_after='$Implies_after'" >&2
+
# Add the names implied by NAME, and NAME's parent (if it has one), to
# the list of names to be processed (the argument list). We prepend the
# implied names to the list and append the parent. We want implied
# configuration components; this ensures that for sysv4, unix/common
# (implied by unix/sysv/sysv4) comes before unix/sysv (in ostry (here $*)
# after sysv4).
- sysnames="`echo $implied $* $parent`"
+ sysnames="`echo $Implies $* $Implies_before $parent $Implies_after`"
test -n "$sysnames" && set $sysnames
done
# Add the default directories.
-default_sysnames=sysdeps/generic
-if test "$elf" = yes; then
- default_sysnames="sysdeps/generic/elf $default_sysnames"
-fi
+default_sysnames="sysdeps/generic"
sysnames="$names $default_sysnames"
AC_SUBST(sysnames)
# The other names were emitted during the scan.
done
;;
*)
- test -d "$f" || { test -e "$f" && exit 88; }
+ test -d "$f" || { test -e "$f" && exit 88; }
;;
esac
done)
fi
AC_PROG_LN_S
-AC_PROG_CC
-if test $host != $build; then
- AC_CHECK_PROGS(BUILD_CC, gcc cc)
-fi
-AC_SUBST(cross_compiling)
-AC_PROG_CPP
-# We need the C++ compiler only for testing.
-AC_PROG_CXX
LIBC_PROG_BINUTILS
AC_SUBST(MIG)dnl Needed by sysdeps/mach/configure.in
-# Accept binutils 2.13 or newer.
+# Accept binutils 2.20 or newer.
AC_CHECK_PROG_VER(AS, $AS, --version,
[GNU assembler.* \([0-9]*\.[0-9.]*\)],
- [2.1[3-9]*], AS=: critic_missing="$critic_missing as")
+ [2.1[0-9][0-9]*|2.[2-9][0-9]*|[3-9].*|[1-9][0-9]*], AS=: critic_missing="$critic_missing as")
AC_CHECK_PROG_VER(LD, $LD, --version,
[GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
- [2.1[3-9]*], LD=: critic_missing="$critic_missing ld")
-
-# We need the physical current working directory. We cannot use the
-# "pwd -P" shell builtin since that's not portable. Instead we try to
-# find a pwd binary. Note that assigning to the PWD environment
-# variable might have some interesting side effects, so we don't do
-# that.
-AC_PATH_PROG(PWD_P, pwd, no)
-if test "$PWD_P" = no; then
- AC_MSG_ERROR(*** A pwd binary could not be found.)
-fi
+ [2.1[0-9][0-9]*|2.[2-9][0-9]*|[3-9].*|[1-9][0-9]*], LD=: critic_missing="$critic_missing ld")
# These programs are version sensitive.
AC_CHECK_TOOL_PREFIX
AC_CHECK_PROG_VER(CC, ${ac_tool_prefix}gcc ${ac_tool_prefix}cc, -v,
- [version \([egcygnustpi-]*[0-9.]*\)], [3.4* | 4.[0-9]* ],
+ [version \([egcygnustpi-]*[0-9.]*\)], [4.[3-9].* | 4.[1-9][0-9].* | [5-9].* ],
critic_missing="$critic_missing gcc")
AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
[GNU Make[^0-9]*\([0-9][0-9.]*\)],
MSGFMT=: aux_missing="$aux_missing msgfmt")
AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
[GNU texinfo.* \([0-9][0-9.]*\)],
- [4.*],
+ [4.[5-9]*|4.[1-9][0-9]*|[5-9].*],
MAKEINFO=: aux_missing="$aux_missing makeinfo")
AC_CHECK_PROG_VER(SED, sed, --version,
[GNU sed version \([0-9]*\.[0-9.]*\)],
[3.0[2-9]*|3.[1-9]*|[4-9]*],
SED=: aux_missing="$aux_missing sed")
+AC_CHECK_TOOL(READELF, readelf, false)
+AC_CHECK_TOOL(NM, nm, false)
+
AC_CHECK_PROGS(AUTOCONF, autoconf, no)
case "x$AUTOCONF" in
xno|x|x:) AUTOCONF=no ;;
test $libc_cv_autoconf_works = yes || AUTOCONF=no
;;
esac
-if test "x$with_cvs" = xyes && test "x$AUTOCONF" = xno; then
- # If --without-cvs they probably won't change configure.in, so no complaints.
+if test "x$AUTOCONF" = xno; then
aux_missing="$aux_missing autoconf"
fi
# header directory and add that to the list. NOTE: Only does the right
# thing on a system that doesn't need fixincludes. (Not presently a problem.)
if test -n "$sysheaders"; then
- ccheaders=`$CC -print-file-name=include`
- SYSINCLUDES="-nostdinc -isystem $ccheaders \
+ SYSINCLUDES=-nostdinc
+ for d in include include-fixed; do
+ i=`$CC -print-file-name="$d"` && test "x$i" != x && test "x$i" != "x$d" &&
+ SYSINCLUDES="$SYSINCLUDES -isystem $i"
+ done
+ SYSINCLUDES="$SYSINCLUDES \
-isystem `echo $sysheaders | sed 's/:/ -isystem /g'`"
if test -n "$CXX"; then
+ CXX_SYSINCLUDES=
cxxversion=`$CXX -dumpversion 2>&AS_MESSAGE_LOG_FD` &&
cxxmachine=`$CXX -dumpmachine 2>&AS_MESSAGE_LOG_FD` &&
- cxxheaders=`$CXX -print-file-name=../../../../include/c++/`"$cxxversion" &&
- CXX_SYSINCLUDES="-isystem $cxxheaders \
+ for d in include "$cxxmachine/include"; do
+ i=../../../../$d/c++/$cxxversion
+ cxxheaders=`$CXX -print-file-name="$i"` &&
+ test "x$cxxheaders" != x && test "x$i" != "x$cxxheaders" &&
+ CXX_SYSINCLUDES="$CXX_SYSINCLUDES -isystem $cxxheaders \
-isystem $cxxheaders/$cxxmachine -isystem $cxxheaders/backward"
+ done
fi
fi
AC_SUBST(SYSINCLUDES)
AC_SUBST(CXX_SYSINCLUDES)
-# check if ranlib is necessary
-AC_CACHE_CHECK(whether ranlib is necessary, libc_cv_ranlib_necessary, [dnl
-cat > conftest.c <<EOF
-int a;
-char b;
-void c(void) {}
-EOF
-$CC $CFLAGS $CPPFLAGS -c conftest.c
-$AR cr conftest.a conftest.o
-cp conftest.a conftest2.a
-$RANLIB conftest.a
-if cmp -s conftest.a conftest2.a; then
- libc_cv_ranlib_necessary=no
-else
- libc_cv_ranlib_necessary=yes
-fi
-rm -rf conftest*])
-if test "$libc_cv_ranlib_necessary" = no; then
- RANLIB=:
-fi
-
# Test if LD_LIBRARY_PATH contains the notation for the current directory
# since this would lead to problems installing/building glibc.
# LD_LIBRARY_PATH contains the current directory if one of the following
$PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin)
AC_PATH_PROG(BISON, bison, no, $PATH:/usr/local/bin:/usr/bin:/bin)
-AC_CACHE_CHECK(for signed size_t type, libc_cv_signed_size_t, [dnl
-echo '#include <stddef.h>
-FOOBAR __SIZE_TYPE__ FOOBAR' > conftest.c
-if eval "$ac_cpp conftest.c 2>/dev/null" \
-| grep '^FOOBAR.*unsigned.*FOOBAR$' >/dev/null; then
- libc_cv_signed_size_t=no
-else
- libc_cv_signed_size_t=yes
-fi
-rm -f conftest*])
-if test $libc_cv_signed_size_t = yes; then
- dnl Do this by hand instead of AC_DEFINE so can add #undef to avoid warnings.
- cat >> confdefs.h <<\EOF
-#undef __SIZE_TYPE__
-#define __SIZE_TYPE__ unsigned
-EOF
-fi
-
AC_CACHE_CHECK(for libc-friendly stddef.h, libc_cv_friendly_stddef, [dnl
AC_TRY_COMPILE(dnl
[#define __need_size_t
#error stddef.h ignored __need_*
#endif
if (&size == NULL || &wchar == NULL) abort ();],
- libc_cv_friendly_stddef=yes,
- libc_cv_friendly_stddef=no)])
+ libc_cv_friendly_stddef=yes,
+ libc_cv_friendly_stddef=no)])
if test $libc_cv_friendly_stddef = yes; then
config_vars="$config_vars
override stddef.h = # The installed <stddef.h> seems to be libc-friendly."
asm-CPPFLAGS = -P # The assembler can't grok cpp's # line directives."
fi
-AC_MSG_CHECKING(whether .text pseudo-op must be used)
-AC_CACHE_VAL(libc_cv_dot_text, [dnl
-cat > conftest.s <<EOF
-.text
-EOF
-libc_cv_dot_text=
-if AC_TRY_COMMAND(${CC-cc} $ASFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
- libc_cv_dot_text=.text
-fi
-rm -f conftest*])
-if test -z "$libc_cv_dot_text"; then
- AC_MSG_RESULT(no)
-else
- AC_MSG_RESULT(yes)
-fi
-
-AC_CACHE_CHECK(for assembler global-symbol directive,
- libc_cv_asm_global_directive, [dnl
-libc_cv_asm_global_directive=UNKNOWN
-for ac_globl in .globl .global .EXPORT; do
- cat > conftest.s <<EOF
- ${libc_cv_dot_text}
- ${ac_globl} foo
-foo:
-EOF
- if AC_TRY_COMMAND(${CC-cc} $ASFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
- libc_cv_asm_global_directive=${ac_globl}
- fi
- rm -f conftest*
- test $libc_cv_asm_global_directive != UNKNOWN && break
-done])
-if test $libc_cv_asm_global_directive = UNKNOWN; then
- AC_MSG_ERROR(cannot determine asm global directive)
-else
- AC_DEFINE_UNQUOTED(ASM_GLOBAL_DIRECTIVE, ${libc_cv_asm_global_directive})
-fi
-
AC_CACHE_CHECK(for .set assembler directive, libc_cv_asm_set_directive, [dnl
cat > conftest.s <<EOF
${libc_cv_dot_text}
AC_DEFINE(HAVE_ASM_SET_DIRECTIVE)
fi
-AC_CACHE_CHECK(for assembler .type directive prefix,
- libc_cv_asm_type_prefix, [dnl
-libc_cv_asm_type_prefix=no
-for ac_try_prefix in '@' '%' '#'; do
- cat > conftest.s <<EOF
- ${libc_cv_dot_text}
- ${libc_cv_asm_global_directive} foo
- .type foo, ${ac_try_prefix}object
- .size foo, 1
-foo:
- .byte 1
+AC_CACHE_CHECK(for assembler gnu_unique_object symbol type,
+ libc_cv_asm_unique_object, [dnl
+cat > conftest.s <<EOF
+${libc_cv_dot_text}
+_sym:
+.type _sym, ${libc_cv_asm_type_prefix}gnu_unique_object
EOF
- if AC_TRY_COMMAND(${CC-cc} $ASFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
- libc_cv_asm_type_prefix=${ac_try_prefix}
- fi
- rm -f conftest*
- test "x$libc_cv_asm_type_prefix" != xno && break
-done])
-if test "x$libc_cv_asm_type_prefix" != xno; then
- AC_DEFINE_UNQUOTED(ASM_TYPE_DIRECTIVE_PREFIX, ${libc_cv_asm_type_prefix})
+if ${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
+ libc_cv_asm_unique_object=yes
+else
+ libc_cv_asm_unique_object=no
+fi
+rm -f conftest*])
+if test $libc_cv_asm_unique_object = yes; then
+ AC_DEFINE(HAVE_ASM_UNIQUE_OBJECT)
fi
AC_CACHE_CHECK(for .symver assembler directive, libc_cv_asm_symver_directive,
};
VERS_2 {
- global: sym;
+ global: sym;
} VERS_1;
EOF
if ${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
fi
AC_SUBST(VERSIONING)
-if test $elf = yes && test $shared != no && test $VERSIONING = no; then
+if test $shared != no && test $VERSIONING = no; then
echo "\
*** WARNING: You should not compile GNU libc without versioning. Not using
*** versioning will introduce incompatibilities so that old binaries
*** will not run anymore.
*** For versioning you need recent binutils (binutils-2.8.1.0.23 or newer)."
fi
-if test $elf = yes; then
- AC_CACHE_CHECK(for .previous assembler directive,
- libc_cv_asm_previous_directive, [dnl
- cat > conftest.s <<EOF
+AC_CACHE_CHECK(for .previous assembler directive,
+ libc_cv_asm_previous_directive, [dnl
+cat > conftest.s <<EOF
.section foo_section
.previous
EOF
+if AC_TRY_COMMAND(${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
+ libc_cv_asm_previous_directive=yes
+else
+ libc_cv_asm_previous_directive=no
+fi
+rm -f conftest*])
+if test $libc_cv_asm_previous_directive = yes; then
+ AC_DEFINE(HAVE_ASM_PREVIOUS_DIRECTIVE)
+else
+ AC_CACHE_CHECK(for .popsection assembler directive,
+ libc_cv_asm_popsection_directive, [dnl
+ cat > conftest.s <<EOF
+.pushsection foo_section
+.popsection
+EOF
if AC_TRY_COMMAND(${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
- libc_cv_asm_previous_directive=yes
+ libc_cv_asm_popsection_directive=yes
else
- libc_cv_asm_previous_directive=no
+ libc_cv_asm_popsection_directive=no
fi
rm -f conftest*])
- if test $libc_cv_asm_previous_directive = yes; then
- AC_DEFINE(HAVE_ASM_PREVIOUS_DIRECTIVE)
- else
- AC_CACHE_CHECK(for .popsection assembler directive,
- libc_cv_asm_popsection_directive, [dnl
- cat > conftest.s <<EOF
-.pushsection foo_section
-.popsection
-EOF
- if AC_TRY_COMMAND(${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
- libc_cv_asm_popsection_directive=yes
- else
- libc_cv_asm_popsection_directive=no
- fi
- rm -f conftest*])
- if test $libc_cv_asm_popsection_directive = yes; then
- AC_DEFINE(HAVE_ASM_POPSECTION_DIRECTIVE)
- fi
+ if test $libc_cv_asm_popsection_directive = yes; then
+ AC_DEFINE(HAVE_ASM_POPSECTION_DIRECTIVE)
fi
- AC_CACHE_CHECK(for .protected and .hidden assembler directive,
- libc_cv_asm_protected_directive, [dnl
- cat > conftest.s <<EOF
+fi
+AC_CACHE_CHECK(for .protected and .hidden assembler directive,
+ libc_cv_asm_protected_directive, [dnl
+cat > conftest.s <<EOF
.protected foo
foo:
.hidden bar
bar:
EOF
- if AC_TRY_COMMAND(${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
- libc_cv_asm_protected_directive=yes
- else
- AC_MSG_ERROR(assembler support for symbol visibility is required)
- fi
- rm -f conftest*])
+if AC_TRY_COMMAND(${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
+ libc_cv_asm_protected_directive=yes
+else
+ AC_MSG_ERROR(assembler support for symbol visibility is required)
+fi
+rm -f conftest*])
- if test $libc_cv_asm_protected_directive = yes; then
- AC_CACHE_CHECK(whether __attribute__((visibility())) is supported,
+if test $libc_cv_asm_protected_directive = yes; then
+ AC_CACHE_CHECK(whether __attribute__((visibility())) is supported,
libc_cv_visibility_attribute,
[cat > conftest.c <<EOF
int foo __attribute__ ((visibility ("hidden"))) = 1;
fi
fi
fi
- rm -f conftest.[cs]
+ rm -f conftest.{c,s}
])
- if test $libc_cv_visibility_attribute != yes; then
- AC_MSG_ERROR(compiler support for visibility attribute is required)
- fi
+ if test $libc_cv_visibility_attribute != yes; then
+ AC_MSG_ERROR(compiler support for visibility attribute is required)
fi
+fi
- if test $libc_cv_visibility_attribute = yes; then
- AC_CACHE_CHECK(for broken __attribute__((visibility())),
+if test $libc_cv_visibility_attribute = yes; then
+ AC_CACHE_CHECK(for broken __attribute__((visibility())),
libc_cv_broken_visibility_attribute,
[cat > conftest.c <<EOF
int foo (int x);
int bar (int x) { return x; }
EOF
libc_cv_broken_visibility_attribute=yes
- if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s1>&AS_MESSAGE_LOG_FD); then
+ if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
changequote(,)dnl
if grep '\.hidden[ _]foo' conftest.s >/dev/null; then
changequote([,])dnl
fi
rm -f conftest.c conftest.s
])
- if test $libc_cv_broken_visibility_attribute = yes; then
- AC_MSG_ERROR(working compiler support for visibility attribute is required)
- fi
+ if test $libc_cv_broken_visibility_attribute = yes; then
+ AC_MSG_ERROR(working compiler support for visibility attribute is required)
fi
+fi
- AC_CACHE_CHECK(for broken __attribute__((alias())),
- libc_cv_broken_alias_attribute,
- [cat > conftest.c <<EOF
- extern int foo (int x) __asm ("xyzzy");
- int bar (int x) { return x; }
- extern __typeof (bar) foo __attribute ((weak, alias ("bar")));
- extern int dfoo;
- extern __typeof (dfoo) dfoo __asm ("abccb");
- int dfoo = 1;
+AC_CACHE_CHECK(for broken __attribute__((alias())),
+ libc_cv_broken_alias_attribute,
+ [cat > conftest.c <<EOF
+ extern int foo (int x) __asm ("xyzzy");
+ int bar (int x) { return x; }
+ extern __typeof (bar) foo __attribute ((weak, alias ("bar")));
+ extern int dfoo;
+ extern __typeof (dfoo) dfoo __asm ("abccb");
+ int dfoo = 1;
EOF
- libc_cv_broken_alias_attribute=yes
- if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
- if grep 'xyzzy' conftest.s >/dev/null &&
- grep 'abccb' conftest.s >/dev/null; then
- libc_cv_broken_alias_attribute=no
- fi
- fi
- rm -f conftest.c conftest.s
- ])
- if test $libc_cv_broken_alias_attribute = yes; then
- AC_MSG_ERROR(working alias attribute support required)
- fi
-
- if test $libc_cv_visibility_attribute = yes; then
- AC_CACHE_CHECK(whether to put _rtld_local into .sdata section,
+ libc_cv_broken_alias_attribute=yes
+ if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
+ if grep 'xyzzy' conftest.s >/dev/null &&
+ grep 'abccb' conftest.s >/dev/null; then
+ libc_cv_broken_alias_attribute=no
+ fi
+ fi
+ rm -f conftest.c conftest.s
+ ])
+if test $libc_cv_broken_alias_attribute = yes; then
+ AC_MSG_ERROR(working alias attribute support required)
+fi
+
+if test $libc_cv_visibility_attribute = yes; then
+ AC_CACHE_CHECK(whether to put _rtld_local into .sdata section,
libc_cv_have_sdata_section,
[echo "int i;" > conftest.c
libc_cv_have_sdata_section=no
fi
rm -f conftest.c conftest.so
])
- if test $libc_cv_have_sdata_section = yes; then
- AC_DEFINE(HAVE_SDATA_SECTION)
- fi
+ if test $libc_cv_have_sdata_section = yes; then
+ AC_DEFINE(HAVE_SDATA_SECTION)
fi
+fi
- AC_CACHE_CHECK(for .preinit_array/.init_array/.fini_array support,
- libc_cv_initfini_array, [dnl
- cat > conftest.c <<EOF
-int _start (void) { return 0; }
-int __start (void) { return 0; }
+AC_CACHE_CHECK(for .preinit_array/.init_array/.fini_array support,
+ libc_cv_initfini_array, [dnl
+LIBC_TRY_LINK_STATIC([
int foo (void) { return 1; }
int (*fp) (void) __attribute__ ((section (".init_array"))) = foo;
-EOF
- if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -o conftest conftest.c
- -static -nostartfiles -nostdlib 1>&AS_MESSAGE_LOG_FD])
- then
- if readelf -S conftest | fgrep INIT_ARRAY > /dev/null; then
- libc_cv_initfini_array=yes
- else
- libc_cv_initfini_array=no
- fi
+],
+ [if $READELF -S conftest | fgrep INIT_ARRAY > /dev/null; then
+ libc_cv_initfini_array=yes
else
libc_cv_initfini_array=no
- fi
- rm -f conftest*])
- if test $libc_cv_initfini_array != yes; then
- AC_MSG_ERROR([Need linker with .init_array/.fini_array support.])
- fi
+ fi],
+ [libc_cv_initfini_array=no])
+])
+if test $libc_cv_initfini_array != yes; then
+ AC_MSG_ERROR([Need linker with .init_array/.fini_array support.])
+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
+AC_CACHE_CHECK(for libunwind-support in compiler,
+ libc_cv_cc_with_libunwind, [
+ cat > conftest.c <<EOF
int main (void) { return 0; }
EOF
- if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -static -o conftest \
- conftest.c -v 2>&1 >/dev/null | grep -q " -lunwind "; then
- libc_cv_cc_with_libunwind=yes
- else
- libc_cv_cc_with_libunwind=no
- fi
- rm -f conftest*])
- AC_SUBST(libc_cv_cc_with_libunwind)
- if test $libc_cv_cc_with_libunwind = yes; then
- AC_DEFINE(HAVE_CC_WITH_LIBUNWIND)
+ if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -static -o conftest \
+ conftest.c -v 2>&1 >/dev/null | grep -q " -lunwind "; then
+ libc_cv_cc_with_libunwind=yes
+ else
+ libc_cv_cc_with_libunwind=no
fi
+ rm -f conftest*])
+AC_SUBST(libc_cv_cc_with_libunwind)
+if test $libc_cv_cc_with_libunwind = yes; then
+ AC_DEFINE(HAVE_CC_WITH_LIBUNWIND)
+fi
- AC_CACHE_CHECK(for -z nodelete option,
- libc_cv_z_nodelete, [dnl
- cat > conftest.c <<EOF
+AC_CACHE_CHECK(for -z nodelete option,
+ libc_cv_z_nodelete, [dnl
+cat > conftest.c <<EOF
int _start (void) { return 42; }
EOF
- if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
- -fPIC -shared -o conftest.so conftest.c
- -nostartfiles -nostdlib
- -Wl,--enable-new-dtags,-z,nodelete 1>&AS_MESSAGE_LOG_FD])
- then
- libc_cv_z_nodelete=yes
- else
- AC_MSG_ERROR(linker with -z nodelete support required)
- fi
- rm -f conftest*])
+if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
+ -fPIC -shared -o conftest.so conftest.c
+ -nostartfiles -nostdlib
+ -Wl,--enable-new-dtags,-z,nodelete 1>&AS_MESSAGE_LOG_FD])
+then
+ libc_cv_z_nodelete=yes
+else
+ AC_MSG_ERROR(linker with -z nodelete support required)
+fi
+rm -f conftest*])
- AC_CACHE_CHECK(for -z nodlopen option,
- libc_cv_z_nodlopen, [dnl
- cat > conftest.c <<EOF
+AC_CACHE_CHECK(for -z nodlopen option,
+ libc_cv_z_nodlopen, [dnl
+cat > conftest.c <<EOF
int _start (void) { return 42; }
EOF
- if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
+if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
-fPIC -shared -o conftest.so conftest.c
-nostartfiles -nostdlib
-Wl,--enable-new-dtags,-z,nodlopen 1>&AS_MESSAGE_LOG_FD])
- then
- libc_cv_z_nodlopen=yes
- else
- AC_MSG_ERROR(linker with -z nodlopen support required)
- fi
- rm -f conftest*])
+then
+ libc_cv_z_nodlopen=yes
+else
+ AC_MSG_ERROR(linker with -z nodlopen support required)
+fi
+rm -f conftest*])
- AC_CACHE_CHECK(for -z initfirst option,
- libc_cv_z_initfirst, [dnl
- cat > conftest.c <<EOF
+AC_CACHE_CHECK(for -z initfirst option,
+ libc_cv_z_initfirst, [dnl
+cat > conftest.c <<EOF
int _start (void) { return 42; }
EOF
- if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
+if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
-fPIC -shared -o conftest.so conftest.c
-nostartfiles -nostdlib
-Wl,--enable-new-dtags,-z,initfirst 1>&AS_MESSAGE_LOG_FD])
- then
- libc_cv_z_initfirst=yes
- else
- AC_MSG_ERROR(linker with -z initfirst support required)
- fi
- rm -f conftest*])
+then
+ libc_cv_z_initfirst=yes
+else
+ AC_MSG_ERROR(linker with -z initfirst support required)
+fi
+rm -f conftest*])
- case "$base_machine" in
-changequote(,)dnl
- i[34567]86 | x86_64 | powerpc* | s390* | sparc* | alpha*)
-changequote([,])dnl
- AC_CACHE_CHECK(for -z relro option,
- libc_cv_z_relro, [dnl
- libc_cv_z_relro=no
- if AC_TRY_COMMAND([${CC-cc} -v --help 2>&1|grep "z relro" 1>&AS_MESSAGE_LOG_FD])
- then
- if AC_TRY_COMMAND([${CC-cc} -Wl,--verbose 2>&1|grep DATA_SEGMENT_RELRO_END 1>&AS_MESSAGE_LOG_FD])
- then
- libc_cv_z_relro=yes
- fi
- fi])
- if test "$libc_cv_z_relro" = no; then
- AC_MSG_ERROR(linker with -z relro support required)
- fi
- ;;
- *) ;;
- esac
+# Add-on fragments can set these for other machines.
+libc_commonpagesize=${libc_commonpagesize:-no}
+libc_relro_required=${libc_relro_required:-no}
+case "$base_machine" in
+ i[[34567]]86 | x86_64 | powerpc* | s390*)
+ libc_commonpagesize=0x1000
+ libc_relro_required=yes
+ ;;
+ sparc*)
+ libc_commonpagesize=0x2000
+ libc_relro_required=yes
+ ;;
+esac
- AC_CACHE_CHECK(for -Bgroup option,
- libc_cv_Bgroup, [dnl
- cat > conftest.c <<EOF
+if test $libc_commonpagesize != no; then
+ AC_CACHE_CHECK(for -z relro option,
+ libc_cv_z_relro, [dnl
+ libc_cv_z_relro=no
+ AC_LANG_CONFTEST([AC_LANG_SOURCE([[
int _start (void) { return 42; }
+extern void _exit (int);
+/* Since these pointers are const, they should go in rodata.
+ Since they refer to functions that have to be resolved by
+ dynamic linking, they should instead go in RELRO data. */
+const void *const relro[] = { &_start, &_exit, 0 };
+/* GNU ld fails to produce RELRO data when it's very small and there is no
+ normal writable data following it, or if only uninitialized (.bss) data
+ follows it, or only very small writable data. */
+int data[0x10000] = { 1, };
+]])])
+ cat > conftest.awk <<\EOF
+BEGIN {
+ result = "no"
+ commonpagesize = strtonum(commonpagesize)
+}
+{ print "LINE:", $0 > "/dev/stderr" }
+$1 == "GNU_RELRO" {
+ vaddr = strtonum($3)
+ memsz = strtonum($6)
+ end = vaddr + memsz
+ printf "vaddr %#x memsz %#x end %#x commonpagesize %#x\n", \
+ vaddr, memsz, end, commonpagesize > "/dev/stderr"
+ result = (end % commonpagesize == 0) ? "yes" : "broken"
+}
+END { print result }
EOF
- if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
- -fPIC -shared -o conftest.so conftest.c
- -Wl,-Bgroup -nostdlib 1>&AS_MESSAGE_LOG_FD])
+ AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
+ -fPIC -shared -o conftest.so conftest.c
+ -nostartfiles -nostdlib
+ -Wl,-z,relro 1>&AS_MESSAGE_LOG_FD]) &&
+ AC_TRY_COMMAND([$READELF -Wl conftest.so > conftest.ph]) &&
+ AC_TRY_COMMAND([
+ $AWK -v commonpagesize=$libc_commonpagesize -f conftest.awk
+ conftest.ph > conftest.cps
+ ]) &&
+ libc_cv_z_relro=`cat conftest.cps 2>&AS_MESSAGE_LOG_FD`
+ rm -f conftest*])
+ if { test "x$libc_relro_required" = xyes &&
+ test "x$libc_cv_z_relro" != xyes
+ }
then
- libc_cv_Bgroup=yes
- else
- libc_cv_Bgroup=no
+ AC_MSG_ERROR(linker with -z relro support required)
fi
- rm -f conftest*])
- AC_SUBST(libc_cv_Bgroup)
-
- AC_CACHE_CHECK(for libgcc_s suffix,
- libc_cv_libgcc_s_suffix, [dnl
- cat > conftest.c <<EOF
-int main (void) { return 0; }
-EOF
-changequote(,)dnl
- libc_cv_libgcc_s_suffix=`${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
- -fPIC -shared -shared-libgcc -o conftest.so \
- conftest.c -v 2>&1 >/dev/null \
- | sed -n 's/^.* -lgcc_s\([^ ]*\) .*$/\1/p'`
-changequote([,])dnl
- rm -f conftest*])
- AC_SUBST(libc_cv_libgcc_s_suffix)
+else
+ AC_MSG_WARN([missing architecture parameter to check for working -z relro])
+fi
- AC_CACHE_CHECK(for --as-needed option,
- libc_cv_as_needed, [dnl
- cat > conftest.c <<EOF
-int main (void) { return 0; }
+AC_CACHE_CHECK(for -Bgroup option,
+ libc_cv_Bgroup, [dnl
+cat > conftest.c <<EOF
+int _start (void) { return 42; }
EOF
- if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
- -fPIC -shared -o conftest.so conftest.c
- -lgcc_s$libc_cv_libgcc_s_suffix -Wl,--as-needed
- -nostdlib 1>&AS_MESSAGE_LOG_FD])
- then
- libc_cv_as_needed=yes
- else
- libc_cv_as_needed=no
- fi
- rm -f conftest*])
- AC_SUBST(libc_cv_as_needed)
+if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
+ -fPIC -shared -o conftest.so conftest.c
+ -Wl,-Bgroup -nostdlib 1>&AS_MESSAGE_LOG_FD])
+then
+ libc_cv_Bgroup=yes
+else
+ libc_cv_Bgroup=no
+fi
+rm -f conftest*])
+AC_SUBST(libc_cv_Bgroup)
- ASFLAGS_config=
- AC_CACHE_CHECK(whether --noexecstack is desirable for .S files,
- libc_cv_as_noexecstack, [dnl
- cat > conftest.c <<EOF
+ASFLAGS_config=
+AC_CACHE_CHECK(whether --noexecstack is desirable for .S files,
+ libc_cv_as_noexecstack, [dnl
+cat > conftest.c <<EOF
void foo (void) { }
EOF
- if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS
- -S -o conftest.s conftest.c 1>&AS_MESSAGE_LOG_FD]) \
- && grep -q .note.GNU-stack conftest.s \
- && AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -Wa,--noexecstack
- -c -o conftest.o conftest.s 1>&AS_MESSAGE_LOG_FD])
- then
- libc_cv_as_noexecstack=yes
- else
- libc_cv_as_noexecstack=no
- fi
- rm -f conftest*])
- if test $libc_cv_as_noexecstack = yes; then
- ASFLAGS_config="$ASFLAGS_config -Wa,--noexecstack"
- fi
- AC_SUBST(ASFLAGS_config)
+if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS
+ -S -o conftest.s conftest.c 1>&AS_MESSAGE_LOG_FD]) \
+ && grep -q .note.GNU-stack conftest.s \
+ && AC_TRY_COMMAND([${CC-cc} $ASFLAGS -Wa,--noexecstack
+ -c -o conftest.o conftest.s 1>&AS_MESSAGE_LOG_FD])
+then
+ libc_cv_as_noexecstack=yes
+else
+ libc_cv_as_noexecstack=no
+fi
+rm -f conftest*])
+if test $libc_cv_as_noexecstack = yes; then
+ ASFLAGS_config="$ASFLAGS_config -Wa,--noexecstack"
+fi
+AC_SUBST(ASFLAGS_config)
- AC_CACHE_CHECK(for -z combreloc,
- libc_cv_z_combreloc, [dnl
- cat > conftest.c <<EOF
+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
+if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
-fPIC -shared -o conftest.so conftest.c
-nostdlib -nostartfiles
-Wl,-z,combreloc 1>&AS_MESSAGE_LOG_FD])
- then
+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.
- if readelf -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
- libc_cv_z_combreloc=yes
- else
- libc_cv_z_combreloc=no
- fi
+ if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
+ libc_cv_z_combreloc=yes
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)
+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)
- AC_CACHE_CHECK(for -z execstack,
- libc_cv_z_execstack, [dnl
- cat > conftest.c <<EOF
+AC_CACHE_CHECK(for -z execstack,
+ libc_cv_z_execstack, [dnl
+cat > conftest.c <<EOF
int _start (void) { return 42; }
EOF
- if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
- -fPIC -shared -o conftest.so conftest.c
- -Wl,-z,execstack -nostdlib
- 1>&AS_MESSAGE_LOG_FD])
- then
- libc_cv_z_execstack=yes
- else
- libc_cv_z_execstack=no
- fi
- rm -f conftest*])
- AC_SUBST(libc_cv_z_execstack)
+if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
+ -fPIC -shared -o conftest.so conftest.c
+ -Wl,-z,execstack -nostdlib
+ 1>&AS_MESSAGE_LOG_FD])
+then
+ libc_cv_z_execstack=yes
+else
+ libc_cv_z_execstack=no
+fi
+rm -f conftest*])
+AC_SUBST(libc_cv_z_execstack)
- AC_CACHE_CHECK(for -fpie, libc_cv_fpie, [dnl
- cat > conftest.c <<EOF
+AC_CACHE_CHECK(for -fpie, libc_cv_fpie, [dnl
+cat > conftest.c <<EOF
int foo;
main () { return 0;}
EOF
- if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fpie
- -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
- then
- libc_cv_fpie=yes
- else
- libc_cv_fpie=no
- fi
- rm -f conftest*])
+if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fpie
+ -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
+then
+ libc_cv_fpie=yes
+else
+ libc_cv_fpie=no
+fi
+rm -f conftest*])
- AC_SUBST(libc_cv_fpie)
+AC_SUBST(libc_cv_fpie)
- AC_CACHE_CHECK(for --hash-style option,
- libc_cv_hashstyle, [dnl
- cat > conftest.c <<EOF
+AC_CACHE_CHECK(for --hash-style option,
+ libc_cv_hashstyle, [dnl
+cat > conftest.c <<EOF
int _start (void) { return 42; }
EOF
- if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
- -fPIC -shared -o conftest.so conftest.c
- -Wl,--hash-style=both -nostdlib 1>&AS_MESSAGE_LOG_FD])
+if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS
+ -fPIC -shared -o conftest.so conftest.c
+ -Wl,--hash-style=both -nostdlib 1>&AS_MESSAGE_LOG_FD])
+then
+ libc_cv_hashstyle=yes
+else
+ libc_cv_hashstyle=no
+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_cv_hashstyle=yes
- else
- libc_cv_hashstyle=no
+ 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*])
- AC_SUBST(libc_cv_hashstyle)
+ use_default_link=$libc_cv_use_default_link
+fi
+
+AC_CACHE_CHECK(linker output format, libc_cv_output_format, [dnl
+if libc_cv_output_format=`
+${CC-cc} -nostartfiles -nostdlib -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, libc_cv_fno_toplevel_reorder, [dnl
+AC_CACHE_CHECK(for -fno-toplevel-reorder -fno-section-anchors, libc_cv_fno_toplevel_reorder, [dnl
cat > conftest.c <<EOF
int foo;
EOF
-if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -fno-toplevel-reorder
+if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -fno-toplevel-reorder -fno-section-anchors
conftest.c 1>&AS_MESSAGE_LOG_FD])
then
libc_cv_fno_toplevel_reorder=yes
fi
rm -f conftest*])
if test $libc_cv_fno_toplevel_reorder = yes; then
- fno_unit_at_a_time=-fno-toplevel-reorder
+ fno_unit_at_a_time="-fno-toplevel-reorder -fno-section-anchors"
else
fno_unit_at_a_time=-fno-unit-at-a-time
fi
AC_SUBST(fno_unit_at_a_time)
AC_CACHE_CHECK(for -fstack-protector, libc_cv_ssp, [dnl
-cat > conftest.c <<EOF
-int foo;
-main () { return 0;}
-EOF
-if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -fstack-protector
- -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
-then
- libc_cv_ssp=yes
-else
- libc_cv_ssp=no
-fi
-rm -f conftest*])
+LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector],
+ [libc_cv_ssp=yes],
+ [libc_cv_ssp=no])
+])
AC_SUBST(libc_cv_ssp)
AC_CACHE_CHECK(for -fgnu89-inline, libc_cv_gnu89_inline, [dnl
fi
rm -f conftest*])
if test $libc_cv_gnu89_inline = yes; then
- libc_cv_gnu89_inline=-fgnu89-inline
+ gnu89_inline=-fgnu89-inline
else
- libc_cv_gnu89_inline=
-fi
-AC_SUBST(libc_cv_gnu89_inline)
-
-if test $elf != yes; then
- AC_CACHE_CHECK(for .init and .fini sections, libc_cv_have_initfini,
- [AC_TRY_COMPILE(, [asm (".section .init");
- asm (".section .fini");
- asm ("${libc_cv_dot_text}");],
- libc_cv_have_initfini=yes,
- libc_cv_have_initfini=no)])
- AC_SUBST(libc_cv_have_initfini)dnl
- if test $libc_cv_have_initfini = yes; then
- AC_DEFINE(HAVE_INITFINI)
- fi
+ gnu89_inline=
fi
+AC_SUBST(gnu89_inline)
-if test $elf = yes; then
- AC_CACHE_CHECK(whether cc puts quotes around section names,
- libc_cv_have_section_quotes,
- [cat > conftest.c <<EOF
- static const int foo
- __attribute__ ((section ("bar"))) = 1;
+AC_CACHE_CHECK(whether cc puts quotes around section names,
+ libc_cv_have_section_quotes,
+ [cat > conftest.c <<EOF
+ static const int foo
+ __attribute__ ((section ("bar"))) = 1;
EOF
- if ${CC-cc} -S conftest.c -o conftest.s; then
- if grep '\.section.*"bar"' conftest.s >/dev/null; then
- libc_cv_have_section_quotes=yes
- else
- libc_cv_have_section_quotes=no
- fi
+ if ${CC-cc} -S conftest.c -o conftest.s; then
+ if grep '\.section.*"bar"' conftest.s >/dev/null; then
+ libc_cv_have_section_quotes=yes
else
- libc_cv_have_section_quotes=unknown
+ libc_cv_have_section_quotes=no
fi
- rm -f conftest.[cs]
- ])
- if test $libc_cv_have_section_quotes = yes; then
- AC_DEFINE(HAVE_SECTION_QUOTES)
- fi
-fi
-
-dnl AC_CHECK_ASM_UNDERSCORE([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
-AC_DEFUN(AC_CHECK_ASM_UNDERSCORE,
-[cat > conftest.$ac_ext <<EOF
-dnl This sometimes fails to find confdefs.h, for some reason.
-dnl [#]line $LINENO "[$]0"
-[#]line $LINENO "configure"
-#include "confdefs.h"
-void underscore_test(void) {
-return; }
-EOF
-if AC_TRY_EVAL(ac_compile); then
- if grep _underscore_test conftest* >/dev/null; then
- ifelse([$1], , :, [rm -f conftest*
- $1])
- else
- ifelse([$2], , , [rm -f conftest*
- $2])
- fi
-else
- echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
- cat conftest.$ac_ext >&AS_MESSAGE_LOG_FD
- ifelse([$2], , , [rm -f conftest*
- $2])
-fi
-rm -f conftest*])
-
-if test $elf = yes; then
- libc_cv_asm_underscores=no
-else
- if test $ac_cv_prog_cc_works = yes; then
- AC_CACHE_CHECK(for _ prefix on C symbol names, libc_cv_asm_underscores,
- [AC_TRY_LINK([asm ("_glibc_foobar:");], [glibc_foobar ();],
- libc_cv_asm_underscores=yes,
- libc_cv_asm_underscores=no)])
- else
- AC_CACHE_CHECK(for _ prefix on C symbol names, libc_cv_asm_underscores,
- [AC_CHECK_ASM_UNDERSCORE(libc_cv_asm_underscores=yes,
- libc_cv_asm_underscores=no)])
- fi
-fi
-if test $libc_cv_asm_underscores = no; then
- AC_DEFINE(NO_UNDERSCORES)
-fi
-
-if test $elf = yes; then
- libc_cv_weak_symbols=yes
+ else
+ libc_cv_have_section_quotes=unknown
+ fi
+ rm -f conftest.{c,s}
+ ])
+if test $libc_cv_have_section_quotes = yes; then
+ AC_DEFINE(HAVE_SECTION_QUOTES)
fi
AC_CACHE_CHECK(for assembler .weak directive, libc_cv_asm_weak_directive,
*) cfi_offset=0;;
esac
cat > conftest.s <<EOF
- .text
- .type func,%function
+ .text
+ .type func,%function
func:
- .cfi_startproc
+ .cfi_startproc
.cfi_remember_state
.cfi_rel_offset 1, $cfi_offset
- .cfi_endproc
+ .cfi_endproc
EOF
if AC_TRY_COMMAND(${CC-cc} $ASFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
libc_cv_asm_cfi_directives=yes
libc_cv_ld_no_whole_archive=no
fi
rm -f conftest*])
-if test $libc_cv_ld_no_whole_archive = yes; then
- no_whole_archive=-Wl,--no-whole-archive
+if test $libc_cv_ld_no_whole_archive = no; then
+ AC_MSG_ERROR([support for --no-whole-archive is needed])
fi
-AC_SUBST(no_whole_archive)dnl
AC_CACHE_CHECK(for gcc -fexceptions, libc_cv_gcc_exceptions, [dnl
cat > conftest.c <<\EOF
fi
fi
-dnl Check whether compiler understands __builtin_expect.
-AC_CACHE_CHECK(for __builtin_expect, libc_cv_gcc_builtin_expect,
-[cat > conftest.c <<EOF
-#line $LINENO "configure"
-int foo (int a)
-{
- a = __builtin_expect (a, 10);
- return a == 10 ? 0 : 1;
-}
-EOF
-dnl No \ in command here because it ends up inside ''.
-if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -nostdlib -nostartfiles
- -o conftest conftest.c -lgcc >&AS_MESSAGE_LOG_FD]); then
- libc_cv_gcc_builtin_expect=yes
-else
- libc_cv_gcc_builtin_expect=no
-fi
-rm -f conftest*])
-if test "$libc_cv_gcc_builtin_expect" = yes; then
- AC_DEFINE(HAVE_BUILTIN_EXPECT)
-fi
-
AC_CACHE_CHECK(for __builtin_memset, libc_cv_gcc_builtin_memset, [dnl
cat > conftest.c <<\EOF
void zero (void *x)
libc_cv_gcc_builtin_redirection=no
fi
rm -f conftest* ])
-if test "$libc_cv_gcc_builtin_redirection" = yes ; then
- AC_DEFINE(HAVE_BUILTIN_REDIRECTION)
+if test "$libc_cv_gcc_builtin_redirection" = no; then
+ AC_MSG_ERROR([support for the symbol redirection needed])
fi
dnl Check whether the compiler supports the __thread keyword.
-if test "x$use__thread" != xno; then
- AC_CACHE_CHECK([for __thread], libc_cv_gcc___thread,
- [cat > conftest.c <<\EOF
+AC_CACHE_CHECK([for __thread], libc_cv_gcc___thread,
+[cat > conftest.c <<\EOF
__thread int a = 42;
EOF
- if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c >&AS_MESSAGE_LOG_FD]); then
- libc_cv_gcc___thread=yes
- else
- libc_cv_gcc___thread=no
- fi
- rm -f conftest*])
- if test "$libc_cv_gcc___thread" = yes; then
- AC_DEFINE(HAVE___THREAD)
- fi
+if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c >&AS_MESSAGE_LOG_FD]); then
+ libc_cv_gcc___thread=yes
else
libc_cv_gcc___thread=no
fi
+rm -f conftest*])
+if test "$libc_cv_gcc___thread" = no; then
+ AC_MSG_ERROR([support for the __thread keyword is required])
+fi
-if test "$libc_cv_gcc___thread" = yes; then
- dnl Check whether the compiler supports the tls_model attribute.
- AC_CACHE_CHECK([for tls_model attribute], libc_cv_gcc_tls_model_attr, [dnl
- cat > conftest.c <<\EOF
+dnl Check whether the compiler supports the tls_model attribute.
+AC_CACHE_CHECK([for tls_model attribute], libc_cv_gcc_tls_model_attr, [dnl
+cat > conftest.c <<\EOF
extern __thread int a __attribute__((tls_model ("initial-exec")));
EOF
- if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -Werror conftest.c >&AS_MESSAGE_LOG_FD]); then
- libc_cv_gcc_tls_model_attr=yes
- else
- libc_cv_gcc_tls_model_attr=no
- fi
- rm -f conftest*])
- if test "$libc_cv_gcc_tls_model_attr" = yes; then
- AC_DEFINE(HAVE_TLS_MODEL_ATTRIBUTE)
+if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -Werror conftest.c >&AS_MESSAGE_LOG_FD]); then
+ libc_cv_gcc_tls_model_attr=yes
+else
+ libc_cv_gcc_tls_model_attr=no
+fi
+rm -f conftest*])
+if test "$libc_cv_gcc_tls_model_attr" = no; then
+ AC_MSG_ERROR([support for the tls_model attribute is required])
+fi
+
+dnl Determine how to disable generation of FMA instructions.
+AC_CACHE_CHECK([for compiler option to disable generation of FMA instructions],
+ libc_cv_cc_nofma, [dnl
+libc_cv_cc_nofma=
+for opt in -ffp-contract=off -mno-fused-madd; do
+ LIBC_TRY_CC_OPTION([$opt], [libc_cv_cc_nofma=$opt; break])
+done])
+
+if test -n "$submachine"; then
+ AC_CACHE_CHECK([for compiler option for CPU variant],
+ libc_cv_cc_submachine, [dnl
+ libc_cv_cc_submachine=no
+ for opt in "-march=$submachine" "-mcpu=$submachine"; do
+ LIBC_TRY_CC_OPTION([$opt], [
+ libc_cv_cc_submachine="$opt"
+ break], [])
+ done])
+ if test "x$libc_cv_cc_submachine" = xno; then
+ AC_MSG_ERROR([${CC-cc} does not support $submachine])
fi
fi
+AC_SUBST(libc_cv_cc_submachine)
dnl Check whether we have the gd library available.
AC_MSG_CHECKING(for libgd)
# See if we have the libaudit library
AC_CHECK_LIB(audit, audit_log_user_avc_message,
- have_libaudit=yes, have_libaudit=no)
+ have_libaudit=yes, have_libaudit=no)
if test "x$have_libaudit" = xyes; then
AC_DEFINE(HAVE_LIBAUDIT, 1, [SELinux libaudit support])
fi
sizeof_long_double=$ac_cv_sizeof_long_double
AC_SUBST(sizeof_long_double)
+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.
+AC_CACHE_CHECK([for _FORTIFY_SOURCE predefine], libc_cv_predef_fortify_source,
+[AC_TRY_COMPILE([], [
+#ifdef _FORTIFY_SOURCE
+# error bogon
+#endif],
+ [libc_cv_predef_fortify_source=no],
+ [libc_cv_predef_fortify_source=yes])])
+if test $libc_cv_predef_fortify_source = yes; then
+ CPPUNDEFS="${CPPUNDEFS:+$CPPUNDEFS }-U_FORTIFY_SOURCE"
+fi
+AC_SUBST(CPPUNDEFS)
+
+dnl Check for silly hacked compilers inserting -fstack-protector.
+dnl This breaks badly for the early startup code we compile, since
+dnl the compiled code can refer to a magic machine-dependent location
+dnl for the canary value before we have sufficient setup for that to
+dnl work. It's also questionable to build all of libc with this flag
+dnl even when you're doing that for most applications you build, since
+dnl libc's code is so heavily-used and performance-sensitive. If we
+dnl ever really want to make that work, it should be enabled explicitly
+dnl in the libc build, not inherited from implicit compiler settings.
+AC_CACHE_CHECK([whether $CC implicitly enables -fstack-protector],
+ libc_cv_predef_stack_protector, [
+AC_TRY_COMPILE([extern void foobar (char *);],
+ [char large_array[2048]; foobar (large_array);], [
+libc_undefs=`$NM -u conftest.o |
+ LC_ALL=C $AWK '$1 == "U" { print $2 | "sort -u"; next } { exit(1) }' \
+ 2>&AS_MESSAGE_LOG_FD` || {
+ AC_MSG_ERROR([confusing output from $NM -u])
+}
+echo >&AS_MESSAGE_LOG_FD "libc_undefs='$libc_undefs'"
+# On some architectures, there are architecture-specific undefined
+# symbols (resolved by the linker), so filter out unknown symbols.
+# This will fail to produce the correct result if the compiler
+# defaults to -fstack-protector but this produces an undefined symbol
+# other than __stack_chk_fail. However, compilers like that have not
+# been encountered in practice.
+libc_undefs=`echo "$libc_undefs" | egrep '^(foobar|__stack_chk_fail)$'`
+case "$libc_undefs" in
+foobar) libc_cv_predef_stack_protector=no ;;
+'__stack_chk_fail
+foobar') libc_cv_predef_stack_protector=yes ;;
+*) AC_MSG_ERROR([unexpected symbols in test: $libc_undefs]) ;;
+esac],
+ [AC_MSG_ERROR([test compilation failed])])
+])
+libc_extra_cflags=
+if test $libc_cv_predef_stack_protector = yes; then
+ libc_extra_cflags=-fno-stack-protector
+fi
+AC_SUBST(libc_extra_cflags)
+
### End of automated tests.
### Now run sysdeps configure fragments.
libc_cv_idn=no
# Iterate over all the sysdep directories we will use, running their
-# configure fragments, and looking for a uname implementation.
-uname=
+# configure fragments.
for dir in $sysnames; do
case $dir in
/*) dest=$dir ;;
AC_MSG_RESULT(running configure fragment for $dir)
. $dest/configure
fi
-[
- if test -z "$uname"; then
- if test -r $dest/uname.c ||
- test -r $dest/uname.S ||
- { test -r $dest/syscalls.list &&
- grep '^uname[ ]' $dest/syscalls.list >/dev/null; }; then
- uname=$dir
- fi
- fi
-]dnl
done
if test x$libc_cv_gcc_unwind_find_fde = xyes; then
fi
AC_SUBST(libc_cv_gcc_unwind_find_fde)
-# If we will use the generic uname implementation, we must figure out what
-# it will say by examining the system, and write the results in config-name.h.
-if test "$uname" = "sysdeps/generic"; then
-
-changequote(,)dnl
- uname_sysname=`echo $config_os | sed 's/[0-9.]*$//'`
-changequote([,])dnl
- if test $uname_sysname != $config_os; then
- config_release=`echo $config_os | sed s/$uname_sysname//`
- fi
-dnl
-AC_DEFUN(LIBC_KERNEL_ID, [dnl
- if test -r /vmunix; then
- kernel_id=`strings /vmunix | grep UNIX`
- elif test -r /dynix; then
- kernel_id=`strings /dynix | grep DYNIX`
- else
- kernel_id=
- fi
-])dnl
-
- AC_CACHE_CHECK(OS release for uname, libc_cv_uname_release, [dnl
-LIBC_KERNEL_ID
-changequote(,)dnl
- kernel_release=`echo "$kernel_id" | sed 's/^[^0-9.]*\([0-9.]*\).*$/\1/'`
-changequote([,])dnl
- if test x`echo "$config_release" | sed "s/^$kernel_release//"` \
- != x$config_release; then
- # The configuration release is a substring of the kernel release.
- libc_cv_uname_release=$kernel_release
- elif test x$config_release != x; then
- libc_cv_uname_release=$config_release
- elif test x$kernel_release != x; then
- libc_cv_uname_release=$kernel_release
- else
- libc_cv_uname_release=unknown
- fi])
- uname_release="$libc_cv_uname_release"
-
- AC_CACHE_CHECK(OS version for uname, libc_cv_uname_version, [dnl
-LIBC_KERNEL_ID
-changequote(,)dnl
- kernel_version=`echo "$kernel_id" | sed 's/^[^#]*#\([0-9]*\).*$/\1/'`
-changequote([,])dnl
- if test -n "$kernel_version"; then
- libc_cv_uname_version="$kernel_version"
- else
- libc_cv_uname_version=unknown
- fi])
- uname_version="$libc_cv_uname_version"
-
-AC_SUBST(uname_sysname) AC_SUBST(uname_release) AC_SUBST(uname_version)dnl
- config_uname=config-name.h:config-name.in
-else
- # For non-generic uname, we don't need to create config-name.h at all.
- config_uname=
-fi
-
-dnl This is tested by existing code and it's simpler to avoid changing it.
-AC_DEFINE(USE_IN_LIBIO)
-
# Test for old glibc 2.0.x headers so that they can be removed properly
# Search only in includedir.
AC_MSG_CHECKING(for old glibc 2.0.x headers)
AC_SUBST(libc_cv_rootsbindir)
AC_SUBST(libc_cv_forced_unwind)
+dnl sysdeps/CPU/configure.in checks set this via arch-specific asm tests
+AC_SUBST(libc_cv_cpp_asm_debuginfo)
+AC_SUBST(libc_cv_cc_sse4)
+AC_SUBST(libc_cv_cc_avx)
+AC_SUBST(libc_cv_cc_sse2avx)
+AC_SUBST(libc_cv_cc_novzeroupper)
+AC_SUBST(libc_cv_cc_fma4)
+AC_SUBST(libc_cv_cc_nofma)
+AC_SUBST(libc_cv_as_i686)
+AC_SUBST(libc_cv_sparc_as_vis3)
+
AC_SUBST(use_ldconfig)
AC_SUBST(ldd_rewrite_script)
-AC_SUBST(elf) AC_SUBST(xcoff)
-if test $elf = yes; then
- AC_DEFINE(HAVE_ELF)
-fi
-if test $xcoff = yes; then
- AC_DEFINE(HAVE_XCOFF)
-fi
-
AC_SUBST(static)
AC_SUBST(shared)
-if test $shared = default; then
- shared=$elf
-fi
-AC_CACHE_CHECK([whether -fPIC is default], pic_default,
-[pic_default=yes
+AC_CACHE_CHECK([whether -fPIC is default], libc_cv_pic_default,
+[libc_cv_pic_default=yes
cat > conftest.c <<EOF
#if defined __PIC__ || defined __pic__ || defined PIC || defined pic
# error PIC is default.
#endif
EOF
if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then
- pic_default=no
+ libc_cv_pic_default=no
fi
rm -f conftest.*])
-AC_SUBST(pic_default)
+AC_SUBST(libc_cv_pic_default)
AC_SUBST(profile)
-AC_SUBST(omitfp)
-AC_SUBST(bounded)
AC_SUBST(static_nss)
-AC_SUBST(nopic_initfini)
AC_SUBST(DEFINES)
AC_SUBST(VERSION)
AC_SUBST(RELEASE)
-AC_CONFIG_FILES([config.make ${config_makefile} ${config_uname}])
+AC_CONFIG_FILES([config.make ${config_makefile}])
AC_CONFIG_COMMANDS([default],[[
case $CONFIG_FILES in *config.make*)
echo "$config_vars" >> config.make;;