about summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1997-05-31 00:47:04 +0000
committerUlrich Drepper <drepper@redhat.com>1997-05-31 00:47:04 +0000
commitf671aeab4e17d6dc1c3ca96ac5cb2c3e04570082 (patch)
tree4e9817a3ff486d961a430f8fd3ee39c5fdff32b2
parentd951286f645cc1d6f719c0c715620fc395c049d4 (diff)
downloadglibc-f671aeab4e17d6dc1c3ca96ac5cb2c3e04570082.tar.gz
glibc-f671aeab4e17d6dc1c3ca96ac5cb2c3e04570082.tar.xz
glibc-f671aeab4e17d6dc1c3ca96ac5cb2c3e04570082.zip
1997-05-31 02:33  Ulrich Drepper  <drepper@cygnus.com>

	* io/ftwtest-sh: More tests.

	* misc/tsearch.c: Rewrite tdestroy_recursive.

	* libio/libio.h: Define bits for libg++-2.8.

1997-05-30 22:21  Thorsten Kukuk  <kukuk@vt.uni-paderborn.de>

	* nis/nss_nis/nis-hosts.c: Same changes as in
	nss/nss_files/files-hosts.c (Always use inet_pton).
	* nis/nss_nisplus/nisplus-hosts.c: Likewise.

1997-05-30 09:50  Richard Henderson  <rth@tamu.edu>

	* manual/maint.texi: ECOFF hasn't been tested in ages and I don't
	plan on doing so ever again.  Don't say alpha-linuxecoff is known
	to work.

	* elf/dl-lookup.c: Include <alloca.h>.
	* misc/tsearch.c: Include <string.h>.
	* posix/execle.c: Include <alloca.h>.
	* posix/execlp.c: Likewise.
	* stdio-common/printf_fphex.c: Include <string.h>.
	* sunrpc/xdr.c: Include <string.h>.
	* sysdeps/generic/memccpy.c: Include only <string.h>.

	* sunrpc/clnt_udp.c (clntudp_call): Make fromlen a size_t to fix
	parameters to network functions.
	* sunrpc/pmap_rmt.c (clnt_broadcast): Likewise.
	* sunrpc/svc_tcp.c (svctcp_create): Likewise with `len'.
	(rendezvous_request): Likewise.
	* sunrpc/svc_udp.c (svcudp_bufcreate): Likewise.
	(svcudp_recv): Similar, but go through a local variable.  The old code
	used &xprt->xp_addrlen.  Someone should determine if the type of the
	structure member should be changed instead.
	* sunrpc/xdr_rec.c (xdrrec_create): Expunge a ptr->int cast warning
	and transform a nonsense for-loop to a closed form calculation.
	(fill_input_buf): Another ptr->int warning.

	* sysdeps/alpha/Makefile: Temporarily turn on -mieee globally.  This
	will last until I figure out how to build a parallel libm_ieee.

	* sysdeps/alpha/fpu/fclrexcpt.c,
	* sysdeps/alpha/fpu/fegetenv.c,
	* sysdeps/alpha/fpu/fegetround.c,
	* sysdeps/alpha/fpu/feholdexcpt.c,
	* sysdeps/alpha/fpu/fenvbits.h,
	* sysdeps/alpha/fpu/fesetenv.c,
	* sysdeps/alpha/fpu/fesetround.c,
	* sysdeps/alpha/fpu/feupdateenv.c,
	* sysdeps/alpha/fpu/fgetexcptflg.c,
	* sysdeps/alpha/fpu/fraiseexcpt.c,
	* sysdeps/alpha/fpu/fsetexcptflg.c,
	* sysdeps/alpha/fpu/ftestexcept.c: New files.  There is, btw, a small
	kernel patch that must be applied as of 2.0.31-pre1 and 2.1.41 for
	this to work properly.

	* sysdeps/alpha/fpu/fpu_control.h: Update copyright.  Change default
	FP mode to round to nearest, no exceptions as for Intel.
	* sysdeps/unix/sysv/linux/alpha/setfpucw.c: Add copyright.
	(rdfpcr): Use excb rather than trapb.  Be more efficient about
	getting at the fpcr.
	(wrfpcr): Likewise.
	(__setfpucw): Reformat.

	* sysdeps/ieee754/huge_val.h: Change GCC's HUGE_VAL definition to use
	a single DI-mode integer instead of bytes.  This produces better code
	on Alpha.  Similar for HUGE_VALF.
	* sysdeps/ieee754/nan.h: Similar for NAN.  Add NANF and NANL.

	* sysdeps/libm-ieee754/s_log2.c: Missing */ and weak_alias.

	* sysdeps/unix/alpha/sysdep.S: Tiny cleanups.
	* sysdeps/unix/sysv/linux/alpha/syscall.S: Likewise.
	* sysdeps/unix/sysv/linux/alpha/brk.S: Don't use jmp macro to make
	sure the stack frame is released the very instruction before the
	real jump out.
	* 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/gnu/types.h: Undef some bits we may
	have gotten from <linux/posix_types.h>.

	* sysdeps/unix/sysv/linux/alpha/ioperm.c: Add definition for Miata.

1997-05-30 13:05  Ulrich Drepper  <drepper@cygnus.com>

	* misc/tst-tsearch.c (mangle_tree): Update casts to prevent
	warnings.

1997-05-29 14:02  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/sys/ttydefaults.h (CEOL, CSTATUS): Use
	correct value for _POSIX_VDISABLE.

1997-05-29 13:59  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makefile (manual/dir-add.texi): Force execution.

1997-05-29 13:57  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysexits.h: New file.

1997-05-29 13:55  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* stdlib/strfmon.c: Don't run past EOS after `='.

