about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog175
-rw-r--r--Makerules4
-rw-r--r--config.make.in5
-rwxr-xr-xconfigure129
-rw-r--r--configure.in17
-rw-r--r--elf/Makefile10
-rw-r--r--elf/dl-deps.c31
-rw-r--r--elf/dl-lookup.c211
-rw-r--r--elf/dlfcn.h6
-rw-r--r--elf/dlsym.c38
-rw-r--r--elf/ldd.bash.in45
-rw-r--r--elf/ldd.sh.in38
-rw-r--r--elf/link.h13
-rw-r--r--grp/grp.h10
-rw-r--r--inet/ether_hton.c1
-rw-r--r--inet/ether_ntoh.c1
-rw-r--r--inet/rexec.c6
-rw-r--r--login/utmp.h36
-rw-r--r--manual/nss.texi2
-rw-r--r--misc/Makefile11
-rw-r--r--misc/regexp.c76
-rw-r--r--misc/regexp.h213
-rw-r--r--misc/search.h2
-rw-r--r--misc/sys/cdefs.h4
-rw-r--r--misc/sys/uio.h8
-rw-r--r--nss/nss_dns/dns-host.c34
-rw-r--r--nss/nss_dns/dns-network.c42
-rw-r--r--pwd/pwd.h10
-rw-r--r--resolv/gethnamaddr.c2
-rw-r--r--resolv/getnetnamadr.c4
-rw-r--r--resolv/herror.c2
-rw-r--r--signal/signal.h10
-rw-r--r--stdio-common/vfprintf.c19
-rw-r--r--stdlib/drand48-iter.c43
-rw-r--r--stdlib/tst-strtod.c2
-rw-r--r--stdlib/tst-strtol.c2
-rw-r--r--sunrpc/Makefile2
-rw-r--r--sunrpc/rpc/clnt.h24
-rw-r--r--sunrpc/rpcsvc/rnusers.x86
-rw-r--r--sunrpc/rpcsvc/rusers.x223
-rw-r--r--sysdeps/alpha/bsd-_setjmp.S30
-rw-r--r--sysdeps/alpha/bsd-setjmp.S30
-rw-r--r--sysdeps/alpha/htonl.S28
-rw-r--r--sysdeps/alpha/htons.S28
-rw-r--r--sysdeps/alpha/memcpy.S276
-rw-r--r--sysdeps/alpha/s_copysign.S30
-rw-r--r--sysdeps/alpha/setjmp.S28
-rw-r--r--sysdeps/alpha/stpcpy.S31
-rw-r--r--sysdeps/alpha/strcat.S4
-rw-r--r--sysdeps/alpha/strcpy.S31
-rw-r--r--sysdeps/alpha/strncat.S31
-rw-r--r--sysdeps/alpha/w_sqrt.S12
-rw-r--r--sysdeps/generic/paths.h3
-rw-r--r--sysdeps/generic/sigset.h34
-rw-r--r--sysdeps/generic/utmpbits.h30
-rw-r--r--sysdeps/generic/waitstatus.h4
-rw-r--r--sysdeps/gnu/utmpbits.h31
-rw-r--r--sysdeps/posix/readv.c4
-rw-r--r--sysdeps/posix/sigblock.c52
-rw-r--r--sysdeps/posix/sigintr.c32
-rw-r--r--sysdeps/posix/signal.c29
-rw-r--r--sysdeps/posix/sigpause.c37
-rw-r--r--sysdeps/posix/sigsetmask.c36
-rw-r--r--sysdeps/posix/sigvec.c48
-rw-r--r--sysdeps/posix/sigwait.c16
-rw-r--r--sysdeps/posix/writev.c4
-rw-r--r--sysdeps/unix/execve.S30
-rw-r--r--sysdeps/unix/sysv/linux/Makefile2
-rw-r--r--sysdeps/unix/sysv/linux/alpha/brk.S33
-rw-r--r--sysdeps/unix/sysv/linux/alpha/clone.S29
-rw-r--r--sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S31
-rw-r--r--sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S31
-rw-r--r--sysdeps/unix/sysv/linux/alpha/llseek.S31
-rw-r--r--sysdeps/unix/sysv/linux/alpha/sigsuspend.S37
-rw-r--r--sysdeps/unix/sysv/linux/alpha/syscall.S31
-rw-r--r--sysdeps/unix/sysv/linux/configure9
-rw-r--r--sysdeps/unix/sysv/linux/errnos.h1
-rw-r--r--sysdeps/unix/sysv/linux/getsysstats.c39
-rw-r--r--sysdeps/unix/sysv/linux/paths.h3
-rw-r--r--sysdeps/unix/sysv/linux/sigsuspend.c29
-rw-r--r--sysdeps/unix/sysv/linux/sparc/clone.S88
81 files changed, 1828 insertions, 1112 deletions
diff --git a/ChangeLog b/ChangeLog
index 88a5be3b33..130d064408 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,178 @@
+Wed Nov 20 02:04:11 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+	* sysdeps/unix/sysv/linux/sigsuspend.c: Make sigsuspend a weak
+	alias of __sigsuspend.
+
+	* grp/grp.h: Correct comment about POSIX compliance.
+	* pwd/pwd.h: Likewise.
+
+	* login/utmp.h: Update copyright and pretty-print prototypes.
+	* sysdeps/generic/paths.h: Add _PATH_LASTLOG, _PATH_UTMP and
+	_PATH_WTMP from utmpbits.h.
+	* sysdeps/unix/sysv/linux/paths.h: Likewise.
+	* sysdeps/generic/utmpbits.h: Remove here.
+	* sysdeps/gnu/utmpbits.h: Likewise.
+
+	* misc/sys/uio.h: Place __BEGIN_DECLS correctly.
+	Pretty-print prototypes.
+
+	* sysdeps/unix/sysv/linux/sparc/clone.S: New file.  Taken from
+	LinuxThreads-0.5.
+
+Tue Nov 19 13:43:07 1996  Richard Henderson  <rth@tamu.edu>
+
+	* inet/ether_hton.c: Include <string.h>.
+	* inet/ether_ntoh.c: Likewise.
+	* inet/rexec.c: Get errno, index, getpass, getlogin from headers.
+	* misc/search.h: Fix hcreate_r argument type (unsigned -> size_t).
+
+	* misc/sys/cdefs.h: Change __long_double_t definition from typedef
+	to define.  Jim Nance reports problems building XEmacs otherwise.
+
+	* resolv/gethnamaddr.c: Protect h_errno redefinition.
+	* resolv/getnetnamadr.c: Likewise.
+	* resolv/herror.c: Likewise.
+
+	* sysdeps/generic/sigset.h (__SIGSETFN): Operator ## doesn't work
+	with -traditional.  Reported by Eric Youngdale.  While we're at this,
+	don't do error checking in the __ functions.  This is consistent
+	with the sysv4 definitions and seems Right.
+	* signal/signal.h: Don't __OPTIMIZE__ sigops to __ versions.  Add
+	prototype for __sigsuspend.
+	* sysdeps/posix/sigblock.c: Optimize sigmask <-> sigset_t conversions
+	for sigset_t == unsigned long.  De-ansidecl-ify.  Reformat copyright.
+	* sysdeps/posix/sigpause.c: Likewise.
+	* sysdeps/posix/sigsetmask.c: Likewise.
+	* sysdeps/posix/sigvec.c: Likewise.
+	* sysdeps/posix/sigintr.c: Reformat copyright.
+	* sysdeps/posix/signal.c: Check signal number out of range since
+	__sigismember doesn't anymore.  Reformat copyright.
+	* sysdeps/posix/sigwait.c: Use __ versions of sigfillset, sigismember,
+	sigdelset, sigaction, and sigsuspend.
+
+	* stdlib/drand48-iter.c (__drand48_iterate): Cast state fragments
+	to the wider type before shifting.
+
+	* sysdeps/alpha/bsd-_setjmp.S: Silence assembler warning "$at used
+	without .set noat" in profiling hook.
+	* sysdeps/alpha/bsd-setjmp.S: Likewise.
+	* sysdeps/alpha/htonl.S: Likewise.
+	* sysdeps/alpha/htons.S: Likewise.
+	* sysdeps/alpha/s_copysign.S: Likewise.
+	* sysdeps/alpha/setjmp.S: Likewise.
+	* sysdeps/alpha/stpcpy.S: Likewise.
+	* sysdeps/alpha/strcat.S: Likewise.
+	* sysdeps/alpha/strcpy.S: Likewise.
+	* sysdeps/alpha/strncat.S: Likewise.
+	* sysdeps/unix/sysv/linux/alpha/brk.S: Likewise.
+	* sysdeps/unix/sysv/linux/alpha/clone.S: Likewise.
+	* sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S: Likewise.
+	* sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S: Likewise.
+	* sysdeps/unix/sysv/linux/alpha/llseek.S: Likewise.
+	* sysdeps/unix/sysv/linux/alpha/sigsuspend.S: Likewise.  Rename
+	function to __sigsuspend and add weak alias.
+	* sysdeps/unix/sysv/linux/alpha/syscall.S: Likewise.  Add missing END.
+
+	* sysdeps/alpha/w_sqrt.S: Define _ERRNO_H so <errnos.h> defines EDOM.
+
+	* sysdeps/unix/execve.S: Match PSEUDO_END symbol with the symbol
+	SYSCALL__ actually generated.
+
+	* sysdeps/unix/sysv/linux/errnos.h [_LIBC_REENTRANT]: Reflexively
+	#define __set_errno, as several imported subsystems (eg. BIND) check
+	that the symbol is defined.
+
+	* sysdeps/unix/sysv/linux/getsysstats.c: Include <alloca.h>.
+
+	* sysdeps/alpha/memcpy.S: Temporarily remove until I can find a bug
+	that manifests in GCC.
+
+Tue Nov 19 11:10:05 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>
+
+	* sysdeps/posix/writev.c (writev): COUNT parm is now int.
+	* sysdeps/posix/readv.c (readv): Likewise.
+
+Tue Nov 19 15:28:29 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+	* nss/nss_dns/dns-network.c: Change return type of all functions
+	to enum nss_status.
+	Reported by NIIBE Yutaka.
+	* nss/nss_dns/dns-host.c: Update copyright.
+
+Fri Nov 15 20:16:38 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* config.make.in: Remove definition of top_absdir.
+	* configure.in: Likewise. Use $(..) instead.
+	* Makerules (make-link): Use $(..) to find rellns-sh script.
+
+Sat Nov 16 15:52:29 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* manual/nss.texi (Name Service Switch): Fix reference to
+	`frobnicate'.
+
+Fri Nov 15 22:08:33 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Add
+	sys/mtio.h.
+
+Mon Nov 18 05:51:13 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+	* sysdeps/generic/waitstatus.h (__WIFSIGNALED): Rename local
+	variable from __stat to __status to prevent shadowing.
+	* sunrpc/rpc/clnt.h (clntudp_create, clntudp_bufcreate): Likewise
+	for parameter __wait.
+	Reported by NIIBE Yutaka.
+
+Mon Nov 18 02:05:38 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+	* misc/regexp.c: New file.  Implementation of obsolete interface
+	to regular expression matcher (required in XPG4.2).
+	* misc/regexp.h: New file.  Header for above.
+	* misc/Makefile (headers): Add regexp.h.
+	(routines): Add regexp.c.
+	Update copyright.
+
+Sun Nov 17 21:50:24 1996  Andreas Jaeger  <aj@arthur.pfalz.de>
+
+	* stdlib/tst-strtod.c (main): Add arguments for main.
+	* stdlib/tst-strtol.c (main): Likewise.
+
+Sun Nov 17 21:15:05 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+	* configure.in: Substitute libc_cv_slibdir and libc_cv_sysconfdir
+	in output files.
+	* sysdepes/unix/sysv/linux/configure: Define libc_cv_slibdir to /lib
+	and sysconfdir to /etc if $prefix is /usr.
+	* config.make.in: Add slibdir, sysconfdir and BASH to be replaced.
+
+	* elf/Makefile ($(objpfx)ldd): Install ldd.bash.in if
+	$(have-bash2) is yes.
+	* elf/ldd.bash.in: Add copyright and various cleanups.
+	* elf/ldd.sh.in: Likewise.
+
+	Implement RTLD_NEXT.
+	* elf/dlfcn.h: Define RTLD_NEXT.
+	* elf/dl-deps.c: Build second searchlist which contains duplicates.
+	* elf/dl-lookup.c (_dl_lookup_symbol_skip): New function.  Used
+	for RTLD_NEXT lookup.
+	Rewrite _dl_lookup_symbol to put common parts for both lookup
+	functions in a separate function.
+	* elf/dlsym.c: Handle RTLD_NEXT by calling _dl_lookup_symbol_skip.
+	* elf/link.h (struct link_map): Add l_dupsearchlist and
+	l_ndupsearchlist.
+	Add prototype for _dl_lookup_symbol_skip.
+
+	* sunrpc/Makefile (rpcsvc): Add rusers.
+	* sunrpc/rpcsvc/rnusers.x: Remove.  Obsolteted by rusers.x.
+	* sunrpc/rpcsvc/rusers.x: New file.
+
+Sun Nov 17 04:24:35 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+	* stdio-common/vfprintf.c [USE_IN_LIBIO] (buffered_vfprintf): Call
+	__libc_lock_init for local lock.
+	Reported by a sun <asun@zoology.washington.edu>.
+	[!USE_IN_LIBIO] (PAD): Optimize a bit.
+
 Sun Nov 17 03:13:57 1996  Ulrich Drepper  <drepper@cygnus.com>
 
 	* db/makedb.c: Update and reformat copyright.
diff --git a/Makerules b/Makerules
index 6af4824604..6a8638f6e9 100644
--- a/Makerules
+++ b/Makerules
@@ -601,12 +601,12 @@ $(addprefix $(slibdir)/,$(filter-out $(versioned),$(install-lib.so))): \
 $(slibdir)/%.so: $(objpfx)%.so; $(do-install-program)
 
 define make-link
-cd $(@D); \
+here=`pwd`; cd $(@D); \
 rm -f $(@F).new; \
 if test '$(@D)' = '$(<D)'; then \
   $(LN_S) $(<F) $(@F).new; \
 else \
-  $(SHELL) $(top_absdir)/rellns-sh $< $(@F).new; \
+  $(SHELL) $$here/$(..)rellns-sh $< $(@F).new; \
 fi; \
 mv -f $(@F).new $(@F)
 endef
diff --git a/config.make.in b/config.make.in
index d457b802f9..f4c70caead 100644
--- a/config.make.in
+++ b/config.make.in
@@ -3,9 +3,10 @@
 # Don't edit this file.  Put configuration parameters in configparms instead.
 
 # Installation prefixes.
-top_absdir = @top_absdir@
 prefix = @prefix@
 exec_prefix = @exec_prefix@
+slibdir = @libc_cv_slibdir@
+sysconfdir = @libc_cv_sysconfdir@
 
 # System configuration.
 config-machine = @host_cpu@
@@ -21,6 +22,7 @@ have-initfini = @libc_cv_have_initfini@
 
 have-no-whole-archive = @libc_cv_ld_no_whole_archive@
 have-no-exceptions = @libc_cv_gcc_no_exceptions@
+have-bash2 = @libc_cv_have_bash2@
 
 # Configuration options.
 gnu-as = @gnu_as@
@@ -45,5 +47,6 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_DATA = @INSTALL_DATA@
 LN_S = @LN_S@
 MSGFMT = @MSGFMT@
+BASH = @BASH@
 
 # More variables may be inserted below by configure.
diff --git a/configure b/configure
index 14ca8e2c8e..8237d99090 100755
--- a/configure
+++ b/configure
@@ -550,10 +550,6 @@ fi
 # This will get text that should go into config.make.
 config_vars=
 
-# We need a variable with the absolute path to the toplevel build directory.
-top_absdir=`cd $srcdir; pwd`
-
-
 # Check for a --with-gmp argument and set gmp-srcdir in config.make.
 # Check whether --with-gmp or --without-gmp was given.
 if test "${with_gmp+set}" = set; then
@@ -706,7 +702,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
 fi
 
 echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:710: checking host system type" >&5
+echo "configure:706: checking host system type" >&5
 
 host_alias=$host
 case "$host_alias" in
@@ -772,7 +768,7 @@ esac
 # This can take a while to compute.
 sysdep_dir=$srcdir/sysdeps
 echo $ac_n "checking sysdep dirs""... $ac_c" 1>&6
-echo "configure:776: checking sysdep dirs" >&5
+echo "configure:772: 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'`"
 
@@ -973,7 +969,7 @@ echo "$ac_t""sysdeps/generic sysdeps/stub" 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:977: checking for a BSD compatible install" >&5
+echo "configure:973: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1024,10 +1020,10 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 if test "$INSTALL" = "${srcdir}/install-sh -c"; then
   # The makefiles need to use a different form to find it in $srcdir.
-  INSTALL="$top_absdir/install-sh -c"
+  INSTALL="$(..)./install-sh -c"
 fi
 echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1031: checking whether ln -s works" >&5
+echo "configure:1027: checking whether ln -s works" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1052,7 +1048,7 @@ 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:1056: checking for $ac_word" >&5
+echo "configure:1052: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_MSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1083,7 +1079,7 @@ test -n "$MSGFMT" || MSGFMT=":"
 
 
 echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:1087: checking build system type" >&5
+echo "configure:1083: checking build system type" >&5
 
 build_alias=$build
 case "$build_alias" in
@@ -1109,7 +1105,7 @@ fi
 # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1113: checking for $ac_word" >&5
+echo "configure:1109: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1141,7 +1137,7 @@ if test $host != $build; then
   # Extract the first word of "gcc cc", so it can be a program name with args.
 set dummy gcc cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1145: checking for $ac_word" >&5
