Update.
authorUlrich Drepper <drepper@redhat.com>
Wed, 26 May 1999 23:37:38 +0000 (23:37 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 26 May 1999 23:37:38 +0000 (23:37 +0000)
1999-05-26  Ulrich Drepper  <drepper@cygnus.com>

* config.h.in: Add __LINUX_KERNEL_VERSION.
* configure.in: Recognize --enable-kernel.
* sysdeps/unix/sysv/linux/configure.in: Check for correct kernel
headers if --enable-kernel is given and set __LINUX_KERNEL_VERSION
appropriately.
* sysdeps/unix/sysv/linux/init-first.c: If minimal kernel version is
given perform runtime test.

* sysdeps/unix/sysv/linux/kernel-features.h: New file.
* sysdeps/unix/sysv/linux/getcwd.c: Elide compatibility code if
minimal supported kernel is known to have the feature.
* sysdeps/unix/sysv/linux/poll.c: Likewise.
* sysdeps/unix/sysv/linux/pread.c: Likewise.
* sysdeps/unix/sysv/linux/pread64.c: Likewise.
* sysdeps/unix/sysv/linux/pwrite.c: Likewise.
* sysdeps/unix/sysv/linux/pwrite64.c: Likewise.
* sysdeps/unix/sysv/linux/seteuid.c: Likewise.
* sysdeps/unix/sysv/linux/sigaction.c: Likewise.
* sysdeps/unix/sysv/linux/sigprocmask.c: Likewise.
* sysdeps/unix/sysv/linux/sigsuspend.c: Likewise.
* sysdeps/unix/sysv/linux/testrtsig.h: Likewise.
* sysdeps/unix/sysv/linux/i386/chown.c: Likewise.
* sysdeps/unix/sysv/linux/i386/pread.c: Likewise.
* sysdeps/unix/sysv/linux/i386/pread64.c: Likewise.
* sysdeps/unix/sysv/linux/i386/pwrite.c: Likewise.
* sysdeps/unix/sysv/linux/i386/pwrite64.c: Likewise.

* sysdeps/unix/sysv/linux/sysctl.c: Add __sysctl alias.

26 files changed:
ChangeLog
config.h.in
configure
configure.in
sysdeps/unix/sysv/linux/configure
sysdeps/unix/sysv/linux/configure.in
sysdeps/unix/sysv/linux/getcwd.c
sysdeps/unix/sysv/linux/i386/chown.c
sysdeps/unix/sysv/linux/i386/pread.c
sysdeps/unix/sysv/linux/i386/pread64.c
sysdeps/unix/sysv/linux/i386/pwrite.c
sysdeps/unix/sysv/linux/i386/pwrite64.c
sysdeps/unix/sysv/linux/init-first.c
sysdeps/unix/sysv/linux/kernel-features.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/poll.c
sysdeps/unix/sysv/linux/pread.c
sysdeps/unix/sysv/linux/pread64.c
sysdeps/unix/sysv/linux/pwrite.c
sysdeps/unix/sysv/linux/pwrite64.c
sysdeps/unix/sysv/linux/seteuid.c
sysdeps/unix/sysv/linux/sigaction.c
sysdeps/unix/sysv/linux/sigpending.c
sysdeps/unix/sysv/linux/sigprocmask.c
sysdeps/unix/sysv/linux/sigsuspend.c
sysdeps/unix/sysv/linux/sysctl.c
sysdeps/unix/sysv/linux/testrtsig.h

index f6f27f8..d6d413d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,34 @@
+1999-05-26  Ulrich Drepper  <drepper@cygnus.com>
+
+       * config.h.in: Add __LINUX_KERNEL_VERSION.
+       * configure.in: Recognize --enable-kernel.
+       * sysdeps/unix/sysv/linux/configure.in: Check for correct kernel
+       headers if --enable-kernel is given and set __LINUX_KERNEL_VERSION
+       appropriately.
+       * sysdeps/unix/sysv/linux/init-first.c: If minimal kernel version is
+       given perform runtime test.
+
+       * sysdeps/unix/sysv/linux/kernel-features.h: New file.
+       * sysdeps/unix/sysv/linux/getcwd.c: Elide compatibility code if
+       minimal supported kernel is known to have the feature.
+       * sysdeps/unix/sysv/linux/poll.c: Likewise.
+       * sysdeps/unix/sysv/linux/pread.c: Likewise.
+       * sysdeps/unix/sysv/linux/pread64.c: Likewise.
+       * sysdeps/unix/sysv/linux/pwrite.c: Likewise.
+       * sysdeps/unix/sysv/linux/pwrite64.c: Likewise.
+       * sysdeps/unix/sysv/linux/seteuid.c: Likewise.
+       * sysdeps/unix/sysv/linux/sigaction.c: Likewise.
+       * sysdeps/unix/sysv/linux/sigprocmask.c: Likewise.
+       * sysdeps/unix/sysv/linux/sigsuspend.c: Likewise.
+       * sysdeps/unix/sysv/linux/testrtsig.h: Likewise.
+       * sysdeps/unix/sysv/linux/i386/chown.c: Likewise.
+       * sysdeps/unix/sysv/linux/i386/pread.c: Likewise.
+       * sysdeps/unix/sysv/linux/i386/pread64.c: Likewise.
+       * sysdeps/unix/sysv/linux/i386/pwrite.c: Likewise.
+       * sysdeps/unix/sysv/linux/i386/pwrite64.c: Likewise.
+
+       * sysdeps/unix/sysv/linux/sysctl.c: Add __sysctl alias.
+
 1999-05-25  Ulrich Drepper  <drepper@cygnus.com>
 
        * sysdeps/posix/getcwd.c (__getcwd): Fix potential memory leaks.
index dc1d5bc..05826b6 100644 (file)
@@ -77,6 +77,9 @@
 # define internal_function __attribute__ ((regparm (3), stdcall))
 #endif
 
+/* Linux specific: minimum supported kernel version.  */
+#undef __LINUX_KERNEL_VERSION
+
 /*
 \f */
 
index ef3e958..4b8265a 100755 (executable)
--- a/configure
+++ b/configure
@@ -12,7 +12,7 @@
 
 
 # Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.13 
+# Generated automatically using autoconf version 2.14.1 
 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
 #
 # This configure script is free software; the Free Software Foundation
@@ -63,6 +63,9 @@ ac_help="$ac_help
 ac_help="$ac_help
   --disable-force-install don't force installation of files from this package,
                          even if they are older than the installed files"
+ac_help="$ac_help
+  --enable-kernel=VERSION compile for copmatibility with kernel not older
+                           than VERSION"
 
 # Initialize some variables set by options.
 # The variables have the same names as the options, with
@@ -385,7 +388,7 @@ EOF
     verbose=yes ;;
 
   -version | --version | --versio | --versi | --vers)
-    echo "configure generated by autoconf version 2.13"
+    echo "configure generated by autoconf version 2.14.1"
     exit 0 ;;
 
   -with-* | --with-*)
@@ -545,7 +548,7 @@ done
 
 if test -r "$cache_file"; then
   echo "loading cache $cache_file"
-  . $cache_file
+      test -f "$cache_file" && . $cache_file
 else
   echo "creating cache $cache_file"
   > $cache_file
@@ -597,9 +600,9 @@ done
 if test -z "$ac_aux_dir"; then
   { echo "configure: error: can not find install-sh or install.sh in scripts $srcdir/scripts" 1>&2; exit 1; }
 fi
-ac_config_guess=$ac_aux_dir/config.guess
-ac_config_sub=$ac_aux_dir/config.sub
-ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
 
 
 # This will get text that should go into config.make.
@@ -793,32 +796,53 @@ fi
 
 
 
-
-# Make sure we can run config.sub.
-if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
-else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
+# Check whether --enable-kernel or --disable-kernel was given.
+if test "${enable_kernel+set}" = set; then
+  enableval="$enable_kernel"
+  minimum_kernel=$enableval
 fi
 
+
+
 echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:804: checking host system type" >&5
+echo "configure:809: checking host system type" >&5
+if test "x$ac_cv_host" = "x" || (test "x$host" != "xNONE" && test "x$host" != "x$ac_cv_host_alias"); then
+
+# Make sure we can run config.sub.
+  if $ac_config_sub sun4 >/dev/null 2>&1; then :
+    else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
+  fi
 
-host_alias=$host
-case "$host_alias" in
-NONE)
-  case $nonopt in
+  ac_cv_host_alias=$host
+  case "$ac_cv_host_alias" in
   NONE)
-    if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
-    else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
-    fi ;;
-  *) host_alias=$nonopt ;;
-  esac ;;
-esac
+    case $nonopt in
+    NONE)
+      if ac_cv_host_alias=`$ac_config_guess`; then :
+      else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
+      fi ;;
+    *) ac_cv_host_alias=$nonopt ;;
+    esac ;;
+  esac
+
+  ac_cv_host=`$ac_config_sub $ac_cv_host_alias`
+  ac_cv_host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+  ac_cv_host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+  ac_cv_host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+else
+  echo $ac_n "(cached) $ac_c" 1>&6
+fi
+
+echo "$ac_t""$ac_cv_host" 1>&6
+
+host=$ac_cv_host
+host_alias=$ac_cv_host_alias
+host_cpu=$ac_cv_host_cpu
+host_vendor=$ac_cv_host_vendor
+host_os=$ac_cv_host_os
+
+
 
-host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
-host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-echo "$ac_t""$host" 1>&6
 
 
 # The way shlib-versions is used to generate soversions.mk uses a
@@ -925,7 +949,7 @@ fi
 # This can take a while to compute.
 sysdep_dir=$srcdir/sysdeps
 echo $ac_n "checking sysdep dirs""... $ac_c" 1>&6
-echo "configure:929: checking sysdep dirs" >&5
+echo "configure:953: checking sysdep dirs" >&5
 # 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'`"
 
@@ -1127,9 +1151,9 @@ echo "$ac_t""$default_sysnames" 1>&6
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:1131: checking for a BSD compatible install" >&5
+echo "configure:1155: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
-if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+if eval "test \"\${ac_cv_path_install+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
     IFS="${IFS=        }"; ac_save_IFS="$IFS"; IFS=":"