1997-02-27 10:34  Richard Henderson  <rth@tamu.edu>
-rw-r--r--ChangeLog111
-rw-r--r--Makefile3
-rw-r--r--PROJECTS15
-rw-r--r--elf/dl-lookup.c1
-rw-r--r--io/ftwtest-sh55
-rw-r--r--libio/libio.h2
-rw-r--r--manual/maint.texi2
-rw-r--r--misc/tsearch.c16
-rw-r--r--misc/tst-tsearch.c8
-rw-r--r--nis/nss_nis/nis-hosts.c12
-rw-r--r--nis/nss_nisplus/nisplus-hosts.c13
-rw-r--r--posix/execle.c1
-rw-r--r--posix/execlp.c1
-rw-r--r--stdio-common/printf_fphex.c1
-rw-r--r--stdlib/strfmon.c7
-rw-r--r--sunrpc/clnt_udp.c2
-rw-r--r--sunrpc/pmap_rmt.c3
-rw-r--r--sunrpc/svc_tcp.c4
-rw-r--r--sunrpc/svc_udp.c11
-rw-r--r--sunrpc/xdr.c1
-rw-r--r--sunrpc/xdr_rec.c17
-rw-r--r--sysdeps/alpha/Makefile4
-rw-r--r--sysdeps/alpha/fpu/fclrexcpt.c36
-rw-r--r--sysdeps/alpha/fpu/fegetenv.c37
-rw-r--r--sysdeps/alpha/fpu/fegetround.c31
-rw-r--r--sysdeps/alpha/fpu/feholdexcpt.c33
-rw-r--r--sysdeps/alpha/fpu/fenvbits.h107
-rw-r--r--sysdeps/alpha/fpu/fesetenv.c45
-rw-r--r--sysdeps/alpha/fpu/fesetround.c41
-rw-r--r--sysdeps/alpha/fpu/feupdateenv.c38
-rw-r--r--sysdeps/alpha/fpu/fgetexcptflg.c33
-rw-r--r--sysdeps/alpha/fpu/fpu_control.h46
-rw-r--r--sysdeps/alpha/fpu/fraiseexcpt.c72
-rw-r--r--sysdeps/alpha/fpu/fsetexcptflg.c36
-rw-r--r--sysdeps/alpha/fpu/ftestexcept.c32
-rw-r--r--sysdeps/generic/memccpy.c1
-rw-r--r--sysdeps/ieee754/huge_val.h38
-rw-r--r--sysdeps/ieee754/nan.h37
-rw-r--r--sysdeps/libm-ieee754/s_log2.c4
-rw-r--r--sysdeps/unix/alpha/sysdep.S4
-rw-r--r--sysdeps/unix/sysv/linux/alpha/brk.S5
-rw-r--r--sysdeps/unix/sysv/linux/alpha/gnu/types.h5
-rw-r--r--sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S8
-rw-r--r--sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S10
-rw-r--r--sysdeps/unix/sysv/linux/alpha/ioperm.c8
-rw-r--r--sysdeps/unix/sysv/linux/alpha/setfpucw.c81
-rw-r--r--sysdeps/unix/sysv/linux/alpha/syscall.S4
-rw-r--r--sysdeps/unix/sysv/linux/sys/ttydefaults.h4
48 files changed, 899 insertions, 187 deletions
diff --git a/ChangeLog b/ChangeLog
index 199ee31f9a..fdbfc61761 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,112 @@
+1997-05-31 02:33  Ulrich Drepper  <drepper@cygnus.com>
+
+	* io/ftwtest-sh: More tests.
+
+	* misc/tsearch.c: Rewrite tdestroy_recursive.
+
+	* libio/libio.h: Define bits for libg++-2.8.
+
+1997-05-30 22:21  Thorsten Kukuk  <kukuk@vt.uni-paderborn.de>
+
+	* nis/nss_nis/nis-hosts.c: Same changes as in
+	nss/nss_files/files-hosts.c (Always use inet_pton).
+	* nis/nss_nisplus/nisplus-hosts.c: Likewise.
+
+1997-05-30 09:50  Richard Henderson  <rth@tamu.edu>
+
+	* manual/maint.texi: ECOFF hasn't been tested in ages and I don't
+	plan on doing so ever again.  Don't say alpha-linuxecoff is known
+	to work.
+
+	* elf/dl-lookup.c: Include <alloca.h>.
+	* misc/tsearch.c: Include <string.h>.
+	* posix/execle.c: Include <alloca.h>.
+	* posix/execlp.c: Likewise.
+	* stdio-common/printf_fphex.c: Include <string.h>.
+	* sunrpc/xdr.c: Include <string.h>.
+	* sysdeps/generic/memccpy.c: Include only <string.h>.
+
+	* sunrpc/clnt_udp.c (clntudp_call): Make fromlen a size_t to fix
+	parameters to network functions.
+	* sunrpc/pmap_rmt.c (clnt_broadcast): Likewise.
+	* sunrpc/svc_tcp.c (svctcp_create): Likewise with `len'.
+	(rendezvous_request): Likewise.
+	* sunrpc/svc_udp.c (svcudp_bufcreate): Likewise.
+	(svcudp_recv): Similar, but go through a local variable.  The old code
+	used &xprt->xp_addrlen.  Someone should determine if the type of the
+	structure member should be changed instead.
+	* sunrpc/xdr_rec.c (xdrrec_create): Expunge a ptr->int cast warning
+	and transform a nonsense for-loop to a closed form calculation.
+	(fill_input_buf): Another ptr->int warning.
+
+	* sysdeps/alpha/Makefile: Temporarily turn on -mieee globally.  This
+	will last until I figure out how to build a parallel libm_ieee.
+
+	* sysdeps/alpha/fpu/fclrexcpt.c,
+	* sysdeps/alpha/fpu/fegetenv.c,
+	* sysdeps/alpha/fpu/fegetround.c,
+	* sysdeps/alpha/fpu/feholdexcpt.c,
+	* sysdeps/alpha/fpu/fenvbits.h,
+	* sysdeps/alpha/fpu/fesetenv.c,
+	* sysdeps/alpha/fpu/fesetround.c,
+	* sysdeps/alpha/fpu/feupdateenv.c,
+	* sysdeps/alpha/fpu/fgetexcptflg.c,
+	* sysdeps/alpha/fpu/fraiseexcpt.c,
+	* sysdeps/alpha/fpu/fsetexcptflg.c,
+	* sysdeps/alpha/fpu/ftestexcept.c: New files.  There is, btw, a small
+	kernel patch that must be applied as of 2.0.31-pre1 and 2.1.41 for
+	this to work properly.
+
+	* sysdeps/alpha/fpu/fpu_control.h: Update copyright.  Change default
+	FP mode to round to nearest, no exceptions as for Intel.
+	* sysdeps/unix/sysv/linux/alpha/setfpucw.c: Add copyright.
+	(rdfpcr): Use excb rather than trapb.  Be more efficient about
+	getting at the fpcr.
+	(wrfpcr): Likewise.
+	(__setfpucw): Reformat.
+
+	* sysdeps/ieee754/huge_val.h: Change GCC's HUGE_VAL definition to use
+	a single DI-mode integer instead of bytes.  This produces better code
+	on Alpha.  Similar for HUGE_VALF.
+	* sysdeps/ieee754/nan.h: Similar for NAN.  Add NANF and NANL.
+
+	* sysdeps/libm-ieee754/s_log2.c: Missing */ and weak_alias.
+
+	* sysdeps/unix/alpha/sysdep.S: Tiny cleanups.
+	* sysdeps/unix/sysv/linux/alpha/syscall.S: Likewise.
+	* sysdeps/unix/sysv/linux/alpha/brk.S: Don't use jmp macro to make
+	sure the stack frame is released the very instruction before the
+	real jump out.
+	* 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/gnu/types.h: Undef some bits we may
+	have gotten from <linux/posix_types.h>.
+
+	* sysdeps/unix/sysv/linux/alpha/ioperm.c: Add definition for Miata.
+
+1997-05-30 13:05  Ulrich Drepper  <drepper@cygnus.com>
+
+	* misc/tst-tsearch.c (mangle_tree): Update casts to prevent
+	warnings.
+
+1997-05-29 14:02  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* sysdeps/unix/sysv/linux/sys/ttydefaults.h (CEOL, CSTATUS): Use
+	correct value for _POSIX_VDISABLE.
+
+1997-05-29 13:59  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* Makefile (manual/dir-add.texi): Force execution.
+
+1997-05-29 13:57  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* sysexits.h: New file.
+
+1997-05-29 13:55  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* stdlib/strfmon.c: Don't run past EOS after `='.
+
 1997-05-29 12:48  Ulrich Drepper  <drepper@cygnus.com>
 
 	* io/ftw.c: Complete rewrite.  Add implementation of `nftw'.
@@ -4075,7 +4184,7 @@
 	header since it is wrong for 64 bit systems.
 	Patch by a sun <asun@zoology.washington.edu>.
 
-1997-02-27 10:34:11  Richard Henderson  <rth@tamu.edu>
+1997-02-27 10:34  Richard Henderson  <rth@tamu.edu>
 
 	* sysdeps/unix/sysv/linux/alpha/brk.S: Support both the Linux/i386
 	and OSF/1 style brk syscalls.  We may want to change Linux/Alpha
diff --git a/Makefile b/Makefile
index bebffa4722..a91999bb42 100644
--- a/Makefile
+++ b/Makefile
@@ -315,8 +315,9 @@ makeinfo --no-validate --no-warn --no-headers $< -o $@
 endef
 INSTALL: manual/maint.texi; $(format-me)
 NOTES: manual/creature.texi; $(format-me)
-manual/dir-add.texi:
+manual/dir-add.texi: FORCE
 	$(MAKE) $(PARALLELMFLAGS) -C $(@D) $(@F)
+FORCE:
 
 rpm/%: subdir_distinfo
 	$(MAKE) $(PARALLELMFLAGS) -C $(@D) subdirs='$(subdirs)' $(@F)
diff --git a/PROJECTS b/PROJECTS
index 0775bd2130..59b3d8a0f5 100644
--- a/PROJECTS
+++ b/PROJECTS
@@ -80,12 +80,6 @@ contact <bug-glibc@prep.ai.mit.edu>
      work.
 
 
-[ 9] Write nftw() function.  Perhaps it might be good to reimplement the
-     ftw() function as well to share most of the code.
-
-**** Almost done!
-
-
 [10] Extend regex and/or rx to work with wide characters and complete
      implementation of character class and collation class handling.
 
@@ -98,21 +92,12 @@ contact <bug-glibc@prep.ai.mit.edu>
      hard and not all services must be supported at once.
 
 
-[12] Rewrite utmp/wtmp functions to use database functions.  This is much
-     better than the normal flat file format.
-
-**** There are plans for a new approach to this problem.  Please contact
-     bug-glibc@prep.ai.mit.edu before starting to work.)
-
-
 [13] Several more or less small functions have to be written:
 
      + tcgetid() and waitid()			from XPG4.2
      + grantpt(), ptsname(), unlockpt()		from XPG4.2
      + getdate()				from XPG4.2
 	*** Probably underway
-     + fmtmsg()					from SVID
-	*** Probably underway
 
      More information are available on request.
 
diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c
index 63a525edaa..294dfb951f 100644
--- a/elf/dl-lookup.c
+++ b/elf/dl-lookup.c
@@ -17,6 +17,7 @@
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
+#include <alloca.h>
 #include <stddef.h>
 #include <link.h>
 #include <assert.h>
diff --git a/io/ftwtest-sh b/io/ftwtest-sh
index 1c7c3984d8..da2eaf7313 100644
--- a/io/ftwtest-sh
+++ b/io/ftwtest-sh
@@ -16,7 +16,7 @@ testprogram=$2
 tmp=${TMPDIR:-/tmp}
 tmpdir=$tmp/ftwtest.d
 
-trap 'rm -fr $tmpdir $testout' 1 2 3 15
+trap 'chmod -R a+x $tmpdir; rm -fr $tmpdir $testout' 1 2 3 15
 
 if test -d $tmpdir; then
   chmod -R a+x $tmpdir
@@ -39,7 +39,8 @@ echo > $tmpdir/bar/xo
 chmod a-x,a+r $tmpdir/bar
 
 testout=${TMPDIR:-/tmp}/ftwtest.out
-LD_LIBRARY_PATH=$objpfx $objpfx/elf/ld.so $testprogram $tmpdir |
+
+LD_LIBRARY_PATH=$objpfx ${objpfx}elf/ld.so $testprogram $tmpdir |
     sort > $testout
 
 cat <<EOF | cmp $testout - || exit 1
@@ -58,27 +59,47 @@ base = "$tmp/ftwtest.d/foo/lvl1/lvl2/lvl3/", file = "file@3", flag = FTW_F
 EOF
 rm $testout
 
-testout=${TMPDIR:-/tmp}/ftwtest.out
-LD_LIBRARY_PATH=$objpfx $objpfx/elf/ld.so $testprogram --depth $tmpdir |
+LD_LIBRARY_PATH=$objpfx ${objpfx}elf/ld.so $testprogram --depth $tmpdir |
     sort > $testout
 
 cat <<EOF | cmp $testout - || exit 1
-base = "/tmp/", file = "ftwtest.d", flag = FTW_DP
-base = "/tmp/ftwtest.d/", file = "bar", flag = FTW_DP
-base = "/tmp/ftwtest.d/", file = "baz", flag = FTW_F
-base = "/tmp/ftwtest.d/", file = "foo", flag = FTW_DP
-base = "/tmp/ftwtest.d/bar/", file = "xo", flag = FTW_NS
-base = "/tmp/ftwtest.d/foo/", file = "lvl1", flag = FTW_DP
-base = "/tmp/ftwtest.d/foo/lvl1/", file = "file@1", flag = FTW_F
-base = "/tmp/ftwtest.d/foo/lvl1/", file = "link@1", flag = FTW_SLN
-base = "/tmp/ftwtest.d/foo/lvl1/", file = "lvl2", flag = FTW_DP
-base = "/tmp/ftwtest.d/foo/lvl1/lvl2/", file = "file@2", flag = FTW_F
-base = "/tmp/ftwtest.d/foo/lvl1/lvl2/", file = "lvl3", flag = FTW_DP
-base = "/tmp/ftwtest.d/foo/lvl1/lvl2/lvl3/", file = "file@3", flag = FTW_F
+base = "$tmp/", file = "ftwtest.d", flag = FTW_DP
+base = "$tmp/ftwtest.d/", file = "bar", flag = FTW_DP
+base = "$tmp/ftwtest.d/", file = "baz", flag = FTW_F
+base = "$tmp/ftwtest.d/", file = "foo", flag = FTW_DP
+base = "$tmp/ftwtest.d/bar/", file = "xo", flag = FTW_NS
+base = "$tmp/ftwtest.d/foo/", file = "lvl1", flag = FTW_DP
+base = "$tmp/ftwtest.d/foo/lvl1/", file = "file@1", flag = FTW_F
+base = "$tmp/ftwtest.d/foo/lvl1/", file = "link@1", flag = FTW_SLN
+base = "$tmp/ftwtest.d/foo/lvl1/", file = "lvl2", flag = FTW_DP
+base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "file@2", flag = FTW_F
+base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "lvl3", flag = FTW_DP
+base = "$tmp/ftwtest.d/foo/lvl1/lvl2/lvl3/", file = "file@3", flag = FTW_F
+EOF
+rm $testout
+
+LD_LIBRARY_PATH=$objpfx ${objpfx}elf/ld.so $testprogram --phys $tmpdir |
+    sort > $testout
+
+cat <<EOF | cmp $testout - || exit 1
+base = "$tmp/", file = "ftwtest.d", flag = FTW_D
+base = "$tmp/ftwtest.d/", file = "bar", flag = FTW_D
+base = "$tmp/ftwtest.d/", file = "baz", flag = FTW_F
+base = "$tmp/ftwtest.d/", file = "foo", flag = FTW_D
+base = "$tmp/ftwtest.d/bar/", file = "xo", flag = FTW_NS
+base = "$tmp/ftwtest.d/foo/", file = "lvl1", flag = FTW_D
+base = "$tmp/ftwtest.d/foo/lvl1/", file = "file@1", flag = FTW_F
+base = "$tmp/ftwtest.d/foo/lvl1/", file = "link@1", flag = FTW_SL
+base = "$tmp/ftwtest.d/foo/lvl1/", file = "lvl2", flag = FTW_D
+base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "file@2", flag = FTW_F
+base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "link@2", flag = FTW_SL
+base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "lvl3", flag = FTW_D
+base = "$tmp/ftwtest.d/foo/lvl1/lvl2/lvl3/", file = "file@3", flag = FTW_F
+base = "$tmp/ftwtest.d/foo/lvl1/lvl2/lvl3/", file = "link@3", flag = FTW_SL
 EOF
 rm $testout
 
 chmod -R a+x $tmpdir
 rm -fr $tmpdir
 
-exit 0
\ No newline at end of file
+exit 0
diff --git a/libio/libio.h b/libio/libio.h
index d0a76c34b2..20eb5a9e1a 100644
--- a/libio/libio.h
+++ b/libio/libio.h
@@ -127,6 +127,7 @@ the executable file might be covered by the GNU General Public License. */
 #define _IO_CURRENTLY_PUTTING 0x800
 #define _IO_IS_APPENDING 0x1000
 #define _IO_IS_FILEBUF 0x2000
+#define _IO_BAD_SEEN 0x4000
 
 /* These are "formatting flags" matching the iostream fmtflags enum values. */
 #define _IO_SKIPWS 01
@@ -145,6 +146,7 @@ the executable file might be covered by the GNU General Public License. */
 #define _IO_UNITBUF 020000
 #define _IO_STDIO 040000
 #define _IO_DONT_CLOSE 0100000
+#define _IO_BOOLALPHA 0200000
 
 
 struct _IO_jump_t;  struct _IO_FILE;
diff --git a/manual/maint.texi b/manual/maint.texi
index 38d9786b9f..9c542a3ce3 100644
--- a/manual/maint.texi
+++ b/manual/maint.texi
@@ -223,7 +223,6 @@ following patterns:
 
 @smallexample
 alpha-@var{anything}-linux
-alpha-@var{anything}-linuxecoff
 i@var{x}86-@var{anything}-gnu
 i@var{x}86-@var{anything}-linux
 m68k-@var{anything}-linux
@@ -234,6 +233,7 @@ versions) used to run on the following configurations:
 
 @smallexample
 alpha-dec-osf1
+alpha-@var{anything}-linuxecoff
 i@var{x}86-@var{anything}-bsd4.3
 i@var{x}86-@var{anything}-isc2.2
 i@var{x}86-@var{anything}-isc3.@var{n}
diff --git a/misc/tsearch.c b/misc/tsearch.c
index c06930d509..e372a9e971 100644
--- a/misc/tsearch.c
+++ b/misc/tsearch.c
@@ -85,6 +85,7 @@
    binary tree.  */
 
 #include <stdlib.h>
+#include <string.h>
 #include <search.h>
 
 typedef struct node_t
@@ -633,16 +634,11 @@ weak_alias (__twalk, twalk)
 static void
 tdestroy_recurse (node root, __free_fn_t freefct)
 {
-  if (root->left == NULL && root->right == NULL)
-    (*freefct) (root->key);
-  else
-    {
-      if (root->left != NULL)
-	tdestroy_recurse (root->left, freefct);
-      if (root->right != NULL)
-	tdestroy_recurse (root->right, freefct);
-      (*freefct) (root->key);
-    }
+  if (root->left != NULL)
+    tdestroy_recurse (root->left, freefct);
+  if (root->right != NULL)
+    tdestroy_recurse (root->right, freefct);
+  (*freefct) ((void *) root->key);
   /* Free the node itself.  */
   free (root);
 }
diff --git a/misc/tst-tsearch.c b/misc/tst-tsearch.c
index 18cf89c91f..7a0c5fac6e 100644
--- a/misc/tst-tsearch.c
+++ b/misc/tst-tsearch.c
@@ -197,14 +197,14 @@ mangle_tree (enum order how, enum action what, void **root, int lag)
 	case build:
 	  if (i < SIZE)
 	    {
-	      if (tfind (x + j, (const void **) root, cmp_fn) != NULL)
+	      if (tfind (x + j, (void *const *) root, cmp_fn) != NULL)
 		{
 		  fputs ("Found element which is not in tree yet.\n", stdout);
 		  error = 1;
 		}
 	      elem = tsearch (x + j, root, cmp_fn);
 	      if (elem == 0
-		  || tfind (x + j, (const void **) root, cmp_fn) == NULL)
+		  || tfind (x + j, (void *const *) root, cmp_fn) == NULL)
 		{
 		  fputs ("Couldn't find element after it was added.\n",
 			 stdout);
@@ -219,7 +219,7 @@ mangle_tree (enum order how, enum action what, void **root, int lag)
 	  /* fall through */
 
 	case delete:
-	  elem = tfind (x + j, (const void **) root, cmp_fn);
+	  elem = tfind (x + j, (void *const *) root, cmp_fn);
 	  if (elem == NULL || tdelete (x + j, root, cmp_fn) == NULL)
 	    {
 	      fputs ("Error deleting element.\n", stdout);
@@ -228,7 +228,7 @@ mangle_tree (enum order how, enum action what, void **root, int lag)
 	  break;
 
 	case find:
-	  if (tfind (x + j, (const void **) root, cmp_fn) == NULL)
+	  if (tfind (x + j, (void *const *) root, cmp_fn) == NULL)
 	    {
 	      fputs ("Couldn't find element after it was added.\n", stdout);
 	      error = 1;
diff --git a/nis/nss_nis/nis-hosts.c b/nis/nss_nis/nis-hosts.c
index 5ca24c7625..91d30c8149 100644
--- a/nis/nss_nis/nis-hosts.c
+++ b/nis/nss_nis/nis-hosts.c
@@ -32,7 +32,6 @@
 
 /* Get implementation for some internal functions. */
 #include <resolv/mapv4v6addr.h>
-#include <resolv/mapv4v6hostent.h>
 
 #define ENTNAME         hostent
 #define DATABASE        "hosts"
@@ -56,8 +55,7 @@ LINE_PARSER
    STRING_FIELD (addr, isspace, 1);
 
    /* Parse address.  */
-   if ((_res.options & RES_USE_INET6)
-       && inet_pton (AF_INET6, addr, entdata->host_addr) > 0)
+   if (inet_pton (AF_INET6, p, entdata->host_addr) > 0)
      {
        result->h_addrtype = AF_INET6;
        result->h_length = IN6ADDRSZ;
@@ -87,14 +85,6 @@ LINE_PARSER
    entdata->h_addr_ptrs[1] = NULL;
    result->h_addr_list = entdata->h_addr_ptrs;
 
-   /* If we need the host entry in IPv6 form change it now.  */
-   if (_res.options & RES_USE_INET6)
-     {
-       char *bufptr = data->linebuffer;
-       size_t buflen = (char *) data + datalen - bufptr;
-       map_v4v6_hostent (result, &bufptr, &buflen);
-     }
-
    STRING_FIELD (result->h_name, isspace, 1);
  }
 )
diff --git a/nis/nss_nisplus/nisplus-hosts.c b/nis/nss_nisplus/nisplus-hosts.c
index 6f1b4be35b..0a005406d1 100644
--- a/nis/nss_nisplus/nisplus-hosts.c
+++ b/nis/nss_nisplus/nisplus-hosts.c
@@ -43,7 +43,6 @@ static nis_name *names = NULL;
 
 /* Get implementation for some internal functions. */
 #include "../../resolv/mapv4v6addr.h"
-#include "../../resolv/mapv4v6hostent.h"
 
 #define ENTNAME         hostent
 #define DATABASE        "hosts"
@@ -67,8 +66,7 @@ LINE_PARSER
    STRING_FIELD (addr, isspace, 1);
 
    /* Parse address.  */
-   if ((_res.options & RES_USE_INET6)
-       && inet_pton (AF_INET6, addr, entdata->host_addr) > 0)
+   if (inet_pton (AF_INET6, p, entdata->host_addr) > 0)
      {
        result->h_addrtype = AF_INET6;
        result->h_length = IN6ADDRSZ;
@@ -98,15 +96,6 @@ LINE_PARSER
    entdata->h_addr_ptrs[1] = NULL;
    result->h_addr_list = entdata->h_addr_ptrs;
 
-   /* If we need the host entry in IPv6 form change it now.  */
-   if (_res.options & RES_USE_INET6)
-     {
-       char *bufptr = data->linebuffer;
-       /* This should be size_t */
-       int buflen = (char *) data + datalen - bufptr;
-       map_v4v6_hostent (result, &bufptr, &buflen);
-     }
-
    STRING_FIELD (result->h_name, isspace, 1);
  }
 )
diff --git a/posix/execle.c b/posix/execle.c
index 3e0fcee87e..7619a36f42 100644
--- a/posix/execle.c
+++ b/posix/execle.c
@@ -16,6 +16,7 @@
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
+#include <alloca.h>
 #include <unistd.h>
 #include <stdarg.h>
 #include <stddef.h>
diff --git a/posix/execlp.c b/posix/execlp.c
index 76b878ec6a..88a54178cc 100644
--- a/posix/execlp.c
+++ b/posix/execlp.c
@@ -16,6 +16,7 @@
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
+#include <alloca.h>
 #include <unistd.h>
 #include <stdarg.h>
 #include <stddef.h>
diff --git a/stdio-common/printf_fphex.c b/stdio-common/printf_fphex.c
index 6cdda9e1d4..f5a3b49e38 100644
--- a/stdio-common/printf_fphex.c
+++ b/stdio-common/printf_fphex.c
@@ -25,6 +25,7 @@
 #include <printf.h>
 #include <stdlib.h>
 #include <stdio.h>
+#include <string.h>
 #include "_itoa.h"
 #include "../locale/localeinfo.h"
 
diff --git a/stdlib/strfmon.c b/stdlib/strfmon.c
index 54771049ad..c956ae3040 100644
--- a/stdlib/strfmon.c
+++ b/stdlib/strfmon.c
@@ -170,6 +170,13 @@ __strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...)
 	    {
 	    case '=':			/* Set fill character.  */
 	      pad = *++fmt;
+	      if (pad == '\0')
+		{
+		  /* Premature EOS.  */
+		  __set_errno (EINVAL);
+		  va_end (ap);
+		  return -1;
+		}
 	      continue;
 	    case '^':			/* Don't group digits.  */
 	      group = 0;
diff --git a/sunrpc/clnt_udp.c b/sunrpc/clnt_udp.c
index efd6a9f9f5..e19e7e820b 100644
--- a/sunrpc/clnt_udp.c
+++ b/sunrpc/clnt_udp.c
@@ -233,7 +233,7 @@ clntudp_call (cl, proc, xargs, argsp, xresults, resultsp, utimeout)
   XDR *xdrs;
   int outlen;
   int inlen;
-  int fromlen;
+  size_t fromlen;
 #ifdef FD_SETSIZE
   fd_set readfds;
   fd_set mask;
diff --git a/sunrpc/pmap_rmt.c b/sunrpc/pmap_rmt.c
index 8ae93b8f6d..6117c365d5 100644
--- a/sunrpc/pmap_rmt.c
+++ b/sunrpc/pmap_rmt.c
@@ -235,7 +235,8 @@ clnt_broadcast (prog, vers, proc, xargs, argsp, xresults, resultsp, eachresult)
   AUTH *unix_auth = authunix_create_default ();
   XDR xdr_stream;
   XDR *xdrs = &xdr_stream;
-  int outlen, inlen, fromlen, nets;
+  int outlen, inlen, nets;
+  size_t fromlen;
   int sock;
   int on = 1;
 #ifdef FD_SETSIZE
diff --git a/sunrpc/svc_tcp.c b/sunrpc/svc_tcp.c
index 758b6ba6e4..ec7de3b80a 100644
--- a/sunrpc/svc_tcp.c
+++ b/sunrpc/svc_tcp.c
@@ -130,7 +130,7 @@ svctcp_create (int sock, u_int sendsize, u_int recvsize)
   SVCXPRT *xprt;
   struct tcp_rendezvous *r;
   struct sockaddr_in addr;
-  int len = sizeof (struct sockaddr_in);
+  size_t len = sizeof (struct sockaddr_in);
 
   if (sock == RPC_ANYSOCK)
     {
@@ -231,7 +231,7 @@ rendezvous_request (SVCXPRT *xprt, struct rpc_msg *errmsg)
   int sock;
   struct tcp_rendezvous *r;
   struct sockaddr_in addr;
-  int len;
+  size_t len;
 
   r = (struct tcp_rendezvous *) xprt->xp_p1;
 again:
diff --git a/sunrpc/svc_udp.c b/sunrpc/svc_udp.c
index 8ae18a9147..39ecbb0b50 100644
--- a/sunrpc/svc_udp.c
+++ b/sunrpc/svc_udp.c
@@ -108,7 +108,7 @@ svcudp_bufcreate (sock, sendsz, recvsz)
   SVCXPRT *xprt;
   struct svcudp_data *su;
   struct sockaddr_in addr;
-  int len = sizeof (struct sockaddr_in);
+  size_t len = sizeof (struct sockaddr_in);
 
   if (sock == RPC_ANYSOCK)
     {
@@ -188,11 +188,14 @@ svcudp_recv (xprt, msg)
   int rlen;
   char *reply;
   u_long replylen;
+  size_t len;
 
 again:
-  xprt->xp_addrlen = sizeof (struct sockaddr_in);
+  /* FIXME -- should xp_addrlen be a size_t?  */
+  len = sizeof(struct sockaddr_in);
   rlen = recvfrom (xprt->xp_sock, rpc_buffer (xprt), (int) su->su_iosz, 0,
-		   (struct sockaddr *) &(xprt->xp_raddr), &(xprt->xp_addrlen));
+		   (struct sockaddr *) &(xprt->xp_raddr), &len);
+  xprt->xp_addrlen = len;
   if (rlen == -1 && errno == EINTR)
     goto again;
   if (rlen < 16)		/* < 4 32-bit ints? */
@@ -207,7 +210,7 @@ again:
       if (cache_get (xprt, msg, &reply, &replylen))
 	{
 	  (void) sendto (xprt->xp_sock, reply, (int) replylen, 0,
-		     (struct sockaddr *) &xprt->xp_raddr, xprt->xp_addrlen);
+		         (struct sockaddr *) &xprt->xp_raddr, len);
 	  return TRUE;
 	}
     }
diff --git a/sunrpc/xdr.c b/sunrpc/xdr.c
index becc59bed3..668d9b683b 100644
--- a/sunrpc/xdr.c
+++ b/sunrpc/xdr.c
@@ -43,6 +43,7 @@ static char sccsid[] = "@(#)xdr.c 1.35 87/08/12";
 
 #include <stdio.h>
 #include <limits.h>
+#include <string.h>
 
 #include <rpc/types.h>
 #include <rpc/xdr.h>
diff --git a/sunrpc/xdr_rec.c b/sunrpc/xdr_rec.c
index e76feeb991..e39131c2c2 100644
--- a/sunrpc/xdr_rec.c
+++ b/sunrpc/xdr_rec.c
@@ -138,8 +138,8 @@ xdrrec_create (XDR *xdrs, u_int sendsize,
 	       int (*readit) (char *, char *, int),
 	       int (*writeit) (char *, char *, int))
 {
-  RECSTREAM *rstrm =
-  (RECSTREAM *) mem_alloc (sizeof (RECSTREAM));
+  RECSTREAM *rstrm = (RECSTREAM *) mem_alloc (sizeof (RECSTREAM));
+  caddr_t tmp;
 
   if (rstrm == NULL)
     {
@@ -161,10 +161,11 @@ xdrrec_create (XDR *xdrs, u_int sendsize,
       (void) fputs (_("xdrrec_create: out of memory\n"), stderr);
       return;
     }
-  for (rstrm->out_base = rstrm->the_buffer;
-       (u_int) rstrm->out_base % BYTES_PER_XDR_UNIT != 0;
-       rstrm->out_base++);
-  rstrm->in_base = rstrm->out_base + sendsize;
+  tmp = rstrm->the_buffer;
+  if ((size_t)tmp % BYTES_PER_XDR_UNIT)
+    tmp += BYTES_PER_XDR_UNIT - (size_t)tmp % BYTES_PER_XDR_UNIT;
+  rstrm->out_base = tmp;
+  rstrm->in_base = tmp + sendsize;
   /*
    * now the rest ...
    */
@@ -516,11 +517,11 @@ static bool_t	/* knows nothing about records!  Only about input buffers */
 fill_input_buf (RECSTREAM *rstrm)
 {
   caddr_t where;
-  u_int i;
+  size_t i;
   int len;
 
   where = rstrm->in_base;
-  i = (u_int) rstrm->in_boundry % BYTES_PER_XDR_UNIT;
+  i = (size_t) rstrm->in_boundry % BYTES_PER_XDR_UNIT;
   where += i;
   len = rstrm->in_size - i;
   if ((len = (*(rstrm->readit)) (rstrm->tcp_handle, where, len)) == -1)
diff --git a/sysdeps/alpha/Makefile b/sysdeps/alpha/Makefile
index 841dc980a8..5fe8e4ee7f 100644
--- a/sysdeps/alpha/Makefile
+++ b/sysdeps/alpha/Makefile
@@ -44,3 +44,7 @@ sysdep-CFLAGS += -mno-fp-regs
 endif
 
 divrem := divl divq reml remq
+
+# For now, build everything with full IEEE math support. 
+# TODO: build separate libm and libm-ieee.
+sysdep-CFLAGS += -mieee
diff --git a/sysdeps/alpha/fpu/fclrexcpt.c b/sysdeps/alpha/fpu/fclrexcpt.c
new file mode 100644
index 0000000000..7aa79af100
--- /dev/null
+++ b/sysdeps/alpha/fpu/fclrexcpt.c
@@ -0,0 +1,36 @@
+/* Clear given exceptions in current floating-point environment.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson <rth@tamu.edu>, 1997.
+
+   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 <fenv.h>
+
+void
+feclearexcept (int excepts)
+{
+  unsigned long swcr;
+
+  /* Get the current state.  */
+  swcr = __ieee_get_fp_control();
+
+  /* Clear the relevant bits.  */
+  swcr &= ~((unsigned long)excepts & FE_ALL_EXCEPT);
+
+  /* Put the new state in effect.  */
+  __ieee_set_fp_control(swcr);
+}
diff --git a/sysdeps/alpha/fpu/fegetenv.c b/sysdeps/alpha/fpu/fegetenv.c
new file mode 100644
index 0000000000..c8b705d230
--- /dev/null
+++ b/sysdeps/alpha/fpu/fegetenv.c
@@ -0,0 +1,37 @@
+/* Store current floating-point environment.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson <rth@tamu.edu>, 1997
+
+   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 <fenv.h>
+
+void
+fegetenv (fenv_t *envp)
+{
+  unsigned long fpcr, swcr;
+
+  /* Get status from software and hardware.  Note that we don't need an
+     excb because the callsys is an implied trap barrier.  */
+  swcr = __ieee_get_fp_control();
+  __asm__ __volatile__("mf_fpcr %0" : "=f"(fpcr));
+
+  /* Merge the two bits of information.  The magic number at the end is
+     the exception enable mask.  */
+
+  *envp = (fpcr & (3UL << 58)) | (swcr & (FE_ALL_EXCEPT | 0x3e));
+}
diff --git a/sysdeps/alpha/fpu/fegetround.c b/sysdeps/alpha/fpu/fegetround.c
new file mode 100644
index 0000000000..623e2ce358
--- /dev/null
+++ b/sysdeps/alpha/fpu/fegetround.c
@@ -0,0 +1,31 @@
+/* Return current rounding direction.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson <rth@tamu.edu>, 1997
+
+   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 <fenv.h>
+
+int
+fegetround (void)
+{
+  unsigned long fpcr;
+
+  __asm__ __volatile__("excb; mf_fpcr %0" : "=f"(fpcr));
+
+  return (fpcr >> 58) & 3;
+}
diff --git a/sysdeps/alpha/fpu/feholdexcpt.c b/sysdeps/alpha/fpu/feholdexcpt.c
new file mode 100644
index 0000000000..493d6a18eb
--- /dev/null
+++ b/sysdeps/alpha/fpu/feholdexcpt.c
@@ -0,0 +1,33 @@
+/* Store current floating-point environment and clear exceptions.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson <rth@tamu.edu>, 1997
+
+   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 <fenv.h>
+
+int
+feholdexcept (fenv_t *envp)
+{
+  /* Save the current state.  */
+  fegetenv(envp);
+
+  /* Clear all exception status bits and exception enable bits.  */
+  __ieee_set_fp_control(0);
+
+  return 1;
+}
diff --git a/sysdeps/alpha/fpu/fenvbits.h b/sysdeps/alpha/fpu/fenvbits.h
new file mode 100644
index 0000000000..02414e4c30
--- /dev/null
+++ b/sysdeps/alpha/fpu/fenvbits.h
@@ -0,0 +1,107 @@
+/* Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson <rth@tamu.edu>, 1997
+
+   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 should never be included directly.  */
+
+#ifndef _FENVBITS_H
+#define _FENVBITS_H	1
+
+/* Define the bits representing the exception.
+
+   Note that these are the bit positions as defined by the OSF/1
+   ieee_{get,set}_control_word interface and not by the hardware fpcr.
+
+   See the Alpha Architecture Handbook section 4.7.7.3 for details,
+   but in summary, trap shadows mean the hardware register can acquire
+   extra exception bits so for proper IEEE support the tracking has to
+   be done in software -- in this case with kernel support.
+
+   As to why the system call interface isn't in the same format as
+   the hardware register, only those crazy folks at DEC can tell you.  */
+
+enum
+  {
+    FE_INEXACT =	1UL << 21,
+#define FE_INEXACT	FE_INEXACT
+
+    FE_UNDERFLOW =	1UL << 20,
+#define FE_UNDERFLOW	FE_UNDERFLOW
+
+    FE_OVERFLOW =	1UL << 19,
+#define FE_OVERFLOW	FE_OVERFLOW
+
+    FE_DIVBYZERO =	1UL << 18,
+#define FE_DIVBYZERO	FE_DIVBYZERO
+
+    FE_INVALID =	1UL << 17,
+#define FE_INVALID	FE_INVALID
+    
+    FE_ALL_EXCEPT =
+	(FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID)
+#define FE_ALL_EXCEPT	FE_ALL_EXCEPT 
+  };
+
+
+/* Alpha chips support all four defined rouding modes. 
+
+   Note that code must be compiled to use dynamic rounding (/d) instructions
+   to see these changes.  For gcc this is -mfp-rounding-mode=d; for DEC cc
+   this is -fprm d.  The default for both is static rounding to nearest. 
+
+   These are shifted down 58 bits from the hardware fpcr because the 
+   functions are declared to take integers.  */
+
+enum
+  {
+    FE_TOWARDSZERO =	0,
+#define FE_TOWARDSZERO	FE_TOWARDSZERO
+
+    FE_DOWNWARD = 	1,
+#define FE_DOWNWARD	FE_DOWNWARD
+
+    FE_TONEAREST =	2,
+#define FE_TONEAREST	FE_TONEAREST
+
+    FE_UPWARD =		3,
+#define FE_UPWARD	FE_UPWARD
+  };
+
+
+/* Type representing exception flags.  */
+typedef unsigned long fexcept_t;
+
+/* Type representing floating-point environment.  */
+typedef unsigned long fenv_t;
+
+/* If the default argument is used we use this value.  Note that due to
+   architecture-specified page mappings, no user-space pointer will ever
+   have its two high bits set.  Co-opt one.  */
+#define FE_DFL_ENV	((fenv_t *) 0x8800000000000000UL)
+
+#ifdef __USE_GNU
+/* Floating-point environment where none of the exceptions are masked.  */
+# define FE_NOMASK_ENV	((fenv_t *) 0x880000000000003eUL)
+#endif
+
+/* The system calls to talk to the kernel's FP code.  */
+extern unsigned long __ieee_get_fp_control(void);
+extern void __ieee_set_fp_control(unsigned long);
+
+
+#endif /* fenvbits.h */
diff --git a/sysdeps/alpha/fpu/fesetenv.c b/sysdeps/alpha/fpu/fesetenv.c
new file mode 100644
index 0000000000..3692967a5b
--- /dev/null
+++ b/sysdeps/alpha/fpu/fesetenv.c
@@ -0,0 +1,45 @@
+/* Install given floating-point environment.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson <rth@tamu.edu>, 1997
+
+   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 <fenv.h>
+
+void
+fesetenv (const fenv_t *envp)
+{
+  unsigned long fpcr;
+  fenv_t env;
+
+  /* Magic encoding of default values: high bit set (never possible for a
+     user-space address) is not indirect.  And we don't even have to get
+     rid of it since we mask things around just below.  */
+  if ((long)envp >= 0)
+    env = *envp;
+  else
+    env = (unsigned long)envp;
+
+  /* Reset the rounding mode with the hardware fpcr.  Note that the following
+     system call is an implied trap barrier for our modification.  */
+  __asm__ __volatile__("excb; mf_fpcr %0" : "=f"(fpcr));
+  fpcr = (fpcr & ~(3UL << 58)) | (env & (3UL << 58));
+  __asm__ __volatile__("mt_fpcr %0" : : "f"(fpcr));
+
+  /* Reset the exception status and mask with the kernel's FP code.  */
+  __ieee_set_fp_control(env & (FE_ALL_EXCEPT | 0x3e));
+}
diff --git a/sysdeps/alpha/fpu/fesetround.c b/sysdeps/alpha/fpu/fesetround.c
new file mode 100644
index 0000000000..f49586cf8b
--- /dev/null
+++ b/sysdeps/alpha/fpu/fesetround.c
@@ -0,0 +1,41 @@
+/* Set current rounding direction.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson <rth@tamu.edu>, 1997
+
+   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 <fenv.h>
+
+int
+fesetround (int round)
+{
+  unsigned long fpcr;
+
+  if (round & ~3)
+    return 0;
+
+  /* Get the current state.  */
+  __asm__ __volatile__("excb; mf_fpcr %0" : "=f"(fpcr));
+
+  /* Set the relevant bits.  */
+  fpcr = (fpcr & ~(3UL << 58)) | ((unsigned long)round << 58);
+
+  /* Put the new state in effect.  */
+  __asm__ __volatile__("mt_fpcr %0; excb" : : "f"(fpcr));
+
+  return 1;
+}
diff --git a/sysdeps/alpha/fpu/feupdateenv.c b/sysdeps/alpha/fpu/feupdateenv.c
new file mode 100644
index 0000000000..816575a134
--- /dev/null
+++ b/sysdeps/alpha/fpu/feupdateenv.c
@@ -0,0 +1,38 @@
+/* Install given floating-point environment and raise exceptions.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson <rth@tamu.edu>, 1997.
+
+   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 <fenv.h>
+
+void
+feupdateenv (const fenv_t *envp)
+{
+  unsigned long tmp;
+
+  /* Get the current exception state.  */
+  tmp = __ieee_get_fp_control();
+
+  /* Install new environment.  */
+  fesetenv(envp);
+
+  /* Raise the saved exception.  Incidently for us the implementation
+     defined format of the values in objects of type fexcept_t is the
+     same as the ones specified using the FE_* constants.  */
+  feraiseexcept((int)tmp & FE_ALL_EXCEPT);
+}
diff --git a/sysdeps/alpha/fpu/fgetexcptflg.c b/sysdeps/alpha/fpu/fgetexcptflg.c
new file mode 100644
index 0000000000..28d9e129b1
--- /dev/null
+++ b/sysdeps/alpha/fpu/fgetexcptflg.c
@@ -0,0 +1,33 @@
+/* Store current representation for exceptions.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson <rth@tamu.edu>, 1997.
+
+   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 <fenv.h>
+
+void
+fegetexceptflag (fexcept_t *flagp, int excepts)
+{
+  unsigned long tmp;
+
+  /* Get the current state.  */
+  tmp = __ieee_get_fp_control();
+
+  /* Return that portion that corresponds to the requested exceptions. */
+  *flagp = tmp & excepts & FE_ALL_EXCEPT;
+}
diff --git a/sysdeps/alpha/fpu/fpu_control.h b/sysdeps/alpha/fpu/fpu_control.h
index 219ea55f24..bcf73e857e 100644
--- a/sysdeps/alpha/fpu/fpu_control.h
+++ b/sysdeps/alpha/fpu/fpu_control.h
@@ -1,23 +1,22 @@
-/* FPU control word bits.  Alpha version.
-Copyright (C) 1996 Free Software Foundation, Inc.
-Contributed by Olaf Flebbe.
-
-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.  */
+/* FPU control word bits.  Alpha-maped-to-Intel version.
+   Copyright (C) 1996 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Olaf Flebbe.
+
+   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 _ALPHA_FPU_CONTROL_H
 #define _ALPHA_FPU_CONTROL_H
@@ -91,11 +90,12 @@ Cambridge, MA 02139, USA.  */
        qualifier.  By setting the dynamic rounding mode to +infinity,
        one can use /d to get round to +infinity with no extra overhead
        (so long as the default isn't changed, of course...)
-     - exceptions on overflow, zero divide and NaN */
-#define _FPU_DEFAULT  0x1f72
+     - no exceptions enabled.  */
+
+#define _FPU_DEFAULT  0x137f
 
 /* IEEE:  same as above, but exceptions */
-#define _FPU_IEEE     0x1f7f
+#define _FPU_IEEE     0x137f
 
 /* Type of the control word.  */
 typedef unsigned int fpu_control_t;
diff --git a/sysdeps/alpha/fpu/fraiseexcpt.c b/sysdeps/alpha/fpu/fraiseexcpt.c
new file mode 100644
index 0000000000..6a53e55e7d
--- /dev/null
+++ b/sysdeps/alpha/fpu/fraiseexcpt.c
@@ -0,0 +1,72 @@
+/* Raise given exceptions.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson <rth@tamu.edu>, 1997.
+
+   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 <fenv.h>
+#include <math.h>
+
+void
+feraiseexcept (int excepts)
+{
+  double tmp;
+
+  /* Raise exceptions represented by EXPECTS.  But we must raise only
+     one signal at a time.  It is important the if the overflow/underflow
+     exception and the inexact exception are given at the same time,
+     the overflow/underflow exception precedes the inexact exception.  */
+
+  /* We do these bits in assembly to be certain GCC doesn't optimize
+     away something important.  */
+
+  /* First: invalid exception.  */
+  if (FE_INVALID & excepts)
+    {
+      /* One example of a invalid operation is 0 * Infinity.  */
+      __asm__ __volatile__("mult/sui $f31,%1,%0; trapb"
+			   : "=f"(tmp) : "f"(HUGE_VAL));
+    }
+
+  /* Next: division by zero.  */
+  if (FE_DIVBYZERO & excepts)
+    {
+      __asm__ __volatile__("cmpteq $f31,$f31,%0; divt/sui %0,$f31,%0; trapb"
+			   : "=f"(tmp));
+    }
+
+  /* Next: overflow.  */
+  if (FE_OVERFLOW & excepts)
+    {
+      __asm__ __volatile__("mult/sui %1,%1,%0; trapb"
+			   : "=f"(tmp) : "f"(DBL_MAX));
+    }
+
+  /* Next: underflow.  */
+  if (FE_UNDERFLOW & excepts)
+    {
+      __asm__ __volatile__("divt/sui %1,%2,%0; trapb"
+			   : "=f"(tmp) : "f"(DBL_MIN), "f"(16.0));
+    }
+
+  /* Last: inexact.  */
+  if (FE_INEXACT & excepts)
+    {
+      __asm__ __volatile__("divt/sui %1,%2,%0; trapb"
+			   : "=f"(tmp) : "f"(1.0), "f"(M_PI));
+    }
+}
diff --git a/sysdeps/alpha/fpu/fsetexcptflg.c b/sysdeps/alpha/fpu/fsetexcptflg.c
new file mode 100644
index 0000000000..7e373bea6f
--- /dev/null
+++ b/sysdeps/alpha/fpu/fsetexcptflg.c
@@ -0,0 +1,36 @@
+/* Set floating-point environment exception handling.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson <rth@tamu.edu>, 1997.
+
+   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 <fenv.h>
+
+void
+fesetexceptflag (const fexcept_t *flagp, int excepts)
+{
+  unsigned long tmp;
+
+  /* Get the current exception state.  */
+  tmp = __ieee_get_fp_control();
+
+  /* Set all the bits that were called for.  */
+  tmp = tmp & ~FE_ALL_EXCEPT | *flagp & excepts & FE_ALL_EXCEPT;
+
+  /* And store it back.  */
+  __ieee_set_fp_control(tmp);
+}
diff --git a/sysdeps/alpha/fpu/ftestexcept.c b/sysdeps/alpha/fpu/ftestexcept.c
new file mode 100644
index 0000000000..9ee9dc9c55
--- /dev/null
+++ b/sysdeps/alpha/fpu/ftestexcept.c
@@ -0,0 +1,32 @@
+/* Test exception in current environment.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson <rth@tamu.edu>, 1997.
+
+   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 <fenv.h>
+
+int
+fetestexcept (int excepts)
+{
+  unsigned long tmp;
+
+  /* Get current exceptions.  */
+  tmp = __ieee_get_fp_control();
+
+  return tmp & excepts & FE_ALL_EXCEPT;
+}
diff --git a/sysdeps/generic/memccpy.c b/sysdeps/generic/memccpy.c
index 7c2d443863..6d85a791c6 100644
--- a/sysdeps/generic/memccpy.c
+++ b/sysdeps/generic/memccpy.c
@@ -16,7 +16,6 @@
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
-#include <stddef.h>	/* For size_t and NULL.	*/
 #include <string.h>
 
 /*
diff --git a/sysdeps/ieee754/huge_val.h b/sysdeps/ieee754/huge_val.h
index 9d1785b75f..a2520859e4 100644
--- a/sysdeps/ieee754/huge_val.h
+++ b/sysdeps/ieee754/huge_val.h
@@ -27,6 +27,17 @@
 
 /* IEEE positive infinity (-HUGE_VAL is negative infinity).  */
 
+#ifdef	__GNUC__
+
+#define HUGE_VAL                                                            \
+  (__extension__                                                            \
+   ((union { unsigned __l __attribute__((__mode__(__DI__))); double __d; }) \
+    { __l: 0x7ff0000000000000ULL }).__d)
+
+#else /* not GCC */
+
+typedef union { unsigned char __c[8]; double __d; } __huge_val_t;
+
 #if __BYTE_ORDER == __BIG_ENDIAN
 #define	__HUGE_VAL_bytes	{ 0x7f, 0xf0, 0, 0, 0, 0, 0, 0 }
 #endif
@@ -34,13 +45,9 @@
 #define	__HUGE_VAL_bytes	{ 0, 0, 0, 0, 0, 0, 0xf0, 0x7f }
 #endif
 
-#define __huge_val_t	union { unsigned char __c[8]; double __d; }
-#ifdef	__GNUC__
-#define	HUGE_VAL	(__extension__ \
-			 ((__huge_val_t) { __c: __HUGE_VAL_bytes }).__d)
-#else	/* Not GCC.  */
 static __huge_val_t __huge_val = { __HUGE_VAL_bytes };
 #define	HUGE_VAL	(__huge_val.__d)
+
 #endif	/* GCC.  */
 
 
@@ -48,6 +55,17 @@ static __huge_val_t __huge_val = { __HUGE_VAL_bytes };
 
 #ifdef __USE_ISOC9X
 
+#ifdef __GNUC__
+
+#define HUGE_VALF                                                           \
+  (__extension__                                                            \
+   ((union { unsigned __l __attribute__((__mode__(__SI__))); float __d; })  \
+    { __l: 0x7f800000UL }).__d)
+
+#else /* not GCC */
+
+typedef union { unsigned char __c[4]; float __f; } __huge_valf_t;
+
 #if __BYTE_ORDER == __BIG_ENDIAN
 #define	__HUGE_VALF_bytes	{ 0x7f, 0x80, 0, 0 }
 #endif
@@ -55,13 +73,9 @@ static __huge_val_t __huge_val = { __HUGE_VAL_bytes };
 #define	__HUGE_VALF_bytes	{ 0, 0, 0x80, 0x7f }
 #endif
 
-#define __huge_valf_t	union { unsigned char __c[4]; float __f; }
-#ifdef	__GNUC__
-#define	HUGE_VALF	(__extension__ \
-			 ((__huge_valf_t) { __c: __HUGE_VALF_bytes }).__f)
-#else	/* Not GCC.  */
 static __huge_valf_t __huge_valf = { __HUGE_VALF_bytes };
 #define	HUGE_VALF	(__huge_valf.__f)
+
 #endif	/* GCC.  */
 
 
@@ -69,6 +83,6 @@ static __huge_valf_t __huge_valf = { __HUGE_VALF_bytes };
    same as `double'.  */
 #define HUGE_VALL HUGE_VAL
 