+echo "configure:1141: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_BUILD_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1168,7 +1164,7 @@ fi
 
 fi
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1172: checking how to run the C preprocessor" >&5
+echo "configure:1168: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -1183,13 +1179,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 1187 "configure"
+#line 1183 "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:1193: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1189: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -1200,13 +1196,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 1204 "configure"
+#line 1200 "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:1210: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1206: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -1231,7 +1227,7 @@ echo "$ac_t""$CPP" 1>&6
 # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ar; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1235: checking for $ac_word" >&5
+echo "configure:1231: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1262,7 +1258,7 @@ fi
 # 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:1266: checking for $ac_word" >&5
+echo "configure:1262: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1293,7 +1289,7 @@ 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:1297: checking for $ac_word" >&5
+echo "configure:1293: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1325,8 +1321,47 @@ fi
 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:1328: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_BASH'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$BASH" in
+  /*)
+  ac_cv_path_BASH="$BASH" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_BASH="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_BASH" && ac_cv_path_BASH="no"
+  ;;
+esac
+fi
+BASH="$ac_cv_path_BASH"
+if test -n "$BASH"; then
+  echo "$ac_t""$BASH" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+if test "$BASH" != no && $BASH -c 'test "$BASH_VERSINFO" -ge 2'; then
+  libc_cv_have_bash2=yes
+else
+  libc_cv_have_bash2=no
+fi
+
+
 echo $ac_n "checking for signed size_t type""... $ac_c" 1>&6
-echo "configure:1330: checking for signed size_t type" >&5
+echo "configure:1365: checking for signed size_t type" >&5
 if eval "test \"`echo '$''{'libc_cv_signed_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1350,12 +1385,12 @@ EOF
 fi
 
 echo $ac_n "checking for libc-friendly stddef.h""... $ac_c" 1>&6
-echo "configure:1354: checking for libc-friendly stddef.h" >&5
+echo "configure:1389: checking for libc-friendly stddef.h" >&5
 if eval "test \"`echo '$''{'libc_cv_friendly_stddef'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1359 "configure"
+#line 1394 "configure"
 #include "confdefs.h"
 #define __need_size_t
 #define __need_wchar_t
@@ -1370,7 +1405,7 @@ size_t size; wchar_t wchar;
 if (&size == NULL || &wchar == NULL) abort ();
 ; return 0; }
 EOF
-if { (eval echo configure:1374: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1409: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   libc_cv_friendly_stddef=yes
 else
@@ -1390,7 +1425,7 @@ 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:1394: checking whether we need to use -P to assemble .S files" >&5
+echo "configure:1429: 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 $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1413,7 +1448,7 @@ 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:1417: checking for assembler global-symbol directive" >&5
+echo "configure:1452: checking for assembler global-symbol directive" >&5
 if eval "test \"`echo '$''{'libc_cv_asm_global_directive'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1443,7 +1478,7 @@ EOF
 fi
 
 echo $ac_n "checking for .set assembler directive""... $ac_c" 1>&6
-echo "configure:1447: checking for .set assembler directive" >&5
+echo "configure:1482: checking for .set assembler directive" >&5
 if eval "test \"`echo '$''{'libc_cv_asm_set_directive'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1478,12 +1513,12 @@ fi
 
 if test $elf != yes; then
   echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6
-echo "configure:1482: checking for .init and .fini sections" >&5
+echo "configure:1517: checking for .init and .fini sections" >&5
 if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1487 "configure"
+#line 1522 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -1492,7 +1527,7 @@ asm (".section .init");
 				    asm (".text");
 ; return 0; }
 EOF
-if { (eval echo configure:1496: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1531: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   libc_cv_have_initfini=yes
 else
@@ -1518,19 +1553,19 @@ if test $elf = yes; then
   libc_cv_asm_underscores=no
 else
   echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
-echo "configure:1522: checking for _ prefix on C symbol names" >&5
+echo "configure:1557: checking for _ prefix on C symbol names" >&5
 if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1527 "configure"
+#line 1562 "configure"
 #include "confdefs.h"
 asm ("_glibc_foobar:");
 int main() {
 glibc_foobar ();
 ; return 0; }
 EOF
-if { (eval echo configure:1534: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1569: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   libc_cv_asm_underscores=yes
 else
@@ -1558,7 +1593,7 @@ if test $elf = yes; then
   libc_cv_asm_weakext_directive=no
 else
   echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6
-echo "configure:1562: checking for assembler .weak directive" >&5
+echo "configure:1597: checking for assembler .weak directive" >&5
 if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1581,7 +1616,7 @@ 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:1585: checking for assembler .weakext directive" >&5
+echo "configure:1620: checking for assembler .weakext directive" >&5
 if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1618,7 +1653,7 @@ EOF
 fi
 
 echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6
-echo "configure:1622: checking for ld --no-whole-archive" >&5
+echo "configure:1657: checking for ld --no-whole-archive" >&5
 if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1629,7 +1664,7 @@ __throw () {}
 EOF
 if { ac_try='${CC-cc} $CFLAGS
 			    -nostdlib -nostartfiles -Wl,--no-whole-archive
-			    -o conftest conftest.c'; { (eval echo configure:1633: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+			    -o conftest conftest.c'; { (eval echo configure:1668: \"$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
@@ -1640,7 +1675,7 @@ fi
 echo "$ac_t""$libc_cv_ld_no_whole_archive" 1>&6
 
 echo $ac_n "checking for gcc -fno-exceptions""... $ac_c" 1>&6
-echo "configure:1644: checking for gcc -fno-exceptions" >&5
+echo "configure:1679: checking for gcc -fno-exceptions" >&5
 if eval "test \"`echo '$''{'libc_cv_gcc_no_exceptions'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1651,7 +1686,7 @@ __throw () {}
 EOF
 if { ac_try='${CC-cc} $CFLAGS
 			    -nostdlib -nostartfiles -fno-exceptions
-			    -o conftest conftest.c'; { (eval echo configure:1655: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+			    -o conftest conftest.c'; { (eval echo configure:1690: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
   libc_cv_gcc_no_exceptions=yes
 else
   libc_cv_gcc_no_exceptions=no
@@ -1703,7 +1738,7 @@ if test "$uname" = generic; then
   fi
 
   echo $ac_n "checking OS release for uname""... $ac_c" 1>&6
-echo "configure:1707: checking OS release for uname" >&5
+echo "configure:1742: checking OS release for uname" >&5
 if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1725,7 +1760,7 @@ 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:1729: checking OS version for uname" >&5
+echo "configure:1764: checking OS version for uname" >&5
 if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1747,7 +1782,7 @@ else
 fi
 
 echo $ac_n "checking stdio selection""... $ac_c" 1>&6
-echo "configure:1751: checking stdio selection" >&5
+echo "configure:1786: checking stdio selection" >&5
 
 case $stdio in
 libio) cat >> confdefs.h <<\EOF
@@ -1758,6 +1793,9 @@ default) stdio=stdio ;;
 esac
 echo "$ac_t""$stdio" 1>&6
 
+
+
+
   
 if test $gnu_ld = yes; then
   cat >> confdefs.h <<\EOF
@@ -1913,7 +1951,6 @@ s%@includedir@%$includedir%g
 s%@oldincludedir@%$oldincludedir%g
 s%@infodir@%$infodir%g
 s%@mandir@%$mandir%g
-s%@top_absdir@%$top_absdir%g
 s%@subdirs@%$subdirs%g
 s%@host@%$host%g
 s%@host_alias@%$host_alias%g
@@ -1936,6 +1973,8 @@ s%@BUILD_CC@%$BUILD_CC%g
 s%@CPP@%$CPP%g
 s%@AR@%$AR%g
 s%@RANLIB@%$RANLIB%g
+s%@BASH@%$BASH%g
+s%@libc_cv_have_bash2@%$libc_cv_have_bash2%g
 s%@libc_cv_have_initfini@%$libc_cv_have_initfini%g
 s%@libc_cv_ld_no_whole_archive@%$libc_cv_ld_no_whole_archive%g
 s%@libc_cv_gcc_no_exceptions@%$libc_cv_gcc_no_exceptions%g
@@ -1943,6 +1982,8 @@ s%@uname_sysname@%$uname_sysname%g
 s%@uname_release@%$uname_release%g
 s%@uname_version@%$uname_version%g
 s%@stdio@%$stdio%g
+s%@libc_cv_slibdir@%$libc_cv_slibdir%g
+s%@libc_cv_sysconfdir@%$libc_cv_sysconfdir%g
 s%@gnu_ld@%$gnu_ld%g
 s%@gnu_as@%$gnu_as%g
 s%@elf@%$elf%g
diff --git a/configure.in b/configure.in
index aa272e41cd..ec2b5a1e3a 100644
--- a/configure.in
+++ b/configure.in
@@ -7,10 +7,6 @@ AC_CONFIG_HEADER(config.h)
 # This will get text that should go into config.make.
 config_vars=
 
-# We need a variable with the absolute path to the toplevel build directory.
-top_absdir=`cd $srcdir; pwd`
-AC_SUBST(top_absdir)
-
 # Check for a --with-gmp argument and set gmp-srcdir in config.make.
 AC_ARG_WITH(gmp, dnl
   --with-gmp=DIRECTORY	  find GMP source code in DIRECTORY (not needed),
@@ -336,7 +332,7 @@ AC_MSG_RESULT(sysdeps/generic sysdeps/stub)
 AC_PROG_INSTALL
 if test "$INSTALL" = "${srcdir}/install-sh -c"; then
   # The makefiles need to use a different form to find it in $srcdir.
-  INSTALL="$top_absdir/install-sh -c"
+  INSTALL="$(..)./install-sh -c"
 fi
 AC_PROG_LN_S
 AC_CHECK_PROGS(MSGFMT, msgfmt gmsgfmt, :)
@@ -349,6 +345,14 @@ AC_PROG_CPP
 AC_CHECK_TOOL(AR, ar)
 AC_CHECK_TOOL(RANLIB, ranlib, :)
 
+AC_PATH_PROG(BASH, bash, no)
+if test "$BASH" != no && $BASH -c 'test "$BASH_VERSINFO" -ge 2'; then
+  libc_cv_have_bash2=yes
+else
+  libc_cv_have_bash2=no
+fi
+AC_SUBST(libc_cv_have_bash2)
+
 AC_CACHE_CHECK(for signed size_t type, libc_cv_signed_size_t, [dnl
 echo '#include <stddef.h>
 FOOBAR __SIZE_TYPE__ FOOBAR' > conftest.c
@@ -653,6 +657,9 @@ default) stdio=stdio ;;
 esac
 AC_MSG_RESULT($stdio)
 
+AC_SUBST(libc_cv_slibdir)
+AC_SUBST(libc_cv_sysconfdir)
+
 AC_SUBST(gnu_ld) AC_SUBST(gnu_as) AC_SUBST(elf)
 if test $gnu_ld = yes; then
   AC_DEFINE(HAVE_GNU_LD)
diff --git a/elf/Makefile b/elf/Makefile
index 58b3a90f20..4cb8d7e53f 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -99,11 +99,21 @@ $(objpfx)libdl.so: $(objpfx)libdl_pic.a $(common-objpfx)libc.so $(objpfx)ld.so
 
 $(slibdir)/$(rtld-installed-name): $(objpfx)ld.so; $(do-install-program)
 
+ifneq ($(have-bash2),yes)
 $(objpfx)ldd: ldd.sh.in Makefile
 	sed -e 's%@RTLD@%$(slibdir)/$(rtld-installed-name)%g' \
 	    -e 's%@VERSION@%$(version)%g' < $< > $@.new
 	chmod 555 $@.new
 	mv -f $@.new $@
+else
+$(objpfx)ldd: ldd.bash.in Makefile
+	sed -e 's%@BASH@%$(BASH)%g' \
+	    -e 's%@RTLD@%$(slibdir)/$(rtld-installed-name)%g' \
+	    -e 's%@VERSION@%$(version)%g' \
+	    -e 's%@TEXTDOMAINDIR@%$(localedir)%g' < $< > $@.new
+	chmod 555 $@.new
+	mv -f $@.new $@
+endif
 
 # muwahaha
 
diff --git a/elf/dl-deps.c b/elf/dl-deps.c
index 977b3237aa..115982f375 100644
--- a/elf/dl-deps.c
+++ b/elf/dl-deps.c
@@ -33,16 +33,24 @@ _dl_map_object_deps (struct link_map *map,
       struct list *next;
     };
   struct list head[1 + npreloads], *tailp, *scanp;
+  struct list duphead, *duptailp;
   unsigned int nlist;
+  unsigned int nduplist;
 
   /* Start the search list with one element: MAP itself.  */
   head[0].map = map;
 
+  /* We use `l_reserved' as a mark bit to detect objects we have already
+     put in the search list and avoid adding duplicate elements later in
+     the list.  */
+  map->l_reserved = 1;
+
   /* Add the preloaded items after MAP but before any of its dependencies.  */
   for (nlist = 0; nlist < npreloads; ++nlist)
     {
       head[nlist].next = &head[nlist + 1];
       head[nlist + 1].map = preloads[nlist];
+      preloads[nlist]->l_reserved = 1;
     }
 
   /* Terminate the list.  */
@@ -51,10 +59,10 @@ _dl_map_object_deps (struct link_map *map,
   /* Start here for adding dependencies to the list.  */
   tailp = &head[nlist++];
 
-  /* We use `l_reserved' as a mark bit to detect objects we have already
-     put in the search list and avoid adding duplicate elements later in
-     the list.  */
-  map->l_reserved = 1;
+  /* Until now we have the same number of libraries in the normal and
+     the list with duplicates.  */
+  nduplist = nlist;
+  duptailp = &duphead;
 
   /* Process each element of the search list, loading each of its immediate
      dependencies and appending them to the list as we step through it.
@@ -94,6 +102,13 @@ _dl_map_object_deps (struct link_map *map,
 		    /* Set the mark bit that says it's already in the list.  */
 		    dep->l_reserved = 1;
 		  }
+
+		/* In any case Append DEP to the duplicates search list.  */
+		duptailp->next = alloca (sizeof *duptailp);
+		duptailp = duptailp->next;
+		duptailp->map = dep;
+		duptailp->next = NULL;
+		++nduplist;
 	      }
 	}
     }
@@ -112,4 +127,12 @@ _dl_map_object_deps (struct link_map *map,
 	 to avoid duplicates, so the next call starts fresh.  */
       scanp->map->l_reserved = 0;
     }
+
+  map->l_dupsearchlist = malloc (nduplist * sizeof (struct link_map *));
+  map->l_ndupsearchlist = nduplist;
+
+  for (nlist = 0; nlist < npreloads + 1; ++nlist)
+    map->l_dupsearchlist[nlist] = head[nlist].map;
+  for (scanp = duphead.next; scanp; scanp = scanp->next)
+    map->l_dupsearchlist[nlist++] = scanp->map;
 }
diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c
index f35bbbe967..717ac83f7a 100644
--- a/elf/dl-lookup.c
+++ b/elf/dl-lookup.c
@@ -23,6 +23,13 @@
 #include <string.h>
 
 
+struct sym_val
+  {
+    ElfW(Addr) a;
+    const ElfW(Sym) *s;
+  };
+
+
 /* This is the hashing function specified by the ELF ABI.  */
 static inline unsigned
 _dl_elf_hash (const char *name)
@@ -44,6 +51,90 @@ _dl_elf_hash (const char *name)
   return hash;
 }
 
+
+/* Inner part of the lookup functions.  */
+static inline ElfW(Addr)
+do_lookup (const char *undef_name, unsigned long int hash,
+	   const ElfW(Sym) **ref, struct sym_val *result,
+	   struct link_map *list[], size_t i, size_t n,
+	   const char *reference_name, struct link_map *skip, int flags)
+{
+  struct link_map *map;
+
+  for (; i < n; ++i)
+    {
+      const ElfW(Sym) *symtab;
+      const char *strtab;
+      ElfW(Symndx) symidx;
+
+      map = list[i];
+
+      /* Here come the extra test needed for `_dl_lookup_symbol_skip'.  */
+      if (skip != NULL && map == skip)
+	continue;
+
+      /* Don't search the executable when resolving a copy reloc.  */
+      if (flags & DL_LOOKUP_NOEXEC && map->l_type == lt_executable)
+	continue;
+
+      symtab = ((void *) map->l_addr + map->l_info[DT_SYMTAB]->d_un.d_ptr);
+      strtab = ((void *) map->l_addr + map->l_info[DT_STRTAB]->d_un.d_ptr);
+
+      /* Search the appropriate hash bucket in this object's symbol table
+	 for a definition for the same symbol name.  */
+      for (symidx = map->l_buckets[hash % map->l_nbuckets];
+	   symidx != STN_UNDEF;
+	   symidx = map->l_chain[symidx])
+	{
+	  const ElfW(Sym) *sym = &symtab[symidx];
+
+	  if (sym->st_value == 0 || /* No value.  */
+	      ((flags & DL_LOOKUP_NOPLT) != 0 /* Reject PLT entry.  */
+	       && sym->st_shndx == SHN_UNDEF))
+	    continue;
+
+	  switch (ELFW(ST_TYPE) (sym->st_info))
+	    {
+	    case STT_NOTYPE:
+	    case STT_FUNC:
+	    case STT_OBJECT:
+	      break;
+	    default:
+	      /* Not a code/data definition.  */
+	      continue;
+	    }
+
+	  if (sym != *ref && strcmp (strtab + sym->st_name, undef_name))
+	    /* Not the symbol we are looking for.  */
+	    continue;
+
+	  switch (ELFW(ST_BIND) (sym->st_info))
+	    {
+	    case STB_GLOBAL:
+	      /* Global definition.  Just what we need.  */
+	      result->s = sym;
+	      result->a = map->l_addr;
+	      return 1;
+	    case STB_WEAK:
+	      /* Weak definition.  Use this value if we don't find
+		 another.  */
+	      if (! result->s)
+		{
+		  result->s = sym;
+		  result->a = map->l_addr;
+		}
+	      break;
+	    default:
+	      /* Local symbols are ignored.  */
+	      break;
+	    }
+	}
+    }
+
+  /* We have not found anything until now.  */
+  return 0;
+}
+
 /* Search loaded objects' symbol tables for a definition of the symbol
    UNDEF_NAME.  FLAGS is a set of flags.  If DL_LOOKUP_NOEXEC is set,
    then don't search the executable for a definition; this used for
@@ -57,82 +148,17 @@ _dl_lookup_symbol (const char *undef_name, const ElfW(Sym) **ref,
 		   int flags)
 {
   const unsigned long int hash = _dl_elf_hash (undef_name);
-  struct
-    {
-      ElfW(Addr) a;
-      const ElfW(Sym) *s;
-    } weak_value = { 0, NULL };
-  size_t i;
-  struct link_map **scope, *map;
+  struct sym_val current_value = { 0, NULL };
+  struct link_map **scope;
 
   /* Search the relevant loaded objects for a definition.  */
   for (scope = symbol_scope; *scope; ++scope)