@@ -1147,6 +1171,10 @@ else
             grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
            # AIX install.  It has an incompatible calling convention.
            :
+         elif test $ac_prog = install &&
+           grep pwplus $ac_dir/$ac_prog >/dev/null 2>&1; then
+           # program-specific install script used by HP pwplus--don't use.
+           :
          else
            ac_cv_path_install="$ac_dir/$ac_prog -c"
            break 2
@@ -1175,7 +1203,7 @@ echo "$ac_t""$INSTALL" 1>&6
 # It thinks the first close brace ends the variable substitution.
 test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
 
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
 
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
@@ -1184,8 +1212,8 @@ if test "$INSTALL" = "${srcdir}/install-sh -c"; then
   INSTALL='\$(..)./install-sh -c'
 fi
 echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1188: checking whether ln -s works" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
+echo "configure:1216: checking whether ln -s works" >&5
+if eval "test \"\${ac_cv_prog_LN_S+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   rm -f conftestdata
@@ -1206,23 +1234,45 @@ fi
 
 
 # These programs are version sensitive.
+
 echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:1211: checking build system type" >&5
-
-build_alias=$build
-case "$build_alias" in
-NONE)
-  case $nonopt in
-  NONE) build_alias=$host_alias ;;
-  *) build_alias=$nonopt ;;
-  esac ;;
-esac
+echo "configure:1240: checking build system type" >&5
+if test "x$ac_cv_build" = "x" || (test "x$build" != "xNONE" && test "x$build" != "x$ac_cv_build_alias"); then
+
+# Make sure we can run config.sub.
+  if $ac_config_sub sun4 >/dev/null 2>&1; then :
+    else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
+  fi
+
+  ac_cv_build_alias=$build
+  case "$ac_cv_build_alias" in
+  NONE)
+    case $nonopt in
+    NONE)
+      ac_cv_build_alias=$host_alias ;;
+
+    *) ac_cv_build_alias=$nonopt ;;
+    esac ;;
+  esac
+
+  ac_cv_build=`$ac_config_sub $ac_cv_build_alias`
+  ac_cv_build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+  ac_cv_build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+  ac_cv_build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+else
+  echo $ac_n "(cached) $ac_c" 1>&6
+fi
+
+echo "$ac_t""$ac_cv_build" 1>&6
+
+build=$ac_cv_build
+build_alias=$ac_cv_build_alias
+build_cpu=$ac_cv_build_cpu
+build_vendor=$ac_cv_build_vendor
+build_os=$ac_cv_build_os
+
+
 
-build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
-build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-echo "$ac_t""$build" 1>&6
 
 if test $host != $build; then
   ac_tool_prefix=${host_alias}-
@@ -1235,8 +1285,8 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1239: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+echo "configure:1289: checking for $ac_word" >&5
+if eval "test \"\${ac_cv_prog_CC+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   if test -n "$CC"; then
@@ -1269,7 +1319,7 @@ if test -z "$CC"; then
 else
   # Found it, now check the version.
   echo $ac_n "checking version of $CC""... $ac_c" 1>&6
-echo "configure:1273: checking version of $CC" >&5
+echo "configure:1323: checking version of $CC" >&5
   ac_prog_version=`$CC -v 2>&1 | sed -n 's/^.*version \([egcygnustp-]*[0-9.]*\).*$/\1/p'`
   case $ac_prog_version in
     '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
@@ -1289,8 +1339,8 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1293: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_MAKE'+set}'`\" = set"; then
+echo "configure:1343: checking for $ac_word" >&5
+if eval "test \"\${ac_cv_prog_MAKE+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   if test -n "$MAKE"; then
@@ -1323,7 +1373,7 @@ if test -z "$MAKE"; then
 else
   # Found it, now check the version.
   echo $ac_n "checking version of $MAKE""... $ac_c" 1>&6
-echo "configure:1327: checking version of $MAKE" >&5
+echo "configure:1377: checking version of $MAKE" >&5
   ac_prog_version=`$MAKE --version 2>&1 | sed -n 's/^.*version \([0-9][0-9.]*\), by.*$/\1/p'`
   case $ac_prog_version in
     '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
@@ -1344,8 +1394,8 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1348: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_MSGFMT'+set}'`\" = set"; then
+echo "configure:1398: checking for $ac_word" >&5
+if eval "test \"\${ac_cv_prog_MSGFMT+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   if test -n "$MSGFMT"; then
@@ -1378,7 +1428,7 @@ if test -z "$MSGFMT"; then
 else
   # Found it, now check the version.
   echo $ac_n "checking version of $MSGFMT""... $ac_c" 1>&6
-echo "configure:1382: checking version of $MSGFMT" >&5
+echo "configure:1432: checking version of $MSGFMT" >&5
   ac_prog_version=`$MSGFMT --version 2>&1 | sed -n 's/^.*GNU gettext.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
   case $ac_prog_version in
     '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
@@ -1398,8 +1448,8 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1402: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then
+echo "configure:1452: checking for $ac_word" >&5
+if eval "test \"\${ac_cv_prog_MAKEINFO+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   if test -n "$MAKEINFO"; then
@@ -1432,7 +1482,7 @@ if test -z "$MAKEINFO"; then
 else
   # Found it, now check the version.
   echo $ac_n "checking version of $MAKEINFO""... $ac_c" 1>&6
-echo "configure:1436: checking version of $MAKEINFO" >&5
+echo "configure:1486: checking version of $MAKEINFO" >&5
   ac_prog_version=`$MAKEINFO --version 2>&1 | sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'`
   case $ac_prog_version in
     '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
@@ -1461,8 +1511,8 @@ test -n "$aux_missing" && echo "configure: warning:
 
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1465: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_cc_works'+set}'`\" = set"; then
+echo "configure:1515: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+if eval "test \"\${ac_cv_prog_cc_works+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
@@ -1475,12 +1525,12 @@ cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 1479 "configure"
+#line 1529 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:1484: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1534: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -1511,8 +1561,8 @@ else
  cross_linkable=yes
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1515: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_cc_cross'+set}'`\" = set"; then
+echo "configure:1565: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+if eval "test \"\${ac_cv_prog_cc_cross+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   :
@@ -1523,8 +1573,8 @@ echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1527: checking whether we are using GNU C" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+echo "configure:1577: checking whether we are using GNU C" >&5
+if eval "test \"\${ac_cv_prog_gcc+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.c <<EOF
@@ -1532,7 +1582,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1536: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1586: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -1544,23 +1594,45 @@ if test $ac_cv_prog_gcc != yes; then
   { echo "configure: error: GNU libc must be compiled using GNU CC" 1>&2; exit 1; }
 fi
 
+
 echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:1549: checking build system type" >&5
-
-build_alias=$build
-case "$build_alias" in
-NONE)
-  case $nonopt in
-  NONE) build_alias=$host_alias ;;
-  *) build_alias=$nonopt ;;
-  esac ;;
-esac
+echo "configure:1600: checking build system type" >&5
+if test "x$ac_cv_build" = "x" || (test "x$build" != "xNONE" && test "x$build" != "x$ac_cv_build_alias"); then
+
+# Make sure we can run config.sub.
+  if $ac_config_sub sun4 >/dev/null 2>&1; then :
+    else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
+  fi
+
+  ac_cv_build_alias=$build
+  case "$ac_cv_build_alias" in
+  NONE)
+    case $nonopt in
+    NONE)
+      ac_cv_build_alias=$host_alias ;;
+
+    *) ac_cv_build_alias=$nonopt ;;
+    esac ;;
+  esac
+
+  ac_cv_build=`$ac_config_sub $ac_cv_build_alias`
+  ac_cv_build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+  ac_cv_build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+  ac_cv_build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+else
+  echo $ac_n "(cached) $ac_c" 1>&6
+fi
+
+echo "$ac_t""$ac_cv_build" 1>&6
+
+build=$ac_cv_build
+build_alias=$ac_cv_build_alias
+build_cpu=$ac_cv_build_cpu
+build_vendor=$ac_cv_build_vendor
+build_os=$ac_cv_build_os
+
+
 
-build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
-build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-echo "$ac_t""$build" 1>&6
 
 if test $host != $build; then
   for ac_prog in gcc cc
@@ -1568,8 +1640,8 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1572: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_BUILD_CC'+set}'`\" = set"; then
+echo "configure:1644: checking for $ac_word" >&5
+if eval "test \"\${ac_cv_prog_BUILD_CC+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   if test -n "$BUILD_CC"; then
@@ -1600,13 +1672,13 @@ done
 fi
 
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1604: checking how to run the C preprocessor" >&5
+echo "configure:1676: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 fi
 if test -z "$CPP"; then
-if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
+if eval "test \"\${ac_cv_prog_CPP+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
     # This must be in double quotes, not single quotes, because CPP may get
@@ -1615,13 +1687,13 @@ else
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 1619 "configure"
+#line 1691 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1625: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1697: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -1632,13 +1704,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 1636 "configure"
+#line 1708 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1642: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1714: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -1649,13 +1721,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 1653 "configure"
+#line 1725 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1659: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1731: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -1698,8 +1770,8 @@ if test $RANLIB = ranlib; then
 # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1702: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
+echo "configure:1774: checking for $ac_word" >&5
+if eval "test \"\${ac_cv_prog_RANLIB+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   if test -n "$RANLIB"; then
@@ -1730,8 +1802,8 @@ if test -n "$ac_tool_prefix"; then
   # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1734: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
+echo "configure:1806: checking for $ac_word" >&5
+if eval "test \"\${ac_cv_prog_RANLIB+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   if test -n "$RANLIB"; then
@@ -1767,8 +1839,8 @@ fi
 
 # Determine whether we are using GNU binutils.
 echo $ac_n "checking whether $AS is GNU as""... $ac_c" 1>&6
-echo "configure:1771: checking whether $AS is GNU as" >&5
-if eval "test \"`echo '$''{'libc_cv_prog_as_gnu'+set}'`\" = set"; then
+echo "configure:1843: checking whether $AS is GNU as" >&5
+if eval "test \"\${libc_cv_prog_as_gnu+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   # Most GNU programs take a -v and spit out some text including
@@ -1786,8 +1858,8 @@ rm -f a.out
 gnu_as=$libc_cv_prog_as_gnu
 
 echo $ac_n "checking whether $LD is GNU ld""... $ac_c" 1>&6
-echo "configure:1790: checking whether $LD is GNU ld" >&5
-if eval "test \"`echo '$''{'libc_cv_prog_ld_gnu'+set}'`\" = set"; then
+echo "configure:1862: checking whether $LD is GNU ld" >&5
+if eval "test \"\${libc_cv_prog_ld_gnu+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   # Most GNU programs take a -v and spit out some text including
@@ -1806,8 +1878,8 @@ gnu_ld=$libc_cv_prog_ld_gnu
 # Extract the first word of "${ac_tool_prefix}mig", so it can be a program name with args.
 set dummy ${ac_tool_prefix}mig; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1810: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_MIG'+set}'`\" = set"; then