-#endif	/* __USE_ISOC9X.  */
+#endif /* __USE_ISOC9X.  */
 
-#endif	   /* huge_val.h */
+#endif /* huge_val.h */
diff --git a/sysdeps/ieee754/nan.h b/sysdeps/ieee754/nan.h
index bea98d96d4..d4e6842562 100644
--- a/sysdeps/ieee754/nan.h
+++ b/sysdeps/ieee754/nan.h
@@ -1,5 +1,5 @@
 /* `NAN' constant for IEEE 754 machines.
-   Copyright (C) 1992, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1992, 1996, 1997 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
@@ -23,23 +23,42 @@
 
 /* IEEE Not A Number.  */
 
+#ifdef	__GNUC__
+
+#define NAN                                                                 \
+  (__extension__                                                            \
+   ((union { unsigned __l __attribute__((__mode__(__DI__))); double __d; }) \
+    { __l: 0x7ff8000000000000ULL }).__d)
+
+#define NANF                                                                \
+  (__extension__                                                            \
+   ((union { unsigned __l __attribute__((__mode__(__SI__))); flaot __d; })  \
+    { __l: 0x7fc00000UL }).__d)
+
+#else
+
 #include <endian.h>
 
 #if __BYTE_ORDER == __BIG_ENDIAN
 #define	__nan_bytes		{ 0x7f, 0xf8, 0, 0, 0, 0, 0, 0 }