-    for (i = 0; i < (*scope)->l_nsearchlist; ++i)
-      {
-	const ElfW(Sym) *symtab;
-	const char *strtab;
-	ElfW(Symndx) symidx;
-
-	map = (*scope)->l_searchlist[i];
-
-	/* Don't search the executable when resolving a copy reloc.  */
-	if (flags & DL_LOOKUP_NOEXEC && map->l_type == lt_executable)
-	  continue;
-
-	symtab = ((void *) map->l_addr + map->l_info[DT_SYMTAB]->d_un.d_ptr);
-	strtab = ((void *) map->l_addr + map->l_info[DT_STRTAB]->d_un.d_ptr);
-
-	/* Search the appropriate hash bucket in this object's symbol table
-	   for a definition for the same symbol name.  */
-	for (symidx = map->l_buckets[hash % map->l_nbuckets];
-	     symidx != STN_UNDEF;
-	     symidx = map->l_chain[symidx])
-	  {
-	    const ElfW(Sym) *sym = &symtab[symidx];
-
-	    if (sym->st_value == 0 || /* No value.  */
-		((flags & DL_LOOKUP_NOPLT) != 0 /* Reject PLT entry.  */
-		 && sym->st_shndx == SHN_UNDEF))
-	      continue;
-
-	    switch (ELFW(ST_TYPE) (sym->st_info))
-	      {
-	      case STT_NOTYPE:
-	      case STT_FUNC:
-	      case STT_OBJECT:
-		break;
-	      default:
-		/* Not a code/data definition.  */
-		continue;
-	      }
-
-	    if (sym != *ref && strcmp (strtab + sym->st_name, undef_name))
-	      /* Not the symbol we are looking for.  */
-	      continue;
+    if (do_lookup (undef_name, hash, ref, &current_value,
+		   (*scope)->l_searchlist, 0, (*scope)->l_nsearchlist,
+		   reference_name, NULL, flags))
+      break;
 
-	    switch (ELFW(ST_BIND) (sym->st_info))
-	      {
-	      case STB_GLOBAL:
-		/* Global definition.  Just what we need.  */
-		*ref = sym;
-		return map->l_addr;
-	      case STB_WEAK:
-		/* Weak definition.  Use this value if we don't find
-		   another.  */
-		if (! weak_value.s)
-		  {
-		    weak_value.s = sym;
-		    weak_value.a = map->l_addr;
-		  }
-		break;
-	      default:
-		/* Local symbols are ignored.  */
-		break;
-	      }
-	  }
-      }
-
-  if (weak_value.s == NULL &&
+  if (current_value.s == NULL &&
       (*ref == NULL || ELFW(ST_BIND) ((*ref)->st_info) != STB_WEAK))
     {
       /* We could find no value for a strong reference.  */
@@ -144,8 +170,45 @@ _dl_lookup_symbol (const char *undef_name, const ElfW(Sym) **ref,
       _dl_signal_error (0, reference_name, buf);
     }
 
-  *ref = weak_value.s;
-  return weak_value.a;
+  *ref = current_value.s;
+  return current_value.a;
+}
+
+
+/* This function is nearly the same as `_dl_lookup_symbol' but it
+   skips in the first list all objects until SKIP_MAP is found.  I.e.,
+   it only considers objects which were loaded after the described
+   object.  If there are more search lists the object described by
+   SKIP_MAP is only skipped.  */
+ElfW(Addr)
+_dl_lookup_symbol_skip (const char *undef_name, const ElfW(Sym) **ref,
+			struct link_map *symbol_scope[],
+			const char *reference_name,
+			struct link_map *skip_map,
+			int flags)
+{
+  int found_entry = 0;
+  const unsigned long int hash = _dl_elf_hash (undef_name);
+  struct sym_val current_value = { 0, NULL };
+  struct link_map **scope;
+  size_t i;
+
+  /* Search the relevant loaded objects for a definition.  */
+  scope = symbol_scope;
+  for (i = 0; (*scope)->l_dupsearchlist[i] != skip_map; ++i)
+    assert (i < (*scope)->l_ndupsearchlist);
+
+  if (! do_lookup (undef_name, hash, ref, &current_value,
+		   (*scope)->l_dupsearchlist, i, (*scope)->l_ndupsearchlist,
+		   reference_name, skip_map, flags))
+    while (*++scope)
+      if (do_lookup (undef_name, hash, ref, &current_value,
+		     (*scope)->l_dupsearchlist, 0, (*scope)->l_ndupsearchlist,
+		     reference_name, skip_map, flags))
+	break;
+
+  *ref = current_value.s;
+  return current_value.a;
 }
 
 
diff --git a/elf/dlfcn.h b/elf/dlfcn.h
index b59bebd5b1..c2b66a7797 100644
--- a/elf/dlfcn.h
+++ b/elf/dlfcn.h
@@ -32,6 +32,12 @@
    visible as if the object were linked directly into the program.  */
 #define RTLD_GLOBAL	0x100
 
+/* If the first argument of `dlsym' is set to RTLD_NEXT the run-time
+   address of the symbol called NAME in the next shared object is
+   returned.  The "next" relation is defined by the order the shared
+   objects were loaded.  */
+#define RTLD_NEXT	((void *) -1l)
+
 /* Open the shared object FILE and map it in; return a handle that can be
    passed to `dlsym' to get symbol values from it.  */
 extern void *dlopen __P ((__const char *__file, int __mode));
diff --git a/elf/dlsym.c b/elf/dlsym.c
index edfe1c6cbb..12a29e4b4c 100644
--- a/elf/dlsym.c
+++ b/elf/dlsym.c
@@ -26,25 +26,43 @@
 void *
 dlsym (void *handle, const char *name)
 {
+  ElfW(Addr) caller = (ElfW(Addr)) __builtin_return_address (0);
   ElfW(Addr) loadbase;
   const ElfW(Sym) *ref = NULL;
   void doit (void)
     {
-      struct link_map *map = handle, **scope, *mapscope[2] = { map, NULL };
-      const char *owner;
-
-      if (map)
+      if (handle == NULL)
+	/* Search the global scope.  */
+	loadbase = _dl_lookup_symbol
+	  (name, &ref, &(_dl_global_scope ?: _dl_default_scope)[2], NULL, 0);
+      else if (handle == RTLD_NEXT)
 	{
-	  /* Search the scope of the given object.  */
-	  scope = mapscope;
-	  owner = map->l_name;
+	  struct link_map *l, *match;
+
+	  /* Find the highest-addressed object that CALLER is not below.  */
+	  match = NULL;
+	  for (l = _dl_loaded; l; l = l->l_next)
+	    if (caller >= l->l_addr && (!match || match->l_addr < l->l_addr))
+	      match = l;
+
+	  if (! match)
+	    _dl_signal_error (0, NULL, _("\
+RTLD_NEXT used in code not dynamically loaded"));
+
+	  l = match;
+	  while (l->l_loader)
+	    l = l->l_loader;
+
+	  loadbase = _dl_lookup_symbol_skip
+	    (name, &ref, &_dl_loaded, NULL, l, 0);
 	}
       else
 	{
-	  scope = &(_dl_global_scope ?: _dl_default_scope)[2];
-	  owner = NULL;
+	  /* Search the scope of the given object.  */
+	  struct link_map *map = handle;
+	  struct link_map *mapscope[2] = { map, NULL };
+	  loadbase = _dl_lookup_symbol (name, &ref, mapscope, map->l_name, 0);
 	}
-      loadbase = _dl_lookup_symbol (name, &ref, scope, owner, 0);
     }
 
   return _dlerror_run (doit) ? NULL : (void *) (loadbase + ref->st_value);
diff --git a/elf/ldd.bash.in b/elf/ldd.bash.in
index e7ad21fa9d..5269708f43 100644
--- a/elf/ldd.bash.in
+++ b/elf/ldd.bash.in
@@ -1,24 +1,50 @@
 #! @BASH@
 
+# Copyright (C) 1996 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 is the `ldd' command, which lists what shared libraries are
 # used by given dynamically-linked executables.  It works by invoking the
 # run-time dynamic linker as a command and setting the environment
 # variable LD_TRACE_LOADED_OBJECTS to a non-empty value.
 
+# We should be able to find the translation right at the beginning.
+TEXTDOMAIN=libc
+TEXTDOMAINDIR=@TEXTDOMAINDIR@
+
 RTLD=@RTLD@
-usage=$"\
-ldd [OPTION]... FILE...
-  --help           print this help and exit
-  --version        print version information and exit
-Report bugs to <bug-glibc@prep.ai.mit.edu>."
 
 while test $# -gt 0; do
   case "$1" in
   --v*)
-    echo 'ldd (GNU libc) @VERSION@'; exit 0 ;;
+    echo $"ldd (GNU libc) @VERSION@
+Copyright (C) 1996 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+    exit 0 ;;
   --h*)
-    echo "$usage"; exit 0 ;;
-  --)		# Stop option prcessing
+    echo $"ldd [OPTION]... FILE...
+  --help           print this help and exit
+  --version        print version information and exit
+Report bugs to <bug-glibc@prep.ai.mit.edu>."
+    exit 0 ;;
+  --)		# Stop option prcessing.
     shift; break ;;
   *)
     break ;;
@@ -64,3 +90,6 @@ Try \`ldd --help' for more information."
 esac
 
 exit 0
+# Local Variables:
+#  mode:ksh
+# End:
diff --git a/elf/ldd.sh.in b/elf/ldd.sh.in
index 16d3fd8b79..f8df62d223 100644
--- a/elf/ldd.sh.in
+++ b/elf/ldd.sh.in
@@ -1,24 +1,46 @@
 #! /bin/sh
 
+# Copyright (C) 1996 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 is the `ldd' command, which lists what shared libraries are
 # used by given dynamically-linked executables.  It works by invoking the
 # run-time dynamic linker as a command and setting the environment
 # variable LD_TRACE_LOADED_OBJECTS to a non-empty value.
 
 RTLD=@RTLD@
-usage="\
-ldd [OPTION]... FILE...
-  --help           print this help and exit
-  --version        print version information and exit
-Report bugs to <bug-glibc@prep.ai.mit.edu>."
 
 while test $# -gt 0; do
   case "$1" in
   --v*)
-    echo 'ldd (GNU libc) @VERSION@'; exit 0 ;;
+    echo 'ldd (GNU libc) @VERSION@
+Copyright (C) 1996 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.'
+    exit 0 ;;
   --h*)
-    echo "$usage"; exit 0 ;;
-  --)		# Stop option prcessing
+    echo 'ldd [OPTION]... FILE...
+  --help           print this help and exit
+  --version        print version information and exit
+Report bugs to <bug-glibc@prep.ai.mit.edu>.'
+    exit 0 ;;
+  --)		# Stop option prcessing.
     shift; break ;;
   *)
     break ;;
diff --git a/elf/link.h b/elf/link.h
index 17fea305ed..b277bf75c1 100644
--- a/elf/link.h
+++ b/elf/link.h
@@ -109,6 +109,11 @@ struct link_map
     struct link_map **l_searchlist;
     unsigned int l_nsearchlist;
 
+    /* We keep another list in which we keep duplicates.  This is
+       needed in _dl_lookup_symbol_skip to implemented RTLD_NEXT.  */
+    struct link_map **l_dupsearchlist;
+    unsigned int l_ndupsearchlist;
+
     /* Dependent object that first caused this object to be loaded.  */
     struct link_map *l_loader;
 
@@ -239,6 +244,14 @@ extern ElfW(Addr) _dl_lookup_symbol (const char *undef,
 				     const char *reference_name,
 				     int flags);
 
+/* For handling RTLD_NEXT we must be able to skip shared objects.  */
+extern ElfW(Addr) _dl_lookup_symbol_skip (const char *undef,
+					  const ElfW(Sym) **sym,
+					  struct link_map *symbol_scope[],
+					  const char *reference_name,
+					  struct link_map *skip_this,
+					  int flags);
+
 /* Look up symbol NAME in MAP's scope and return its run-time address.  */
 extern ElfW(Addr) _dl_symbol_value (struct link_map *map, const char *name);
 