+echo "configure:1882: checking for $ac_word" >&5
+if eval "test \"\${ac_cv_prog_MIG+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   if test -n "$MIG"; then
@@ -1847,8 +1919,8 @@ fi
 
 # check if ranlib is necessary
 echo $ac_n "checking whether ranlib is necessary""... $ac_c" 1>&6
-echo "configure:1851: checking whether ranlib is necessary" >&5
-if eval "test \"`echo '$''{'libc_cv_ranlib_necessary'+set}'`\" = set"; then
+echo "configure:1923: checking whether ranlib is necessary" >&5
+if eval "test \"\${libc_cv_ranlib_necessary+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.c <<EOF
@@ -1881,7 +1953,7 @@ fi
 # - two terminals occur directly after each other
 # - the path contains an element with a dot in it
 echo $ac_n "checking LD_LIBRARY_PATH variable""... $ac_c" 1>&6
-echo "configure:1885: checking LD_LIBRARY_PATH variable" >&5
+echo "configure:1957: checking LD_LIBRARY_PATH variable" >&5
 case ${LD_LIBRARY_PATH} in
   [:\;]* | *[:\;] | *[:\;][:\;]* |  *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
     ld_library_path_setting="contains current directory"
@@ -1901,8 +1973,8 @@ fi
 # Extract the first word of "bash", so it can be a program name with args.
 set dummy bash; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1905: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_BASH'+set}'`\" = set"; then
+echo "configure:1977: checking for $ac_word" >&5
+if eval "test \"\${ac_cv_path_BASH+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   case "$BASH" in
@@ -1947,8 +2019,8 @@ if test "$BASH" = no; then
   # Extract the first word of "ksh", so it can be a program name with args.
 set dummy ksh; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1951: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_KSH'+set}'`\" = set"; then
+echo "configure:2023: checking for $ac_word" >&5
+if eval "test \"\${ac_cv_path_KSH+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   case "$KSH" in
@@ -1997,8 +2069,8 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2001: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
+echo "configure:2073: checking for $ac_word" >&5
+if eval "test \"\${ac_cv_prog_AWK+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   if test -n "$AWK"; then
@@ -2029,8 +2101,8 @@ done
 # Extract the first word of "perl", so it can be a program name with args.
 set dummy perl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2033: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then