+#define	__nanf_bytes		{ 0x7f, 0xc0, 0, 0 }
 #endif
 #if __BYTE_ORDER == __LITTLE_ENDIAN
 #define	__nan_bytes		{ 0, 0, 0, 0, 0, 0, 0xf8, 0x7f }
+#define	__nanf_bytes		{ 0, 0, 0xc0, 0x7f }
 #endif
 
-#ifdef	__GNUC__
-#define	NAN \
-  (__extension__ ((union { unsigned char __c[8];			      \
-			   double __d; })				      \
-		  { __nan_bytes }).__d)
-#else	/* Not GCC.  */
-static CONST char __nan[8] = __nan_bytes;
-#define	NAN	(*(CONST double *) __nan)
+static union { unsigned char __c[8]; double __d; } __nan = { __nan_bytes };
+#define	NAN	(__nan.__d)
+
+static union { unsigned char __c[4]; double __d; } __nanf = { __nanf_bytes };
+#define	NANF	(__nanf.__d)
+
 #endif	/* GCC.  */
 
+/* Generally there is no separate `long double' format and it is the
+   same as `double'.  */
+
+#define NANL  NAN
+
 #endif	/* nan.h */
diff --git a/sysdeps/libm-ieee754/s_log2.c b/sysdeps/libm-ieee754/s_log2.c
index 03a7deaa67..7950dfa420 100644
--- a/sysdeps/libm-ieee754/s_log2.c
+++ b/sysdeps/libm-ieee754/s_log2.c
@@ -1,4 +1,4 @@
-/* Adapted for log2 by Ulrich Drepper <drepper@cygnus.com>.
+/* Adapted for log2 by Ulrich Drepper <drepper@cygnus.com>.  */
 /*
  * ====================================================
  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
@@ -127,3 +127,5 @@ static double zero   =  0.0;
 	    return dk-((s*(f-R))-f);
 	}
 }
+
+weak_alias (__log2, log2)
diff --git a/sysdeps/unix/alpha/sysdep.S b/sysdeps/unix/alpha/sysdep.S
index 9df313422c..fc5cc0436b 100644
--- a/sysdeps/unix/alpha/sysdep.S
+++ b/sysdeps/unix/alpha/sysdep.S
@@ -38,7 +38,7 @@ __errno = errno
 	.globl __syscall_error
 	.ent __syscall_error
 __syscall_error:
-	ldgp	gp, 0(t12)
+	ldgp	gp, 0(pv)
 	lda	sp, -16(sp)
 	.frame	sp, 16, ra, 0
 	stq	ra, 0(sp)
@@ -53,7 +53,7 @@ __syscall_error:
 	jsr	ra, __errno_location
 
 	/* Store the error value.  */