diff --git a/grp/grp.h b/grp/grp.h
index 5243afee7a..3e2bd05db4 100644
--- a/grp/grp.h
+++ b/grp/grp.h
@@ -98,8 +98,11 @@ extern struct group *getgrnam __P ((__const char *__name));
 
 /* Reentrant versions of some of the functions above.
 
-   PLEASE NOTE: these functions are not yet standardized.  The interface
-   may change in later versions of this library.  */
+   PLEASE NOTE: the `getgrent_r' function is not (yet) standardized.
+   The interface may change in later versions of this library.  But
+   the interface is designed following the principals used for the
+   other reentrant functions so the chances are good this is what the
+   POSIX people would choose.  */
 
 #if defined(__USE_SVID) || defined (__USE_BSD) || defined(__USE_XOPEN_EXTENDED)
 extern int getgrent_r __P ((struct group *__resultbuf, char *buffer,
@@ -117,7 +120,8 @@ extern int getgrnam_r __P ((__const char *__name, struct group *__resultbuf,
 			    struct group **__result));
 
 #ifdef	__USE_SVID
-/* Read a group entry from STREAM.  */
+/* Read a group entry from STREAM.  This function is not standardized
+   an probably never will.  */
 extern int __fgetgrent_r __P ((FILE * __stream, struct group *__resultbuf,
 			       char *buffer, size_t __buflen,
 			       struct group **__result));
diff --git a/inet/ether_hton.c b/inet/ether_hton.c
index c4149a0616..4e24fbb89f 100644
--- a/inet/ether_hton.c
+++ b/inet/ether_hton.c
@@ -19,6 +19,7 @@
 
 #include <netinet/ether.h>
 #include <netinet/if_ether.h>
+#include <string.h>
 
 #include "../nss/nsswitch.h"
 
diff --git a/inet/ether_ntoh.c b/inet/ether_ntoh.c
index 61bc0f1de6..93c2cf8b2a 100644
--- a/inet/ether_ntoh.c
+++ b/inet/ether_ntoh.c
@@ -19,6 +19,7 @@
 
 #include <netinet/ether.h>
 #include <netinet/if_ether.h>
+#include <string.h>
 
 #include "../nss/nsswitch.h"
 
diff --git a/inet/rexec.c b/inet/rexec.c
index 7533410eb3..f4772475fd 100644
--- a/inet/rexec.c
+++ b/inet/rexec.c
@@ -43,12 +43,12 @@ static char sccsid[] = "@(#)rexec.c	8.1 (Berkeley) 6/4/93";
 #include <stdio.h>
 #include <netdb.h>
 #include <errno.h>
+#include <string.h>
+#include <unistd.h>
 
-extern	errno;
-char	*index();
 int	rexecoptions;
-char	*getpass(), *getlogin();
 
+int
 rexec(ahost, rport, name, pass, cmd, fd2p)
 	char **ahost;
 	int rport;
diff --git a/login/utmp.h b/login/utmp.h
index 76870f68ef..6786190aad 100644
--- a/login/utmp.h
+++ b/login/utmp.h
@@ -1,20 +1,20 @@
 /* Copyright (C) 1993, 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+   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 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.
+   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.  */
+   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.  */
 
 
 #ifndef	_UTMP_H_
@@ -38,18 +38,18 @@ Boston, MA 02111-1307, USA.  */
 
 /* Make FD be the controlling terminal, stdin, stdout, and stderr;
    then close FD.  Returns 0 on success, nonzero on error.  */
-extern int login_tty __P ((int fd));
+extern int login_tty __P ((int __fd));
 
 
 /* Write the given entry into utmp and wtmp.  */
-extern void login __P ((__const struct utmp *));
+extern void login __P ((__const struct utmp *__entry));
 
 /* Write the utmp entry to say the user on UT_LINE has logged out.  */
-extern int logout __P ((__const char *ut_line));
+extern int logout __P ((__const char *__ut_line));
 
 /* Append to wtmp an entry for the current time and the given info.  */
-extern void logwtmp __P ((__const char *ut_line, __const char *ut_name,
-			  __const char *ut_host));
+extern void logwtmp __P ((__const char *__ut_line, __const char *__ut_name,
+			  __const char *__ut_host));
 
 /* Change name of the utmp file to be examined.  */
 extern int utmpname __P ((__const char *__file));
diff --git a/manual/nss.texi b/manual/nss.texi
index 6773fc4f16..074b85702c 100644
--- a/manual/nss.texi
+++ b/manual/nss.texi
@@ -11,7 +11,7 @@ correctly in the local environment.  Traditionally, this was done by
 using files (e.g., @file{/etc/passwd}), but other nameservices (line the
 Network Information Service (NIS) and the Domain Name Service (DNS))
 became popular, and were hacked into the C library, usually with a fixed
-search order @pxref{frobnicate, frobnicate, ,jargon}.
+search order (@pxref{frobnicate, , ,jargon, The Jargon File}).
 
 The GNU C Library contains a cleaner solution of this problem.  It is
 designed after a method used by Sun Microsystems in the C library of
diff --git a/misc/Makefile b/misc/Makefile
index 46b078c081..74e0a736e7 100644
--- a/misc/Makefile
+++ b/misc/Makefile
@@ -12,9 +12,9 @@
 # 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., 675 Mass Ave,
-# Cambridge, MA 02139, USA.
+# 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.
 
 #
 #	Sub-makefile for misc portion of the library.
@@ -28,7 +28,8 @@ headers	:= sys/uio.h iovec.h sys/ioctl.h ioctls.h ioctl-types.h \
 	   ttyent.h syslog.h sys/syslog.h paths.h sys/reboot.h \
 	   sys/mman.h sys/param.h fstab.h mntent.h search.h err.h error.h\
 	   sys/queue.h sysexits.h syscall.h sys/syscall.h sys/swap.h \
-	   sys/select.h ustat.h sys/ustat.h ustatbits.h sys/sysinfo.h
+	   sys/select.h ustat.h sys/ustat.h ustatbits.h sys/sysinfo.h \
+	   regexp.h
 
 routines := brk sbrk sstk ioctl \
 	    readv writev \
@@ -55,7 +56,7 @@ routines := brk sbrk sstk ioctl \
 	    efgcvt efgcvt_r qefgcvt qefgcvt_r \
 	    hsearch hsearch_r tsearch lsearch \
 	    err error ustat \
-	    getsysstats dirname
+	    getsysstats dirname regexp
 aux := init-misc
 distribute := bsd-compat.c
 extra-objs := bsd-compat.o
diff --git a/misc/regexp.c b/misc/regexp.c
new file mode 100644
index 0000000000..34019aeb1a
--- /dev/null
+++ b/misc/regexp.c
@@ -0,0 +1,76 @@
+/* Define function and variables for the obsolete <regexp.h> interface.
+   Copyright (C) 1996 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+   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.  */
+
+#define __DO_NOT_DEFINE_COMPILE
+#include <regexp.h>
+
+/* Define the variables used for the interface.  */
+char *loc1;
+char *loc2;
+
+/* Although we do not support the use we define this variable as well.  */
+char *locs;
+
+
+/* Find the next match in STRING.  The compiled regular expression is
+   found in the buffer starting at EXPBUF.  `loc1' will return the
+   first character matched and `loc2' points to the next unmatched
+   character.  */
+int
+__step (const char *string, const char *expbuf)
+{
+  regmatch_t match;	/* We only need info about the full match.  */
+
+  expbuf += __alignof (regex_t *);
+  expbuf -= (expbuf - ((const char *) 0)) % __alignof__ (regex_t *);
+
+  if (regexec ((regex_t *) expbuf, string, 1, &match, REG_NOTEOL)
+      == REG_NOMATCH)
+    return 0;
+
+  loc1 = (char *) string + match.rm_so;
+  loc2 = (char *) string + match.rm_eo;
+  return 1;
+}
+weak_alias (__step, step)
+
+
+/* Match the beginning of STRING with the compiled regular expression
+   in EXPBUF.  If the match is successful `loc2' will contain the
+   position of the first unmatched character.  */
+int
+__advance (const char *string, const char *expbuf)
+{
+  regmatch_t match;	/* We only need info about the full match.  */
+
+  expbuf += __alignof__ (regex_t *);
+  expbuf -= (expbuf - ((const char *) 0)) % __alignof__ (regex_t *);
+
+  if (regexec ((regex_t *) expbuf, string, 1, &match, REG_NOTEOL)
+      == REG_NOMATCH
+      /* We have to check whether the check is at the beginning of the
+	 buffer.  */
+      || match.rm_so != 0)
+    return 0;
+
+  loc2 = (char *) string + match.rm_eo;
+  return 1;
+}
+weak_alias (__advance, advance)
diff --git a/misc/regexp.h b/misc/regexp.h
new file mode 100644
index 0000000000..e31407e6ed
--- /dev/null
+++ b/misc/regexp.h
@@ -0,0 +1,213 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+   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.  */
+
+#ifndef _REGEXP_H
+#define _REGEXP_H	1
+
+/* The contents of this header file was first standardized in X/Open
+   System Interface and Headers Issue 2, originally coming from SysV.
+   In issue 4, version 2, it is marked as TO BE WITDRAWN.
+
+   This code shouldn't be used in any newly written code.  It is
+   included only for compatibility reasons.  Use the POSIX definition
+   in <regex.h> for portable applications and a reasonable interface.  */
+
+#include <alloca.h>
+#include <regex.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* The implementation provided here emulates the needed functionality
+   by mapping to the POSIX regular expression matcher.  The interface
+   for the here included function is weird (this really is a harmless
+   word).
+
+   The user has to provide five macros before this header file can be
+   included:
+
+   GETC()	Return the value of the next character in the regular
+		expression pattern.  Successive calls should return
+		successive characters.
+
+   PEEKC()	Return the value of the next character in the regular
+		expression pattern.  Immediately successive calls to
+		PEEKC() should return the same character which should
+		also be the next character returned by GETC().
+
+   UNGETC(c)	Cause `c' to be returned by the next call to GETC() and
+		PEEKC().
+
+   RETURN(ptr)	Used for normal exit of the `compile' function.  `ptr'
+		is a pointer to the character after the last character of
+		the compiled regular expression.
+
+   ERROR(val)	Used for abnormal return from `compile'.  `val' is the
+		error number.  The error codes are:
+		11	Range endpoint too large.
+		16	Bad number.
+		25	\digit out of range.
+		36	Illegal or missing delimiter.
+		41	No remembered search string.
+		42	\( \) imbalance.
+		43	Too many \(.
+		44	More tan two numbers given in \{ \}.
+		45	} expected after \.
+		46	First number exceeds second in \{ \}.
+		49	[ ] imbalance.
+		50	Regular expression overflow.
+
+  */
+
+__BEGIN_DECLS
+
+/* Interface variables.  They contain the results of the successful
+   calls to `setp' and `advance'.  */
+extern char *loc1;
+extern char *loc2;
+
+/* The use of this variable in the `advance' function is not
+   supported.  */
+extern char *locs;
+
+
+#ifndef __DO_NOT_DEFINE_COMPILE
+/* Get and compile the user supplied pattern up to end of line or
+   string or until EOF is seen, whatever happens first.  The result is
+   placed in the buffer starting at EXPBUG and delimited by ENDBUF.
+
+   This function cannot be defined in the libc itself since it depends
+   on the macros.  */
+char *
+compile (char *__instring, char *__expbuf, __const char *__endbuf, int __eof)
+{
+  char *__input_buffer = NULL;
+  size_t __input_size = 0;
+  size_t __current_size;
+  int __ch;
+  int __result;
+
+  /* Align the expression buffer according to the needs for an object
+     of type `regex_t'.  Then check for minimum size of the buffer for
+     the compiled regular expression.  */
+  regex_t *__expr_ptr;
+#if defined __GNUC__ && __GNUC__ >= 2
+  const size_t __req = __alignof__ (regex_t *);
+#else
+  /* How shall we find out?  We simply guess it and can change it is
+     this really proofs to be wrong.  */
+  const size_t __req = 8;
+#endif
+  __expbuf += __req;
+  __expbuf -= (__expbuf - ((char *) 0)) % __req;
+  if (__endbuf < __expbuf + sizeof (regex_t))
+    {
+      ERROR (50);
+    }
+  __expr_ptr = (regex_t *) __expbuf;
+  /* The remaining space in the buffer can be used for the compiled
+     pattern.  */
+  __expr_ptr->buffer = __expbuf + sizeof (regex_t);
+  __expr_ptr->allocated = __endbuf -  (char *) __expr_ptr->buffer;
+
+  while ((__ch = (GETC ())) != __eof)
+    {
+      if (__ch == '\0' || __ch == 'n')
+	{
+	  UNGETC (__ch);
+	  break;
+	}
+
+      if (__current_size + 1 >= __input_size)
+	{
+	  size_t __new_size = __input_size ? 2 * __input_size : 128;
+	  char *__new_room = __alloca (__new_size);
+	  /* See whether we can use the old buffer.  */
+	  if (__new_room + __new_size == __input_buffer)
+	    {
+	      __input_size += __new_size;
+	      __input_buffer = memcpy (__new_room, __input_buffer,
+				       __current_size);
+	    }
+	  else if (__input_buffer + __input_size == __new_room)
+	    __input_size += __new_size;
+	  else
+	    {
+	      __input_size = __new_size;
+	      __input_buffer = memcpy (__new_room, __input_buffer,
+				       __current_size);
+	    }
+	}
+      __input_buffer[__current_size++] = __ch;
+    }
+  __input_buffer[__current_size++] = '\0';
+
+  /* Now compile the pattern.  */
+  __error = regcomp (__expr_ptr, __input_buffer, REG_NEWLINE);
+  if (__error != 0)
+    /* Oh well, we have to translate POSIX error codes.  */
+    switch (__error)
+      {
+      case REG_BADPAT:
+      case REG_ECOLLATE:
+      case REG_ECTYPE:
+      case REG_EESCAPE:
+      case REG_BADRPT:
+      case REG_EEND:
+      case REG_RPAREN:
+      default:
+	/* There is no matching error code.  */
+	RETURN (36);
+      case REG_ESUBREG:
+	RETURN (25);
+      case REG_EBRACK:
+	RETURN (49);
+      case REG_EPAREN:
+	RETURN (42);
+      case REG_EBRACE:
+	RETURN (44);
+      case REG_BADBR:
+	RETURN (46);
+      case REG_ERANGE:
+	RETURN (11);
+      case REG_ESPACE:
+      case REG_ESIZE:
+	ERROR (50);
+      }
+
+  /* Everything is ok.  */
+  RETURN ((char *) (__expr_ptr->buffer + __expr->used));
+}
+#endif
+
+
+/* Find the next match in STRING.  The compiled regular expression is
+   found in the buffer starting at EXPBUF.  `loc1' will return the
+   first character matched and `loc2' points to the next unmatched
+   character.  */
+extern int step __P ((__const char *__string, __const char *__expbuf));
+
+/* Match the beginning of STRING with the compiled regular expression
+   in EXPBUF.  If the match is successful `loc2' will contain the
+   position of the first unmatched character.  */
+extern int advance __P ((__const char *__string, __const char *__expbuf));
+
+
+__END_DECLS
+
+#endif /* regexp.h */
diff --git a/misc/search.h b/misc/search.h
index 2103d66cbe..221546d2ba 100644
--- a/misc/search.h
+++ b/misc/search.h
@@ -88,7 +88,7 @@ extern void hdestroy __P ((void));
 
 extern int hsearch_r __P ((ENTRY __item, ACTION __action, ENTRY **__retval,
 			   struct hsearch_data *__htab));
-extern int hcreate_r __P ((unsigned int __nel, struct hsearch_data *htab));
+extern int hcreate_r __P ((size_t __nel, struct hsearch_data *htab));
 extern void hdestroy_r __P ((struct hsearch_data *htab));
 
 
diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h
index b4a2fd285d..e90dd0f220 100644
--- a/misc/sys/cdefs.h
+++ b/misc/sys/cdefs.h
@@ -63,7 +63,7 @@
 
 /* This is not a typedef so `const __ptr_t' does the right thing.  */
 #define __ptr_t void *
-typedef long double __long_double_t;
+#define __long_double_t  long double
 
 #else
 
@@ -71,7 +71,7 @@ typedef long double __long_double_t;
 #define	__STRING(x)	"x"
 
 #define __ptr_t char *
-typedef double __long_double_t;
+#define __long_double_t  long double
 
 /* The BSD header files use the ANSI keywords unmodified (this means that
    old programs may lose if they use the new keywords as identifiers), but
diff --git a/misc/sys/uio.h b/misc/sys/uio.h
index 0127efba14..bc49324cc5 100644
--- a/misc/sys/uio.h
+++ b/misc/sys/uio.h
@@ -21,10 +21,10 @@
 #define _SYS_UIO_H	1
 #include <features.h>
 
-__BEGIN_DECLS
-
 #include <sys/types.h>
 
+__BEGIN_DECLS
+
 /* This file defines `struct iovec'.  */
 #include <iovec.h>
 
@@ -34,7 +34,7 @@ __BEGIN_DECLS
    The buffers are filled in the order specified.
    Operates just like `read' (see <unistd.h>) except that data are
    put in VECTOR instead of a contiguous buffer.  */
-extern ssize_t readv __P ((int __fd, __const struct iovec * __vector,
+extern ssize_t readv __P ((int __fd, __const struct iovec *__vector,
 			   int __count));
 
 /* Write data pointed by the buffers described by VECTOR, which
@@ -42,7 +42,7 @@ extern ssize_t readv __P ((int __fd, __const struct iovec * __vector,
    The data is written in the order specified.
    Operates just like `write' (see <unistd.h>) except that the data
    are taken from VECTOR instead of a contiguous buffer.  */