+echo "configure:2105: checking for $ac_word" >&5
+if eval "test \"\${ac_cv_path_PERL+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   case "$PERL" in
@@ -2066,8 +2138,8 @@ fi
 # Extract the first word of "install-info", so it can be a program name with args.
 set dummy install-info; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2070: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_INSTALL_INFO'+set}'`\" = set"; then
+echo "configure:2142: checking for $ac_word" >&5
+if eval "test \"\${ac_cv_path_INSTALL_INFO+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   case "$INSTALL_INFO" in
@@ -2102,8 +2174,8 @@ fi
 
 if test "$INSTALL_INFO" != "no"; then
 echo $ac_n "checking for old Debian install-info""... $ac_c" 1>&6
-echo "configure:2106: checking for old Debian install-info" >&5
-if eval "test \"`echo '$''{'libc_cv_old_debian_install_info'+set}'`\" = set"; then
+echo "configure:2178: checking for old Debian install-info" >&5
+if eval "test \"\${libc_cv_old_debian_install_info+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   mkdir conftest.d
@@ -2135,8 +2207,8 @@ fi
 
 
 echo $ac_n "checking for signed size_t type""... $ac_c" 1>&6
-echo "configure:2139: checking for signed size_t type" >&5
-if eval "test \"`echo '$''{'libc_cv_signed_size_t'+set}'`\" = set"; then
+echo "configure:2211: checking for signed size_t type" >&5
+if eval "test \"\${libc_cv_signed_size_t+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   echo '#include <stddef.h>
@@ -2159,12 +2231,12 @@ EOF
 fi
 
 echo $ac_n "checking for libc-friendly stddef.h""... $ac_c" 1>&6
-echo "configure:2163: checking for libc-friendly stddef.h" >&5
-if eval "test \"`echo '$''{'libc_cv_friendly_stddef'+set}'`\" = set"; then
+echo "configure:2235: checking for libc-friendly stddef.h" >&5
+if eval "test \"\${libc_cv_friendly_stddef+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2168 "configure"
+#line 2240 "configure"
 #include "confdefs.h"
 #define __need_size_t
 #define __need_wchar_t
@@ -2179,7 +2251,7 @@ size_t size; wchar_t wchar;
 if (&size == NULL || &wchar == NULL) abort ();
 ; return 0; }
 EOF
-if { (eval echo configure:2183: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2255: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   libc_cv_friendly_stddef=yes
 else
@@ -2198,8 +2270,8 @@ override stddef.h = # The installed <stddef.h> seems to be libc-friendly."
 fi
 
 echo $ac_n "checking whether we need to use -P to assemble .S files""... $ac_c" 1>&6
-echo "configure:2202: checking whether we need to use -P to assemble .S files" >&5
-if eval "test \"`echo '$''{'libc_cv_need_minus_P'+set}'`\" = set"; then
+echo "configure:2274: checking whether we need to use -P to assemble .S files" >&5
+if eval "test \"\${libc_cv_need_minus_P+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.S <<EOF
@@ -2221,8 +2293,8 @@ asm-CPPFLAGS = -P # The assembler can't grok cpp's # line directives."
 fi
 
 echo $ac_n "checking for assembler global-symbol directive""... $ac_c" 1>&6
-echo "configure:2225: checking for assembler global-symbol directive" >&5
-if eval "test \"`echo '$''{'libc_cv_asm_global_directive'+set}'`\" = set"; then
+echo "configure:2297: checking for assembler global-symbol directive" >&5
+if eval "test \"\${libc_cv_asm_global_directive+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   libc_cv_asm_global_directive=UNKNOWN
@@ -2251,8 +2323,8 @@ EOF
 fi
 
 echo $ac_n "checking for .set assembler directive""... $ac_c" 1>&6
-echo "configure:2255: checking for .set assembler directive" >&5
-if eval "test \"`echo '$''{'libc_cv_asm_set_directive'+set}'`\" = set"; then
+echo "configure:2327: checking for .set assembler directive" >&5
+if eval "test \"\${libc_cv_asm_set_directive+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.s <<EOF
@@ -2285,8 +2357,8 @@ EOF
 fi
 
 echo $ac_n "checking for .symver assembler directive""... $ac_c" 1>&6
-echo "configure:2289: checking for .symver assembler directive" >&5
-if eval "test \"`echo '$''{'libc_cv_asm_symver_directive'+set}'`\" = set"; then
+echo "configure:2361: checking for .symver assembler directive" >&5
+if eval "test \"\${libc_cv_asm_symver_directive+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.s <<EOF
@@ -2304,8 +2376,8 @@ fi
 
 echo "$ac_t""$libc_cv_asm_symver_directive" 1>&6
 echo $ac_n "checking for ld --version-script""... $ac_c" 1>&6
-echo "configure:2308: checking for ld --version-script" >&5
-if eval "test \"`echo '$''{'libc_cv_ld_version_script_option'+set}'`\" = set"; then
+echo "configure:2380: checking for ld --version-script" >&5
+if eval "test \"\${libc_cv_ld_version_script_option+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   if test $libc_cv_asm_symver_directive = yes; then
@@ -2327,7 +2399,7 @@ EOF
     if { ac_try='${CC-cc} $CFLAGS -shared -o conftest.so conftest.o
                                        -nostartfiles -nostdlib
                                        -Wl,--version-script,conftest.map
-                      1>&5'; { (eval echo configure:2331: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
+                      1>&5'; { (eval echo configure:2403: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
     then
       libc_cv_ld_version_script_option=yes
     else
@@ -2365,15 +2437,15 @@ if test $VERSIONING = no; then
 fi
 if test $elf = yes; then
   echo $ac_n "checking for .previous assembler directive""... $ac_c" 1>&6
-echo "configure:2369: checking for .previous assembler directive" >&5
-if eval "test \"`echo '$''{'libc_cv_asm_previous_directive'+set}'`\" = set"; then
+echo "configure:2441: checking for .previous assembler directive" >&5
+if eval "test \"\${libc_cv_asm_previous_directive+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
     cat > conftest.s <<EOF
 .section foo_section
 .previous
 EOF
-  if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2377: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+  if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2449: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
     libc_cv_asm_previous_directive=yes
   else
     libc_cv_asm_previous_directive=no
@@ -2389,15 +2461,15 @@ EOF
 
   else
     echo $ac_n "checking for .popsection assembler directive""... $ac_c" 1>&6
-echo "configure:2393: checking for .popsection assembler directive" >&5
-if eval "test \"`echo '$''{'libc_cv_asm_popsection_directive'+set}'`\" = set"; then
+echo "configure:2465: checking for .popsection assembler directive" >&5
+if eval "test \"\${libc_cv_asm_popsection_directive+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
       cat > conftest.s <<EOF
 .pushsection foo_section
 .popsection
 EOF
-    if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2401: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+    if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2473: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
       libc_cv_asm_popsection_directive=yes
     else
       libc_cv_asm_popsection_directive=no
@@ -2417,12 +2489,12 @@ fi
 
 if test $elf != yes; then
   echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6
-echo "configure:2421: checking for .init and .fini sections" >&5
-if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then
+echo "configure:2493: checking for .init and .fini sections" >&5
+if eval "test \"\${libc_cv_have_initfini+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2426 "configure"
+#line 2498 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -2431,7 +2503,7 @@ asm (".section .init");
                                    asm (".text");
 ; return 0; }
 EOF
-if { (eval echo configure:2435: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2507: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   libc_cv_have_initfini=yes
 else
@@ -2459,19 +2531,19 @@ if test $elf = yes; then
 else
   if test $ac_cv_prog_cc_works = yes; then
     echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
-echo "configure:2463: checking for _ prefix on C symbol names" >&5
-if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
+echo "configure:2535: checking for _ prefix on C symbol names" >&5
+if eval "test \"\${libc_cv_asm_underscores+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2468 "configure"
+#line 2540 "configure"
 #include "confdefs.h"
 asm ("_glibc_foobar:");
 int main() {
 glibc_foobar ();
 ; return 0; }
 EOF
-if { (eval echo configure:2475: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   libc_cv_asm_underscores=yes
 else
@@ -2486,17 +2558,17 @@ fi
 echo "$ac_t""$libc_cv_asm_underscores" 1>&6
   else
     echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
-echo "configure:2490: checking for _ prefix on C symbol names" >&5
-if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
+echo "configure:2562: checking for _ prefix on C symbol names" >&5
+if eval "test \"\${libc_cv_asm_underscores+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2495 "configure"
+#line 2567 "configure"
 #include "confdefs.h"
 void underscore_test(void) {
 return; }
 EOF
-if { (eval echo configure:2500: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2572: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   if grep _underscore_test conftest* >/dev/null; then
     rm -f conftest*
     libc_cv_asm_underscores=yes
@@ -2528,8 +2600,8 @@ if test $elf = yes; then
 fi
 
 echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6
-echo "configure:2532: checking for assembler .weak directive" >&5
-if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then
+echo "configure:2604: checking for assembler .weak directive" >&5
+if eval "test \"\${libc_cv_asm_weak_directive+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.s <<EOF
@@ -2551,8 +2623,8 @@ echo "$ac_t""$libc_cv_asm_weak_directive" 1>&6
 
 if test $libc_cv_asm_weak_directive = no; then
   echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6
-echo "configure:2555: checking for assembler .weakext directive" >&5
-if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then
+echo "configure:2627: checking for assembler .weakext directive" >&5
+if eval "test \"\${libc_cv_asm_weakext_directive+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.s <<EOF
@@ -2589,8 +2661,8 @@ EOF
 fi
 
 echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6
-echo "configure:2593: checking for ld --no-whole-archive" >&5
-if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then
+echo "configure:2665: checking for ld --no-whole-archive" >&5
+if eval "test \"\${libc_cv_ld_no_whole_archive+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.c <<\EOF
@@ -2600,7 +2672,7 @@ __throw () {}
 EOF
 if { ac_try='${CC-cc} $CFLAGS
                            -nostdlib -nostartfiles -Wl,--no-whole-archive
-                           -o conftest conftest.c 1>&5'; { (eval echo configure:2604: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+                           -o conftest conftest.c 1>&5'; { (eval echo configure:2676: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
   libc_cv_ld_no_whole_archive=yes
 else
   libc_cv_ld_no_whole_archive=no
@@ -2614,8 +2686,8 @@ if test $libc_cv_ld_no_whole_archive = yes; then
 fi
 
 echo $ac_n "checking for gcc -fexceptions""... $ac_c" 1>&6
-echo "configure:2618: checking for gcc -fexceptions" >&5
-if eval "test \"`echo '$''{'libc_cv_gcc_exceptions'+set}'`\" = set"; then
+echo "configure:2690: checking for gcc -fexceptions" >&5
+if eval "test \"\${libc_cv_gcc_exceptions+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.c <<\EOF
@@ -2625,7 +2697,7 @@ __throw () {}
 EOF
 if { ac_try='${CC-cc} $CFLAGS
                            -nostdlib -nostartfiles -fexceptions
-                           -o conftest conftest.c 1>&5'; { (eval echo configure:2629: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+                           -o conftest conftest.c 1>&5'; { (eval echo configure:2701: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
   libc_cv_gcc_exceptions=yes
 else
   libc_cv_gcc_exceptions=no
@@ -2640,14 +2712,14 @@ fi
 
 if test "$base_machine" = alpha ; then
 echo $ac_n "checking for function ..ng prefix""... $ac_c" 1>&6
-echo "configure:2644: checking for function ..ng prefix" >&5
-if eval "test \"`echo '$''{'libc_cv_gcc_alpha_ng_prefix'+set}'`\" = set"; then
+echo "configure:2716: checking for function ..ng prefix" >&5
+if eval "test \"\${libc_cv_gcc_alpha_ng_prefix+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.c <<\EOF
 foo () { }
 EOF
-if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo..ng" > /dev/null'; { (eval echo configure:2651: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
+if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo..ng" > /dev/null'; { (eval echo configure:2723: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
 then
   libc_cv_gcc_alpha_ng_prefix=yes
 else
@@ -2674,19 +2746,19 @@ if test "$host_cpu" = powerpc ; then
 # Check for a bug present in at least versions 2.8.x of GCC
 # and versions 1.0.x of EGCS.
 echo $ac_n "checking whether clobbering cr0 causes problems""... $ac_c" 1>&6
-echo "configure:2678: checking whether clobbering cr0 causes problems" >&5
-if eval "test \"`echo '$''{'libc_cv_c_asmcr0_bug'+set}'`\" = set"; then
+echo "configure:2750: checking whether clobbering cr0 causes problems" >&5
+if eval "test \"\${libc_cv_c_asmcr0_bug+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2683 "configure"
+#line 2755 "configure"
 #include "confdefs.h"
 int tester(int x) { asm ("" : : : "cc"); return x & 123; }
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:2690: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2762: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   libc_cv_c_asmcr0_bug='no'
 else
@@ -2708,12 +2780,12 @@ fi
 fi
 
 echo $ac_n "checking for DWARF2 unwind info support""... $ac_c" 1>&6
-echo "configure:2712: checking for DWARF2 unwind info support" >&5
-if eval "test \"`echo '$''{'libc_cv_gcc_dwarf2_unwind_info'+set}'`\" = set"; then
+echo "configure:2784: checking for DWARF2 unwind info support" >&5
+if eval "test \"\${libc_cv_gcc_dwarf2_unwind_info+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.c <<EOF
-#line 2717 "configure"
+#line 2789 "configure"
 static char __EH_FRAME_BEGIN__;
 _start ()
 {
@@ -2740,7 +2812,7 @@ __bzero () {}
 EOF
 if { ac_try='${CC-cc} $CFLAGS -DCHECK__register_frame_info
                            -nostdlib -nostartfiles
-                           -o conftest conftest.c -lgcc >&5'; { (eval echo configure:2744: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+                           -o conftest conftest.c -lgcc >&5'; { (eval echo configure:2816: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
   libc_cv_gcc_dwarf2_unwind_info=static
 else
   libc_cv_gcc_dwarf2_unwind_info=no
@@ -2748,7 +2820,7 @@ fi
 if test $libc_cv_gcc_dwarf2_unwind_info = no; then
   if { ac_try='${CC-cc} $CFLAGS -DCHECK__register_frame
                              -nostdlib -nostartfiles
-                             -o conftest conftest.c -lgcc >&5'; { (eval echo configure:2752: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+                             -o conftest conftest.c -lgcc >&5'; { (eval echo configure:2824: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
     libc_cv_gcc_dwarf2_unwind_info=yes
   else
     libc_cv_gcc_dwarf2_unwind_info=no
@@ -2778,12 +2850,12 @@ EOF
 esac
 
 echo $ac_n "checking for __builtin_expect""... $ac_c" 1>&6
-echo "configure:2782: checking for __builtin_expect" >&5
-if eval "test \"`echo '$''{'libc_cv_gcc_builtin_expect'+set}'`\" = set"; then
+echo "configure:2854: checking for __builtin_expect" >&5
+if eval "test \"\${libc_cv_gcc_builtin_expect+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.c <<EOF
-#line 2787 "configure"
+#line 2859 "configure"
 int foo (int a)
 {
   a = __builtin_expect (a, 10);
@@ -2791,7 +2863,7 @@ int foo (int a)
 }
 EOF
 if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles
-                           -o conftest conftest.c -lgcc >&5'; { (eval echo configure:2795: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+                           -o conftest conftest.c -lgcc >&5'; { (eval echo configure:2867: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
   libc_cv_gcc_builtin_expect=yes
 else
   libc_cv_gcc_builtin_expect=no
@@ -2852,8 +2924,8 @@ if test "$uname" = "sysdeps/generic"; then
   fi
 
   echo $ac_n "checking OS release for uname""... $ac_c" 1>&6
-echo "configure:2856: checking OS release for uname" >&5
-if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then
+echo "configure:2928: checking OS release for uname" >&5
+if eval "test \"\${libc_cv_uname_release+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
     kernel_release=`echo "$kernel_id" | sed 's/^[^0-9.]*\([0-9.]*\).*$/\1/'`
@@ -2874,8 +2946,8 @@ echo "$ac_t""$libc_cv_uname_release" 1>&6
   uname_release="$libc_cv_uname_release"
 
   echo $ac_n "checking OS version for uname""... $ac_c" 1>&6
-echo "configure:2878: checking OS version for uname" >&5
-if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then
+echo "configure:2950: checking OS version for uname" >&5
+if eval "test \"\${libc_cv_uname_version+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
     kernel_version=`echo "$kernel_id" | sed 's/^[^#]*#\([0-9]*\).*$/\1/'`
@@ -2896,7 +2968,7 @@ else
 fi
 
 echo $ac_n "checking stdio selection""... $ac_c" 1>&6
-echo "configure:2900: checking stdio selection" >&5
+echo "configure:2972: checking stdio selection" >&5
 
 case $stdio in
 libio) cat >> confdefs.h <<\EOF
@@ -2910,7 +2982,7 @@ echo "$ac_t""$stdio" 1>&6
 # Test for old glibc 2.0.x headers so that they can be removed properly
 # Search only in includedir.
 echo $ac_n "checking for old glibc 2.0.x headers""... $ac_c" 1>&6
-echo "configure:2914: checking for old glibc 2.0.x headers" >&5
+echo "configure:2986: checking for old glibc 2.0.x headers" >&5
 if eval test -f "${includedir}/elfclass.h" -a -f "${includedir}/fcntlbits.h"
 then
   old_glibc_headers=yes
@@ -2964,8 +3036,8 @@ if test $shared = default; then
 fi
 
 echo $ac_n "checking whether -fPIC is default""... $ac_c" 1>&6
-echo "configure:2968: checking whether -fPIC is default" >&5
-if eval "test \"`echo '$''{'pic_default'+set}'`\" = set"; then
+echo "configure:3040: checking whether -fPIC is default" >&5
+if eval "test \"\${pic_default+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   pic_default=yes
@@ -3098,7 +3170,7 @@ do
     echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
     exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
   -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
-    echo "$CONFIG_STATUS generated by autoconf version 2.13"
+    echo "$CONFIG_STATUS generated by autoconf version 2.14.1"
     exit 0 ;;
   -help | --help | --hel | --he | --h)
     echo "\$ac_cs_usage"; exit 0 ;;
@@ -3475,7 +3547,7 @@ exit 0
 EOF
 chmod +x $CONFIG_STATUS
 rm -fr confdefs* $ac_clean_files
-test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+test "$no_create" = yes || $SHELL $CONFIG_STATUS || exit 1
 
 if test "$no_recursion" != yes; then
 
@@ -3539,7 +3611,7 @@ if test "$no_recursion" != yes; then
 
     # Check for guested configure; otherwise get Cygnus style configure.
     if test -f $ac_sub_srcdir/configure; then
-      ac_sub_configure=$ac_sub_srcdir/configure
+      ac_sub_configure="$SHELL $ac_sub_srcdir/configure"
     elif test -f $ac_sub_srcdir/configure.in; then
       ac_sub_configure=$ac_configure
     else
@@ -3561,9 +3633,9 @@ if test "$no_recursion" != yes; then
         *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
         esac
 
-      echo "running ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir"
+      echo "running $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir"
       # The eval makes quoting arguments work.
-      if eval ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir
+      if eval $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir
       then :
       else
         { echo "configure: error: $ac_sub_configure failed for $ac_config_dir" 1>&2; exit 1; }
index ffc68f1..179b1ad 100644 (file)
@@ -133,6 +133,13 @@ AC_ARG_ENABLE(force-install,
              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,
+[  --enable-kernel=VERSION compile for copmatibility with kernel not older
+                           than VERSION],
+              minimum_kernel=$enableval)
+
 AC_CANONICAL_HOST
 
 # The way shlib-versions is used to generate soversions.mk uses a
index bf5e797..f5d994b 100644 (file)
@@ -13,7 +13,7 @@ if test -n "$sysheaders"; then
 fi
 echo $ac_n "checking installed Linux kernel header files""... $ac_c" 1>&6
 echo "configure:16: checking installed Linux kernel header files" >&5
-if eval "test \"`echo '$''{'libc_cv_linux2010'+set}'`\" = set"; then
+if eval "test \"\${libc_cv_linux2010+set}\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
@@ -49,6 +49,35 @@ make sure that file was built correctly when installing the kernel header
 files.  To use kernel headers not from /usr/include/linux, use the
 configure option --with-headers." 1>&2; exit 1; }
 fi
+
+# If the user gave a minimal version number test whether the available
+# kernel headers are young enough.
+if test -n "$minimum_kernel"; then
+  echo $ac_n "checking for kernel header at least $minimum_kernel""... $ac_c" 1>&6
+echo "configure:58: checking for kernel header at least $minimum_kernel" >&5
+  decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\(\([0-9]*\)\|\).*/(\1 * 65536 + \2 * 256 + \3)/'`;
+  cat > conftest.$ac_ext <<EOF
+#include <linux/version.h>
+int main() {
+#if LINUX_VERSION_CODE < $decnum
+eat flaming death
+#endif
+; return 0; }
+EOF
+  if { (eval echo configure:30: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    cat >> confdefs.h <<EOF
+#define __LINUX_KERNEL_VERSION $decnum
+EOF
+
+    echo "$ac_t""ok" 1>&6
+  else
+    echo "$ac_t""too old!" 1>&6
+    { echo "configure: error: *** The available kernel headers are not at least as old as the requested
+*** compatible kernel version" 1>&2; exit 1; }
+  fi
+  rm -f conftest*
+fi
+
 if test -n "$sysheaders"; then
   CFLAGS=$OLD_CFLAGS
 fi
@@ -135,7 +164,7 @@ if test $host = $build; then
     ac_prefix=$ac_default_prefix
   fi
   echo $ac_n "checking for symlinks in ${ac_prefix}/include""... $ac_c" 1>&6
-echo "configure:131: checking for symlinks in ${ac_prefix}/include" >&5
+echo "configure:168: checking for symlinks in ${ac_prefix}/include" >&5
   ac_message=
   if test -L ${ac_prefix}/include/net; then
     ac_message="$ac_message
index 2c425c5..021b473 100644 (file)
@@ -34,6 +34,33 @@ make sure that file was built correctly when installing the kernel header
 files.  To use kernel headers not from /usr/include/linux, use the
 configure option --with-headers.])
 fi
+
+# If the user gave a minimal version number test whether the available
+# kernel headers are young enough.
+if test -n "$minimum_kernel"; then
+  AC_MSG_CHECKING(for kernel header at least $minimum_kernel)
+changequote(,)dnl
+  decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\(\([0-9]*\)\|\).*/(\1 * 65536 + \2 * 256 + \3)/'`;
+changequote([,])dnl
+  cat > conftest.$ac_ext <<EOF
+#include <linux/version.h>
+int main() {
+#if LINUX_VERSION_CODE < $decnum
+eat flaming death
+#endif
+; return 0; }
+EOF
+  if { (eval echo configure:30: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+    AC_DEFINE_UNQUOTED(__LINUX_KERNEL_VERSION, $decnum)
+    AC_MSG_RESULT(ok)
+  else
+    AC_MSG_RESULT(too old!)
+    AC_MSG_ERROR([*** The available kernel headers are not at least as old as the requested
+*** compatible kernel version])
+  fi
+  rm -f conftest*
+fi
+
 if test -n "$sysheaders"; then
   CFLAGS=$OLD_CFLAGS
 fi
index fe28e2d..cc7b987 100644 (file)
@@ -18,6 +18,7 @@
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
+#include <assert.h>
 #include <errno.h>
 #include <limits.h>
 #include <stdlib.h>
 #include <sysdep.h>
 #include <sys/syscall.h>
 
+#include "kernel-features.h"
 
+
+#if __ASSUME_GETCWD_SYSCALL > 0
+/* Kernel 2.1.92 introduced a third way to get the current working
+   directory: a syscall.  We've got to be careful that even when
+   compiling under 2.1.92+ the libc still runs under older kernels. */
+extern int __syscall_getcwd (char *buf, unsigned long size);
+# define no_syscall_getcwd 0
+# define have_new_dcache 1
+/* This is a trick since we don't define generic_getcwd.  */
+# define generic_getcwd getcwd
+#else
 /* The "proc" filesystem provides an easy method to retrieve the value.
    For each process, the corresponding directory contains a symbolic link
    named `cwd'.  Reading the content of this link immediate gives us the
    the proc filesystem mounted.  Use the POSIX implementation in this case.  */
 static char *generic_getcwd (char *buf, size_t size) internal_function;
 
-#ifdef __NR_getcwd
+# if __NR_getcwd
 /* Kernel 2.1.92 introduced a third way to get the current working
    directory: a syscall.  We've got to be careful that even when
    compiling under 2.1.92+ the libc still runs under older kernels. */
 extern int __syscall_getcwd (char *buf, unsigned long size);
 static int no_syscall_getcwd;
 static int have_new_dcache;
-#else
-# define no_syscall_getcwd 1
+# else
+#  define no_syscall_getcwd 1
 static int have_new_dcache = 1;
+# endif
 #endif
 
 char *
@@ -80,7 +94,7 @@ __getcwd (char *buf, size_t size)
 
   save_errno = errno;
 
-#ifdef __NR_getcwd
+#if defined __NR_getcwd || __LINUX_GETCWD_SYSCALL > 0
   if (!no_syscall_getcwd)
     {
       int retval;
@@ -98,6 +112,16 @@ __getcwd (char *buf, size_t size)
          return buf;
        }
 
+# if __ASSUME_GETCWD_SYSCALL
+      /* It should never happen that the `getcwd' syscall failed because
+        the buffer is too small if we allocated the buffer outself.  */
+      assert (errno != ERANGE || buf != NULL);
+
+      if (buf == NULL)
+       free (path);
+
+      return NULL;
+# else
       if (errno == ENOSYS)
        {
           no_syscall_getcwd = 1;
@@ -111,6 +135,7 @@ __getcwd (char *buf, size_t size)
        }
 
       __set_errno (save_errno);
+# endif
     }
 #endif
 
@@ -136,14 +161,18 @@ __getcwd (char *buf, size_t size)
            }
          return buf;
        }