-	ldl	t0, 8(sp)
+	ldq	t0, 8(sp)
 	stl	t0, 0(v0)
 
 	/* And kick back a -1.  */
diff --git a/sysdeps/unix/sysv/linux/alpha/brk.S b/sysdeps/unix/sysv/linux/alpha/brk.S
index 74fef64f64..be0539b475 100644
--- a/sysdeps/unix/sysv/linux/alpha/brk.S
+++ b/sysdeps/unix/sysv/linux/alpha/brk.S
@@ -73,8 +73,9 @@ $ok:	stq	a0, __curbrk
 
 	/* What a horrible way to die.  */
 $err0:	ldi	v0, ENOMEM
-$err1:	addq	sp, 8, sp
-	jmp	zero, __syscall_error
+$err1:	lda	pv, __syscall_error
+	addq	sp, 8, sp
+	jmp	zero, (pv), __syscall_error
 
 	END(__brk)
 
diff --git a/sysdeps/unix/sysv/linux/alpha/gnu/types.h b/sysdeps/unix/sysv/linux/alpha/gnu/types.h
index 5c1e407423..b23deb8aa4 100644
--- a/sysdeps/unix/sysv/linux/alpha/gnu/types.h
+++ b/sysdeps/unix/sysv/linux/alpha/gnu/types.h
@@ -68,6 +68,11 @@ typedef long int __clock_t;
 /* One element in the file descriptor mask array.  */
 typedef unsigned int __fd_mask;
 