-extern ssize_t writev __P ((int __fd, __const struct iovec * __vector,
+extern ssize_t writev __P ((int __fd, __const struct iovec *__vector,
 			    int __count));
 
 
diff --git a/nss/nss_dns/dns-host.c b/nss/nss_dns/dns-host.c
index 120923069c..e3963094a3 100644
--- a/nss/nss_dns/dns-host.c
+++ b/nss/nss_dns/dns-host.c
@@ -1,21 +1,21 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-Extended from original form by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
-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 is part of the GNU C Library.
+   Extended from original form by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+   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.  */
 
 /* Parts of this file are plain copies of the file `gethtnamadr.c' from
    the bind package and it has the following copyright.  */
diff --git a/nss/nss_dns/dns-network.c b/nss/nss_dns/dns-network.c
index a2d9d280a5..d91c1bdc82 100644
--- a/nss/nss_dns/dns-network.c
+++ b/nss/nss_dns/dns-network.c
@@ -1,21 +1,21 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-Extended from original form by Ulrich Drepper <drepper@cygnus.com>, 1996.
+   This file is part of the GNU C Library.
+   Extended from original form by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
-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 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.
+   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.  */
+   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.  */
 
 /* Parts of this file are plain copies of the file `getnetnamadr.c' from
    the bind package and it has the following copyright.  */
@@ -97,12 +97,12 @@ typedef union querybuf
 
 
 /* Protortypes for local functions.  */
-static int getanswer_r (const querybuf *answer, int anslen,
-			struct netent *result, char *buffer, int buflen,
-			lookup_method net_i);
+static enum nss_status getanswer_r (const querybuf *answer, int anslen,
+				    struct netent *result, char *buffer,
+				    int buflen, lookup_method net_i);
 
 
-int
+enum nss_status
 _nss_dns_getnetbyname_r (const char *name, struct netent *result,
 			 char *buffer, int buflen)
 {
@@ -125,12 +125,12 @@ _nss_dns_getnetbyname_r (const char *name, struct netent *result,
 }
 
 
-int
+enum nss_status
 _nss_dns_getnetbyaddr_r (long net, int type, struct netent *result,
 			 char *buffer, int buflen)
 {
   /* Return entry for network with NAME.  */
-  int status;
+  enum nss_status status;
   querybuf net_buffer;
   unsigned int net_bytes[4];
   char qbuf[MAXDNAME];
@@ -194,7 +194,7 @@ _nss_dns_getnetbyaddr_r (long net, int type, struct netent *result,
 #undef offsetof
 #define offsetof(Type, Member) ((size_t) &((Type *) NULL)->Member)
 
-static int
+static enum nss_status
 getanswer_r (const querybuf *answer, int anslen, struct netent *result,
 	     char *buffer, int buflen, lookup_method net_i)
 {
diff --git a/pwd/pwd.h b/pwd/pwd.h
index 3d6d2a1977..89cd03f95a 100644
--- a/pwd/pwd.h
+++ b/pwd/pwd.h
@@ -101,8 +101,11 @@ extern struct passwd *getpwnam __P ((__const char *__name));
 
 /* Reentrant versions of some of the functions above.
 
-   PLEASE NOTE: these functions are not yet standardized.  The interface
-   may change in later versions of this library.  */
+   PLEASE NOTE: the `getpwent_r' function is not (yet) standardized.
+   The interface may change in later versions of this library.  But
+   the interface is designed following the principals used for the
+   other reentrant functions so the chances are good this is what the
+   POSIX people would choose.  */
 
 #if defined(__USE_SVID) || defined(__USE_MISC) || defined(__USE_XOPEN_EXTENDED)
 extern int __getpwent_r __P ((struct passwd *__resultbuf, char *__buffer,
@@ -127,7 +130,8 @@ extern int getpwnam_r __P ((__const char *__name, struct passwd *__resultbuf,
 
 
 #ifdef	__USE_SVID
-/* Read an entry from STREAM.  */
+/* Read an entry from STREAM.  This function is not standardized and
+   probably never will.  */
 extern int __fgetpwent_r __P ((FILE * __stream, struct passwd *__resultbuf,
 			       char *__buffer, size_t __buflen,
 			       struct passwd **__result));
diff --git a/resolv/gethnamaddr.c b/resolv/gethnamaddr.c
index 6962f59610..07da429cbf 100644
--- a/resolv/gethnamaddr.c
+++ b/resolv/gethnamaddr.c
@@ -133,7 +133,9 @@ typedef union {
     char ac;
 } align;
 
+#ifndef h_errno
 extern int h_errno;
+#endif
 
 #ifdef DEBUG
 static void
diff --git a/resolv/getnetnamadr.c b/resolv/getnetnamadr.c
index 6f5bf008c7..abbc3a3e6f 100644
--- a/resolv/getnetnamadr.c
+++ b/resolv/getnetnamadr.c
@@ -58,9 +58,11 @@ static char rcsid[] = "$Id$";
 #include <errno.h>
 #include <string.h>
 
+#ifndef h_errno
 extern int h_errno;
+#endif
 
-#if defined(mips) && defined(SYSTYPE_BSD43)
+#if defined(mips) && defined(SYSTYPE_BSD43) && !defined(errno)
 extern int errno;
 #endif
 
diff --git a/resolv/herror.c b/resolv/herror.c
index 70f13c3ad9..571d1a0478 100644
--- a/resolv/herror.c
+++ b/resolv/herror.c
@@ -78,7 +78,9 @@ const char *h_errlist[] = {
 };
 int	h_nerr = { sizeof h_errlist / sizeof h_errlist[0] };
 
+#ifndef h_errno
 extern int	h_errno;
+#endif
 
 /*
  * herror --
diff --git a/signal/signal.h b/signal/signal.h
index db7fcb6575..26212cba5a 100644
--- a/signal/signal.h
+++ b/signal/signal.h
@@ -149,15 +149,6 @@ extern int sigdelset __P ((sigset_t *__set, int __signo));
 /* Return 1 if SIGNO is in SET, 0 if not.  */
 extern int sigismember __P ((__const sigset_t *__set, int signo));
 
-#ifdef	__OPTIMIZE__
-/* <sigset.h> defines the __ versions as macros that do the work.  */
-#define	sigemptyset(set)	__sigemptyset(set)
-#define	sigfillset(set)		__sigfillset(set)
-#define	sigaddset(set, signo)	__sigaddset(set, signo)
-#define	sigdelset(set, signo)	__sigdelset(set, signo)
-#define	sigismember(set, signo)	__sigismember(set, signo)
-#endif
-
 /* Get the system-specific definitions of `struct sigaction'
    and the `SA_*' and `SIG_*'. constants.  */
 #include <sigaction.h>
@@ -170,6 +161,7 @@ extern int sigprocmask __P ((int __how,
 
 /* Change the set of blocked signals to SET,
    wait until a signal arrives, and restore the set of blocked signals.  */
+extern int __sigsuspend __P ((__const sigset_t *__set));
 extern int sigsuspend __P ((__const sigset_t *__set));
 
 /* Get and/or set the action for signal SIG.  */
diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c
index c2324d09a8..2da898817d 100644
--- a/stdio-common/vfprintf.c
+++ b/stdio-common/vfprintf.c
@@ -42,17 +42,18 @@
 # define ISDIGIT(Ch)	isdigit (Ch)
 
 # ifdef USE_IN_LIBIO
-#  define PUT(F, S, N)	_IO_sputn (F, S, N)
+#  define PUT(F, S, N)	_IO_sputn ((F), (S), (N))
 #  define PAD(Padchar)							      \
   if (width > 0)							      \
-    done += _IO_padn (s, Padchar, width)
+    done += _IO_padn (s, (Padchar), width)
 # else
 #  define PUTC(C, F)	putc (C, F)
 ssize_t __printf_pad __P ((FILE *, char pad, size_t n));
 # define PAD(Padchar)							      \
   if (width > 0)							      \
-    { if (__printf_pad (s, Padchar, width) == -1)			      \
-	return -1; else done += width; }
+    { ssize_t __res = __printf_pad (s, (Padchar), width);		      \
+      if (__res == -1) return -1;					      \
+      done += __res; }
 # endif
 #else
 # define vfprintf	vfwprintf
@@ -63,17 +64,18 @@ ssize_t __printf_pad __P ((FILE *, char pad, size_t n));
 # define ISDIGIT(Ch)	iswdigit (Ch)
 
 # ifdef USE_IN_LIBIO
-#  define PUT(F, S, N)	_IO_sputn (F, S, N)
+#  define PUT(F, S, N)	_IO_sputn ((F), (S), (N))
 #  define PAD(Padchar)							      \
   if (width > 0)							      \
-    done += _IO_wpadn (s, Padchar, width)
+    done += _IO_wpadn (s, (Padchar), width)
 # else
 #  define PUTC(C, F)	wputc (C, F)
 ssize_t __wprintf_pad __P ((FILE *, wchar_t pad, size_t n));
 #  define PAD(Padchar)							      \
   if (width > 0)							      \
-    { if (__wprintf_pad (s, Padchar, width) == -1)			      \
-	return -1; else done += width; }
+    { ssize_t __res = __wprintf_pad (s, (Padchar), width);		      \
+      if (__res == -1) return -1;					      \
+      done += __res; }
 # endif
 #endif
 
@@ -1515,6 +1517,7 @@ buffered_vfprintf (register _IO_FILE *s, const CHAR_T *format,
   hp->_IO_file_flags = _IO_MAGIC|_IO_NO_READS;
 #ifdef _IO_MTSAFE_IO
   hp->_lock = &helper.lock;
+  __libc_lock_init (*hp->_lock);
 #endif
   _IO_JUMPS (hp) = (struct _IO_jump_t *) &_IO_helper_jumps;
 
diff --git a/stdlib/drand48-iter.c b/stdlib/drand48-iter.c
index 6c15b15e1c..707be8e566 100644
--- a/stdlib/drand48-iter.c
+++ b/stdlib/drand48-iter.c
@@ -1,21 +1,21 @@
 /* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
 
-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 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.
+   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.  */
+   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.  */
 
 #include <errno.h>
 #include <stdlib.h>
@@ -55,21 +55,20 @@ __drand48_iterate (xsubi, buffer)
 
   if (sizeof (unsigned short int) == 2)
     {
-      X = (xsubi[2] << 16 | xsubi[1]) << 16 | xsubi[0];
-      a = (buffer->a[2] << 16 | buffer->a[1]) << 16 | buffer->a[0];
+      X = (u_int64_t)xsubi[2] << 32 | (u_int64_t)xsubi[1] << 16 | xsubi[0];
+      a = ((u_int64_t)buffer->a[2] << 32 | (u_int64_t)buffer->a[1] << 16
+	   | buffer->a[0]);
 
       result = X * a + buffer->c;
 
       xsubi[0] = result & 0xffff;
-      result >>= 16;
-      xsubi[1] = result & 0xffff;
-      result >>= 16;
-      xsubi[2] = result & 0xffff;
+      xsubi[1] = (result >> 16) & 0xffff;
+      xsubi[2] = (result >> 32) & 0xffff;
     }
   else
     {
-      X = xsubi[2] << 16 | xsubi[1] >> 16;
-      a = buffer->a[2] << 16 | buffer->a[1] >> 16;
+      X = (u_int64_t)xsubi[2] << 16 | xsubi[1] >> 16;
+      a = (u_int64_t)buffer->a[2] << 16 | buffer->a[1] >> 16;
 
       result = X * a + buffer->c;
 
diff --git a/stdlib/tst-strtod.c b/stdlib/tst-strtod.c
index 792ed2e017..681bace013 100644
--- a/stdlib/tst-strtod.c
+++ b/stdlib/tst-strtod.c
@@ -43,7 +43,7 @@ static const struct ltest tests[] =
 static void expand __P ((char *dst, int c));
 
 int
-main ()
+main (int argc, char ** argv)
 {
   register const struct ltest *lt;
   char *ep;
diff --git a/stdlib/tst-strtol.c b/stdlib/tst-strtol.c
index af7d41a5d3..620181b13d 100644
--- a/stdlib/tst-strtol.c
+++ b/stdlib/tst-strtol.c
@@ -74,7 +74,7 @@ static const struct ltest tests[] =
 static void expand __P ((char *dst, int c));
 
 int
-main ()
+main (int argc, char ** argv)
 {
   register const struct ltest *lt;
   char *ep;
diff --git a/sunrpc/Makefile b/sunrpc/Makefile
index 82d4ea78ca..dda826a906 100644
--- a/sunrpc/Makefile
+++ b/sunrpc/Makefile
@@ -52,7 +52,7 @@ headers = $(addprefix rpc/,auth.h auth_unix.h clnt.h netdb.h pmap_clnt.h \
 	  $(rpcsvc:%=rpcsvc/%) $(rpcsvc:%.x=rpcsvc/%.h)
 rpcsvc = bootparam.x nlm_prot.x rstat.x \
 	 yppasswd.x klm_prot.x rex.x sm_inter.x mount.x \
-	 rnusers.x spray.x nfs_prot.x rquota.x
+	 rusers.x spray.x nfs_prot.x rquota.x
 install-others = $(includedir)/rpcsvc/bootparam_prot.h \
 		 $(sysconfdir)/rpc
 generated = $(rpcsvc:%.x=rpcsvc/%.h) $(rpcsvc:%.x=x%.c)
diff --git a/sunrpc/rpc/clnt.h b/sunrpc/rpc/clnt.h
index e9e67210c3..2e1ff26314 100644
--- a/sunrpc/rpc/clnt.h
+++ b/sunrpc/rpc/clnt.h
@@ -278,7 +278,7 @@ extern CLIENT *clnttcp_create __P ((struct sockaddr_in *__raddr,
  *	struct sockaddr_in *raddr;
  *	u_long program;
  *	u_long version;
- *	struct timeval wait;
+ *	struct timeval wait_resend;
  *	int *sockp;
  *
  * Same as above, but you specify max packet sizes.
@@ -287,35 +287,37 @@ extern CLIENT *clnttcp_create __P ((struct sockaddr_in *__raddr,
  *	struct sockaddr_in *raddr;
  *	u_long program;
  *	u_long version;
- *	struct timeval wait;
+ *	struct timeval wait_resend;
  *	int *sockp;
  *	u_int sendsz;
  *	u_int recvsz;
  */
 extern CLIENT *clntudp_create __P ((struct sockaddr_in *__raddr,
 				    u_long __program, u_long __version,
-				    struct timeval __wait, int *__sockp));
+				    struct timeval __wait_resend,
+				    int *__sockp));
 extern CLIENT *clntudp_bufcreate __P ((struct sockaddr_in *__raddr,
 				       u_long __program, u_long __version,
-				       struct timeval __wait, int *__sockp,
-				       u_int __sendsz, u_int __recvsz));
+				       struct timeval __wait_resend,
+				       int *__sockp, u_int __sendsz,
+				       u_int __recvsz));
 
 /*
  * Print why creation failed
  */
-void clnt_pcreateerror __P ((char *__msg));	/* stderr */
-char *clnt_spcreateerror __P ((char *__msg));	/* string */
+extern void clnt_pcreateerror __P ((char *__msg));	/* stderr */
+extern char *clnt_spcreateerror __P ((char *__msg));	/* string */
 
 /*
  * Like clnt_perror(), but is more verbose in its output
  */
-void clnt_perrno __P ((enum clnt_stat __num));	/* stderr */
+extern void clnt_perrno __P ((enum clnt_stat __num));	/* stderr */
 
 /*
  * Print an English error message, given the client error code
  */
-void clnt_perror __P ((CLIENT *__clnt, char *__msg)); 	/* stderr */
-char *clnt_sperror __P ((CLIENT *__clnt, char *__msg));	/* string */
+extern void clnt_perror __P ((CLIENT *__clnt, char *__msg)); 	/* stderr */
+extern char *clnt_sperror __P ((CLIENT *__clnt, char *__msg));	/* string */
 
 /*
  * If a creation fails, the following allows the user to figure out why.
@@ -332,7 +334,7 @@ extern struct rpc_createerr rpc_createerr;
 /*
  * Copy error message to buffer.
  */
-char *clnt_sperrno __P ((enum clnt_stat __num));	/* string */
+extern char *clnt_sperrno __P ((enum clnt_stat __num));	/* string */
 
 
 
diff --git a/sunrpc/rpcsvc/rnusers.x b/sunrpc/rpcsvc/rnusers.x
deleted file mode 100644
index 257df1e6e9..0000000000
--- a/sunrpc/rpcsvc/rnusers.x
+++ /dev/null
@@ -1,86 +0,0 @@
-/* @(#)rnusers.x	2.1 88/08/01 4.0 RPCSRC */
-/* @(#)rnusers.x 1.2 87/09/20 Copyr 1987 Sun Micro */
-
-/*
- * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
- * unrestricted use provided that this legend is included on all tape
- * media and as a part of the software program in whole or part.  Users
- * may copy or modify Sun RPC without charge, but are not authorized
- * to license or distribute it to anyone else except as part of a product or
- * program developed by the user.
- * 
- * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
- * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- * 
- * Sun RPC is provided with no support and without any obligation on the
- * part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- * 
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
- * OR ANY PART THEREOF.
- * 
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- * 
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California  94043
- */
-
-/*
- * Find out about remote users
- */
-
-const MAXUSERS = 100;
-const MAXUTLEN = 256;
-
-struct utmp {
-	string ut_line<MAXUTLEN>;
-	string ut_name<MAXUTLEN>;
-	string ut_host<MAXUTLEN>;
-	int ut_time;
-};
-
-
-struct utmpidle {
-	utmp ui_utmp;
-	unsigned int ui_idle;
-};
-
-typedef utmp utmparr<MAXUSERS>;
-
-typedef utmpidle utmpidlearr<MAXUSERS>;
-
-program RUSERSPROG {
-	/*
-	 * Includes idle information
-	 */
-	version RUSERSVERS_IDLE {
-		int
-		RUSERSPROC_NUM(void) = 1;
-
-		utmpidlearr
-		RUSERSPROC_NAMES(void) = 2;
-
-		utmpidlearr
-		RUSERSPROC_ALLNAMES(void) = 3;
-	} = 1;
-
-	/*
-	 * Old version does not include idle information
-	 */
-	version RUSERSVERS_ORIG {
-		int
-		RUSERSPROC_NUM(void) = 1;
-
-		utmparr
-		RUSERSPROC_NAMES(void) = 2;
-
-		utmparr
-		RUSERSPROC_ALLNAMES(void) = 3;
-	} = 2;
-} = 100002;
-	
diff --git a/sunrpc/rpcsvc/rusers.x b/sunrpc/rpcsvc/rusers.x
new file mode 100644
index 0000000000..86fca74f87
--- /dev/null
+++ b/sunrpc/rpcsvc/rusers.x
@@ -0,0 +1,223 @@
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ * 
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ * 
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ * 
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ * 
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ * 
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ */
+
+%/*
+% * Find out about remote users
+% */
+
+const RUSERS_MAXUSERLEN = 32;
+const RUSERS_MAXLINELEN = 32;
+const RUSERS_MAXHOSTLEN = 257;
+
+struct rusers_utmp {
+	string ut_user<RUSERS_MAXUSERLEN>;	/* aka ut_name */
+	string ut_line<RUSERS_MAXLINELEN>;	/* device */
+	string ut_host<RUSERS_MAXHOSTLEN>;	/* host user logged on from */
+	int ut_type;				/* type of entry */
+	int ut_time;				/* time entry was made */
+	unsigned int ut_idle;			/* minutes idle */
+};
+
+typedef rusers_utmp utmp_array<>;
+
+#ifdef RPC_HDR
+%
+%/*
+% * Values for ut_type field above.
+% */
+#endif
+const	RUSERS_EMPTY = 0;
+const	RUSERS_RUN_LVL = 1;
+const	RUSERS_BOOT_TIME = 2;
+const	RUSERS_OLD_TIME = 3;
+const	RUSERS_NEW_TIME = 4;
+const	RUSERS_INIT_PROCESS = 5;
+const	RUSERS_LOGIN_PROCESS = 6;
+const	RUSERS_USER_PROCESS = 7;
+const	RUSERS_DEAD_PROCESS = 8;
+const	RUSERS_ACCOUNTING = 9;
+
+program RUSERSPROG {
+
+	version RUSERSVERS_3 {
+		int
+		RUSERSPROC_NUM(void) = 1;
+
+		utmp_array
+		RUSERSPROC_NAMES(void) = 2;
+
+		utmp_array
+		RUSERSPROC_ALLNAMES(void) = 3;
+	} = 3;
+
+} = 100002;
+
+#ifdef RPC_HDR
+%
+%
+%#ifdef	__cplusplus
+%extern "C" {
+%#endif
+%
+%/*
+% * The following structures are used by version 2 of the rusersd protocol.
+% * They were not developed with rpcgen, so they do not appear as RPCL.
+% */
+%
+%#define	RUSERSVERS_IDLE 2
+%#define	RUSERSVERS 3		/* current version */
+%#define	MAXUSERS 100
+%
+%/*
+% * This is the structure used in version 2 of the rusersd RPC service.
+% * It corresponds to the utmp structure for BSD sytems.
+% */
+%struct ru_utmp {
+%	char	ut_line[8];		/* tty name */
+%	char	ut_name[8];		/* user id */
+%	char	ut_host[16];		/* host name, if remote */
+%	long	ut_time;		/* time on */
+%};
+%
+%struct utmparr {
+%       struct ru_utmp **uta_arr;
+%       int uta_cnt;
+%};
+%typedef struct utmparr utmparr;
+%int xdr_utmparr();
+%
+%struct utmpidle {
+%	struct ru_utmp ui_utmp;
+%	unsigned ui_idle;
+%};
+%
+%struct utmpidlearr {
+%	struct utmpidle **uia_arr;
+%	int uia_cnt;
+%};
+%
+%int xdr_utmpidlearr();
+%
+%#ifdef	__cplusplus
+%}
+%#endif
+#endif
+
+
+#ifdef	RPC_XDR
+%bool_t
+%xdr_utmp(xdrs, objp)
+%	XDR *xdrs;
+%	struct ru_utmp *objp;
+%{
+%	/* Since the fields are char foo [xxx], we should not free them. */
+%	if (xdrs->x_op != XDR_FREE)
+%	{
+%		char *ptr;
+%		ptr = objp->ut_line;
+%		if (!xdr_string (xdrs, &ptr, sizeof (objp->ut_line))) {
+%			return (FALSE);
+%		}
+%		ptr = objp->ut_name;
+%		if (!xdr_string (xdrs, &ptr, sizeof (objp->ut_name))) {
+%			return (FALSE);
+%		}
+%		ptr = objp->ut_host;
+%		if (!xdr_string (xdrs, &ptr, sizeof (objp->ut_host))) {
+%			return (FALSE);
+%		}
+%	}
+%	if (!xdr_long(xdrs, &objp->ut_time)) {
+%		return (FALSE);
+%	}
+%	return (TRUE);
+%}
+%
+%bool_t
+%xdr_utmpptr(xdrs, objpp)
+%	XDR *xdrs;
+%	struct ru_utmp **objpp;
+%{
+%	if (!xdr_reference(xdrs, (char **) objpp, sizeof (struct ru_utmp), 
+%			   xdr_utmp)) {
+%		return (FALSE);
+%	}
+%	return (TRUE);
+%}
+%
+%bool_t
+%xdr_utmparr(xdrs, objp)
+%	XDR *xdrs;
+%	struct utmparr *objp;
+%{
+%	if (!xdr_array(xdrs, (char **)&objp->uta_arr, (u_int *)&objp->uta_cnt,
+%		       MAXUSERS, sizeof(struct ru_utmp *), xdr_utmpptr)) {
+%		return (FALSE);
+%	}
+%	return (TRUE);
+%}
+%
+%bool_t
+%xdr_utmpidle(xdrs, objp)
+%	XDR *xdrs;
+%	struct utmpidle *objp;
+%{
+%	if (!xdr_utmp(xdrs, &objp->ui_utmp)) {
+%		return (FALSE);
+%	}
+%	if (!xdr_u_int(xdrs, &objp->ui_idle)) {
+%		return (FALSE);
+%	}
+%	return (TRUE);
+%}
+%
+%bool_t
+%xdr_utmpidleptr(xdrs, objpp)
+%	XDR *xdrs;
+%	struct utmpidle **objpp;
+%{
+%	if (!xdr_reference(xdrs, (char **) objpp, sizeof (struct utmpidle), 
+%			   xdr_utmpidle)) {
+%		return (FALSE);
+%	}
+%	return (TRUE);
+%}
+%
+%bool_t
+%xdr_utmpidlearr(xdrs, objp)
+%	XDR *xdrs;
+%	struct utmpidlearr *objp;
+%{
+%	if (!xdr_array(xdrs, (char **)&objp->uia_arr, (u_int *)&objp->uia_cnt,
+%		       MAXUSERS, sizeof(struct utmpidle *), xdr_utmpidleptr)) {
+%		return (FALSE);
+%	}
+%	return (TRUE);
+%}
+#endif
diff --git a/sysdeps/alpha/bsd-_setjmp.S b/sysdeps/alpha/bsd-_setjmp.S
index be7f6dd05f..1bb3e4ab37 100644
--- a/sysdeps/alpha/bsd-_setjmp.S
+++ b/sysdeps/alpha/bsd-_setjmp.S
@@ -1,21 +1,21 @@
 /* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'.  Alpha version.
-Copyright (C) 1994, 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+   Copyright (C) 1994, 1996 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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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 just does a tail-call to `__sigsetjmp (ARG, 0)'.
    We cannot do it in C because it must be a tail-call, so frame-unwinding
@@ -26,8 +26,10 @@ Cambridge, MA 02139, USA.  */
 ENTRY(_setjmp)
 	ldgp	$29,0($27)
 #ifdef PROF
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 #endif
 	.prologue 1
 	bis	$31, $31, $17		/* Pass a second argument of zero.  */
diff --git a/sysdeps/alpha/bsd-setjmp.S b/sysdeps/alpha/bsd-setjmp.S
index 2b799613d7..cf5bf189de 100644
--- a/sysdeps/alpha/bsd-setjmp.S
+++ b/sysdeps/alpha/bsd-setjmp.S
@@ -1,21 +1,21 @@
 /* BSD `setjmp' entry point to `sigsetjmp (..., 1)'.  Alpha version.
-Copyright (C) 1994, 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+   Copyright (C) 1994, 1996 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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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 just does a tail-call to `__sigsetjmp (ARG, 1)'.
    We cannot do it in C because it must be a tail-call, so frame-unwinding
@@ -26,8 +26,10 @@ Cambridge, MA 02139, USA.  */
 ENTRY(setjmp)
 	ldgp	$29, 0($27)
 #ifdef PROF
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 #endif
 	.prologue 1
 	bis	$31, 1, $17		/* Pass a second argument of one.  */
diff --git a/sysdeps/alpha/htonl.S b/sysdeps/alpha/htonl.S
index 55d4f62bc7..c6e09f134f 100644
--- a/sysdeps/alpha/htonl.S
+++ b/sysdeps/alpha/htonl.S
@@ -1,28 +1,30 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+   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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 #include <sysdep.h>
 
 ENTRY(__htonl)
 #ifdef PROF
 	ldgp	gp, 0(pv)
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 	.prologue 1
 #else
 	.prologue 0
diff --git a/sysdeps/alpha/htons.S b/sysdeps/alpha/htons.S
index 743d3e2474..8d3aefe149 100644
--- a/sysdeps/alpha/htons.S
+++ b/sysdeps/alpha/htons.S
@@ -1,28 +1,30 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+   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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 #include <sysdep.h>
 
 ENTRY(__htons)
 #ifdef PROF
 	ldgp	gp, 0(pv)
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 	.prologue 1
 #else
 	.prologue 0
diff --git a/sysdeps/alpha/memcpy.S b/sysdeps/alpha/memcpy.S
deleted file mode 100644
index 4ee9c115db..0000000000
--- a/sysdeps/alpha/memcpy.S
+++ /dev/null
@@ -1,276 +0,0 @@
-/* Copyright (C) 1996 Free Software Foundation, Inc.
-   Contributed by Richard Henderson (rth@tamu.edu)
-
-   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., 675 Mass Ave,
-   Cambridge, MA 02139, USA.  */
-
-
-/* This is the child of the C-with-inline-assembly memcpy posted by
-   Martin Ostermann (ost@comnets.rwth-aachen.de).
-
-   This is generally scheduled for the EV5, but whenever necessary and
-   possible, the autoswap slotting feature of the EV5 is used so that the
-   code lays out nicely for the EV4 as well.  */
-
-#include <alpha/regdef.h>
-
-	.set noreorder
-
-	.text
-
-	.ent copy_fwd_aligned
-copy_fwd_aligned:
-	.frame sp, 0, ra, 0
-	.prologue 0
-
-	/* Aligned forward copy main loop.  On entry to this basic block:
-	   t0 == source word waiting to be stored
-	   t2 == loop counter
-	   a0 == destination pointer
-	   a1 == source pointer
-	   a2 mod 8 == byte count in final word */
-	.align 4
-$fa_loop:
-	and	t2, 7, t1	# e0    :
-	beq	t1, 1f		# .. e1 :
-
-0:	stq_u	t0, 0(a0)	# e0    :
-	subq	t1, 1, t1	# .. e1 :
-	ldq_u	t0, 8(a1)	# e0    : copy up to seven words
-	addq	a0, 8, a0	# .. e1 :
-	addq	a1, 8, a1	# e0    :
-	bne	t1, 0b		# .. e1 :
-
-1:	bic	t2, 7, t2	# e0    :
-	beq	t2, $fa_tail	# .. e1 :
-
-2:	stq_u	t0, 0(a0)	# e0    :
-	addq	a0, 64, a0	# .. e1 :
-	ldq_u	t3, 8(a1)	# e0    : copy eight words as fast as we can
-	ldq_u	t4, 16(a1)	# .. e1 :
-	ldq_u	t5, 24(a1)	# e0    :
-	ldq_u	t6, 32(a1)	# .. e1 :
-	ldq_u	t7, 40(a1)	# e0    :
-	ldq_u	t8, 48(a1)	# .. e1 :
-	ldq_u	t9, 56(a1)	# e0    :
-	ldq_u	t0, 64(a1)	# .. e1 :
-	stq_u	t3, -56(a0)	# e0    :
-	subq	t2, 8, t2	# .. e1 :
-	stq_u	t4, -48(a0)	# e0    :
-	addq	a1, 64, a1	# .. e1 :
-	stq_u	t5, -40(a0)	# e0    :
-	stq_u	t6, -32(a0)	# e0    :
-	stq_u	t7, -24(a0)	# e0    :
-	stq_u	t8, -16(a0)	# e0    :
-	stq_u	t9, -8(a0)	# e0    :
-	bne	t2, 2b		# .. e1 :
-
-	/* Take care of a partial word tail.  */
-$fa_tail:
-	and	a2, 7, t3	# e0    :
-	bne	t3, 1f		# .. e1 (zdb)
-
-	/* Aligned copy, aligned tail, final store.  */
-	stq_u	t0, 0(a0)
-	ret
-
-1:	ldq_u	t1, 0(a0)	# e1    :
-	mskql	t0, a2, t0	# .. e1 :
-	mskqh	t1, a2, t1	# e0 (stall)
-	bis	t0, t1, t0	# e1    :
-	stq_u	t0, 0(a0)	# e0    :
-	ret			# .. e1 :
-
-	/* This is the actual entry point to this function.  */
-	.align 3
-$fwd_aligned:
-	ldq_u	t0, 0(a1)	# e0    :
-	and	a0, 7, t3	# .. e1 :
-	addq	a2, t3, a2	# e0    :
-	subq	a2, 1, t2	# e1    :
-	sra	t2, 3, t2	# e0    :
-	beq	t3, $fa_loop	# .. e1 :
-
-	ldq_u	t1, 0(a0)	# e0    :
-	beq	t2, $fa_small	# .. e1 :
-	mskqh	t0, a0, t0	# e0    :
-	mskql	t1, a0, t3	# e0    :
-	bis	t0, t3, t0	# e0    :
-	br	$fa_loop	# .. e1 :
-
-	/* The move affects exactly one destination word.  */
-$fa_small:
-	mskqh	t0, a0, t0	# e0    :
-	and	a2, 7, t4	# .. e1 :
-	mskql	t1, a0, t3	# e0    :
-	bne	t4, 1f		# .. e1 :
-
-	or	t0, t3, t0	# e0    :
-	unop			#       :
-	stq_u	t0, 0(a0)	# e0    :
-	ret			# .. e1 :
-
-1:	mskql	t0, a2, t0	# e0    :
-	mskqh	t1, a2, t1	# e0    :
-	or	t0, t3, t0	# e0    :
-	or	t0, t1, t0	# e1    :
-	stq_u	t0, 0(a0)	# e0    :
-	ret			# .. e1 :
-
-	.end copy_fwd_aligned
-
-	.ent memcpy
-	.globl memcpy
-	.align 3
-memcpy:
-	.frame sp, 0, ra, 0
-#ifdef PROF
-	ldgp	gp, 0(ra)
-	lda	AT, _mcount
-	jsr	AT, (AT), _mcount
-	.prologue 1
-#else
-	.prologue 0
-#endif
-
-	mov	a0, v0
-	beq	a2, $zero_length
-
-	/* Are source and destination co-aligned?  */
-	xor	a0, a1, t0
-	unop
-	and	t0, 7, t0
-	beq	t0, $fwd_aligned
-	br	$fwd_unaligned
-
-	.end memcpy
-
-	.ent copy_fwd_unaligned
-copy_fwd_unaligned:
-	.frame sp, 0, ra, 0
-	.prologue 0
-
-	/* Unaligned forward copy main loop.  On entry to this basic block:
-	   t0 == source low word, unshifted
-	   t2 == loop counter
-	   t7 == last source byte + 1
-	   a0 == destination pointer
-	   a1 == source pointer
-	   a2 mod 8 == byte count in final word */
-	.align 4
-$fu_loop:
-	beq	t2, $fu_tail	# e1    :
-	blbc	t2, 0f		# e1    :
-
-	ldq_u	t1, 8(a1)	# e1    : copy one unaligned word
-	extql	t0, a1, t3	# .. e0 :
-	addq	a1, 8, a1	# e0    :
-	addq	a0, 8, a0	# .. e1 :
-	extqh	t1, a1, t4	# e0    :
-	subq	t2, 1, t2	# .. e1 :
-	mov	t1, t0		# e0    :
-	or	t3, t4, t3	# .. e1 :
-	stq_u	t3, -8(a0)	# e0    :
-	beq	t2, $fu_tail	# .. e1 :
-
-0:	ldq_u	t1, 8(a1)	# e1    : copy two unaligned words
-	extql	t0, a1, t3	# .. e0 :
-	ldq_u	t0, 16(a1)	# e0    :
-	subq	t2, 2, t2	# .. e1 :
-	extqh	t1, a1, t4	# e0    :
-	addq	a0, 16, a0	# .. e1 :
-	extql	t1, a1, t5	# e0    :
-	or	t3, t4, t3	# .. e1 :
-	extqh	t0, a1, t6	# e0    :
-	addq	a1, 16, a1	# .. e1 :
-	stq_u	t3, -16(a0)	# e0    :
-	or	t5, t6, t5	# .. e1 :
-	stq_u	t5, -8(a0)	# e0    :
-	bne	t2, 0b		# .. e1 :
-
-	/* Take care of a partial words tail.  */
-$fu_tail:
-	ldq_u	t4, -1(t7)	# e1    :
-	extql	t0, a1, t3	# .. e0 :
-	extqh	t4, a1, t4	# e0 (stall)
-	and	a2, 7, t5	# .. e1 :
-	or	t3, t4, t3	# e0    :
-	beq	t5, 1f		# .. e1 :
-
-	ldq_u	t1, 0(a0)	# e1    :
-	mskql	t3, a2, t3	# .. e0 :
-	mskqh	t1, a2, t1	# e0 (stall)
-	or	t1, t3, t3	# e1    :
-
-1:	stq_u	t3, 0(a0)	# e0    :
-	ret			# .. e1 :
-
-	/* The entry point to the unaligned forward copy.  */
-	.align 3
-$fwd_unaligned:
-	ldq_u	t0, 0(a1)	# e0    : load initial bits of src
-	addq	a1, a2, t7	# .. e1 : record last byte + 1 of src
-	and	a0, 7, t3	# e0    : find dst misalignment
-	addq	a2, t3, a2	# e1    : find number of words affected
-	subq	a2, 1, t2	# e0    :
-	cmple	a2, 8, t4	# .. e1 : are we dealing with a small block?
-	subq	a1, t3, a1	# e0    :
-	bne	t4, $fu_small	# .. e1 :
-	srl	t2, 3, t2	# e0    :
-	beq	t3, $fu_loop	# .. e1 :
-
-	/* Take care of an unaligned dst head.  */
-	ldq_u	t5, 0(a0)	# e0    :
-	ldq_u	t1, 8(a1)	# .. e1 :
-	extql	t0, a1, t3	# e0    :
-	addq	a0, 8, a0	# .. e1 :
-	extqh	t1, a1, t4	# e0    :
-	addq	a1, 8, a1	# .. e1 :
-	mskql	t5, a0, t5	# e0    :
-	or	t3, t4, t3	# .. e1 :
-	mskqh	t3, a0, t3	# e0    :
-	subq	t2, 1, t2	# .. e1 :
-	or	t3, t5, t3	# e0    :
-	mov	t1, t0		# .. e1 :
-	stq_u	t3, -8(a0)	# e0    :
-	br	$fu_loop	# .. e1 :
-
-	/* The move affects exactly one destination word.  */
-	.align 3
-$fu_small:
-	ldq_u	t2, 0(a0)	# e1    :
-	extql	t0, a1, t3	# .. e0 :
-	ldq_u	t1, -1(t7)	# e0    :
-	and	a2, 7, t8	# .. e1 :
-	mskqh	t2, a2, t6	# e0    :
-	mskql	t2, a0, t5	# e0    :
-	extqh	t1, a1, t4	# e0    :
-	cmovne	t8, t6, t8	# .. e1 :
-	or	t3, t4, t3	# e0    :
-	or	t5, t8, t5	# .. e1 :
-	mskqh	t3, a0, t3	# e0    :
-	and	a2, 7, t8	# .. e1 :
-	mskql	t3, a2, t6	# e0    :
-	cmovne	t8, t6, t8	# e1    :
-	or	t3, t5, t3	# e0    :
-	unop			#       :
-	stq_u	t3, 0(a0)	# e0    :
-
-$zero_length:
-	ret			# .. e1 :
-
-	.end copy_fwd_unaligned
diff --git a/sysdeps/alpha/s_copysign.S b/sysdeps/alpha/s_copysign.S
index 739d3deb79..be5b1d07ac 100644
--- a/sysdeps/alpha/s_copysign.S
+++ b/sysdeps/alpha/s_copysign.S
@@ -1,29 +1,31 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-Contributed by David Mosberger <davidm@azstarnet.com>
+   This file is part of the GNU C Library.
+   Contributed by David Mosberger <davidm@azstarnet.com>, 1996.
 
-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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 #include <sysdep.h>
 
 ENTRY(__copysign)
 #ifdef PROF
 	ldgp	gp, 0(pv)
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 	.prologue 1
 #else
 	.prologue 0
diff --git a/sysdeps/alpha/setjmp.S b/sysdeps/alpha/setjmp.S
index f57d49017e..4b2e147b15 100644
--- a/sysdeps/alpha/setjmp.S
+++ b/sysdeps/alpha/setjmp.S
@@ -1,20 +1,20 @@
 /* Copyright (C) 1992, 1994, 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+   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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 #include <sysdep.h>
 
@@ -24,8 +24,10 @@ Cambridge, MA 02139, USA.  */
 ENTRY (__sigsetjmp)
 	ldgp	$29, 0($27)
 #ifdef PROF
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 #endif
 	.prologue 1
 
diff --git a/sysdeps/alpha/stpcpy.S b/sysdeps/alpha/stpcpy.S
index 9c2668b535..46b09d5ac5 100644
--- a/sysdeps/alpha/stpcpy.S
+++ b/sysdeps/alpha/stpcpy.S
@@ -1,22 +1,21 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
-   Contributed by Richard Henderson (rth@tamu.edu)
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson <rth@tamu.edu>, 1996.
 
-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 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.
 
-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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 /* Copy a null-terminated string from SRC to DST.  Return a pointer
    to the null-terminator in the source.  */
@@ -28,8 +27,10 @@ Cambridge, MA 02139, USA.  */
 ENTRY(__stpcpy)
 	ldgp	gp, 0(pv)
 #ifdef PROF
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 #endif
 	.prologue 1
 
diff --git a/sysdeps/alpha/strcat.S b/sysdeps/alpha/strcat.S
index e57259f51d..ddc15d9ca6 100644
--- a/sysdeps/alpha/strcat.S
+++ b/sysdeps/alpha/strcat.S
@@ -1,6 +1,6 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
-   Contributed by Richard Henderson (rth@tamu.edu)
+   Contributed by Richard Henderson <rth@tamu.edu>, 1996.
 
    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
@@ -26,8 +26,10 @@
 ENTRY(strcat)
 	ldgp	gp, 0(pv)
 #ifdef PROF
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 #endif
 	.prologue 1
 
diff --git a/sysdeps/alpha/strcpy.S b/sysdeps/alpha/strcpy.S
index 823476f750..24c827b10f 100644
--- a/sysdeps/alpha/strcpy.S
+++ b/sysdeps/alpha/strcpy.S
@@ -1,22 +1,21 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
-   Contributed by Richard Henderson (rth@tamu.edu)
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson <rth@tamu.edu>, 1996.
 
-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 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.
 
-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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 /* Copy a null-terminated string from SRC to DST.  Return a pointer
    to the null-terminator in the source.  */
@@ -28,8 +27,10 @@ Cambridge, MA 02139, USA.  */
 ENTRY(strcpy)
 	ldgp	gp, 0(pv)
 #ifdef PROF
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 #endif
 	.prologue 1
 
diff --git a/sysdeps/alpha/strncat.S b/sysdeps/alpha/strncat.S
index 089fba34d9..2c39cc0232 100644
--- a/sysdeps/alpha/strncat.S
+++ b/sysdeps/alpha/strncat.S
@@ -1,22 +1,21 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
-   Contributed by Richard Henderson (rth@tamu.edu)
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson <rth@tamu.edu>, 1996.
 
-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 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.
 
-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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 /* Append no more than COUNT characters from the null-terminated string SRC
    to the null-terminated string DST.  Always null-terminate the new DST.  */
@@ -28,8 +27,10 @@ Cambridge, MA 02139, USA.  */
 ENTRY(strncat)
 	ldgp	gp, 0(pv)
 #ifdef PROF
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 #endif
 	.prologue 1
 
diff --git a/sysdeps/alpha/w_sqrt.S b/sysdeps/alpha/w_sqrt.S
index b5c980e557..cf5ae097fd 100644
--- a/sysdeps/alpha/w_sqrt.S
+++ b/sysdeps/alpha/w_sqrt.S
@@ -1,8 +1,7 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
-   Contributed by David Mosberger (davidm@cs.arizona.edu).
-   Based on public-domain C source by Linus Torvalds.
-
    This file is part of the GNU C Library.
+   Contributed by David Mosberger <davidm@cs.arizona.edu>, 1996.
+   Based on public-domain C source by Linus Torvalds.
 
    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
@@ -15,9 +14,9 @@
    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., 675 Mass Ave,
-   Cambridge, MA 02139, USA.  */
+   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 version is much faster than generic sqrt implementation, but
    it doesn't handle exceptional values or the inexact flag.  Don't use
@@ -25,6 +24,7 @@
 
 #ifndef _IEEE_FP
 
+#define _ERRNO_H
 #include <errnos.h>
 #include <sysdep.h>
 
diff --git a/sysdeps/generic/paths.h b/sysdeps/generic/paths.h
index 12e12b3a99..a2ff426753 100644
--- a/sysdeps/generic/paths.h
+++ b/sysdeps/generic/paths.h
@@ -50,6 +50,7 @@
 #define	_PATH_DRUM	"/dev/drum"
 #define	_PATH_KMEM	"/dev/kmem"
 #define	_PATH_MAILDIR	"/var/mail"
+#define	_PATH_LASTLOG	"/var/log/lastlog"
 #define	_PATH_MAN	"/usr/man"
 #define	_PATH_MEM	"/dev/mem"
 #define	_PATH_MNTTAB    "/etc/fstab"
@@ -60,7 +61,9 @@
 #define	_PATH_SHELLS	"/etc/shells"
 #define	_PATH_TTY	"/dev/tty"
 #define	_PATH_UNIX	"/vmunix"
+#define	_PATH_UTMP	"/var/run/utmp"
 #define	_PATH_VI	"/usr/bin/vi"
+#define	_PATH_WTMP	"/var/log/wtmp"
 
 /* Provide trailing slash, since mostly used for building pathnames. */
 #define	_PATH_DEV	"/dev/"
diff --git a/sysdeps/generic/sigset.h b/sysdeps/generic/sigset.h
index 361d157bf5..a137d428c3 100644
--- a/sysdeps/generic/sigset.h
+++ b/sysdeps/generic/sigset.h
@@ -37,6 +37,10 @@ typedef unsigned long int __sigset_t;
 #if !defined (_SIGSET_H_fns) && defined (_SIGNAL_H)
 #define _SIGSET_H_fns 1
 
+#ifndef _EXTERN_INLINE
+#define _EXTERN_INLINE extern __inline
+#endif
+
 /* Return a mask that includes SIG only.  The cast to `sigset_t' avoids
    overflow if `sigset_t' is wider than `int'.  */
 #define	__sigmask(sig)	(((__sigset_t) 1) << ((sig) - 1))
@@ -44,38 +48,24 @@ typedef unsigned long int __sigset_t;
 #define	__sigemptyset(set)	((*(set) = (__sigset_t) 0), 0)
 #define	__sigfillset(set)	((*(set) = ~(__sigset_t) 0), 0)
 
-/* These functions must check for a bogus signal number.  We detect it by a
-   zero sigmask, since a number too low or too high will have shifted the 1
-   off the high end of the mask.  If we find an error, we punt to a random
-   call we know fails with EINVAL (kludge city!), so as to avoid referring
-   to `errno' in this file (sigh).  */
+/* These functions needn't check for a bogus signal number -- error
+   checking is done in the non __ versions.  */
 
 extern int __sigismember (__const __sigset_t *, int);
 extern int __sigaddset (__sigset_t *, int);
 extern int __sigdelset (__sigset_t *, int);
 
-#ifndef _EXTERN_INLINE
-#define _EXTERN_INLINE extern __inline
-#endif
 #define __SIGSETFN(NAME, BODY, CONST)					      \
   _EXTERN_INLINE int							      \
-  __##NAME (CONST __sigset_t *__set, int __sig)				      \
+  NAME (CONST __sigset_t *__set, int __sig)				      \
   {									      \
-    if (__sig < 1 || __sig > (int) sizeof (__sigset_t) * 8)		      \
-      {									      \
-	extern int raise (int);						      \
-	return raise (-1);						      \
-      }									      \
-    else								      \
-      {									      \
-	__sigset_t __mask = __sigmask (__sig);				      \
-	return BODY;							      \
-      }									      \
+    __sigset_t __mask = __sigmask (__sig);				      \
+    return BODY;							      \
   }
 
-__SIGSETFN (sigismember, (*__set & __mask) ? 1 : 0, __const)
-__SIGSETFN (sigaddset, ((*__set |= __mask), 0), )
-__SIGSETFN (sigdelset, ((*__set &= ~__mask), 0), )
+__SIGSETFN (__sigismember, (*__set & __mask) ? 1 : 0, __const)
+__SIGSETFN (__sigaddset, ((*__set |= __mask), 0), )
+__SIGSETFN (__sigdelset, ((*__set &= ~__mask), 0), )
 
 #undef __SIGSETFN
 
diff --git a/sysdeps/generic/utmpbits.h b/sysdeps/generic/utmpbits.h
index b3fb36ab4a..cbd3457bd4 100644
--- a/sysdeps/generic/utmpbits.h
+++ b/sysdeps/generic/utmpbits.h
@@ -1,31 +1,29 @@
 /* The `struct utmp' type, describing entries in the utmp file.  Generic/BSDish
-Copyright (C) 1993, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1993, 1996 Free Software Foundation, Inc.
 
-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 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.
+   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.  */
+   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.  */
 
 #ifndef _UTMPBITS_H
 
 #define _UTMPBITS_H	1
 #include <features.h>
 
+#include <paths.h>
 #include <time.h>
 
-#define	_PATH_UTMP	"/var/run/utmp"
-#define	_PATH_WTMP	"/var/log/wtmp"
-#define	_PATH_LASTLOG	"/var/log/lastlog"
 
 #define	UT_NAMESIZE	8
 #define	UT_LINESIZE	8
diff --git a/sysdeps/generic/waitstatus.h b/sysdeps/generic/waitstatus.h
index 5cd8b318bb..4fbcbe87aa 100644
--- a/sysdeps/generic/waitstatus.h
+++ b/sysdeps/generic/waitstatus.h
@@ -37,8 +37,8 @@
 /* Nonzero if STATUS indicates termination by a signal.  */
 #ifdef	__GNUC__
 #define	__WIFSIGNALED(status)						      \
-  (__extension__ ({ int __stat = (status);				      \
-		    !__WIFSTOPPED(__stat) && !__WIFEXITED(__stat); }))
+  (__extension__ ({ int __status = (status);				      \
+		    !__WIFSTOPPED(__status) && !__WIFEXITED(__status); }))
 #else	/* Not GCC.  */
 #define	__WIFSIGNALED(status)	(!__WIFSTOPPED(status) && !__WIFEXITED(status))
 #endif	/* GCC.  */
diff --git a/sysdeps/gnu/utmpbits.h b/sysdeps/gnu/utmpbits.h
index 0dd55b59fa..37e4fb9acc 100644
--- a/sysdeps/gnu/utmpbits.h
+++ b/sysdeps/gnu/utmpbits.h
@@ -1,32 +1,30 @@
 /* The `struct utmp' type, describing entries in the utmp file.  GNU version.
-Copyright (C) 1993, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1993, 1996 Free Software Foundation, Inc.
 
-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 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.
+   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.  */
+   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.  */
 
 #ifndef _UTMPBITS_H
 
 #define _UTMPBITS_H	1
 #include <features.h>
 
+#include <paths.h>
 #include <sys/time.h>
 #include <sys/types.h>
 
-#define _PATH_UTMP	"/var/run/utmp"
-#define _PATH_WTMP	"/var/log/wtmp"
-#define _PATH_LASTLOG	"/var/log/lastlog"
 
 #define UT_UNKNOWN	0	/* for ut_type field */
 
@@ -39,6 +37,7 @@ Boston, MA 02111-1307, USA.  */
 #define LOGIN_PROCESS	6
 #define USER_PROCESS	7
 #define DEAD_PROCESS	8
+#define ACCOUNTING	9
 
 #define UT_LINESIZE	32
 #define UT_NAMESIZE	32
diff --git a/sysdeps/posix/readv.c b/sysdeps/posix/readv.c
index 7566fe6c6b..878accaf92 100644
--- a/sysdeps/posix/readv.c
+++ b/sysdeps/posix/readv.c
@@ -30,12 +30,12 @@ ssize_t
 readv (fd, vector, count)
      int fd;
      const struct iovec *vector;
-     size_t count;
+     int count;
 {
   char *buffer;
   size_t bytes;
   int bytes_read;
-  register size_t i;
+  int i;
 
   /* Find the total number of bytes to be read.  */
   bytes = 0;
diff --git a/sysdeps/posix/sigblock.c b/sysdeps/posix/sigblock.c
index 411a952bc3..777710b08a 100644
--- a/sysdeps/posix/sigblock.c
+++ b/sysdeps/posix/sigblock.c
@@ -1,53 +1,55 @@
-/* Copyright (C) 1991, 1994, 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+/* Copyright (C) 1991, 1994, 1995, 1996 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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
-#include <ansidecl.h>
 #include <errno.h>
 #include <signal.h>
 
 /* Block signals in MASK, returning the old mask.  */
 int
-DEFUN(__sigblock, (mask), int mask)
+__sigblock (mask)
+     int mask;
 {
   register int sig;
   sigset_t set, oset;
 
-  if (__sigemptyset(&set) < 0)
+  if (__sigemptyset (&set) < 0)
     return -1;
-  
+
   if (sizeof (mask) == sizeof (set))
     *(int *) &set = mask;
+  else if (sizeof (unsigned long int) == sizeof (set))
+    *(unsigned long int *) &set = (unsigned int) mask;
   else
     for (sig = 1; sig < NSIG; ++sig)
-      if ((mask & sigmask(sig)) &&
-	  __sigaddset(&set, sig) < 0)
+      if ((mask & sigmask (sig)) && __sigaddset (&set, sig) < 0)
 	return -1;
 
-  if (sigprocmask(SIG_BLOCK, &set, &oset) < 0)
+  if (sigprocmask (SIG_BLOCK, &set, &oset) < 0)
     return -1;
 
-  mask = 0;
   if (sizeof (mask) == sizeof (oset))
     mask = *(int *) &oset;
+  else if (sizeof (unsigned long int) == sizeof (oset))
+    mask = *(unsigned long int*) &oset;
   else
-    for (sig = 1; sig < NSIG; ++sig)
-      if (__sigismember(&oset, sig))
-	mask |= sigmask(sig);
+    for (sig = 1, mask = 0; sig < NSIG; ++sig)
+      if (__sigismember (&oset, sig))
+	mask |= sigmask (sig);
 
   return mask;
 }
diff --git a/sysdeps/posix/sigintr.c b/sysdeps/posix/sigintr.c
index 37914e997d..25bc5ab56b 100644
--- a/sysdeps/posix/sigintr.c
+++ b/sysdeps/posix/sigintr.c
@@ -1,20 +1,20 @@
 /* Copyright (C) 1992, 1994, 1996 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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 #include <stddef.h>
 #include <signal.h>
diff --git a/sysdeps/posix/signal.c b/sysdeps/posix/signal.c
index 9a8d2de0e4..ce93116075 100644
--- a/sysdeps/posix/signal.c
+++ b/sysdeps/posix/signal.c
@@ -1,20 +1,20 @@
 /* Copyright (C) 1991, 1992, 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+   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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 #include <errno.h>
 #include <signal.h>
@@ -31,7 +31,8 @@ signal (sig, handler)
 {
   struct sigaction act, oact;
 
-  if (handler == SIG_ERR)
+  /* Check signal extents to protect __sigismember.  */
+  if (handler == SIG_ERR || sig < 1 || sig >= NSIG)
     {
       __set_errno (EINVAL);
       return SIG_ERR;
diff --git a/sysdeps/posix/sigpause.c b/sysdeps/posix/sigpause.c
index 97716d352b..020a46b120 100644
--- a/sysdeps/posix/sigpause.c
+++ b/sysdeps/posix/sigpause.c
@@ -1,29 +1,29 @@
-/* Copyright (C) 1991, 1992, 1994, 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+/* Copyright (C) 1991, 92, 94, 95, 96 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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
-#include <ansidecl.h>
 #include <errno.h>
 #include <signal.h>
 
 /* Set the mask of blocked signals to MASK,
    wait for a signal to arrive, and then restore the mask.  */
 int
-DEFUN(__sigpause, (mask), int mask)
+__sigpause (mask)
+     int mask;
 {
   sigset_t set;
   int sig;
@@ -33,10 +33,11 @@ DEFUN(__sigpause, (mask), int mask)
 
   if (sizeof (mask) == sizeof (set))
     *(int *) &set = mask;
+  else if (sizeof (unsigned long int) == sizeof (set))
+    *(unsigned long int *) &set = (unsigned int) mask;
   else
     for (sig = 1; sig < NSIG; ++sig)
-      if ((mask & sigmask(sig)) &&
-	  __sigaddset(&set, sig) < 0)
+      if ((mask & sigmask (sig)) && __sigaddset (&set, sig) < 0)
 	return -1;
 
   return sigsuspend (&set);
diff --git a/sysdeps/posix/sigsetmask.c b/sysdeps/posix/sigsetmask.c
index 87756278ad..034719870d 100644
--- a/sysdeps/posix/sigsetmask.c
+++ b/sysdeps/posix/sigsetmask.c
@@ -1,20 +1,20 @@
 /* Copyright (C) 1991, 1994, 1995, 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+   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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 #include <errno.h>
 #include <signal.h>
@@ -31,20 +31,22 @@ __sigsetmask (int mask)
 
   if (sizeof (mask) == sizeof (set))
     *(int *) &set = mask;
+  else if (sizeof (unsigned long int) == sizeof (set))
+    *(unsigned long int *) &set = (unsigned int) mask;
   else
     for (sig = 1; sig < NSIG; ++sig)
-      if ((mask & sigmask(sig)) &&
-	  __sigaddset (&set, sig) < 0)
+      if ((mask & sigmask (sig)) && __sigaddset (&set, sig) < 0)
 	return -1;
 
   if (__sigprocmask (SIG_SETMASK, &set, &oset) < 0)
     return -1;
 
-  mask = 0;
   if (sizeof (mask) == sizeof (oset))
     mask = *(int *) &oset;
+  else if (sizeof (unsigned long int) == sizeof (oset))
+    mask = *(unsigned long int *) &oset;
   else
-    for (sig = 1; sig < NSIG; ++sig)
+    for (sig = 1, mask = 0; sig < NSIG; ++sig)
       if (__sigismember (&oset, sig))
 	mask |= sigmask (sig);
 
diff --git a/sysdeps/posix/sigvec.c b/sysdeps/posix/sigvec.c
index 7e9aeb368e..59d30f2d29 100644
--- a/sysdeps/posix/sigvec.c
+++ b/sysdeps/posix/sigvec.c
@@ -1,20 +1,20 @@
 /* Copyright (C) 1991, 92, 94, 95, 96 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+   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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 #include <signal.h>
 #include <errno.h>
@@ -54,19 +54,19 @@ convert_mask (set, mask)
   register int sig;
 
   if (sizeof (*set) == sizeof (mask))
+    *(int *) set = mask;
+  else if (sizeof (*set) == sizeof (unsigned long int))
+    *(unsigned long int *) set = (unsigned int) mask;
+  else
     {
-      *(int *) set = mask;
-      return 0;
-    }
-
-  if (__sigemptyset (set) < 0)
-    return -1;
-
-  for (sig = 1; sig < NSIG; ++sig)
-    if (mask & sigmask (sig))
-      if (__sigaddset (set, sig) < 0)
+      if (__sigemptyset (set) < 0)
 	return -1;
 
+      for (sig = 1; sig < NSIG; ++sig)
+	if ((mask & sigmask (sig)) && __sigaddset (set, sig) < 0)
+	  return -1;
+    }
+
   return 0;
 }
 
@@ -135,6 +135,8 @@ __sigvec (sig, vec, ovec)
 
       if (sizeof (int) == sizeof (sigset_t))
 	mask = *(int *) &old.sa_mask;
+      else if (sizeof (unsigned long int) == sizeof (sigset_t))
+	mask = *(unsigned long int *) &old.sa_mask;
       else
 	for (i = 1; i < NSIG; ++i)
 	  if (__sigismember(&old.sa_mask, i))
diff --git a/sysdeps/posix/sigwait.c b/sysdeps/posix/sigwait.c
index 0cd5f80fda..2e70eef568 100644
--- a/sysdeps/posix/sigwait.c
+++ b/sysdeps/posix/sigwait.c
@@ -42,38 +42,38 @@ __sigwait (const sigset_t *set, int *sig)
   int this;
 
   /* Prepare set.  */
-  sigfillset (&tmp_mask);
+  __sigfillset (&tmp_mask);
 
   /* Unblock all signals in the SET and register our nice handler.  */
   action.sa_handler = ignore_signal;
   action.sa_flags = 0;
-  sigfillset (&action.sa_mask);		/* Block all signals for handler.  */
+  __sigfillset (&action.sa_mask);	/* Block all signals for handler.  */
 
   /* Make sure we recognize error conditions by setting WAS_SIG to a
      value which does not describe a legal signal number.  */
   was_sig = -1;
 
   for (this = 0; this < NSIG; ++this)
-    if (sigismember (set, this))
+    if (__sigismember (set, this))
       {
 	/* Unblock this signal.  */
-	sigdelset (&tmp_mask, this);
+	__sigdelset (&tmp_mask, this);
 
 	/* Register temporary action handler.  */
-	if (sigaction (this, &action, &saved[this]) != 0)
+	if (__sigaction (this, &action, &saved[this]) != 0)
 	  goto restore_handler;
       }
 
   /* Now we can wait for signals.  */
-  sigsuspend (&tmp_mask);
+  __sigsuspend (&tmp_mask);
 
  restore_handler:
   save_errno = errno;
 
   while (--this >= 0)
-    if (sigismember (set, this))
+    if (__sigismember (set, this))
       /* We ignore errors here since we must restore all handlers.  */
-      sigaction (this, &saved[this], NULL);
+      __sigaction (this, &saved[this], NULL);
 
   __set_errno (save_errno);
 
diff --git a/sysdeps/posix/writev.c b/sysdeps/posix/writev.c
index 06306ad209..2f0572f837 100644
--- a/sysdeps/posix/writev.c
+++ b/sysdeps/posix/writev.c
@@ -30,12 +30,12 @@ ssize_t
 writev (fd, vector, count)
      int fd;
      const struct iovec *vector;
-     size_t count;
+     int count;
 {
   char *buffer;
   register char *bp;
   size_t bytes, to_copy;
-  register size_t i;
+  int i;
 
   /* Find the total number of bytes to be written.  */
   bytes = 0;
diff --git a/sysdeps/unix/execve.S b/sysdeps/unix/execve.S
index 5d48bc63d8..0e578e23cf 100644
--- a/sysdeps/unix/execve.S
+++ b/sysdeps/unix/execve.S
@@ -1,20 +1,20 @@
-/* Copyright (C) 1991, 1992, 1993, 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+/* Copyright (C) 1991, 92, 93, 95, 96 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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 #include <sysdep.h>
 
@@ -28,6 +28,6 @@ Cambridge, MA 02139, USA.  */
 
 SYSCALL__ (execve, 3)
 	ret
-PSEUDO_END(execve)
+PSEUDO_END(__execve)
 
 weak_alias (__execve, execve)
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index 0e87d09142..fcfb76c08f 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -5,7 +5,7 @@ endif
 ifeq ($(subdir), misc)
 sysdep_routines += sysctl clone
 
-sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h \
+sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h sys/mtio.h \
 		  sys/module.h sys/io.h sys/klog.h sys/kdaemon.h \
 		  sys/user.h syscall-list.h sys/sysmacros.h sys/procfs.h \
 		  sys/debugreg.h sys/kd.h sys/soundcard.h sys/vt.h
diff --git a/sysdeps/unix/sysv/linux/alpha/brk.S b/sysdeps/unix/sysv/linux/alpha/brk.S
index d31d9e9b4d..3d9f6dca5f 100644
--- a/sysdeps/unix/sysv/linux/alpha/brk.S
+++ b/sysdeps/unix/sysv/linux/alpha/brk.S
@@ -1,24 +1,25 @@
 /* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
-   Contributed by Brendan Kehoe (brendan@zen.org).
+   This file is part of the GNU C Library.
+   Contributed by Brendan Kehoe <brendan@zen.org>, 1993.
 
-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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 /* __brk is a special syscall under Linux since it never returns an
-error.  Instead, the error condition is indicated by returning the old
-break value (instead of the new, requested one).  */
+   error.  Instead, the error condition is indicated by returning the old
+   break value (instead of the new, requested one).  */
 
 #include <sysdep.h>
 #define _ERRNO_H
@@ -39,8 +40,10 @@ __curbrk: .skip 8
 LEAF(__brk, 0)
 	ldgp	gp, 0(t12)
 #ifdef PROF
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 #endif
 	.prologue 1
 
diff --git a/sysdeps/unix/sysv/linux/alpha/clone.S b/sysdeps/unix/sysv/linux/alpha/clone.S
index 9dbf3034c9..03ecddc727 100644
--- a/sysdeps/unix/sysv/linux/alpha/clone.S
+++ b/sysdeps/unix/sysv/linux/alpha/clone.S
@@ -1,20 +1,21 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
-   Contributed by Richard Henderson (rth@tamu.edu)
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson <rth@tamu.edu>, 1996.
 
-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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 /* clone() is even more special than fork() as it mucks with stacks
    and invokes a function in the right context after its all over.  */
@@ -33,8 +34,10 @@ ENTRY(__clone)
 	stq	a4,0(sp)
 	stq	a5,8(sp)
 #ifdef PROF
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 #endif
 	.prologue 1
 
diff --git a/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S b/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S
index 1176a2730f..dbc25bcbf3 100644
--- a/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S
+++ b/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S
@@ -1,20 +1,21 @@
-/* Copyright (C) 1993, 1995 Free Software Foundation, Inc.
-   Contributed by David Mosberger (davidm@azstarnet.com).
+/* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David Mosberger <davidm@azstarnet.com>, 1995.
 
-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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 #include <sysdep.h>
 
@@ -26,8 +27,10 @@ LEAF(__ieee_get_fp_control, 16)
 #ifdef PROF
 	ldgp	gp, 0(pv)
 	lda	sp, -16(sp)
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 	.prologue 1
 #else
 	lda	sp, -16(sp)
diff --git a/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S b/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S
index aa761ecaca..8486cfaa3a 100644
--- a/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S
+++ b/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S
@@ -1,20 +1,21 @@
-/* Copyright (C) 1993, 1995 Free Software Foundation, Inc.
-   Contributed by David Mosberger (davidm@azstarnet.com).
+/* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David Mosberger <davidm@azstarnet.com>, 1995.
 
-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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 #include <sysdep.h>
 
@@ -24,8 +25,10 @@ LEAF(__ieee_set_fp_control, 16)
 #ifdef PROF
 	ldgp	gp, 0(sp)
 	lda	sp, -16(sp)
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 	.prologue 1
 #else
 	lda	sp, -16(sp)
diff --git a/sysdeps/unix/sysv/linux/alpha/llseek.S b/sysdeps/unix/sysv/linux/alpha/llseek.S
index 45fb349236..a2e644c161 100644
--- a/sysdeps/unix/sysv/linux/alpha/llseek.S
+++ b/sysdeps/unix/sysv/linux/alpha/llseek.S
@@ -1,20 +1,21 @@
-/* Copyright (C) 1993, 1995 Free Software Foundation, Inc.
-   Contributed by David Mosberger (davidm@cs.arizona.edu).
+/* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David Mosberger <davidm@cs.arizona.edu>, 1995.
 
-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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 /* For compatibility only: a "long" is 64 bits on the Alpha, so
    llseek() isn't really needed.  But there are some programs out
@@ -26,8 +27,10 @@ Cambridge, MA 02139, USA.  */
 ENTRY(llseek)
 #ifdef PROF
 	ldgp	gp, 0(pv)
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 	.prologue 1
 #else
 	.prologue 0
diff --git a/sysdeps/unix/sysv/linux/alpha/sigsuspend.S b/sysdeps/unix/sysv/linux/alpha/sigsuspend.S
index 83d331fef0..f476ed595f 100644
--- a/sysdeps/unix/sysv/linux/alpha/sigsuspend.S
+++ b/sysdeps/unix/sysv/linux/alpha/sigsuspend.S
@@ -1,20 +1,21 @@
-/* Copyright (C) 1993, 1995 Free Software Foundation, Inc.
-   Contributed by David Mosberger (davidm@cs.arizona.edu).
+/* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David Mosberger <davidm@cs.arizona.edu>, 1995.
 
-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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 /* sigsuspend is a special syscall since it needs to dereference the
    sigset.  */
@@ -23,11 +24,13 @@ Cambridge, MA 02139, USA.  */
 
 	.text
 
-LEAF(sigsuspend, 0)
+LEAF(__sigsuspend, 0)
 #ifdef PROF
 	ldgp	gp, 0(pv)
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 	.prologue 1
 #else
 	.prologue 0
@@ -46,4 +49,6 @@ error:
 #endif
 	jmp	zero, __syscall_error
 
-	END(sigsuspend)
+	END(__sigsuspend)
+
+weak_alias(__sigsuspend, sigsuspend)
diff --git a/sysdeps/unix/sysv/linux/alpha/syscall.S b/sysdeps/unix/sysv/linux/alpha/syscall.S
index 81043c2cdb..75e1260aea 100644
--- a/sysdeps/unix/sysv/linux/alpha/syscall.S
+++ b/sysdeps/unix/sysv/linux/alpha/syscall.S
@@ -1,20 +1,21 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
-   Contributed by David Mosberger (davidm@azstarnet.com).
+   This file is part of the GNU C Library.
+   Contributed by David Mosberger <davidm@azstarnet.com>, 1996.
 
-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 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.
+   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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
+   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.  */
 
 #include <sysdep.h>
 
@@ -44,8 +45,10 @@ Cambridge, MA 02139, USA.  */
 LEAF(__syscall, 0)
 #ifdef PROF
 	ldgp	gp, 0(pv)
+	.set noat
 	lda	AT, _mcount
 	jsr	AT, (AT), _mcount
+	.set at
 	.prologue 1
 #else
 	.prologue 0
@@ -69,4 +72,6 @@ error:
 #endif
 	jmp	zero, __syscall_error
 
+END(__syscall)
+
 weak_alias(__syscall, syscall)
diff --git a/sysdeps/unix/sysv/linux/configure b/sysdeps/unix/sysv/linux/configure
index 5e83d4411d..2592c6c8c8 100644
--- a/sysdeps/unix/sysv/linux/configure
+++ b/sysdeps/unix/sysv/linux/configure
@@ -43,3 +43,12 @@ Linux 2.0.10 or later.  This check uses <linux/version.h>, so
 make sure that file was built correctly when installing the kernel header
 files." 1>&2; exit 1; }
 fi
+
+# The Linux filesystem standard prescribes where to place "essential"
+# files.  I.e., when the installation prefix is "/usr" we have to place
+# shared library objects and the configuation files on the root partition
+# in /lib and /etc.
+if test "$prefix" = "/usr"; then
+  libc_cv_slibdir="/lib"
+  libc_cv_sysconfdir="/etc"
+fi
diff --git a/sysdeps/unix/sysv/linux/errnos.h b/sysdeps/unix/sysv/linux/errnos.h
index 53a2ec053d..982477c8f3 100644
--- a/sysdeps/unix/sysv/linux/errnos.h
+++ b/sysdeps/unix/sysv/linux/errnos.h
@@ -37,6 +37,7 @@ __set_errno (int __err)
 {
   return *__errno_location () = errno = __err;
 }
+#    define __set_errno __set_errno
 #   else /* !_LIBC_REENTRANT */
 #    define __set_errno(val) errno = (val)
 #   endif /* _LIBC_REENTRANT */
diff --git a/sysdeps/unix/sysv/linux/getsysstats.c b/sysdeps/unix/sysv/linux/getsysstats.c
index d37ca8c80f..2b855c7a84 100644
--- a/sysdeps/unix/sysv/linux/getsysstats.c
+++ b/sysdeps/unix/sysv/linux/getsysstats.c
@@ -1,23 +1,24 @@
 /* getsysstats - Determine various system internal values, Linux version.
-Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
-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.  */
-
+   Copyright (C) 1996 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+   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.  */
+
+#include <alloca.h>
 #include <errno.h>
 #include <mntent.h>
 #include <paths.h>
diff --git a/sysdeps/unix/sysv/linux/paths.h b/sysdeps/unix/sysv/linux/paths.h
index 2905e9effd..6751c0d4a9 100644
--- a/sysdeps/unix/sysv/linux/paths.h
+++ b/sysdeps/unix/sysv/linux/paths.h
@@ -49,6 +49,7 @@
 #define	_PATH_DEVNULL	"/dev/null"
 #define	_PATH_DRUM	"/dev/drum"
 #define	_PATH_KMEM	"/dev/kmem"
+#define _PATH_LASTLOG	"/var/log/lastlog"
 #define	_PATH_MAILDIR	"/var/spool/mail"
 #define	_PATH_MAN	"/usr/man"
 #define	_PATH_MEM	"/dev/mem"
@@ -60,7 +61,9 @@
 #define	_PATH_SHELLS	"/etc/shells"
 #define	_PATH_TTY	"/dev/tty"
 #define	_PATH_UNIX	"/vmlinux"
+#define _PATH_UTMP	"/var/run/utmp"
 #define	_PATH_VI	"/usr/bin/vi"
+#define _PATH_WTMP	"/var/log/wtmp"
 
 /* Provide trailing slash, since mostly used for building pathnames. */
 #define	_PATH_DEV	"/dev/"
diff --git a/sysdeps/unix/sysv/linux/sigsuspend.c b/sysdeps/unix/sysv/linux/sigsuspend.c
index 1aeda8224a..8b3d2519ce 100644
--- a/sysdeps/unix/sysv/linux/sigsuspend.c
+++ b/sysdeps/unix/sysv/linux/sigsuspend.c
@@ -1,20 +1,20 @@
 /* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+   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 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.
+   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.  */
+   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.  */
 
 #include <signal.h>
 #include <stddef.h>
@@ -25,8 +25,9 @@ extern int __syscall_sigsuspend (int, unsigned long, unsigned long);
 /* Change the set of blocked signals to SET,
    wait until a signal arrives, and restore the set of blocked signals.  */
 int
-sigsuspend (set)
+__sigsuspend (set)
      const sigset_t *set;
 {
   return __syscall_sigsuspend (0, 0, *set);
 }
+weak_alias (__sigsuspend, sigsuspend)
diff --git a/sysdeps/unix/sysv/linux/sparc/clone.S b/sysdeps/unix/sysv/linux/sparc/clone.S
new file mode 100644
index 0000000000..875dcba64a
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sparc/clone.S
@@ -0,0 +1,88 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+   Contributed by Miguel de Icaza (miguel@nuclecu.unam.mx)
+
+   FIXME:	Currently only 6 parameters can be passsed
+	        to the clone function.
+		
+   based on code written for the Intel by Richard 
+   Henderson (rth@tamu.edu)
+	
+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., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+/* clone() is even more special than fork() as it mucks with stacks
+   and invokes a function in the right context after its all over.  */
+	
+#include <asm/errno.h>
+#include <asm/unistd.h>
+
+/* int clone(int (*fn)(), void *child_stack, int flags, int nargs, ...) */
+
+	.text
+	.align	4
+	.globl	__libc_clone
+	.type	__libc_clone,@function
+	.weak	clone
+	__clone = __libc_clone
+	clone   = __libc_clone
+__libc_clone:	
+	save	%sp,-96,%sp
+	/* sanity check arguments */
+	tst	%i0
+	be	__clone_syscall_error
+	tst	%i1
+	be	__clone_syscall_error
+	cmp	%i3,0
+	bl	__clone_syscall_error
+        nop
+
+	/* Flush the register windows */
+	ta	3
+
+	/* Parameters for system call */	
+	mov	%i1,%o1
+	mov	%i2,%o0
+
+	/* parameters that are on the stack for routine */
+#define P(x) 0x5c+(x*4)
+	ld	[%fp+P(0)],%o2
+	ld	[%fp+P(1)],%o3
+	ld	[%fp+P(2)],%o4
+	ld	[%fp+P(3)],%o5
+	/* Do the system call */
+	set	__NR_clone,%g1
+	ta	0x10
+	bcs	__clone_syscall_error
+	tst	%o1
+	bne	__thread_start
+	nop
+	mov	%o0,%i0
+	ret
+	restore
+	
+__clone_syscall_error:
+	call	__errno_location
+	set	EINVAL,%i0
+	st	%i0,[%o0]
+	mov	-1,%i0
+	ret
+	restore
+
+__thread_start:
+	mov	%i5,%o1
+	call	%i0
+	mov	%i4,%o0
+	call	_exit,0
+	nop