+#ifndef have_new_dcache
       else
        have_new_dcache = 0;
+#endif
     }
 
+#if __ASSUME_GETCWD_SYSCALL == 0
   /* Set to have_new_dcache only if error indicates that proc doesn't
      exist.  */
   if (errno != EACCES && errno != ENAMETOOLONG)
     have_new_dcache = 0;
+#endif
 
   /* Something went wrong.  Restore the error number and use the generic
      version.  */
@@ -165,7 +194,9 @@ __getcwd (char *buf, size_t size)
 }
 weak_alias (__getcwd, getcwd)
 
+#if __ASSUME_GETCWD_SYSCALL == 0
 /* Get the code for the generic version.  */
-#define GETCWD_RETURN_TYPE     static char * internal_function
-#define __getcwd               generic_getcwd
-#include <sysdeps/posix/getcwd.c>
+# define GETCWD_RETURN_TYPE    static char * internal_function
+# define __getcwd              generic_getcwd
+# include <sysdeps/posix/getcwd.c>
+#endif
index 3776a44..9ab03e3 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #include <sysdep.h>
 #include <sys/syscall.h>
 
+#include <kernel-features.h>
+
 /*
   In Linux 2.1.x the chown functions have been changed.  A new function lchown
   was introduced.  The new chown now follows symlinks - the old chown and the
 
 extern int __syscall_chown (const char *__file,
                            uid_t __owner, gid_t __group);
-#ifdef __NR_lchown
+#if defined __NR_lchown || __ASSUME_LCHOWN_SYSCALL > 0
 /* Running under Linux > 2.1.80.  */