+/* Due to incaution, we may have gotten these from a kernel header file.  */
+#undef __FD_SETSIZE
+#undef __NFDBITS
+#undef __FDMASK
+
 /* Number of descriptors that can fit in an `fd_set'.  */
 #define __FD_SETSIZE	1024
 
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 dbc25bcbf3..e118ff19f5 100644
--- a/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S
+++ b/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S
@@ -41,18 +41,20 @@ LEAF(__ieee_get_fp_control, 16)
 	ldi	a0, GSI_IEEE_FP_CONTROL
 	ldi	v0, __NR_osf_getsysinfo
 	call_pal PAL_callsys
-	bne	a3, error
+	bne	a3, $error
 
 	ldq	v0, 0(sp)
 	lda	sp, 16(sp)
 	ret
 
-error:	lda	sp, 16(sp)
+$error:
 #ifndef PROF
 	br	gp, 1f
 1:	ldgp	gp, 0(gp)
 #endif
-	jmp	zero, __syscall_error
+	lda	pv, __syscall_error
+	lda	sp, 16(sp)
+	jmp	zero, (pv), __syscall_error
 
 	END(__ieee_get_fp_control)
 
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 d2d2add56c..b38d67efac 100644
--- a/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S
+++ b/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S
@@ -41,17 +41,19 @@ LEAF(__ieee_set_fp_control, 16)
 	ldi	v0, __NR_osf_setsysinfo
 	call_pal PAL_callsys
 