-static int __libc_old_chown;
 
 
 int
 __real_chown (const char *file, uid_t owner, gid_t group)
 {
+# if __ASSUME_LCHOWN_SYSCALL == 0
+  static int __libc_old_chown;
   int result;
 
   if (!__libc_old_chown)
@@ -57,11 +60,14 @@ __real_chown (const char *file, uid_t owner, gid_t group)
     }
 
   return __lchown (file, owner, group);
+# else
+  return INLINE_SYSCALL (chown, 3, file, owner, group);
+# endif
 }
 #endif
 
 
-#ifndef __NR_lchown
+#if !defined __NR_lchown && __ASSUME_LCHOWN_SYSCALL == 0
 /* Compiling under older kernels.  */
 int
 __chown_is_lchown (const char *file, uid_t owner, gid_t group)
index 4c2f18d..5745648 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
 #include <sysdep.h>
 #include <sys/syscall.h>
 
-#ifdef __NR_pread
+#include <kernel-features.h>
 
+#if defined __NR_pread || __ASSUME_PREAD_SYSCALL > 0
+
+# if __ASSUME_PREAD_SYSCALL == 0
 static ssize_t __emulate_pread (int fd, void *buf, size_t count,
                                off_t offset) internal_function;
+# endif
 
 
 ssize_t
@@ -40,16 +44,21 @@ __pread (fd, buf, count, offset)
 
   /* First try the syscall.  */
   result = INLINE_SYSCALL (pread, 5, fd, buf, count, offset, 0);
+# if __ASSUME_PREAD_SYSCALL == 0
   if (result == -1 && errno == ENOSYS)
     /* No system call available.  Use the emulation.  */
     result = __emulate_pread (fd, buf, count, offset);
+# endif
 
   return result;
 }
 
 weak_alias (__pread, pread)
 
-#define __pread(fd, buf, count, offset) \
+# define __pread(fd, buf, count, offset) \
      static internal_function __emulate_pread (fd, buf, count, offset)
 #endif
-#include <sysdeps/posix/pread.c>
+
+#if __ASSUME_PREAD_SYSCALL == 0
+# include <sysdeps/posix/pread.c>
+#endif
index 8cfb3c0..aa0c54d 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
 #include <sysdep.h>
 #include <sys/syscall.h>
 
-#ifdef __NR_pread
+#include <kernel-features.h>
 
-extern ssize_t __syscall_pread64 (int fd, void *buf, size_t count,
-                                 off_t offset_hi, off_t offset_lo);
+#if defined __NR_pread || __ASSUME_PREAD_SYSCALL > 0
 
+# if __ASSUME_PREAD_SYSCALL == 0
 static ssize_t __emulate_pread64 (int fd, void *buf, size_t count,
                                  off64_t offset) internal_function;
+# endif
 
 
 ssize_t
@@ -45,16 +46,21 @@ __pread64 (fd, buf, count, offset)
   result = INLINE_SYSCALL (pread, 5, fd, buf, count,
                           (off_t) (offset & 0xffffffff),
                           (off_t) (offset >> 32));
+# if __ASSUME_PREAD_SYSCALL == 0
   if (result == -1 && errno == ENOSYS)
     /* No system call available.  Use the emulation.  */
     result = __emulate_pread64 (fd, buf, count, offset);
+# endif
 
   return result;
 }
 
 weak_alias (__pread64, pread64)
 
-#define __pread64(fd, buf, count, offset) \
+# define __pread64(fd, buf, count, offset) \
      static internal_function __emulate_pread64 (fd, buf, count, offset)
 #endif
-#include <sysdeps/posix/pread64.c>
+
+#if __ASSUME_PREAD_SYSCALL == 0
+# include <sysdeps/posix/pread64.c>
+#endif
index a1fc99f..90eee5b 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
 #include <sysdep.h>
 #include <sys/syscall.h>
 
-#ifdef __NR_pwrite
+#include <kernel-features.h>
 
+#if defined __NR_pwrite || __ASSUME_PWRITE_SYSCALL > 0
+
+# if __ASSUME_PWRITE_SYSCALL == 0
 static ssize_t __emulate_pwrite (int fd, const void *buf, size_t count,
                                 off_t offset) internal_function;
+# endif
 
 
 ssize_t
@@ -40,16 +44,21 @@ __pwrite (fd, buf, count, offset)
 
   /* First try the syscall.  */
   result = INLINE_SYSCALL (pwrite, 5, fd, buf, count, offset, 0);
+# if __ASSUME_PWRITE_SYSCALL == 0
   if (result == -1 && errno == ENOSYS)
     /* No system call available.  Use the emulation.  */
     result = __emulate_pwrite (fd, buf, count, offset);
+# endif
 
   return result;
 }
 
 weak_alias (__pwrite, pwrite)
 
-#define __pwrite(fd, buf, count, offset) \
+# define __pwrite(fd, buf, count, offset) \
      static internal_function __emulate_pwrite (fd, buf, count, offset)
 #endif
-#include <sysdeps/posix/pwrite.c>
+
+#if __ASSUME_PWRITE_SYSCALL == 0
+# include <sysdeps/posix/pwrite.c>
+#endif
index 7a5d665..500cd7c 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
 #include <sysdep.h>
 #include <sys/syscall.h>
 
-#ifdef __NR_pwrite
+#include <kernel-features.h>
 
+#if defined __NR_pwrite || __ASSUME_PWRITE_SYSCALL > 0
+
+# if __ASSUME_PWRITE_SYSCALL == 0
 static ssize_t __emulate_pwrite64 (int fd, const void *buf, size_t count,
                                   off64_t offset) internal_function;
+# endif
 
 
 ssize_t
@@ -42,16 +46,21 @@ __pwrite64 (fd, buf, count, offset)
   result = INLINE_SYSCALL (pwrite, 5, fd, buf, count,
                           (off_t) (offset & 0xffffffff),
                           (off_t) (offset >> 32));
+# if __ASSUME_PWRITE_SYSCALL == 0
   if (result == -1 && errno == ENOSYS)
     /* No system call available.  Use the emulation.  */
     result = __emulate_pwrite64 (fd, buf, count, offset);
+# endif
 
   return result;
 }
 
 weak_alias (__pwrite64, pwrite64)
 
-#define __pwrite64(fd, buf, count, offset) \
+# define __pwrite64(fd, buf, count, offset) \
      static internal_function __emulate_pwrite64 (fd, buf, count, offset)
 #endif
-#include <sysdeps/posix/pwrite64.c>
+
+#if __ASSUME_PWRITE_SYSCALL == 0
+# include <sysdeps/posix/pwrite64.c>
+#endif
index 01395ba..b8ee2bd 100644 (file)
@@ -1,5 +1,5 @@
 /* Initialization code run first thing by the ELF startup code.  Linux version.
-   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+   Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
+#include <stdio.h>
+#include <fcntl.h>
 #include <unistd.h>
 #include <sysdep.h>
 #include <fpu_control.h>
 #include <linux/personality.h>
 #include <init-first.h>
+#include <sys/param.h>
+#include <sys/sysctl.h>
 #include <sys/types.h>
+#include "kernel-features.h"
 
 extern void __libc_init_secure (void);
 extern void __libc_init (int, char **, char **);
@@ -31,6 +36,10 @@ extern void __libc_global_ctors (void);
 /* The function is called from assembly stubs the compiler can't see.  */
 static void init (int, char **, char **) __attribute__ ((unused));
 
+/* The function we use to get the kernel revision.  */
+extern int __sysctl (int *name, int nlen, void *oldval, size_t *oldlenp,
+                    void *newval, size_t newlen);
+
 extern int _dl_starting_up;
 weak_extern (_dl_starting_up)
 
@@ -56,6 +65,69 @@ init (int argc, char **argv, char **envp)
   /* We must not call `personality' twice.  */
   if (!__libc_multiple_libcs)
     {
+      /* Test whether the kernel is new enough.  This test is only
+         performed if the library is not compiled to run on all
+         kernels.  */
+      if (__LINUX_KERNEL_VERSION > 0)
+       {
+         static const int sysctl_args[] = { CTL_KERN, KERN_OSRELEASE };
+         char buf[64];
+         size_t reslen = sizeof (buf);
+         unsigned int version;
+         int parts;
+         char *cp;
+
+         /* Try reading the number using `sysctl' first.  */
+         if (__sysctl ((int *) sysctl_args,
+                       sizeof (sysctl_args) / sizeof (sysctl_args[0]),
+                       buf, &reslen, NULL, 0) < 0)
+           {
+             /* This was not successful.  Now try reading the /proc
+                filesystem.  */
+             int fd = __open ("/proc/sys/kernel/osrelease", O_RDONLY);
+             if (fd == -1
+                 || (reslen = __read (fd, buf, sizeof (buf))) <= 0)
+               /* This also didn't work.  We give up since we cannot
+                  make sure the library can actually work.  */
+               __libc_fatal ("FATAL: cannot determine library version\n");
+
+             __close (fd);
+           }
+         buf[MIN (reslen, sizeof (buf) - 1)] = '\0';
+
+         /* Now convert it into a number.  The string consists of at most
+            three parts.  */
+         version = 0;
+         parts = 0;
+         cp = buf;
+         while ((*cp >= '0') && (*cp <= '9'))
+           {
+             unsigned int here = *cp++ - '0';
+
+             while ((*cp >= '0') && (*cp <= '9'))
+               {
+                 here *= 10;
+                 here += *cp++ - '0';
+               }
+
+             ++parts;
+             version <<= 8;
+             version |= here;
+
+             if (*cp++ != '.')
+               /* Another part following?  */
+               break;
+           }
+
+         if (parts < 3)
+           version <<= 8 * (3 - parts);
+
+         /* Now we can test with the required version.  */
+         if (version < __LINUX_KERNEL_VERSION)
+           /* Not sufficent.  */
+           __libc_fatal ("FATAL: kernel too old\n");
+       }
+
       /* The `personality' system call takes one argument that chooses
         the "personality", i.e. the set of system calls and such.  We
         must make this call first thing to disable emulation of some
diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
new file mode 100644 (file)
index 0000000..6813853
--- /dev/null
@@ -0,0 +1,74 @@
+/* Set flags signalling availability of kernel features based on given
+   kernel version number.
+   Copyright (C) 1999 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* This file must not contain any C code.  At least it must be protected
+   to allow using the file also in assembler files.  */
+
+/* XXX For testing.  */
+#define __LINUX_KERNEL_VERSION 131584
+
+#ifndef __LINUX_KERNEL_VERSION
+/* We assume the worst; all kernels should be supported.  */
+# define __LINUX_KERNEL_VERSION        0
+#endif
+
+/* We assume for __LINUX_KERNEL_VERSION the same encoding used in
+   linux/version.h.  I.e., the major, minor, and subminor all get a
+   byte with the major number being in the highest byte.  This means
+   we can do numeric comparisons.
+
+   In the following we will define certain symbols depending on
+   whether the describes kernel feature is available in the kernel
+   version given by __LINUX_KERNEL_VERSION.  We are not always exactly
+   recording the correct versions in which the features were
+   introduced.  If somebody cares these values can afterwards be
+   corrected.  Most of the numbers here are set corresponding to
+   2.2.0.  */
+
+/* `getcwd' system call.  */
+#if __LINUX_KERNEL_VERSION >= 131584
+# define __ASSUME_GETCWD_SYSCALL       1
+#endif
+
+/* Real-time signal became usable in 2.1.70.  */
+#if __LINUX_KERNEL_VERSION >= 131398
+# define __ASSUME_REALTIME_SIGNALS     1
+#endif
+
+/* When were the `pread'/`pwrite' syscalls introduced?  */
+#if __LINUX_KERNEL_VERSION >= 131584
+# define __ASSUME_PREAD_SYSCALL                1
+# define __ASSUME_PWRITE_SYSCALL       1
+#endif
+
+/* When was `poll' introduced?  */
+#if __LINUX_KERNEL_VERSION >= 131584
+# define __ASSUME_POLL_SYSCALL         1
+#endif
+
+/* The `lchown' syscall was introduced in 2.1.80.  */
+#if __LINUX_KERNEL_VERSION >= 131408
+# define __ASSUME_LCHOWN_SYSCALL       1
+#endif
+
+/* When did the `setresuid' sysall became available?  */
+#if __LINUX_KERNEL_VERSION >= 131584
+# define __ASSUME_SETRESUID_SYSCALL    1
+#endif
index e7df3b7..16433e5 100644 (file)
 
 #include <sysdep.h>
 #include <sys/syscall.h>
-#ifdef __NR_poll
+
+#include "kernel-features.h"
+
+#if defined __NR_poll || __ASSUME_POLL_SYSCALL > 0
 
 extern int __syscall_poll __P ((struct pollfd *fds, unsigned int nfds,
                                int timeout));
 
+# if __ASSUME_POLL_SYSCALL == 0
 static int __emulate_poll __P ((struct pollfd *fds, unsigned long int nfds,
                                int timeout)) internal_function;
+# endif
 
 /* The real implementation.  */
 int
@@ -37,6 +42,7 @@ __poll (fds, nfds, timeout)
      unsigned long int nfds;
      int timeout;
 {
+# if __ASSUME_POLL_SYSCALL == 0
   static int must_emulate;
 
   if (!must_emulate)
@@ -52,6 +58,9 @@ __poll (fds, nfds, timeout)
     }
 
   return __emulate_poll (fds, nfds, timeout);
+# else
+  return INLINE_SYSCALL (poll, 3, fds, nfds, timeout);
+# endif
 }
 weak_alias (__poll, poll)
 
@@ -59,4 +68,7 @@ weak_alias (__poll, poll)
 # define __poll(fds, nfds, timeout) \
   static internal_function __emulate_poll (fds, nfds, timeout)
 #endif
-#include <sysdeps/unix/bsd/poll.c>
+
+#if __ASSUME_POLL_SYSCALL == 0
+# include <sysdeps/unix/bsd/poll.c>
+#endif
index a9461ca..cae3d62 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
 #include <sysdep.h>
 #include <sys/syscall.h>
 
-#ifdef __NR_pread
+#include "kernel-features.h"
+
+#if defined __NR_pread || __ASSUME_PREAD_SYSCALL > 0
 
 extern ssize_t __syscall_pread (int fd, void *buf, size_t count,
                                off_t offset_hi, off_t offset_lo);
 
+# if __ASSUME_PREAD_SYSCALL == 0
 static ssize_t __emulate_pread (int fd, void *buf, size_t count,
                                off_t offset) internal_function;
+# endif
 
 
 ssize_t
@@ -43,16 +47,21 @@ __pread (fd, buf, count, offset)
 
   /* First try the syscall.  */
   result = INLINE_SYSCALL (pread, 5, fd, buf, count, 0, offset);
+# if __ASSUME_PREAD_SYSCALL == 0
   if (result == -1 && errno == ENOSYS)
     /* No system call available.  Use the emulation.  */
     result = __emulate_pread (fd, buf, count, offset);
+# endif
 
   return result;
 }
 
 weak_alias (__pread, pread)
 
-#define __pread(fd, buf, count, offset) \
+# define __pread(fd, buf, count, offset) \
      static internal_function __emulate_pread (fd, buf, count, offset)
 #endif
-#include <sysdeps/posix/pread.c>
+
+#if __ASSUME_PREAD_SYSCALL == 0
+# include <sysdeps/posix/pread.c>
+#endif
index b8e1177..fc4f7f2 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
 #include <sysdep.h>
 #include <sys/syscall.h>
 
-#ifdef __NR_pread
+#include "kernel-features.h"
+
+#if defined __NR_pread || __ASSUME_PREAD_SYSCALL > 0
 
 extern ssize_t __syscall_pread (int fd, void *buf, size_t count,
                                off_t offset_hi, off_t offset_lo);
 
+# if __ASSUME_PREAD_SYSCALL == 0
 static ssize_t __emulate_pread64 (int fd, void *buf, size_t count,
                                  off64_t offset) internal_function;
+# endif
 
 
 ssize_t
@@ -44,16 +48,21 @@ __pread64 (fd, buf, count, offset)
   /* First try the syscall.  */
   result = INLINE_SYSCALL (pread, 5, fd, buf, count, (off_t) (offset >> 32),
                           (off_t) (offset & 0xffffffff));
+# if __ASSUME_PREAD_SYSCALL == 0
   if (result == -1 && errno == ENOSYS)
     /* No system call available.  Use the emulation.  */
     result = __emulate_pread64 (fd, buf, count, offset);
+# endif
 
   return result;
 }
 
 weak_alias (__pread64, pread64)
 
-#define __pread64(fd, buf, count, offset) \
+# define __pread64(fd, buf, count, offset) \
      static internal_function __emulate_pread64 (fd, buf, count, offset)
 #endif
-#include <sysdeps/posix/pread64.c>
+
+# if __ASSUME_PREAD_SYSCALL == 0
+# include <sysdeps/posix/pread64.c>
+#endif
index cd7b8ad..fd4ec88 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
 #include <sysdep.h>
 #include <sys/syscall.h>
 
-#ifdef __NR_pwrite
+#include "kernel-features.h"
+
+#if defined __NR_pwrite || __ASSUME_PWRITE_SYSCALL > 0
 
 extern ssize_t __syscall_pwrite (int fd, const void *buf, size_t count,
                                 off_t offset_hi, off_t offset_lo);
 
+# if __ASSUME_PWRITE_SYSCALL == 0
 static ssize_t __emulate_pwrite (int fd, const void *buf, size_t count,
                                 off_t offset) internal_function;
+# endif
 
 
 ssize_t
@@ -43,16 +47,21 @@ __pwrite (fd, buf, count, offset)
 
   /* First try the syscall.  */
   result = INLINE_SYSCALL (pwrite, 5, fd, buf, count, 0, offset);
+# if __ASSUME_PWRITE_SYSCALL == 0
   if (result == -1 && errno == ENOSYS)
     /* No system call available.  Use the emulation.  */
     result = __emulate_pwrite (fd, buf, count, offset);
+# endif
 
   return result;
 }
 
 weak_alias (__pwrite, pwrite)
 
-#define __pwrite(fd, buf, count, offset) \
+# define __pwrite(fd, buf, count, offset) \
      static internal_function __emulate_pwrite (fd, buf, count, offset)
 #endif
-#include <sysdeps/posix/pwrite.c>
+
+#if __ASSUME_PWRITE_SYSCALL == 0
+# include <sysdeps/posix/pwrite.c>
+#endif
index b6ebba1..cc92de1 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
 #include <sysdep.h>
 #include <sys/syscall.h>
 
-#ifdef __NR_pwrite
+#include "kernel-features.h"
+
+#if defined __NR_pwrite || __ASSUME_PWRITE_SYSCALL > 0
 
 extern ssize_t __syscall_pwrite64 (int fd, const void *buf, size_t count,
                                   off_t offset_hi, off_t offset_lo);
 
+# if __ASSUME_PWRITE_SYSCALL == 0
 static ssize_t __emulate_pwrite64 (int fd, const void *buf, size_t count,
                                   off64_t offset) internal_function;
+# endif
 
 
 ssize_t
@@ -44,16 +48,21 @@ __pwrite64 (fd, buf, count, offset)
   /* First try the syscall.  */
   result = INLINE_SYSCALL (pwrite, 5, fd, buf, count, (off_t) (offset >> 32),
                           (off_t) (offset & 0xffffffff));