-	lda	sp, 16(sp)
+	bne	a3, $error
 
-	bne	a3, error
+	lda	sp, 16(sp)
 	ret
 
-error:
+$error:
 #ifndef PROF
 	br	gp, 1f
 1:	ldgp	gp, 0(gp)
 #endif
-	jmp	zero, __syscall_error
+	lda	pv, __syscall_error
+	lda	sp, 16(sp)
+	jmp	zero, (pv), __syscall_error
 
 	END(__ieee_set_fp_control)
 
diff --git a/sysdeps/unix/sysv/linux/alpha/ioperm.c b/sysdeps/unix/sysv/linux/alpha/ioperm.c
index 63bf17588a..76a744d167 100644
--- a/sysdeps/unix/sysv/linux/alpha/ioperm.c
+++ b/sysdeps/unix/sysv/linux/alpha/ioperm.c
@@ -55,14 +55,13 @@
 #define JENSEN_IO_BASE		(0xfffffc0300000000UL)
 #define JENSEN_SPARSE_MEM	(0xfffffc0200000000UL)
 
-/*
- * With respect to the I/O architecture, APECS and LCA are identical,
- * so the following defines apply to LCA as well.
- */
+/* With respect to the I/O architecture, APECS and LCA are identical,
+   so the following defines apply to LCA as well.  */
 #define APECS_IO_BASE		(0xfffffc01c0000000UL)
 #define APECS_SPARSE_MEM	(0xfffffc0200000000UL)
 #define APECS_DENSE_MEM		(0xfffffc0300000000UL)
 