+# if __ASSUME_PWRITE_SYSCALL == 0
   if (result == -1 && errno == ENOSYS)
     /* No system call available.  Use the emulation.  */
     result = __emulate_pwrite64 (fd, buf, count, offset);
+# endif
 
   return result;
 }
 
 weak_alias (__pwrite64, pwrite64)
 
-#define __pwrite64(fd, buf, count, offset) \
+# define __pwrite64(fd, buf, count, offset) \
      static internal_function __emulate_pwrite64 (fd, buf, count, offset)
 #endif
-#include <sysdeps/posix/pwrite64.c>
+
+#if __ASSUME_PWRITE_SYSCALL == 0
+# include <sysdeps/posix/pwrite64.c>
+#endif
index 20840db..15687e3 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -21,7 +21,9 @@
 #include <sys/types.h>
 #include <unistd.h>
 
-#ifdef __NR_setresuid
+#include "kernel-features.h"
+
+#if defined __NR_setresuid || __ASSUME_SETRESUID_SYSCALL > 0
 
 extern int __setresuid (uid_t ruid, uid_t euid, uid_t suid);
 
@@ -38,11 +40,13 @@ seteuid (uid_t uid)
 
   /* First try the syscall.  */
   result = __setresuid (-1, uid, -1);
+# if __ASSUME_SETRESUID_SYSCALL == 0
   if (result == -1 && errno == ENOSYS)
     /* No system call available.  Use emulation.  This may not work
        since `setreuid' also sets the saved user ID when UID is not
        equal to the real user ID, making it impossible to switch back.  */
     result = __setreuid (-1, uid);
+# endif
 
   return result;
 }
index a5580cc..40f9bbc 100644 (file)
 #include <sysdep.h>
 #include <sys/syscall.h>
 
+#include "kernel-features.h"
+
 /* The difference here is that the sigaction structure used in the
    kernel is not the same as we use in the libc.  Therefore we must
    translate it here.  */
 #include <kernel_sigaction.h>
 
+#if __ASSUME_REALTIME_SIGNALS == 0
+/* The variable is shared between all wrappers around signal handling
+   functions which have RT equivalents.  This is the definition.  */
+int __libc_missing_rt_sigs;
+
 extern int __syscall_sigaction (int, const struct old_kernel_sigaction *,
                                struct old_kernel_sigaction *);
+# define rtsignals_guaranteed 0
+#else
+# define rtsignals_guaranteed 1
+#endif
 extern int __syscall_rt_sigaction (int, const struct kernel_sigaction *,
                                   struct kernel_sigaction *, size_t);
 
-/* The variable is shared between all wrappers around signal handling
-   functions which have RT equivalents.  This is the definition.  */
-int __libc_missing_rt_sigs;
-
 
 /* If ACT is not NULL, change the action for SIG to *ACT.
    If OACT is not NULL, put the old action for SIG in *OACT.  */
@@ -49,12 +56,18 @@ __sigaction (sig, act, oact)
   struct old_kernel_sigaction k_sigact, k_osigact;
   int result;
 
-#ifdef __NR_rt_sigaction
+#if defiend __NR_rt_sigaction || __ASSUME_REALTIME_SIGNALS > 0
   /* First try the RT signals.  */
+# if __ASSUME_REALTIME_SIGNALS == 0
   if (!__libc_missing_rt_sigs)
+# endif
     {
       struct kernel_sigaction kact, koact;
+      /* Save the current error value for later.  We need not do this
+        if we are guaranteed to have realtime signals.  */
+# if __ASSUME_REALTIME_SIGNALS == 0
       int saved_errno = errno;
+# endif
 
       if (act)
        {
@@ -71,7 +84,9 @@ __sigaction (sig, act, oact)
       result = INLINE_SYSCALL (rt_sigaction, 4, sig, act ? &kact : NULL,
                               oact ? &koact : NULL, _NSIG / 8);
 
+# if __ASSUME_REALTIME_SIGNALS == 0
       if (result >= 0 || errno != ENOSYS)
+# endif
        {
          if (oact && result >= 0)
            {
@@ -85,19 +100,22 @@ __sigaction (sig, act, oact)
          return result;
        }
 
+# if __ASSUME_REALTIME_SIGNALS == 0
       __set_errno (saved_errno);
       __libc_missing_rt_sigs = 1;
+# endif
     }
 #endif
 
+#if __ASSUME_REALTIME_SIGNALS == 0
   if (act)
     {
       k_sigact.k_sa_handler = act->sa_handler;
       k_sigact.sa_mask = act->sa_mask.__val[0];
       k_sigact.sa_flags = act->sa_flags;
-#ifdef HAVE_SA_RESTORER
+# ifdef HAVE_SA_RESTORER
       k_sigact.sa_restorer = act->sa_restorer;
-#endif
+# endif
     }
   result = INLINE_SYSCALL (sigaction, 3, sig, act ? &k_sigact : NULL,
                           oact ? &k_osigact : NULL);
@@ -106,11 +124,12 @@ __sigaction (sig, act, oact)
       oact->sa_handler = k_osigact.k_sa_handler;
       oact->sa_mask.__val[0] = k_osigact.sa_mask;
       oact->sa_flags = k_osigact.sa_flags;
-#ifdef HAVE_SA_RESTORER
+# ifdef HAVE_SA_RESTORER
       oact->sa_restorer = k_osigact.sa_restorer;
-#endif
+# endif
     }
   return result;
+#endif
 }
 
 weak_alias (__sigaction, sigaction)
index c41c4f2..9323145 100644 (file)
@@ -23,6 +23,8 @@
 #include <sysdep.h>
 #include <sys/syscall.h>
 
+#include "kernel-features.h"
+
 extern int __syscall_sigpending (sigset_t *);
 extern int __syscall_rt_sigpending (sigset_t *, size_t);
 
@@ -38,7 +40,10 @@ int
 sigpending (set)
      sigset_t *set;
 {
-#ifdef __NR_rt_pending
+#if __ASSUME_REALTIME_SIGNALS > 0
+  return INLINE_SYSCALL (rt_sigpending, 2, set, _NSIG / 8);
+#else
+# ifdef __NR_rt_pending
   /* First try the RT signals.  */
   if (!__libc_missing_rt_sigs)
     {
@@ -53,7 +58,8 @@ sigpending (set)
       __set_errno (saved_errno);
       __libc_missing_rt_sigs = 1;
     }
-#endif
+# endif
 
   return INLINE_SYSCALL (sigpending, 1, set);
+#endif
 }
index 5e72c98..3e0719a 100644 (file)
@@ -23,6 +23,9 @@
 #include <sysdep.h>
 #include <sys/syscall.h>
 
+#include "kernel-features.h"
+
+
 extern int __syscall_sigprocmask (int, const sigset_t *, sigset_t *);
 extern int __syscall_rt_sigprocmask (int, const sigset_t *, sigset_t *,
                                     size_t);
@@ -39,7 +42,10 @@ __sigprocmask (how, set, oset)
      const sigset_t *set;
      sigset_t *oset;
 {
-#ifdef __NR_rt_sigprocmask
+#if __ASSUME_REALTIME_SIGNALS > 0
+  return INLINE_SYSCALL (rt_sigprocmask, 4, how, set, oset, _NSIG / 8);
+#else
+# ifdef __NR_rt_sigprocmask
   /* First try the RT signals.  */
   if (!__libc_missing_rt_sigs)
     {
@@ -55,8 +61,9 @@ __sigprocmask (how, set, oset)
       __set_errno (saved_errno);
       __libc_missing_rt_sigs = 1;
     }
-#endif
+# endif
 
   return INLINE_SYSCALL (sigprocmask, 3, how, set, oset);
+#endif
 }
 weak_alias (__sigprocmask, sigprocmask)
index 1d0dba0..da74339 100644 (file)
@@ -23,6 +23,8 @@
 #include <sysdep.h>
 #include <sys/syscall.h>
 
+#include "kernel-features.h"
+
 extern int __syscall_sigsuspend (int, unsigned long int, unsigned long int);
 extern int __syscall_rt_sigsuspend (const sigset_t *, size_t);
 
@@ -38,7 +40,10 @@ int
 __sigsuspend (set)
      const sigset_t *set;
 {
-#ifdef __NR_rt_sigsuspend
+#if __ASSUME_REALTIME_SIGNALS
+  return INLINE_SYSCALL (rt_sigsuspend, 2, set, _NSIG / 8);
+#else
+# ifdef __NR_rt_sigsuspend
   /* First try the RT signals.  */
   if (!__libc_missing_rt_sigs)
     {
@@ -53,8 +58,9 @@ __sigsuspend (set)
       __set_errno (saved_errno);
       __libc_missing_rt_sigs = 1;
     }
-#endif
+# endif
 
   return INLINE_SYSCALL (sigsuspend, 3, 0, 0, set->__val[0]);
+#endif
 }
 weak_alias (__sigsuspend, sigsuspend)
index 1ab3c79..b131820 100644 (file)
@@ -1,5 +1,5 @@
 /* Read or write system information.  Linux version.
-   Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -26,8 +26,8 @@
 extern int __syscall__sysctl (struct __sysctl_args *args);
 
 int
-sysctl (int *name, int nlen, void *oldval, size_t *oldlenp,
-       void *newval, size_t newlen)
+__sysctl (int *name, int nlen, void *oldval, size_t *oldlenp,
+         void *newval, size_t newlen)
 {
   struct __sysctl_args args =
   {
@@ -41,3 +41,4 @@ sysctl (int *name, int nlen, void *oldval, size_t *oldlenp,
 
   return INLINE_SYSCALL (_sysctl, 1, &args);
 }
+weak_alias (__sysctl, sysctl)
index 7c41877..72d4e5a 100644 (file)
@@ -1,5 +1,5 @@
 /* Test whether RT signals are really available.
-   Copyright (C) 1997 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
 #include <string.h>
 #include <sys/utsname.h>
 
+#include "kernel-features.h"
+
 static int
 kernel_has_rtsig (void)
 {
+#if __ASSUME_REALTIME_SIGNALS
+  return 1;
+#else
   struct utsname name;
 
   return uname (&name) == 0 && __strverscmp (name.release, "2.1.70") >= 0;
+#endif
 }