+/* The same holds for CIA and PYXIS.  */
 #define CIA_IO_BASE		(0xfffffc8580000000UL)
 #define CIA_SPARSE_MEM		(0xfffffc8000000000UL)
 #define CIA_DENSE_MEM		(0xfffffc8600000000UL)
@@ -104,6 +103,7 @@ static struct platform {
   {"Mustang",	IOSYS_APECS,	5, APECS_DENSE_MEM,	APECS_SPARSE_MEM},
   {"Noname",	IOSYS_APECS,	5, APECS_DENSE_MEM,	APECS_SPARSE_MEM},
   {"Sable",	IOSYS_T2,	5, T2_DENSE_MEM,	T2_SPARSE_MEM},
+  {"Miata",	IOSYS_CIA,	5, CIA_DENSE_MEM,	CIA_SPARSE_MEM},
 };
 
 
diff --git a/sysdeps/unix/sysv/linux/alpha/setfpucw.c b/sysdeps/unix/sysv/linux/alpha/setfpucw.c
index 43e8536b20..9133c81110 100644
--- a/sysdeps/unix/sysv/linux/alpha/setfpucw.c
+++ b/sysdeps/unix/sysv/linux/alpha/setfpucw.c
@@ -1,65 +1,78 @@
-#include <fpu_control.h>
+/* Set FP exception mask and rounding mode.
+   Copyright (C) 1996, 1997 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.  */
 
+#include <fpu_control.h>
 #include <asm/fpu.h>
 
+
 extern void		__ieee_set_fp_control (unsigned long);
 extern unsigned long	__ieee_get_fp_control (void);
 
-
 static inline unsigned long
 rdfpcr (void)
 {
-    unsigned long fpcr;
-
-    asm ("trapb; mf_fpcr $f0; trapb; stt $f0,%0" : "m="(fpcr));
-    return fpcr;
+  unsigned long fpcr;
+  asm ("excb; mf_fpcr %0" : "=f"(fpcr));
+  return fpcr;
 }
 
 
 static inline void
 wrfpcr (unsigned long fpcr)
 {
-    asm volatile ("ldt $f0,%0; trapb; mt_fpcr $f0; trapb" :: "m"(fpcr));
+  asm volatile ("mt_fpcr %0; excb" : : "f"(fpcr));
 }
 
 
 void
 __setfpucw (unsigned short fpu_control)
 {
-    unsigned long fpcr = 0, fpcw = 0;
+  unsigned long fpcr = 0, fpcw = 0;
 
-    if (!fpu_control)
-	fpu_control = _FPU_DEFAULT;
+  if (!fpu_control)
+    fpu_control = _FPU_DEFAULT;
 
-    /* first, set dynamic rounding mode: */
+  /* first, set dynamic rounding mode: */
 
-    fpcr = rdfpcr();
-    fpcr &= ~FPCR_DYN_MASK;
-    switch (fpu_control & 0xc00) {
-      case _FPU_RC_NEAREST:	fpcr |= FPCR_DYN_NORMAL; break;
-      case _FPU_RC_DOWN:	fpcr |= FPCR_DYN_MINUS; break;
-      case _FPU_RC_UP:		fpcr |= FPCR_DYN_PLUS; break;
-      case _FPU_RC_ZERO:	fpcr |= FPCR_DYN_CHOPPED; break;
+  fpcr = rdfpcr();
+  fpcr &= ~FPCR_DYN_MASK;
+  switch (fpu_control & 0xc00)
+    {
+    case _FPU_RC_NEAREST:	fpcr |= FPCR_DYN_NORMAL; break;
+    case _FPU_RC_DOWN:		fpcr |= FPCR_DYN_MINUS; break;
+    case _FPU_RC_UP:		fpcr |= FPCR_DYN_PLUS; break;
+    case _FPU_RC_ZERO:		fpcr |= FPCR_DYN_CHOPPED; break;
     }
-    wrfpcr(fpcr);
+  wrfpcr(fpcr);
 
-    /* now tell kernel about traps that we like to hear about: */
+  /* now tell kernel about traps that we like to hear about: */
 
-    fpcw = __ieee_get_fp_control();
-    fpcw &= ~IEEE_TRAP_ENABLE_MASK;
+  fpcw = __ieee_get_fp_control();
+  fpcw &= ~IEEE_TRAP_ENABLE_MASK;
 
-    if (!(fpu_control & _FPU_MASK_IM))
-	fpcw |= IEEE_TRAP_ENABLE_INV;
-    if (!(fpu_control & _FPU_MASK_DM))
-	fpcw |= IEEE_TRAP_ENABLE_UNF;
-    if (!(fpu_control & _FPU_MASK_ZM))
-	fpcw |= IEEE_TRAP_ENABLE_DZE;
-    if (!(fpu_control & _FPU_MASK_OM))
-	fpcw |= IEEE_TRAP_ENABLE_OVF;
-    if (!(fpu_control & _FPU_MASK_PM))
-	fpcw |= IEEE_TRAP_ENABLE_INE;
+  if (!(fpu_control & _FPU_MASK_IM)) fpcw |= IEEE_TRAP_ENABLE_INV;
+  if (!(fpu_control & _FPU_MASK_DM)) fpcw |= IEEE_TRAP_ENABLE_UNF;
+  if (!(fpu_control & _FPU_MASK_ZM)) fpcw |= IEEE_TRAP_ENABLE_DZE;
+  if (!(fpu_control & _FPU_MASK_OM)) fpcw |= IEEE_TRAP_ENABLE_OVF;
+  if (!(fpu_control & _FPU_MASK_PM)) fpcw |= IEEE_TRAP_ENABLE_INE;
 
-    __ieee_set_fp_control(fpcw);
+  __fpu_control = fpu_control;	/* update global copy */
 
-    __fpu_control = fpu_control;	/* update global copy */
+  __ieee_set_fp_control(fpcw);
 }
diff --git a/sysdeps/unix/sysv/linux/alpha/syscall.S b/sysdeps/unix/sysv/linux/alpha/syscall.S
index 75e1260aea..d25dd6b51f 100644
--- a/sysdeps/unix/sysv/linux/alpha/syscall.S
+++ b/sysdeps/unix/sysv/linux/alpha/syscall.S
@@ -62,10 +62,10 @@ LEAF(__syscall, 0)
 	mov	a5, a4
 
 	call_pal PAL_callsys	/* Invoke system call */
-	bne	a3, error
+	bne	a3, $error
 	ret
 
-error:
+$error:
 #ifndef PROF
 	br	gp, 2f
 2:	ldgp	gp, 0(gp)
diff --git a/sysdeps/unix/sysv/linux/sys/ttydefaults.h b/sysdeps/unix/sysv/linux/sys/ttydefaults.h
index 28512ebebb..b21c6d5686 100644
--- a/sysdeps/unix/sysv/linux/sys/ttydefaults.h
+++ b/sysdeps/unix/sysv/linux/sys/ttydefaults.h
@@ -61,14 +61,14 @@
 #ifdef _POSIX_VDISABLE
 # define CEOL		_POSIX_VDISABLE
 #else
-# define CEOL		((unsigned char)'\377')	/* XXX avoid _POSIX_VDISABLE */
+# define CEOL		'\0'		/* XXX avoid _POSIX_VDISABLE */
 #endif
 #define	CERASE		0177
 #define	CINTR		CTRL('c')
 #ifdef _POSIX_VDISABLE
 # define CSTATUS	_POSIX_VDISABLE
 #else
-# define CSTATUS	((unsigned char)'\377')	/* XXX avoid _POSIX_VDISABLE */
+# define CSTATUS	'\0'		/* XXX avoid _POSIX_VDISABLE */
 #endif
 #define	CKILL		CTRL('u')
 #define	CMIN		1