summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog171
-rw-r--r--Makerules6
-rw-r--r--assert/assert.h40
-rw-r--r--bits/dlfcn.h33
-rwxr-xr-xconfigure2754
-rw-r--r--configure.in2
-rw-r--r--elf/Makefile27
-rw-r--r--elf/dl-load.c12
-rw-r--r--elf/dlfcn.h11
-rw-r--r--elf/elf.h4
-rw-r--r--elf/rtld.c5
-rw-r--r--extra-lib.mk3
-rw-r--r--inet/getnameinfo.c55
-rw-r--r--isomac.c17
-rw-r--r--libio/strops.c4
-rw-r--r--login/Makefile2
-rw-r--r--login/getutent.c6
-rw-r--r--login/getutent_r.c5
-rw-r--r--login/login.c2
-rw-r--r--login/programs/database.c99
-rw-r--r--login/programs/request.c6
-rw-r--r--login/programs/utmpd.c19
-rw-r--r--login/utmp_file.c12
-rw-r--r--login/utmpx.h50
-rw-r--r--misc/ttyslot.c2
-rw-r--r--nis/ypclnt.c5
-rw-r--r--setjmp/setjmp.h14
-rw-r--r--sysdeps/generic/Dist1
-rw-r--r--sysdeps/generic/bits/dlfcn.h33
-rw-r--r--sysdeps/generic/dl-sysdep.c3
-rw-r--r--sysdeps/generic/entry.h1
-rw-r--r--sysdeps/gnu/bits/utmp.h84
-rw-r--r--sysdeps/gnu/bits/utmpx.h79
-rw-r--r--sysdeps/i386/dl-machine.h4
-rw-r--r--sysdeps/mips/bits/dlfcn.h42
-rw-r--r--sysdeps/mips/bsd-_setjmp.S13
-rw-r--r--sysdeps/mips/bsd-setjmp.S13
-rw-r--r--sysdeps/mips/dl-machine.h496
-rw-r--r--sysdeps/mips/elf/start.S55
-rw-r--r--sysdeps/mips/fpu_control.h90
-rw-r--r--sysdeps/mips/mips64/rtld-parms3
-rw-r--r--sysdeps/mips/mipsel/rtld-parms3
-rw-r--r--sysdeps/mips/rtld-ldscript.in106
-rw-r--r--sysdeps/mips/setjmp.S22
-rw-r--r--sysdeps/posix/getaddrinfo.c8
-rw-r--r--sysdeps/unix/getlogin.c4
-rw-r--r--sysdeps/unix/getlogin_r.c10
-rw-r--r--sysdeps/unix/mips/brk.S44
-rw-r--r--sysdeps/unix/mips/sysdep.S25
-rw-r--r--sysdeps/unix/mips/sysdep.h26
-rw-r--r--sysdeps/unix/mips/wait.S6
-rw-r--r--sysdeps/unix/sysv/linux/bits/ipc.h2
-rw-r--r--sysdeps/unix/sysv/linux/bits/msq.h2
-rw-r--r--sysdeps/unix/sysv/linux/bits/sem.h4
-rw-r--r--sysdeps/unix/sysv/linux/bits/shm.h2
-rw-r--r--sysdeps/unix/sysv/linux/mips/Dist3
-rw-r--r--sysdeps/unix/sysv/linux/mips/Makefile10
-rw-r--r--sysdeps/unix/sysv/linux/mips/bits/endian.h12
-rw-r--r--sysdeps/unix/sysv/linux/mips/bits/fcntl.h100
-rw-r--r--sysdeps/unix/sysv/linux/mips/bits/ioctl-types.h71
-rw-r--r--sysdeps/unix/sysv/linux/mips/bits/ipc.h85
-rw-r--r--sysdeps/unix/sysv/linux/mips/bits/shm.h92
-rw-r--r--sysdeps/unix/sysv/linux/mips/bits/sigaction.h62
-rw-r--r--sysdeps/unix/sysv/linux/mips/bits/signum.h30
-rw-r--r--sysdeps/unix/sysv/linux/mips/bits/socket.h178
-rw-r--r--sysdeps/unix/sysv/linux/mips/bits/stat.h97
-rw-r--r--sysdeps/unix/sysv/linux/mips/bits/statfs.h44
-rw-r--r--sysdeps/unix/sysv/linux/mips/bits/termios.h260
-rw-r--r--sysdeps/unix/sysv/linux/mips/bits/time.h54
-rw-r--r--sysdeps/unix/sysv/linux/mips/clone.S125
-rw-r--r--sysdeps/unix/sysv/linux/mips/entry.h1
-rw-r--r--sysdeps/unix/sysv/linux/mips/fpregdef.h1
-rw-r--r--sysdeps/unix/sysv/linux/mips/fxstat.c80
-rw-r--r--sysdeps/unix/sysv/linux/mips/kernel_sigaction.h22
-rw-r--r--sysdeps/unix/sysv/linux/mips/kernel_stat.h28
-rw-r--r--sysdeps/unix/sysv/linux/mips/kernel_termios.h20
-rw-r--r--sysdeps/unix/sysv/linux/mips/lxstat.h80
-rw-r--r--sysdeps/unix/sysv/linux/mips/regdef.h1
-rw-r--r--sysdeps/unix/sysv/linux/mips/sgidef.h28
-rw-r--r--sysdeps/unix/sysv/linux/mips/sys/acct.h66
-rw-r--r--sysdeps/unix/sysv/linux/mips/sys/asm.h28
-rw-r--r--sysdeps/unix/sysv/linux/mips/sys/cachectl.h42
-rw-r--r--sysdeps/unix/sysv/linux/mips/sys/fpregdef.h27
-rw-r--r--sysdeps/unix/sysv/linux/mips/sys/procfs.h109
-rw-r--r--sysdeps/unix/sysv/linux/mips/sys/regdef.h29
-rw-r--r--sysdeps/unix/sysv/linux/mips/sys/syscall.h1187
-rw-r--r--sysdeps/unix/sysv/linux/mips/sys/sysmips.h36
-rw-r--r--sysdeps/unix/sysv/linux/mips/syscalls.list46
-rw-r--r--sysdeps/unix/sysv/linux/mips/ustat.c35
-rw-r--r--sysdeps/unix/sysv/linux/mips/xmknod.c47
-rw-r--r--sysdeps/unix/sysv/linux/mips/xstat.c80
-rw-r--r--sysdeps/unix/sysv/linux/syscalls.list3
-rw-r--r--time/Makefile2
-rw-r--r--time/getdate.c247
-rw-r--r--time/time.h32
95 files changed, 4751 insertions, 3296 deletions
diff --git a/ChangeLog b/ChangeLog
index 67048cc6a5..696a336389 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,171 @@
+1997-07-13 01:18  Ulrich Drepper  <drepper@cygnus.com>
+
+	* setjmp/setjmp.h: Define _setjmp and _longjmp also if __USE_XOPEN.
+
+	* sysdeps/unix/sysv/linux/bits/ipc.h: Fix comment.
+	* sysdeps/unix/sysv/linux/bits/msq.h: Likewise.
+	* sysdeps/unix/sysv/linux/bits/sem.h: Likewise.
+	* sysdeps/unix/sysv/linux/bits/shm.h: Likewise.
+
+	* time/Makefile (routines): Add getdate.
+	* time/time.h: Add prototype for getdate and getdate_r.
+	* time/getdate.c: New file.
+	Provided by Mark Kettenis <kettenis@phys.uva.nl>.
+
+1997-06-30 14:49  H.J. Lu  <hjl@gnu.ai.mit.edu>
+
+	From Ralf Baechle <ralf@informatik.uni-koblenz.de> on
+	Sat Jun 21 18:11:21 1997:
+
+	* sysdeps/unix/sysv/linux/syscalls.list (swapon): Add __swapon alias.
+	(swapoff): New.
+
+	* elf/Makefile: Add linker script support.
+	(headers): Add bits/dlfcn.h.
+
+	* elf/dl-load.c (MAP_BASE_ADDR): New.
+
+	* elf/dlfcn.h: Include <bits/dlfcn.h>.
+
+	* elf/elf.h: Add MIPS support.
+
+	* sysdeps/generic/Dist: Add entry.h.
+	* sysdeps/generic/entry.h: New, define the entry symbol.
+
+	* elf/rtld.c (_start): Include <entry.h>.  Change to ENTRY_POINT.
+	* sysdeps/generic/dl-sysdep.c (_start): Likewise.
+	* mips/elf/start.S (_start): Likewise.
+
+	* sysdeps/mips/bsd-_setjmp.S: Fix PIC.
+	* sysdeps/mips/bsd-setjmp.S: Likewise.
+	* sysdeps/mips/setjmp.S: Likewise.
+	* mips/elf/start.S: Likewise.
+	* sysdeps/unix/mips/brk.S: Likewise.
+	* sysdeps/unix/mips/sysdep.S: Likewise.
+	* sysdeps/unix/mips/sysdep.h: Likewise.
+	* sysdeps/unix/mips/wait.S: Likewise.
+
+	* sysdeps/mips/dl-machine.h: Update for Linux/MIPS.
+	* sysdeps/mips/fpu_control.h: Likewise.
+
+	* sysdeps/generic/bits/dlfcn.h: New file.
+
+	* sysdeps/mips/rtld-ldscript.in: New for Linux/MIPS.
+	* sysdeps/mips/rtld-parms: Likewise.
+	* sysdeps/mips/bits/dlfcn.h: Likewise.
+	* sysdeps/mips/mips64/rtld-parms: Likewise.
+	* sysdeps/mips/mipsel/rtld-parms: Likewise.
+	* sysdeps/unix/sysv/linux/mips/Dist: Likewise.
+	* sysdeps/unix/sysv/linux/mips/Makefile: Likewise.
+	* sysdeps/unix/sysv/linux/mips/clone.S: Likewise.
+	* sysdeps/unix/sysv/linux/mips/entry.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/fpregdef.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/fxstat.c: Likewise.
+	* sysdeps/unix/sysv/linux/mips/kernel_sigaction.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/kernel_stat.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/kernel_termios.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/lxstat.c: Likewise.
+	* sysdeps/unix/sysv/linux/mips/regdef.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/sgidefs.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/syscalls.list: Likewise.
+	* sysdeps/unix/sysv/linux/mips/ustat.c: Likewise.
+	* sysdeps/unix/sysv/linux/mips/xmknod.c: Likewise.
+	* sysdeps/unix/sysv/linux/mips/xstat.c: Likewise.
+	* sysdeps/unix/sysv/linux/mips/bits/endian.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/bits/ioctl-types.h:
+	* sysdeps/unix/sysv/linux/mips/bits/ipc.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/bits/shm.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/bits/sigaction.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/bits/signum.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/bits/socket.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/bits/stat.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/bits/statfs.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/bits/termios.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/bits/time.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/sys/acct.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/sys/asm.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/sys/cachectl.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/sys/fpregdef.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/sys/procfs.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/sys/regdef.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/sys/syscall.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/sys/sysmips.h: Likewise.
+
+1997-04-09 19:05  H.J. Lu (hjl@gnu.ai.mit.edu)
+
+	* isomac.c (xstrndup): New, use it instead of strndup ().
+
+1997-07-02 08:55  H.J. Lu  <hjl@gnu.ai.mit.edu>
+
+	* sysdeps/i386/dl-machine.h (elf_machine_rel): Print
+	the program name for different sizes.
+
+1997-07-10 15:47  Fila Kolodny  <fila@ibi.com>
+
+	* nis/ypclnt.c: Change references to MAXHOSTNAMELEN to NIS_MAXNAMELEN.
+	Add include of rpcsvc/nis.h.
+	* inet/getnameinfo.c: Delete references to MAXHOSTNAMELEN.
+	* sysdeps/posix/getaddrinfo.c: Likewise.
+	Change size of variable buffer to be big enough to hold an IPv6
+	address in printable format.
+
+1997-07-12 18:47  Ulrich Drepper  <drepper@cygnus.com>
+
+	* assert/assert.h [!NDEBUG] (assert, assert_perror): Don't use ||
+	and && in tests to allow use in C++ code which overloads these
+	operators.  Reported by Istvan Marko <istvan@cmdmail.amd.com>.
+
+	* configure.in: Move mips64* recognition before mips*.
+	Patch by Zack Weinberg <zack@rabi.phys.columbia.edu>.
+
+1997-07-03 20:44  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* Makerules (lib%.so, $(common-objpfx)libc.so): Don't use
+	automatic variables in dependency lists.
+	(build-shlib): Always filter out the version script file.
+	* extra-lib.mk ($(objpfx)$(lib).so): Depend on version script.
+
+1997-07-12 17:56  Ulrich Drepper  <drepper@cygnus.com>
+
+	* login/login.c (tty_name): Test return value of ttyname_r for !=
+	0, not < 0.
+	* misc/ttyslot.c (ttyslot): Test return value of ttyname_r for ==
+	0, not >= 0.
+	* sysdeps/unix/getlogin.c (getlogin): Test return value of
+	ttyname_r for != 0.
+	* sysdeps/unix/getlogin_r.c (getlogin_r): Likewise.
+
+1997-07-10  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+	* login/utmp_file.c (getutline_r_file): Fix type: compare with
+	*result.
+
+1997-07-11 00:21  Mark Kettenis  <kettenis@phys.uva.nl>
+
+	* login/Makefile (headers): Add utmpx.h and bits/utmpx.h.
+
+1997-07-09 19:21  Mark Kettenis  <kettenis@phys.uva.nl>
+
+	* login/programs/utmpd.c, login/programs/database.c,
+	login/programs/request.c: Prepare messages for
+	internationalization.
+
+	* login/programs/utmpd.c:
+	(main): Change handling of errors in opening the database.
+	* login/programs/database.c:
+	(open_database, synchronize_dtatabase, initialize_database):
+	Properly handle errors.
+	(get_mtime): Use fstat instead of stat.  All callers changed.
+
+	* login/getutent_r.c: Make setutxent a weak alias for __setutxent.
+	* login/getutent.c: Rename getutent to __getutent and make
+	getutent a weak alias.
+	Make getutxent a weak alias for	__getutent.
+	* login/utmpx.h: New file.
+	* sysdeps/gnu/bits/utmp.h: Cleanup.  Added comments.
+	* sysdeps/gnu/bits/utmpx.h: New file.
+
 1997-07-11 03:00  Ulrich Drepper  <drepper@cygnus.com>
 
 	* inet/inet_ntoa.c: Prevent looking for thread data key if we found
@@ -23,6 +191,9 @@
 	function with return value.
 	Reported by Andreas Jaeger.
 
+	* stdio-common/strops.c: Partialy undo last change.  Will need
+	more investigation.
+
 1997-07-10  Marcus G. Daniels  <marcus@cathcart.sysc.pdx.edu>
 
 	* sysdeps/mach/hurd/select.c (__select): Need bit count for
diff --git a/Makerules b/Makerules
index e4f8a7b559..fb9eebe5a7 100644
--- a/Makerules
+++ b/Makerules
@@ -344,7 +344,7 @@ endif
 # build shared libraries in place from the installed *_pic.a files.
 # $(LDLIBS-%.so) may contain -l switches to generate run-time dependencies
 # on other shared objects.
-lib%.so: lib%_pic.a $(load-map-file); $(build-shlib)
+lib%.so: lib%_pic.a; $(build-shlib)
 
 ifeq ($(have-no-whole-archive),yes)
 no-whole-archive = -Wl,--no-whole-archive
@@ -367,7 +367,7 @@ $(LINK.o) -shared -o $@ $(sysdep-LDFLAGS) $(config-LDFLAGS)  \
 	  -Wl,-soname=lib$(libprefix)$(@F:lib%.so=%).so$($(@F)-version) \
 	  $(LDFLAGS.so) $(LDFLAGS-$(@F:lib%.so=%).so) \
 	  -L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \
-	  -Wl,--whole-archive $(filter-out $(load-map-file),$^) \
+	  -Wl,--whole-archive $(filter-out $($(@F:.so=)-map),$^) \
 	  $(no-whole-archive) $(LDLIBS-$(@F:lib%.so=%).so)
 endef
 
@@ -385,7 +385,7 @@ libc-map = $(..)libc.map
 $(common-objpfx)libc.so: $(elfobjdir)/soinit.so \
 			 $(common-objpfx)libc_pic.a \
 			 $(elfobjdir)/sofini.so $(elfobjdir)/ld.so \
-			 $(load-map-file)
+			 $(libc-map)
 	$(build-shlib)
 ifdef libc.so-version
 $(common-objpfx)libc.so$(libc.so-version): $(common-objpfx)libc.so
diff --git a/assert/assert.h b/assert/assert.h
index c670a66359..3f0d6a3ac1 100644
--- a/assert/assert.h
+++ b/assert/assert.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 92, 94, 95, 96 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 94, 95, 96, 97 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
@@ -37,7 +37,7 @@
 
 #ifdef	NDEBUG
 
-#define	assert(expr)		((void) 0)
+# define assert(expr)		((void) 0)
 
 /* void assert_perror (int errnum);
 
@@ -45,14 +45,12 @@
    error message with the error text for ERRNUM and abort.
    (This is a GNU extension.) */
 
-#ifdef	__USE_GNU
-#define	assert_perror(errnum)	((void) 0)
-#endif
+# ifdef	__USE_GNU
+#  define assert_perror(errnum)	((void) 0)
+# endif
 
 #else /* Not NDEBUG.  */
 
-#include <sys/cdefs.h>
-
 __BEGIN_DECLS
 
 /* This prints an "Assertion failed" message and aborts.  */
@@ -71,27 +69,27 @@ extern void __assert_perror_fail __P ((int __errnum,
 
 __END_DECLS
 
-#define	assert(expr)							      \
-  ((void) ((expr) ||							      \
+# define assert(expr)							      \
+  ((void) ((expr) ? 0 :							      \
 	   (__assert_fail (__STRING(expr),				      \
 			   __FILE__, __LINE__, __ASSERT_FUNCTION), 0)))
 
-#ifdef	__USE_GNU
-#define assert_perror(errnum)						      \
-  ((void) ((errnum) && (__assert_perror_fail ((errnum),			      \
-					      __FILE__, __LINE__,	      \
-					      __ASSERT_FUNCTION), 0)))
-#endif
+# ifdef	__USE_GNU
+#  define assert_perror(errnum)						      \
+  ((void) ((errnum) ? 0 : (__assert_perror_fail ((errnum),		      \
+						 __FILE__, __LINE__,	      \
+						 __ASSERT_FUNCTION), 0)))
+# endif
 
 /* Version 2.4 and later of GCC define a magical variable `__PRETTY_FUNCTION__'
    which contains the name of the function currently being defined.
    This is broken in G++ before version 2.6.  */
-#if (!defined (__GNUC__) || __GNUC__ < 2 || \
-     __GNUC_MINOR__ < (defined (__cplusplus) ? 6 : 4))
-#define __ASSERT_FUNCTION	((__const char *) 0)
-#else
-#define __ASSERT_FUNCTION	__PRETTY_FUNCTION__
-#endif
+# if (!defined __GNUC__ || __GNUC__ < 2 || \
+     __GNUC_MINOR__ < (defined __cplusplus ? 6 : 4))
+#  define __ASSERT_FUNCTION	((__const char *) 0)
+# else
+#  define __ASSERT_FUNCTION	__PRETTY_FUNCTION__
+# endif
 
 
 #endif /* NDEBUG.  */
diff --git a/bits/dlfcn.h b/bits/dlfcn.h
new file mode 100644
index 0000000000..79604fe8ff
--- /dev/null
+++ b/bits/dlfcn.h
@@ -0,0 +1,33 @@
+/* System dependand definitions for run-time dynamic loading.
+   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.  */
+
+#ifndef	_BITS_DLFCN_H
+#define	_BITS_DLFCN_H 1
+
+/* The MODE argument to `dlopen' contains one of the following: */
+#define RTLD_LAZY	0x001	/* Lazy function call binding.  */
+#define RTLD_NOW	0x002	/* Immediate function call binding.  */
+#define	RTLD_BINDING_MASK 0x3	/* Mask of binding time value.  */
+
+/* If the following bit is set in the MODE argument to `dlopen',
+   the symbols of the loaded object and its dependencies are made
+   visible as if the object were linked directly into the program.  */
+#define RTLD_GLOBAL	0x100
+
+#endif	/* bits/dlfcn.h */
diff --git a/configure b/configure
index c5b597c5ca..e69de29bb2 100755
--- a/configure
+++ b/configure
@@ -1,2754 +0,0 @@
-#! /bin/sh
-
-# From configure.in CVSid
-
-
-
-
-# Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.12 
-# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-
-# Defaults:
-ac_help=
-ac_default_prefix=/usr/local
-# Any additions from configure.in:
-ac_help="$ac_help
-  --with-gmp=DIRECTORY	  find GMP source code in DIRECTORY (not needed)"
-ac_help="$ac_help
-  --with-gettext=DIR	  find GNU gettext source code in DIR (not needed)"
-ac_help="$ac_help
-  --with-fp		  if using floating-point hardware [default=yes]"
-ac_help="$ac_help
-  --with-gnu-binutils	  if using GNU binutils (as and ld)"
-ac_help="$ac_help
-  --with-gnu-ld		  if using GNU ld (in the binutils package)"
-ac_help="$ac_help
-  --with-gnu-as		  if using GNU as (in the binutils package)"
-ac_help="$ac_help
-  --with-elf		  if using the ELF object format"
-ac_help="$ac_help
-  --enable-libio          build in GNU libio instead of GNU stdio"
-ac_help="$ac_help
-  --disable-sanity-checks really do not use threads (should not be used
-			  except in special situations) [default=yes]"
-ac_help="$ac_help
-  --enable-shared         build shared library [default=yes if GNU ld & ELF]"
-ac_help="$ac_help
-  --enable-profile        build profiled library [default=yes]"
-ac_help="$ac_help
-  --enable-omitfp         build undebuggable optimized library [default=no]"
-ac_help="$ac_help
-  --enable-bounded        build with runtime bounds checking [default=no]"
-ac_help="$ac_help
-  --enable-add-ons=DIR... configure and build named extra directories"
-ac_help="$ac_help
-  --enable-static-nss     build static NSS modules [default=no]"
-
-# Initialize some variables set by options.
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-build=NONE
-cache_file=./config.cache
-exec_prefix=NONE
-host=NONE
-no_create=
-nonopt=NONE
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-target=NONE
-verbose=
-x_includes=NONE
-x_libraries=NONE
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
-
-# Initialize some other variables.
-subdirs=
-MFLAGS= MAKEFLAGS=
-# Maximum number of lines to put in a shell here document.
-ac_max_here_lines=12
-
-ac_prev=
-for ac_option
-do
-
-  # If the previous option needs an argument, assign it.
-  if test -n "$ac_prev"; then
-    eval "$ac_prev=\$ac_option"
-    ac_prev=
-    continue
-  fi
-
-  case "$ac_option" in
-  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
-  *) ac_optarg= ;;
-  esac
-
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
-  case "$ac_option" in
-
-  -bindir | --bindir | --bindi | --bind | --bin | --bi)
-    ac_prev=bindir ;;
-  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-    bindir="$ac_optarg" ;;
-
-  -build | --build | --buil | --bui | --bu)
-    ac_prev=build ;;
-  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
-    build="$ac_optarg" ;;
-
-  -cache-file | --cache-file | --cache-fil | --cache-fi \
-  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-    ac_prev=cache_file ;;
-  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-    cache_file="$ac_optarg" ;;
-
-  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
-    ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
-  | --da=*)
-    datadir="$ac_optarg" ;;
-
-  -disable-* | --disable-*)
-    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
-    # Reject names that are not valid shell variable names.
-    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
-      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
-    fi
-    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
-    eval "enable_${ac_feature}=no" ;;
-
-  -enable-* | --enable-*)
-    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
-    # Reject names that are not valid shell variable names.
-    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
-      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
-    fi
-    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
-    case "$ac_option" in
-      *=*) ;;
-      *) ac_optarg=yes ;;
-    esac
-    eval "enable_${ac_feature}='$ac_optarg'" ;;
-
-  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
-  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-  | --exec | --exe | --ex)
-    ac_prev=exec_prefix ;;
-  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
-  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
-  | --exec=* | --exe=* | --ex=*)
-    exec_prefix="$ac_optarg" ;;
-
-  -gas | --gas | --ga | --g)
-    # Obsolete; use --with-gas.
-    with_gas=yes ;;
-
-  -help | --help | --hel | --he)
-    # Omit some internal or obsolete options to make the list less imposing.
-    # This message is too long to be a string in the A/UX 3.1 sh.
-    cat << EOF
-Usage: configure [options] [host]
-Options: [defaults in brackets after descriptions]
-Configuration:
-  --cache-file=FILE       cache test results in FILE
-  --help                  print this message
-  --no-create             do not create output files
-  --quiet, --silent       do not print \`checking...' messages
-  --version               print the version of autoconf that created configure
-Directory and file names:
-  --prefix=PREFIX         install architecture-independent files in PREFIX
-                          [$ac_default_prefix]
-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                          [same as prefix]
-  --bindir=DIR            user executables in DIR [EPREFIX/bin]
-  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
-  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
-  --datadir=DIR           read-only architecture-independent data in DIR
-                          [PREFIX/share]
-  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
-  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
-                          [PREFIX/com]
-  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
-  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
-  --includedir=DIR        C header files in DIR [PREFIX/include]
-  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
-  --infodir=DIR           info documentation in DIR [PREFIX/info]
-  --mandir=DIR            man documentation in DIR [PREFIX/man]
-  --srcdir=DIR            find the sources in DIR [configure dir or ..]
-  --program-prefix=PREFIX prepend PREFIX to installed program names
-  --program-suffix=SUFFIX append SUFFIX to installed program names
-  --program-transform-name=PROGRAM
-                          run sed PROGRAM on installed program names
-EOF
-    cat << EOF
-Host type:
-  --build=BUILD           configure for building on BUILD [BUILD=HOST]
-  --host=HOST             configure for HOST [guessed]
-  --target=TARGET         configure for TARGET [TARGET=HOST]
-Features and packages:
-  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
-  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
-  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --x-includes=DIR        X include files are in DIR
-  --x-libraries=DIR       X library files are in DIR
-EOF
-    if test -n "$ac_help"; then
-      echo "--enable and --with options recognized:$ac_help"
-    fi
-    exit 0 ;;
-
-  -host | --host | --hos | --ho)
-    ac_prev=host ;;
-  -host=* | --host=* | --hos=* | --ho=*)
-    host="$ac_optarg" ;;
-
-  -includedir | --includedir | --includedi | --included | --include \
-  | --includ | --inclu | --incl | --inc)
-    ac_prev=includedir ;;
-  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
-  | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir="$ac_optarg" ;;
-
-  -infodir | --infodir | --infodi | --infod | --info | --inf)
-    ac_prev=infodir ;;
-  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir="$ac_optarg" ;;
-
-  -libdir | --libdir | --libdi | --libd)
-    ac_prev=libdir ;;
-  -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir="$ac_optarg" ;;
-
-  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
-  | --libexe | --libex | --libe)
-    ac_prev=libexecdir ;;
-  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
-  | --libexe=* | --libex=* | --libe=*)
-    libexecdir="$ac_optarg" ;;
-
-  -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst \
-  | --locals | --local | --loca | --loc | --lo)
-    ac_prev=localstatedir ;;
-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
-  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
-    localstatedir="$ac_optarg" ;;
-
-  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
-    ac_prev=mandir ;;
-  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir="$ac_optarg" ;;
-
-  -nfp | --nfp | --nf)
-    # Obsolete; use --without-fp.
-    with_fp=no ;;
-
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c)
-    no_create=yes ;;
-
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
-    no_recursion=yes ;;
-
-  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
-  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
-  | --oldin | --oldi | --old | --ol | --o)
-    ac_prev=oldincludedir ;;
-  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
-  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
-  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-    oldincludedir="$ac_optarg" ;;
-
-  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-    ac_prev=prefix ;;
-  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix="$ac_optarg" ;;
-
-  -program-prefix | --program-prefix | --program-prefi | --program-pref \
-  | --program-pre | --program-pr | --program-p)
-    ac_prev=program_prefix ;;
-  -program-prefix=* | --program-prefix=* | --program-prefi=* \
-  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-    program_prefix="$ac_optarg" ;;
-
-  -program-suffix | --program-suffix | --program-suffi | --program-suff \
-  | --program-suf | --program-su | --program-s)
-    ac_prev=program_suffix ;;
-  -program-suffix=* | --program-suffix=* | --program-suffi=* \
-  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-    program_suffix="$ac_optarg" ;;
-
-  -program-transform-name | --program-transform-name \
-  | --program-transform-nam | --program-transform-na \
-  | --program-transform-n | --program-transform- \
-  | --program-transform | --program-transfor \
-  | --program-transfo | --program-transf \
-  | --program-trans | --program-tran \
-  | --progr-tra | --program-tr | --program-t)
-    ac_prev=program_transform_name ;;
-  -program-transform-name=* | --program-transform-name=* \
-  | --program-transform-nam=* | --program-transform-na=* \
-  | --program-transform-n=* | --program-transform-=* \
-  | --program-transform=* | --program-transfor=* \
-  | --program-transfo=* | --program-transf=* \
-  | --program-trans=* | --program-tran=* \
-  | --progr-tra=* | --program-tr=* | --program-t=*)
-    program_transform_name="$ac_optarg" ;;
-
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil)
-    silent=yes ;;
-
-  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-    ac_prev=sbindir ;;
-  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-  | --sbi=* | --sb=*)
-    sbindir="$ac_optarg" ;;
-
-  -sharedstatedir | --sharedstatedir | --sharedstatedi \
-  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
-  | --sharedst | --shareds | --shared | --share | --shar \
-  | --sha | --sh)
-    ac_prev=sharedstatedir ;;
-  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
-  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
-  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
-  | --sha=* | --sh=*)
-    sharedstatedir="$ac_optarg" ;;
-
-  -site | --site | --sit)
-    ac_prev=site ;;
-  -site=* | --site=* | --sit=*)
-    site="$ac_optarg" ;;
-
-  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-    ac_prev=srcdir ;;
-  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-    srcdir="$ac_optarg" ;;
-
-  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
-  | --syscon | --sysco | --sysc | --sys | --sy)
-    ac_prev=sysconfdir ;;
-  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
-  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir="$ac_optarg" ;;
-
-  -target | --target | --targe | --targ | --tar | --ta | --t)
-    ac_prev=target ;;
-  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-    target="$ac_optarg" ;;
-
-  -v | -verbose | --verbose | --verbos | --verbo | --verb)
-    verbose=yes ;;
-
-  -version | --version | --versio | --versi | --vers)
-    echo "configure generated by autoconf version 2.12"
-    exit 0 ;;
-
-  -with-* | --with-*)
-    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
-    # Reject names that are not valid shell variable names.
-    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
-      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
-    fi
-    ac_package=`echo $ac_package| sed 's/-/_/g'`
-    case "$ac_option" in
-      *=*) ;;
-      *) ac_optarg=yes ;;
-    esac
-    eval "with_${ac_package}='$ac_optarg'" ;;
-
-  -without-* | --without-*)
-    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
-    # Reject names that are not valid shell variable names.
-    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
-      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
-    fi
-    ac_package=`echo $ac_package| sed 's/-/_/g'`
-    eval "with_${ac_package}=no" ;;
-
-  --x)
-    # Obsolete; use --with-x.
-    with_x=yes ;;
-
-  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
-  | --x-incl | --x-inc | --x-in | --x-i)
-    ac_prev=x_includes ;;
-  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
-  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
-    x_includes="$ac_optarg" ;;
-
-  -x-libraries | --x-libraries | --x-librarie | --x-librari \
-  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
-    ac_prev=x_libraries ;;
-  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
-  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
-    x_libraries="$ac_optarg" ;;
-
-  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
-    ;;
-
-  *)
-    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
-      echo "configure: warning: $ac_option: invalid host type" 1>&2
-    fi
-    if test "x$nonopt" != xNONE; then
-      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
-    fi
-    nonopt="$ac_option"
-    ;;
-
-  esac
-done
-
-if test -n "$ac_prev"; then
-  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
-fi
-
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-# File descriptor usage:
-# 0 standard input
-# 1 file creation
-# 2 errors and warnings
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 6 checking for... messages and results
-# 5 compiler messages saved in config.log
-if test "$silent" = yes; then
-  exec 6>/dev/null
-else
-  exec 6>&1
-fi
-exec 5>./config.log
-
-echo "\
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-" 1>&5
-
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Also quote any args containing shell metacharacters.
-ac_configure_args=
-for ac_arg
-do
-  case "$ac_arg" in
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c) ;;
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
-  *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
-  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
-  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
-  esac
-done
-
-# NLS nuisances.
-# Only set these to C if already set.  These must not be set unconditionally
-# because not all systems understand e.g. LANG=C (notably SCO).
-# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
-# Non-C LC_CTYPE values break the ctype check.
-if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
-if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
-if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
-if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo > confdefs.h
-
-# A filename unique to this package, relative to the directory that
-# configure is in, which we can look for to find out if srcdir is correct.
-ac_unique_file=include/features.h
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
-  ac_srcdir_defaulted=yes
-  # Try the directory containing this script, then its parent.
-  ac_prog=$0
-  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
-  test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
-  srcdir=$ac_confdir
-  if test ! -r $srcdir/$ac_unique_file; then
-    srcdir=..
-  fi
-else
-  ac_srcdir_defaulted=no
-fi
-if test ! -r $srcdir/$ac_unique_file; then
-  if test "$ac_srcdir_defaulted" = yes; then
-    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
-  else
-    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
-  fi
-fi
-srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
-
-# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
-  if test "x$prefix" != xNONE; then
-    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
-  else
-    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
-  fi
-fi
-for ac_site_file in $CONFIG_SITE; do
-  if test -r "$ac_site_file"; then
-    echo "loading site script $ac_site_file"
-    . "$ac_site_file"
-  fi
-done
-
-if test -r "$cache_file"; then
-  echo "loading cache $cache_file"
-  . $cache_file
-else
-  echo "creating cache $cache_file"
-  > $cache_file
-fi
-
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
-  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
-  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
-    ac_n= ac_c='
-' ac_t='	'
-  else
-    ac_n=-n ac_c= ac_t=
-  fi
-else
-  ac_n= ac_c='\c' ac_t=
-fi
-
-    if test -r /vmunix; then
-      kernel_id=`strings /vmunix | grep UNIX`
-    elif test -r /dynix; then
-      kernel_id=`strings /dynix | grep DYNIX`
-    else
-      kernel_id=
-    fi
-
-
-
-
-# This will get text that should go into config.make.
-config_vars=
-
-# 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
-  withval="$with_gmp"
-  case "$with_gmp" in
-yes) { echo "configure: error: --with-gmp requires an argument; use --with-gmp=DIRECTORY" 1>&2; exit 1; } ;;
-''|no) ;;
-*) config_vars="$config_vars
-gmp-srcdir = $withval" ;;
-esac
-
-fi
-
-# Check for a --with-gettext argument and set gettext-srcdir in config.make.
-# Check whether --with-gettext or --without-gettext was given.
-if test "${with_gettext+set}" = set; then
-  withval="$with_gettext"
-  case "$with_gettext" in
-yes)
-  { echo "configure: error: --with-gettext requires an argument; use --with-gettext=DIR" 1>&2; exit 1; } ;;
-''|no) ;;
-*)
-  config_vars="$config_vars
-gettext-srcdir = $withval" ;;
-esac
-
-fi
-
-
-# Check whether --with-fp or --without-fp was given.
-if test "${with_fp+set}" = set; then
-  withval="$with_fp"
-  with_fp=$withval
-else
-  with_fp=yes
-fi
-
-# Check whether --with-gnu-binutils or --without-gnu-binutils was given.
-if test "${with_gnu_binutils+set}" = set; then
-  withval="$with_gnu_binutils"
-  gnu_binutils=$withval
-else
-  gnu_binutils=no
-fi
-
-# Check whether --with-gnu-ld or --without-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then
-  withval="$with_gnu_ld"
-  gnu_ld=$withval
-else
-  gnu_ld=no
-fi
-
-# Check whether --with-gnu-as or --without-gnu-as was given.
-if test "${with_gnu_as+set}" = set; then
-  withval="$with_gnu_as"
-  gnu_as=$withval
-else
-  gnu_as=no
-fi
-
-test $gnu_binutils = yes && gnu_as=yes gnu_ld=yes
-# Check whether --with-elf or --without-elf was given.
-if test "${with_elf+set}" = set; then
-  withval="$with_elf"
-  elf=$withval
-else
-  elf=no
-fi
-
-
-# Check whether --enable-libio or --disable-libio was given.
-if test "${enable_libio+set}" = set; then
-  enableval="$enable_libio"
-  if test $enableval = yes; then
-	         stdio=libio
-	       else
-	         stdio=stdio
-	       fi
-else
-  stdio=default
-fi
-
-
-# Check whether --enable-sanity-checks or --disable-sanity-checks was given.
-if test "${enable_sanity_checks+set}" = set; then
-  enableval="$enable_sanity_checks"
-  enable_sanity=$enableval
-else
-  enable_sanity=yes
-fi
-
-
-# Check whether --enable-shared or --disable-shared was given.
-if test "${enable_shared+set}" = set; then
-  enableval="$enable_shared"
-  shared=$enableval
-else
-  shared=default
-fi
-
-# Check whether --enable-profile or --disable-profile was given.
-if test "${enable_profile+set}" = set; then
-  enableval="$enable_profile"
-  profile=$enableval
-else
-  profile=yes
-fi
-
-# Check whether --enable-omitfp or --disable-omitfp was given.
-if test "${enable_omitfp+set}" = set; then
-  enableval="$enable_omitfp"
-  omitfp=$enableval
-else
-  omitfp=no
-fi
-
-# Check whether --enable-bounded or --disable-bounded was given.
-if test "${enable_bounded+set}" = set; then
-  enableval="$enable_bounded"
-  bounded=$enableval
-else
-  bounded=no
-fi
-
-
-# Check whether --enable-add-ons or --disable-add-ons was given.
-if test "${enable_add_ons+set}" = set; then
-  enableval="$enable_add_ons"
-  add_ons=`echo "$enableval" | sed 's/,/ /g'`
-else
-  add_ons=
-fi
-
-ac_aux_dir=
-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
-  if test -f $ac_dir/install-sh; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f $ac_dir/install.sh; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  fi
-done
-if test -z "$ac_aux_dir"; then
-  { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
-fi
-ac_config_guess=$ac_aux_dir/config.guess
-ac_config_sub=$ac_aux_dir/config.sub
-ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
-
-subdirs="$add_ons"
-
-add_ons_pfx=
-if test x"$add_ons" != x; then
-  for f in $add_ons; do
-    add_ons_pfx="$add_ons_pfx $f/"
-  done
-fi
-
-# Check whether --enable-static-nss or --disable-static-nss was given.
-if test "${enable_static_nss+set}" = set; then
-  enableval="$enable_static_nss"
-  static_nss=$enableval
-else
-  static_nss=no
-fi
-
-if test x"$static_nss" = xyes; then
-  cat >> confdefs.h <<\EOF
-#define DO_STATIC_NSS 1
-EOF
-
-fi
-
-
-# Make sure we can run config.sub.
-if $ac_config_sub sun4 >/dev/null 2>&1; then :
-else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
-fi
-
-echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:755: checking host system type" >&5
-
-host_alias=$host
-case "$host_alias" in
-NONE)
-  case $nonopt in
-  NONE)
-    if host_alias=`$ac_config_guess`; then :
-    else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
-    fi ;;
-  *) host_alias=$nonopt ;;
-  esac ;;
-esac
-
-host=`$ac_config_sub $host_alias`
-host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-echo "$ac_t""$host" 1>&6
-
-
-# The way shlib-versions is used to generate soversions.mk uses a
-# fairly simplistic model for name recognition that can't distinguish
-# i486-pc-linux-gnu fully from i486-pc-gnu.  So we mutate a $host_os
-# of `gnu*' here to be `gnu-gnu*' just so that shlib-versions can
-# tell.  This doesn't get used much beyond that, so it's fairly safe.
-case "$host_os" in
-linux*)
-  ;;
-gnu*)
-  host_os=`echo $host_os | sed -e 's/gnu/gnu-gnu/'`
-  ;;
-esac
-
-# We keep the original values in `$config_*' and never modify them, so we
-# can write them unchanged into config.make.  Everything else uses
-# $machine, $vendor, and $os, and changes them whenever convenient.
-config_machine=$host_cpu config_vendor=$host_vendor config_os=$host_os
-
-# Some configurations imply other options.
-case "$host_os" in
-gnu* | linux* | bsd4.4* | netbsd* | freebsd*)
-  # These systems always use GNU tools.
-  gnu_ld=yes gnu_as=yes ;;
-esac
-case "$host_os" in
-# i586-linuxaout is mangled into i586-pc-linux-gnuaout
-linux*ecoff* | linux*aout* | gnu*aout* | gnu*ecoff*)
-  ;;
-gnu* | linux* | sysv4* | solaris2*)
-  # These systems (almost) always use the ELF format.
-  elf=yes
-  ;;
-esac
-
-machine=$config_machine
-vendor=$config_vendor
-os=$config_os
-
-# Expand the configuration machine name into a subdirectory by architecture
-# type and particular chip.
-case "$machine" in
-a29k | am29000)	base_machine=a29k machine=a29k ;;
-alpha*)		base_machine=alpha machine=alpha/$machine ;;
-arm*)		base_machine=arm machine=arm/$machine ;;
-hppa*)		base_machine=hppa machine=hppa/$machine ;;
-i[3456]86)	base_machine=i386 machine=i386/$machine ;;
-m680?0)		base_machine=m68k machine=m68k/$machine ;;
-m68k)		base_machine=m68k machine=m68k/m68020 ;;
-m88???)		base_machine=m88k machine=m88k/$machine ;;
-m88k)		base_machine=m88k machine=m88k/m88100 ;;
-mips*)		base_machine=mips machine=mips/$machine ;;
-mips64*)	base_machine=mips64 machine=mips/mips64/$machine ;;
-sparc[6789])	base_machine=sparc machine=sparc/$machine ;;
-supersparc)	base_machine=sparc machine=sparc/sparc8 ;;
-sparc64)	base_machine=sparc64 machine=sparc64/$machine ;;
-esac
-
-
-# Compute the list of sysdep directories for this configuration.
-# This can take a while to compute.
-sysdep_dir=$srcdir/sysdeps
-echo $ac_n "checking sysdep dirs""... $ac_c" 1>&6
-echo "configure:838: 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'`"
-
-case "$os" in
-gnu*)
-  base_os=mach/hurd ;;
-netbsd* | 386bsd* | freebsd* | bsdi*)
-  base_os=unix/bsd/bsd4.4 ;;
-osf* | sunos* | ultrix* | newsos* | dynix* | *bsd*)
-  base_os=unix/bsd ;;
-sysv* | isc* | esix* | sco* | minix* | irix4* | linux*)
-  base_os=unix/sysv ;;
-solaris[2-9]*)
-  base_os=unix/sysv/sysv4 ;;
-none)
-  base_os=standalone ;;
-*)
-  base_os='' ;;
-esac
-
-# For sunos4.1.1, try sunos4.1.1, then sunos4.1, then sunos4, then sunos.
-tail=$os
-ostry=$os
-while o=`echo $tail | sed 's/\.[^.]*$//'`; test $o != $tail; do
-  ostry="$ostry /$o"
-  tail=$o
-done
-o=`echo $tail | sed 's/[0-9]*$//'`
-if test $o != $tail; then
-  ostry="$ostry /$o"
-fi
-# For linux-gnu, try linux-gnu, then linux.
-o=`echo $tail | sed 's/-.*$//'`
-if test $o != $tail; then
-  ostry="$ostry /$o"
-fi
-
-# For unix/sysv/sysv4, try unix/sysv/sysv4, then unix/sysv, then unix.
-base=
-tail=$base_os
-while b=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$b"; do
-  set $b
-  base="$base /$1"
-  tail="$2"
-done
-
-# For sparc/sparc9, try sparc/sparc9 and then sparc.
-mach=
-tail=$machine
-while m=`echo $tail | sed 's@^\(.*\)/\([^/]*\)$@& \1@'`; test -n "$m"; do
-  set $m
-  # Prepend the machine's FPU directory unless --without-fp.
-  if test "$with_fp" = yes; then
-    mach="$mach /$1/fpu"
-  fi
-  mach="$mach /$1"
-  tail="$2"
-done
-
-
-# Find what sysdep directories exist.
-sysnames=
-IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-for d in $add_ons_pfx ''; do
-  for b in $base ''; do
-    for m0 in $mach ''; do
-      for v in /$vendor ''; do
-	for o in /$ostry ''; do
-	  for m in $mach ''; do
-	    if test "$m0$b$v$o$m"; then
-	      try="${d}sysdeps$m0$b$v$o$m"
-	      test -n "$enable_debug_configure" &&
-	      echo "$0 DEBUG: try $try" >&2
-	      case $try in
-		/*) dest=$try ;;
-		*)  dest=$srcdir/$try ;;
-	      esac
-	      if test -d $dest; then
-		sysnames="$sysnames $try"
-		{ test -n "$o" || test -n "$b"; } && os_used=t
-		{ test -n "$m" || test -n "$m0"; } && machine_used=t
-	      fi
-	    fi
-	  done
-	done
-      done
-    done
-  done
-done
-IFS="$ac_save_ifs"
-
-if test -z "$os_used" && test "$os" != none; then
-  { echo "configure: error: Operating system $os is not supported." 1>&2; exit 1; }
-fi
-if test -z "$machine_used" && test "$machine" != none; then
-  { echo "configure: error: The $machine is not supported." 1>&2; exit 1; }
-fi
-
-# We have now validated the configuration.
-
-
-# If using ELF, look for an `elf' subdirectory of each machine directory.
-# We prepend these rather than inserting them whereever the machine appears
-# because things specified by the machine's ELF ABI should override
-# OS-specific things, and should always be the same for any OS on the
-# machine (otherwise what's the point of an ABI?).
-if test "$elf" = yes; then
-  elf_dirs=
-  for d in $add_ons_pfx ''; do
-    case $d in
-      /*) xsrcdir= ;;
-      *)  xsrcdir=$srcdir/ ;;
-    esac
-    for m in $mach; do
-      if test -d $xsrcdir${d}sysdeps$m/elf; then
-	elf_dirs="$elf_dirs ${d}sysdeps$m/elf"
-      fi
-    done
-  done
-  sysnames="`echo $elf_dirs | sed -e 's,//,/,g'` $sysnames"
-fi
-
-
-# Expand the list of system names into a full list of directories
-# from each element's parent name and Implies file (if present).
-set $sysnames
-names=
-while test $# -gt 0; do
-  name=$1
-  shift
-
-  case " $names " in *" $name "*)
-    # Already in the list.
-    continue
-  esac
-
-  # Report each name as we discover it, so there is no long pause in output.
-  echo $ac_n "$name $ac_c" >&6
-
-  name_base=`echo $name | sed -e 's@\(.*sysdeps\)/.*@\1@'`
-
-  case $name in
-    /*) xsrcdir= ;;
-    *)  xsrcdir=$srcdir/ ;;
-  esac
-  test -n "$enable_debug_configure" &&
-  echo "DEBUG: name/Implies $xsrcdir$name/Implies" >&2
-
-  if test -f $xsrcdir$name/Implies; then
-    # Collect more names from the `Implies' file (removing comments).
-    implied_candidate="`sed 's/#.*$//' < $xsrcdir$name/Implies`"
-    implied=
-    for x in $implied_candidate; do
-      if test -d $xsrcdir$name_base/$x; then
-	implied="$implied $name_base/$x";
-      else
-        echo "configure: warning: $name/Implies specifies nonexistent $x" 1>&2
-      fi
-    done
-  else
-    implied=
-  fi
-
-  # Add NAME to the list of names.
-  names="$names $name"
-
-  # Find the parent of NAME, using the empty string if it has none.
-  parent="`echo $name | sed -n -e 's=/[^/]*$==' -e '/sysdeps$/q' -e p`"
-
-  # Add the names implied by NAME, and NAME's parent (if it has one), to
-  # the list of names to be processed (the argument list).  We prepend the
-  # implied names to the list and append the parent.  We want implied
-  # directories to come before further directories inferred from the
-  # configuration components; this ensures that for sysv4, unix/common
-  # (implied by unix/sysv/sysv4) comes before unix/sysv (in ostry (here $*)
-  # after sysv4).
-  sysnames="`echo $implied $* $parent`"
-  test -n "$sysnames" && set $sysnames
-done
-
-# Add the default directories.
-sysnames="$names sysdeps/generic sysdeps/stub"
-
-# The other names were emitted during the scan.
-echo "$ac_t""sysdeps/generic sysdeps/stub" 1>&6
-
-
-### Locate tools.
-
-# Find a good install program.  We prefer a C program (faster),
-# so one script is as good as another.  But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# 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:1039: 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
-else
-    IFS="${IFS= 	}"; ac_save_IFS="$IFS"; IFS="${IFS}:"
-  for ac_dir in $PATH; do
-    # Account for people who put trailing slashes in PATH elements.
-    case "$ac_dir/" in
-    /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
-    *)
-      # OSF1 and SCO ODT 3.0 have their own names for install.
-      for ac_prog in ginstall installbsd scoinst install; do
-        if test -f $ac_dir/$ac_prog; then
-	  if test $ac_prog = install &&
-            grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    # OSF/1 installbsd also uses dspmsg, but is usable.
-	    :
-	  else
-	    ac_cv_path_install="$ac_dir/$ac_prog -c"
-	    break 2
-	  fi
-	fi
-      done
-      ;;
-    esac
-  done
-  IFS="$ac_save_IFS"
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL="$ac_cv_path_install"
-  else
-    # As a last resort, use the slow shell script.  We don't cache a
-    # path for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the path is relative.
-    INSTALL="$ac_install_sh"
-  fi
-fi
-echo "$ac_t""$INSTALL" 1>&6
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-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='$(..)./install-sh -c'
-fi
-echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1093: 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
-  rm -f conftestdata
-if ln -s X conftestdata 2>/dev/null
-then
-  rm -f conftestdata
-  ac_cv_prog_LN_S="ln -s"
-else
-  ac_cv_prog_LN_S=ln
-fi
-fi
-LN_S="$ac_cv_prog_LN_S"
-if test "$ac_cv_prog_LN_S" = "ln -s"; then
-  echo "$ac_t""yes" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-for ac_prog in msgfmt gmsgfmt
-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:1118: 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
-  if test -n "$MSGFMT"; then
-  ac_cv_prog_MSGFMT="$MSGFMT" # Let the user override the test.
-else
-  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_prog_MSGFMT="$ac_prog"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-fi
-fi
-MSGFMT="$ac_cv_prog_MSGFMT"
-if test -n "$MSGFMT"; then
-  echo "$ac_t""$MSGFMT" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-test -n "$MSGFMT" && break
-done
-test -n "$MSGFMT" || MSGFMT=":"
-
-
-# Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1151: 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
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  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_prog_CC="gcc"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
-  echo "$ac_t""$CC" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1180: 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
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-  ac_prog_rejected=no
-  for ac_dir in $PATH; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
-        ac_prog_rejected=yes
-	continue
-      fi
-      ac_cv_prog_CC="cc"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# -gt 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    set dummy "$ac_dir/$ac_word" "$@"
-    shift
-    ac_cv_prog_CC="$@"
-  fi
-fi
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
-  echo "$ac_t""$CC" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
-fi
-
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1228: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
-
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-cat > conftest.$ac_ext <<EOF
-#line 1238 "configure"
-#include "confdefs.h"
-main(){return(0);}
-EOF
-if { (eval echo configure:1242: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
-  ac_cv_prog_cc_works=yes
-  # If we can't run a trivial program, we are probably using a cross compiler.
-  if (./conftest; exit) 2>/dev/null; then
-    ac_cv_prog_cc_cross=no
-  else
-    ac_cv_prog_cc_cross=yes
-  fi
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  ac_cv_prog_cc_works=no
-fi
-rm -fr conftest*
-
-echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
-if test $ac_cv_prog_cc_works = no; then
- cross_linkable=no
- ac_cv_prog_cc_cross=yes
-else
- cross_linkable=yes
-fi
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1265: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
-echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
-
-cross_compiling=$ac_cv_prog_cc_cross
-
-echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1271: checking whether we are using GNU C" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.c <<EOF
-#ifdef __GNUC__
-  yes;
-#endif
-EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1280: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
-  ac_cv_prog_gcc=yes
-else
-  ac_cv_prog_gcc=no
-fi
-fi
-
-echo "$ac_t""$ac_cv_prog_gcc" 1>&6
-
-if test $ac_cv_prog_gcc = yes; then
-  GCC=yes
-
-  cat > conftest.c <<EOF
-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
-  yes;
-#endif
-EOF
-  if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1297: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
-    if test -z "$CFLAGS"; then
-      CFLAGS="-g -O2"
-    fi
-  else
-    { echo "configure: error: We require GNU CC version 2.7 or newer" 1>&2; exit 1; }
-  fi
-else
-  { echo "configure: error: GNU libc must be compiled using GNU CC" 1>&2; exit 1; }
-fi
-
-echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:1309: checking build system type" >&5
-
-build_alias=$build
-case "$build_alias" in
-NONE)
-  case $nonopt in
-  NONE) build_alias=$host_alias ;;
-  *) build_alias=$nonopt ;;
-  esac ;;
-esac
-
-build=`$ac_config_sub $build_alias`
-build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-echo "$ac_t""$build" 1>&6
-
-if test $host != $build; then
-  for ac_prog in gcc cc
-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:1332: 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
-  if test -n "$BUILD_CC"; then
-  ac_cv_prog_BUILD_CC="$BUILD_CC" # Let the user override the test.
-else
-  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_prog_BUILD_CC="$ac_prog"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-fi
-fi
-BUILD_CC="$ac_cv_prog_BUILD_CC"
-if test -n "$BUILD_CC"; then
-  echo "$ac_t""$BUILD_CC" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-test -n "$BUILD_CC" && break
-done
-
-fi
-
-echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1363: checking how to run the C preprocessor" >&5
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-    # This must be in double quotes, not single quotes, because CPP may get
-  # substituted into the Makefile and "${CC-cc}" will confuse make.
-  CPP="${CC-cc} -E"
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp.
-  cat > conftest.$ac_ext <<EOF
-#line 1378 "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:1384: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
-  :
-else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  CPP="${CC-cc} -E -traditional-cpp"
-  cat > conftest.$ac_ext <<EOF
-#line 1395 "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:1401: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
-  :
-else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  CPP=/lib/cpp
-fi
-rm -f conftest*
-fi
-rm -f conftest*
-  ac_cv_prog_CPP="$CPP"
-fi
-  CPP="$ac_cv_prog_CPP"
-else
-  ac_cv_prog_CPP="$CPP"
-fi
-echo "$ac_t""$CPP" 1>&6
-
-if test $host != $build; then
-  ac_tool_prefix=${host_alias}-
-else
-  ac_tool_prefix=
-fi
-
-# 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:1432: 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
-  if test -n "$AR"; then
-  ac_cv_prog_AR="$AR" # Let the user override the test.
-else
-  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_prog_AR="${ac_tool_prefix}ar"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-  test -z "$ac_cv_prog_AR" && ac_cv_prog_AR="ar"
-fi
-fi
-AR="$ac_cv_prog_AR"
-if test -n "$AR"; then
-  echo "$ac_t""$AR" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-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:1463: 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
-  if test -n "$RANLIB"; then
-  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-  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_prog_RANLIB="${ac_tool_prefix}ranlib"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-fi
-fi
-RANLIB="$ac_cv_prog_RANLIB"
-if test -n "$RANLIB"; then
-  echo "$ac_t""$RANLIB" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-
-if test -z "$ac_cv_prog_RANLIB"; then
-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:1494: 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
-  if test -n "$RANLIB"; then
-  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-  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_prog_RANLIB="ranlib"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-  test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
-fi
-fi
-RANLIB="$ac_cv_prog_RANLIB"
-if test -n "$RANLIB"; then
-  echo "$ac_t""$RANLIB" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-else
-  RANLIB=":"
-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:1529: 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 >&/dev/null'; then
-  libc_cv_have_bash2=yes
-else
-  libc_cv_have_bash2=no
-fi
-
-
-if test "$BASH" = no; then
-  # Extract the first word of "ksh", so it can be a program name with args.
-set dummy ksh; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1570: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_KSH'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  case "$KSH" in
-  /*)
-  ac_cv_path_KSH="$KSH" # 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_KSH="$ac_dir/$ac_word"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-  test -z "$ac_cv_path_KSH" && ac_cv_path_KSH="no"
-  ;;
-esac
-fi
-KSH="$ac_cv_path_KSH"
-if test -n "$KSH"; then
-  echo "$ac_t""$KSH" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-  if test "$KSH" = no; then
-    libc_cv_have_ksh=no
-  else
-    libc_cv_have_ksh=yes
-  fi
-else
-  KSH="$BASH"
-  
-  libc_cv_have_ksh=yes
-fi
-
-
-echo $ac_n "checking for signed size_t type""... $ac_c" 1>&6
-echo "configure:1612: 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
-  echo '#include <stddef.h>
-FOOBAR __SIZE_TYPE__ FOOBAR' > conftest.c
-if eval "$ac_cpp conftest.c 2>/dev/null" \
-| grep '^FOOBAR.*unsigned.*FOOBAR$' >/dev/null; then
-  libc_cv_signed_size_t=no
-else
-  libc_cv_signed_size_t=yes
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$libc_cv_signed_size_t" 1>&6
-if test $libc_cv_signed_size_t = yes; then
-    cat >> confdefs.h <<\EOF
-#undef __SIZE_TYPE__
-#define __SIZE_TYPE__ unsigned
-EOF
-fi
-
-echo $ac_n "checking for libc-friendly stddef.h""... $ac_c" 1>&6
-echo "configure:1636: 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 1641 "configure"
-#include "confdefs.h"
-#define __need_size_t
-#define __need_wchar_t
-#include <stddef.h>
-#define __need_NULL
-#include <stddef.h>
-int main() {
-size_t size; wchar_t wchar;
-#ifdef offsetof
-#error stddef.h ignored __need_*
-#endif
-if (&size == NULL || &wchar == NULL) abort ();
-; return 0; }
-EOF
-if { (eval echo configure:1656: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  rm -rf conftest*
-  libc_cv_friendly_stddef=yes
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  libc_cv_friendly_stddef=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$libc_cv_friendly_stddef" 1>&6
-if test $libc_cv_friendly_stddef = yes; then
-  config_vars="$config_vars
-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:1675: 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
-  cat > conftest.S <<EOF
-#include "confdefs.h"
-/* Nothing whatsoever.  */
-EOF
-if ${CC-cc} $CFLAGS -c conftest.S 2>/dev/null; then
-  libc_cv_need_minus_P=no
-else
-  libc_cv_need_minus_P=yes
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$libc_cv_need_minus_P" 1>&6
-if test $libc_cv_need_minus_P = yes; then
-  config_vars="$config_vars
-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:1698: 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
-  libc_cv_asm_global_directive=UNKNOWN
-for ac_globl in .globl .global; do
-  cat > conftest.s <<EOF
-.text
-${ac_globl} foo
-foo:
-EOF
-  if ${CC-cc} $CFLAGS -c conftest.s 2>/dev/null; then
-    libc_cv_asm_global_directive=${ac_globl}
-  fi
-  rm -f conftest*
-  test $libc_cv_asm_global_directive != UNKNOWN && break
-done
-fi
-
-echo "$ac_t""$libc_cv_asm_global_directive" 1>&6
-if test $libc_cv_asm_global_directive = UNKNOWN; then
-  { echo "configure: error: cannot determine asm global directive" 1>&2; exit 1; }
-else
-  cat >> confdefs.h <<EOF
-#define ASM_GLOBAL_DIRECTIVE ${libc_cv_asm_global_directive}
-EOF
-
-fi
-
-echo $ac_n "checking for .set assembler directive""... $ac_c" 1>&6
-echo "configure:1728: 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
-  cat > conftest.s <<EOF
-.text
-foo:
-.set glibc_conftest_frobozz,foo
-$libc_cv_asm_global_directive glibc_conftest_frobozz
-EOF
-# The alpha-dec-osf1 assembler gives only a warning for `.set'
-# (but it doesn't work), so we must do a linking check to be sure.
-cat > conftest1.c <<\EOF
-extern int glibc_conftest_frobozz;
-main () { printf ("%d\n", glibc_conftest_frobozz); }
-EOF
-if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
-	    -o conftest conftest.s conftest1.c 1>&5 2>&5; then
-  libc_cv_asm_set_directive=yes
-else
-  libc_cv_asm_set_directive=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$libc_cv_asm_set_directive" 1>&6
-if test $libc_cv_asm_set_directive = yes; then
-  cat >> confdefs.h <<\EOF
-#define HAVE_ASM_SET_DIRECTIVE 1
-EOF
-
-fi
-
-echo $ac_n "checking for .symver assembler directive""... $ac_c" 1>&6
-echo "configure:1762: checking for .symver assembler directive" >&5
-if eval "test \"`echo '$''{'libc_cv_asm_symver_directive'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.s <<EOF
-.text
-_sym:
-.symver _sym,sym@VERS
-EOF
-if ${CC-cc} -c $CFLAGS $CPPFLAGS conftest.s 1>&5 2>&5; then
-  libc_cv_asm_symver_directive=yes
-else
-  libc_cv_asm_symver_directive=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$libc_cv_asm_symver_directive" 1>&6
-echo $ac_n "checking for ld --version-script""... $ac_c" 1>&6
-echo "configure:1781: checking for ld --version-script" >&5
-if eval "test \"`echo '$''{'libc_cv_ld_version_script_option'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  if test $libc_cv_asm_symver_directive = yes; then
-  cat > conftest.s <<EOF
-.text
-_sym:
-.symver _sym,sym@VERS
-EOF
-  cat > conftest.map <<EOF
-VERS {
-	global: sym;
-};
-EOF
-  if ${CC-cc} -c $CFLAGS $CPPFLAGS conftest.s 1>&5 2>&5; then
-    if { ac_try='${CC-cc} $CFLAGS -shared -o conftest.so conftest.o
-					-nostartfiles -nostdlib
-					-Wl,--version-script,conftest.map
-		       1>&5'; { (eval echo configure:1800: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
-    then
-      libc_cv_ld_version_script_option=yes
-    else
-      libc_cv_ld_version_script_option=no
-    fi
-  else
-    libc_cv_ld_version_script_option=no
-  fi
-else
-  libc_cv_ld_version_script_option=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$libc_cv_ld_version_script_option" 1>&6
-if test $libc_cv_asm_symver_directive = yes &&
-   test $libc_cv_ld_version_script_option = yes; then
-  VERSIONING=yes
-  cat >> confdefs.h <<\EOF
-#define DO_VERSIONING 1
-EOF
-
-else
-  VERSIONING=no
-fi
-
-
-if test $elf = yes; then
-  echo $ac_n "checking for .previous assembler directive""... $ac_c" 1>&6
-echo "configure:1830: checking for .previous assembler directive" >&5
-if eval "test \"`echo '$''{'libc_cv_asm_previous_directive'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-    cat > conftest.s <<EOF
-.section foo_section
-.previous
-EOF
-  if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1838: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-    libc_cv_asm_previous_directive=yes
-  else
-    libc_cv_asm_previous_directive=no
-  fi
-  rm -f conftest*
-fi
-
-echo "$ac_t""$libc_cv_asm_previous_directive" 1>&6
-  if test $libc_cv_asm_previous_directive = yes; then
-    cat >> confdefs.h <<\EOF
-#define HAVE_ASM_PREVIOUS_DIRECTIVE 1
-EOF
-
-  else
-    echo $ac_n "checking for .popsection assembler directive""... $ac_c" 1>&6
-echo "configure:1854: checking for .popsection assembler directive" >&5
-if eval "test \"`echo '$''{'libc_cv_asm_popsection_directive'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-      cat > conftest.s <<EOF
-.pushsection foo_section
-.popsection
-EOF
-    if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1862: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-      libc_cv_asm_popsection_directive=yes
-    else
-      libc_cv_asm_popsection_directive=no
-    fi
-    rm -f conftest*
-fi
-
-echo "$ac_t""$libc_cv_asm_popsection_directive" 1>&6
-    if test $libc_cv_asm_popsection_directive = yes; then
-      cat >> confdefs.h <<\EOF
-#define HAVE_ASM_POPSECTION_DIRECTIVE 1
-EOF
-
-    fi
-  fi
-fi
-
-if test $elf != yes; then
-  echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6
-echo "configure:1882: 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 1887 "configure"
-#include "confdefs.h"
-
-int main() {
-asm (".section .init");
-				    asm (".section .fini");
-				    asm (".text");
-; return 0; }
-EOF
-if { (eval echo configure:1896: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  rm -rf conftest*
-  libc_cv_have_initfini=yes
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  libc_cv_have_initfini=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$libc_cv_have_initfini" 1>&6
-    if test $libc_cv_have_initfini = yes; then
-    cat >> confdefs.h <<\EOF
-#define HAVE_INITFINI 1
-EOF
-
-  fi
-fi
-
-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:1921: 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 1926 "configure"
-#include "confdefs.h"
-asm ("_glibc_foobar:");
-int main() {
-glibc_foobar ();
-; return 0; }
-EOF
-if { (eval echo configure:1933: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
-  rm -rf conftest*
-  libc_cv_asm_underscores=yes
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  libc_cv_asm_underscores=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$libc_cv_asm_underscores" 1>&6
-fi
-if test $libc_cv_asm_underscores = no; then
-  cat >> confdefs.h <<\EOF
-#define NO_UNDERSCORES 1
-EOF
-
-fi
-
-if test $elf = yes; then
-  libc_cv_weak_symbols=yes
-  libc_cv_asm_weak_directive=yes
-  libc_cv_asm_weakext_directive=no
-else
-  echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6
-echo "configure:1960: 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
-  cat > conftest.s <<EOF
-.text
-${libc_cv_asm_global_directive} foo
-foo:
-.weak foo
-.weak bar; bar = foo
-EOF
-  if ${CC-cc} $CFLAGS -c conftest.s 2>/dev/null; then
-    libc_cv_asm_weak_directive=yes
-  else
-    libc_cv_asm_weak_directive=no
-  fi
-  rm -f conftest*
-fi
-
-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:1983: 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
-  cat > conftest.s <<EOF
-.text
-${libc_cv_asm_global_directive} foo
-foo:
-.weakext foo
-.weakext foo, bar
-EOF
-  if ${CC-cc} $CFLAGS -c conftest.s 2>/dev/null; then
-    libc_cv_asm_weakext_directive=yes
-  else
-    libc_cv_asm_weakext_directive=no
-  fi
-  rm -f conftest*
-fi
-
-echo "$ac_t""$libc_cv_asm_weakext_directive" 1>&6
-
-  fi # no .weak
-fi # not ELF
-
-if test $libc_cv_asm_weak_directive = yes; then
-  cat >> confdefs.h <<\EOF
-#define HAVE_ASM_WEAK_DIRECTIVE 1
-EOF
-
-elif test $libc_cv_asm_weakext_directive = yes; then
-  cat >> confdefs.h <<\EOF
-#define HAVE_ASM_WEAKEXT_DIRECTIVE 1
-EOF
-
-fi
-
-echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6
-echo "configure:2020: 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
-  cat > conftest.c <<\EOF
-_start () {}
-int __eh_pc;
-__throw () {}
-EOF
-if { ac_try='${CC-cc} $CFLAGS
-			    -nostdlib -nostartfiles -Wl,--no-whole-archive
-			    -o conftest conftest.c 1>&5'; { (eval echo configure:2031: \"$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
-fi
-rm -f conftest*
-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:2042: 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
-  cat > conftest.c <<\EOF
-_start () {}
-int __eh_pc;
-__throw () {}
-EOF
-if { ac_try='${CC-cc} $CFLAGS
-			    -nostdlib -nostartfiles -fno-exceptions
-			    -o conftest conftest.c 1>&5'; { (eval echo configure:2053: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-  libc_cv_gcc_no_exceptions=yes
-else
-  libc_cv_gcc_no_exceptions=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$libc_cv_gcc_no_exceptions" 1>&6
-
-### End of automated tests.
-### Now run sysdeps configure fragments.
-
-# sysdeps configure fragments may set these with files to be linked below.
-libc_link_dests=
-libc_link_sources=
-
-# Iterate over all the sysdep directories we will use, running their
-# configure fragments, and looking for a uname implementation.
-uname=
-for dir in $sysnames; do
-  case $dir in
-    /*) dest=$dir ;;
-    *)  dest=$srcdir/$dir ;;
-  esac
-  if test -r $dest/configure; then
-    echo "$ac_t""running configure fragment for $dest" 1>&6
-    . $dest/configure
-  fi
-
-  if test -z "$uname"; then
-    if test -r $dest/uname.c ||
-       test -r $dest/uname.S ||
-       { test -r $dest/syscalls.list &&
-	 grep '^uname[ 	]' $dest/syscalls.list >/dev/null; }; then
-      uname=$dir
-    fi
-  fi
-done
-
-
-
-# If we will use the generic uname implementation, we must figure out what
-# it will say by examining the system, and write the results in config-name.h.
-if test "$uname" = "sysdeps/generic"; then
-
-  uname_sysname=`echo $config_os | sed 's/[0-9.]*$//'`
-  if test $uname_sysname != $config_os; then
-    config_release=`echo $config_os | sed s/$uname_sysname//`
-  fi
-
-  echo $ac_n "checking OS release for uname""... $ac_c" 1>&6
-echo "configure:2105: 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
-    kernel_release=`echo "$kernel_id" | sed 's/^[^0-9.]*\([0-9.]*\).*$/\1/'`
-  if test x`echo "$config_release" | sed "s/^$kernel_release//"` \
-	 != x$config_release; then
-    # The configuration release is a substring of the kernel release.
-    libc_cv_uname_release=$kernel_release
-  elif test x$config_release != x; then
-    libc_cv_uname_release=$config_release
-  elif test x$kernel_release != x; then
-    libc_cv_uname_release=$kernel_release
-  else
-    libc_cv_uname_release=unknown
-  fi
-fi
-
-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:2127: 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
-    kernel_version=`echo "$kernel_id" | sed 's/^[^#]*#\([0-9]*\).*$/\1/'`
-  if test -n "$kernel_version"; then
-    libc_cv_uname_version="$kernel_version"
-  else
-    libc_cv_uname_version=unknown
-  fi
-fi
-
-echo "$ac_t""$libc_cv_uname_version" 1>&6
-  uname_version="$libc_cv_uname_version"
-
-    config_uname=config-name.h:config-name.in
-else
-  # For non-generic uname, we don't need to create config-name.h at all.
-  config_uname=
-fi
-
-echo $ac_n "checking stdio selection""... $ac_c" 1>&6
-echo "configure:2149: checking stdio selection" >&5
-
-case $stdio in
-libio) cat >> confdefs.h <<\EOF
-#define USE_IN_LIBIO 1
-EOF
- ;;
-default) stdio=stdio ;;
-esac
-echo "$ac_t""$stdio" 1>&6
-
-
-
-
-
-
-
-  
-if test $gnu_ld = yes; then
-  cat >> confdefs.h <<\EOF
-#define HAVE_GNU_LD 1
-EOF
-
-fi
-if test $gnu_as = yes; then
-  cat >> confdefs.h <<\EOF
-#define HAVE_GNU_AS 1
-EOF
-
-fi
-if test $elf = yes; then
-  cat >> confdefs.h <<\EOF
-#define HAVE_ELF 1
-EOF
-
-fi
-
-
-if test $shared = default; then
-  if test $gnu_ld = yes; then
-    shared=$elf
-  else
-    # For now we do not assume shared libs are available.  In future more
-    # tests might become available.
-    shared=no
-  fi
-fi
-
-
-
-
-
-
-
-
-if test "`(cd $srcdir; pwd)`" = "`pwd`"; then
-  config_makefile=
-else
-  config_makefile=Makefile
-fi
-
-VERSION=`sed -e 's/^#define VERSION "\([^"]*\)"/\1/p' -e d < $srcdir/version.h`
-
-
-trap '' 1 2 15
-cat > confcache <<\EOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs.  It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
-#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already.  You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
-#
-EOF
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(set) 2>&1 |
-  case `(ac_space=' '; set) 2>&1` in
-  *ac_space=\ *)
-    # `set' does not quote correctly, so add quotes (double-quote substitution
-    # turns \\\\ into \\, and sed turns \\ into \).
-    sed -n \
-      -e "s/'/'\\\\''/g" \
-      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
-    ;;
-  *)
-    # `set' quotes correctly as required by POSIX, so do not add quotes.
-    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
-    ;;
-  esac >> confcache
-if cmp -s $cache_file confcache; then
-  :
-else
-  if test -w $cache_file; then
-    echo "updating cache $cache_file"
-    cat confcache > $cache_file
-  else
-    echo "not updating unwritable cache $cache_file"
-  fi
-fi
-rm -f confcache
-
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# Any assignment to VPATH causes Sun make to only execute
-# the first set of double-colon rules, so remove it if not needed.
-# If there is a colon in the path, we need to keep it.
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[ 	]*VPATH[ 	]*=[^:]*$/d'
-fi
-
-trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
-
-DEFS=-DHAVE_CONFIG_H
-
-# Without the "./", some shells look in PATH for config.status.
-: ${CONFIG_STATUS=./config.status}
-
-echo creating $CONFIG_STATUS
-rm -f $CONFIG_STATUS
-cat > $CONFIG_STATUS <<EOF
-#! /bin/sh
-# Generated automatically by configure.
-# Run this file to recreate the current configuration.
-# This directory was configured as follows,
-# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-#
-# $0 $ac_configure_args
-#
-# Compiler output produced by configure, useful for debugging
-# configure, is in ./config.log if it exists.
-
-ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
-for ac_option
-do
-  case "\$ac_option" in
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
-    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
-  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
-    echo "$CONFIG_STATUS generated by autoconf version 2.12"
-    exit 0 ;;
-  -help | --help | --hel | --he | --h)
-    echo "\$ac_cs_usage"; exit 0 ;;
-  *) echo "\$ac_cs_usage"; exit 1 ;;
-  esac
-done
-
-ac_given_srcdir=$srcdir
-ac_given_INSTALL="$INSTALL"
-
-trap 'rm -fr `echo "config.make glibcbug ${config_makefile} ${config_uname} config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
-EOF
-cat >> $CONFIG_STATUS <<EOF
-
-# Protect against being on the right side of a sed subst in config.status.
-sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
- s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
-$ac_vpsub
-$extrasub
-s%@CFLAGS@%$CFLAGS%g
-s%@CPPFLAGS@%$CPPFLAGS%g
-s%@CXXFLAGS@%$CXXFLAGS%g
-s%@DEFS@%$DEFS%g
-s%@LDFLAGS@%$LDFLAGS%g
-s%@LIBS@%$LIBS%g
-s%@exec_prefix@%$exec_prefix%g
-s%@prefix@%$prefix%g
-s%@program_transform_name@%$program_transform_name%g
-s%@bindir@%$bindir%g
-s%@sbindir@%$sbindir%g
-s%@libexecdir@%$libexecdir%g
-s%@datadir@%$datadir%g
-s%@sysconfdir@%$sysconfdir%g
-s%@sharedstatedir@%$sharedstatedir%g
-s%@localstatedir@%$localstatedir%g
-s%@libdir@%$libdir%g
-s%@includedir@%$includedir%g
-s%@oldincludedir@%$oldincludedir%g
-s%@infodir@%$infodir%g
-s%@mandir@%$mandir%g
-s%@subdirs@%$subdirs%g
-s%@host@%$host%g
-s%@host_alias@%$host_alias%g
-s%@host_cpu@%$host_cpu%g
-s%@host_vendor@%$host_vendor%g
-s%@host_os@%$host_os%g
-s%@base_machine@%$base_machine%g
-s%@sysnames@%$sysnames%g
-s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
-s%@INSTALL_DATA@%$INSTALL_DATA%g
-s%@LN_S@%$LN_S%g
-s%@MSGFMT@%$MSGFMT%g
-s%@CC@%$CC%g
-s%@cross_linkable@%$cross_linkable%g
-s%@build@%$build%g
-s%@build_alias@%$build_alias%g
-s%@build_cpu@%$build_cpu%g
-s%@build_vendor@%$build_vendor%g
-s%@build_os@%$build_os%g
-s%@BUILD_CC@%$BUILD_CC%g
-s%@cross_compiling@%$cross_compiling%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%@KSH@%$KSH%g
-s%@libc_cv_have_ksh@%$libc_cv_have_ksh%g
-s%@VERSIONING@%$VERSIONING%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
-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%@libc_cv_rootsbindir@%$libc_cv_rootsbindir%g
-s%@has_ldconfig@%$has_ldconfig%g
-s%@gnu_ld@%$gnu_ld%g
-s%@gnu_as@%$gnu_as%g
-s%@elf@%$elf%g
-s%@shared@%$shared%g
-s%@profile@%$profile%g
-s%@omitfp@%$omitfp%g
-s%@bounded@%$bounded%g
-s%@static_nss@%$static_nss%g
-s%@nopic_initfini@%$nopic_initfini%g
-s%@DEFINES@%$DEFINES%g
-s%@VERSION@%$VERSION%g
-
-CEOF
-EOF
-
-cat >> $CONFIG_STATUS <<\EOF
-
-# Split the substitutions into bite-sized pieces for seds with
-# small command number limits, like on Digital OSF/1 and HP-UX.
-ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
-ac_file=1 # Number of current file.
-ac_beg=1 # First line for current file.
-ac_end=$ac_max_sed_cmds # Line after last line for current file.
-ac_more_lines=:
-ac_sed_cmds=""
-while $ac_more_lines; do
-  if test $ac_beg -gt 1; then
-    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
-  else
-    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
-  fi
-  if test ! -s conftest.s$ac_file; then
-    ac_more_lines=false
-    rm -f conftest.s$ac_file
-  else
-    if test -z "$ac_sed_cmds"; then
-      ac_sed_cmds="sed -f conftest.s$ac_file"
-    else
-      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
-    fi
-    ac_file=`expr $ac_file + 1`
-    ac_beg=$ac_end
-    ac_end=`expr $ac_end + $ac_max_sed_cmds`
-  fi
-done
-if test -z "$ac_sed_cmds"; then
-  ac_sed_cmds=cat
-fi
-EOF
-
-cat >> $CONFIG_STATUS <<EOF
-
-CONFIG_FILES=\${CONFIG_FILES-"config.make glibcbug ${config_makefile} ${config_uname}"}
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case "$ac_file" in
-  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
-       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
-  *) ac_file_in="${ac_file}.in" ;;
-  esac
-
-  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
-
-  # Remove last slash and all that follows it.  Not all systems have dirname.
-  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
-  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
-    # The file is in a subdirectory.
-    test ! -d "$ac_dir" && mkdir "$ac_dir"
-    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
-    # A "../" for each directory in $ac_dir_suffix.
-    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
-  else
-    ac_dir_suffix= ac_dots=
-  fi
-
-  case "$ac_given_srcdir" in
-  .)  srcdir=.
-      if test -z "$ac_dots"; then top_srcdir=.
-      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
-  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
-  *) # Relative path.
-    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
-    top_srcdir="$ac_dots$ac_given_srcdir" ;;
-  esac
-
-  case "$ac_given_INSTALL" in
-  [/$]*) INSTALL="$ac_given_INSTALL" ;;
-  *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
-  esac
-
-  echo creating "$ac_file"
-  rm -f "$ac_file"
-  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
-  case "$ac_file" in
-  *Makefile*) ac_comsub="1i\\
-# $configure_input" ;;
-  *) ac_comsub= ;;
-  esac
-
-  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
-  sed -e "$ac_comsub
-s%@configure_input@%$configure_input%g
-s%@srcdir@%$srcdir%g
-s%@top_srcdir@%$top_srcdir%g
-s%@INSTALL@%$INSTALL%g
-" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
-fi; done
-rm -f conftest.s*
-
-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-# NAME is the cpp macro being defined and VALUE is the value it is being given.
-#
-# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s%^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
-ac_dB='\([ 	][ 	]*\)[^ 	]*%\1#\2'
-ac_dC='\3'
-ac_dD='%g'
-# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
-ac_uA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
-ac_uB='\([ 	]\)%\1#\2define\3'
-ac_uC=' '
-ac_uD='\4%g'
-# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_eA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
-ac_eB='$%\1#\2define\3'
-ac_eC=' '
-ac_eD='%g'
-
-if test "${CONFIG_HEADERS+set}" != set; then
-EOF
-cat >> $CONFIG_STATUS <<EOF
-  CONFIG_HEADERS="config.h"
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-fi
-for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case "$ac_file" in
-  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
-       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
-  *) ac_file_in="${ac_file}.in" ;;
-  esac
-
-  echo creating $ac_file
-
-  rm -f conftest.frag conftest.in conftest.out
-  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
-  cat $ac_file_inputs > conftest.in
-
-EOF
-
-# Transform confdefs.h into a sed script conftest.vals that substitutes
-# the proper values into config.h.in to produce config.h.  And first:
-# Protect against being on the right side of a sed subst in config.status.
-# Protect against being in an unquoted here document in config.status.
-rm -f conftest.vals
-cat > conftest.hdr <<\EOF
-s/[\\&%]/\\&/g
-s%[\\$`]%\\&%g
-s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
-s%ac_d%ac_u%gp
-s%ac_u%ac_e%gp
-EOF
-sed -n -f conftest.hdr confdefs.h > conftest.vals
-rm -f conftest.hdr
-
-# This sed command replaces #undef with comments.  This is necessary, for
-# example, in the case of _POSIX_SOURCE, which is predefined and required
-# on some systems where configure will not decide to define it.
-cat >> conftest.vals <<\EOF
-s%^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
-EOF
-
-# Break up conftest.vals because some shells have a limit on
-# the size of here documents, and old seds have small limits too.
-
-rm -f conftest.tail
-while :
-do
-  ac_lines=`grep -c . conftest.vals`
-  # grep -c gives empty output for an empty file on some AIX systems.
-  if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
-  # Write a limited-size here document to conftest.frag.
-  echo '  cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
-  sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
-  echo 'CEOF
-  sed -f conftest.frag conftest.in > conftest.out
-  rm -f conftest.in
-  mv conftest.out conftest.in
-' >> $CONFIG_STATUS
-  sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
-  rm -f conftest.vals
-  mv conftest.tail conftest.vals
-done
-rm -f conftest.vals
-
-cat >> $CONFIG_STATUS <<\EOF
-  rm -f conftest.frag conftest.h
-  echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
-  cat conftest.in >> conftest.h
-  rm -f conftest.in
-  if cmp -s $ac_file conftest.h 2>/dev/null; then
-    echo "$ac_file is unchanged"
-    rm -f conftest.h
-  else
-    # Remove last slash and all that follows it.  Not all systems have dirname.
-      ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
-      if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
-      # The file is in a subdirectory.
-      test ! -d "$ac_dir" && mkdir "$ac_dir"
-    fi
-    rm -f $ac_file
-    mv conftest.h $ac_file
-  fi
-fi; done
-
-EOF
-
-cat >> $CONFIG_STATUS <<EOF
-ac_sources="`echo $libc_link_sources`"
-ac_dests="`echo $libc_link_dests`"
-EOF
-
-cat >> $CONFIG_STATUS <<\EOF
-srcdir=$ac_given_srcdir
-while test -n "$ac_sources"; do
-  set $ac_dests; ac_dest=$1; shift; ac_dests=$*
-  set $ac_sources; ac_source=$1; shift; ac_sources=$*
-
-  echo "linking $srcdir/$ac_source to $ac_dest"
-
-  if test ! -r $srcdir/$ac_source; then
-    { echo "configure: error: $srcdir/$ac_source: File not found" 1>&2; exit 1; }
-  fi
-  rm -f $ac_dest
-
-  # Make relative symlinks.
-  # Remove last slash and all that follows it.  Not all systems have dirname.
-  ac_dest_dir=`echo $ac_dest|sed 's%/[^/][^/]*$%%'`
-  if test "$ac_dest_dir" != "$ac_dest" && test "$ac_dest_dir" != .; then
-    # The dest file is in a subdirectory.
-    test ! -d "$ac_dest_dir" && mkdir "$ac_dest_dir"
-    ac_dest_dir_suffix="/`echo $ac_dest_dir|sed 's%^\./%%'`"
-    # A "../" for each directory in $ac_dest_dir_suffix.
-    ac_dots=`echo $ac_dest_dir_suffix|sed 's%/[^/]*%../%g'`
-  else
-    ac_dest_dir_suffix= ac_dots=
-  fi
-
-  case "$srcdir" in
-  [/$]*) ac_rel_source="$srcdir/$ac_source" ;;
-  *) ac_rel_source="$ac_dots$srcdir/$ac_source" ;;
-  esac
-
-  # Make a symlink if possible; otherwise try a hard link.
-  if ln -s $ac_rel_source $ac_dest 2>/dev/null ||
-    ln $srcdir/$ac_source $ac_dest; then :
-  else
-    { echo "configure: error: can not link $ac_dest to $srcdir/$ac_source" 1>&2; exit 1; }
-  fi
-done
-EOF
-cat >> $CONFIG_STATUS <<EOF
-echo '$config_vars' >> config.make; test -d bits || mkdir bits
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-
-exit 0
-EOF
-chmod +x $CONFIG_STATUS
-rm -fr confdefs* $ac_clean_files
-test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
-
-if test "$no_recursion" != yes; then
-
-  # Remove --cache-file and --srcdir arguments so they do not pile up.
-  ac_sub_configure_args=
-  ac_prev=
-  for ac_arg in $ac_configure_args; do
-    if test -n "$ac_prev"; then
-      ac_prev=
-      continue
-    fi
-    case "$ac_arg" in
-    -cache-file | --cache-file | --cache-fil | --cache-fi \
-    | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-      ac_prev=cache_file ;;
-    -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-    | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-      ;;
-    -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-      ac_prev=srcdir ;;
-    -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-      ;;
-    *) ac_sub_configure_args="$ac_sub_configure_args $ac_arg" ;;
-    esac
-  done
-
-  for ac_config_dir in $add_ons; do
-
-    # Do not complain, so a configure script can configure whichever
-    # parts of a large source tree are present.
-    if test ! -d $srcdir/$ac_config_dir; then
-      continue
-    fi
-
-    echo configuring in $ac_config_dir
-
-    case "$srcdir" in
-    .) ;;
-    *)
-      if test -d ./$ac_config_dir || mkdir ./$ac_config_dir; then :;
-      else
-        { echo "configure: error: can not create `pwd`/$ac_config_dir" 1>&2; exit 1; }
-      fi
-      ;;
-    esac
-
-    ac_popdir=`pwd`
-    cd $ac_config_dir
-
-      # A "../" for each directory in /$ac_config_dir.
-      ac_dots=`echo $ac_config_dir|sed -e 's%^\./%%' -e 's%[^/]$%&/%' -e 's%[^/]*/%../%g'`
-
-    case "$srcdir" in
-    .) # No --srcdir option.  We are building in place.
-      ac_sub_srcdir=$srcdir ;;
-    /*) # Absolute path.
-      ac_sub_srcdir=$srcdir/$ac_config_dir ;;
-    *) # Relative path.
-      ac_sub_srcdir=$ac_dots$srcdir/$ac_config_dir ;;
-    esac
-
-    # Check for guested configure; otherwise get Cygnus style configure.
-    if test -f $ac_sub_srcdir/configure; then
-      ac_sub_configure=$ac_sub_srcdir/configure
-    elif test -f $ac_sub_srcdir/configure.in; then
-      ac_sub_configure=$ac_configure
-    else
-      echo "configure: warning: no configuration information is in $ac_config_dir" 1>&2
-      ac_sub_configure=
-    fi
-
-    # The recursion is here.
-    if test -n "$ac_sub_configure"; then
-
-      # Make the cache file name correct relative to the subdirectory.
-      case "$cache_file" in
-      /*) ac_sub_cache_file=$cache_file ;;
-      *) # Relative path.
-        ac_sub_cache_file="$ac_dots$cache_file" ;;
-      esac
-  case "$ac_given_INSTALL" in
-        [/$]*) INSTALL="$ac_given_INSTALL" ;;
-        *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
-        esac
-
-      echo "running ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir"
-      # The eval makes quoting arguments work.
-      if eval ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir
-      then :
-      else
-        { echo "configure: error: $ac_sub_configure failed for $ac_config_dir" 1>&2; exit 1; }
-      fi
-    fi
-
-    cd $ac_popdir
-  done
-fi
-
diff --git a/configure.in b/configure.in
index 9ac5f03dbd..3f5a754250 100644
--- a/configure.in
+++ b/configure.in
@@ -155,8 +155,8 @@ m680?0)		base_machine=m68k machine=m68k/$machine ;;
 m68k)		base_machine=m68k machine=m68k/m68020 ;;
 m88???)		base_machine=m88k machine=m88k/$machine ;;
 m88k)		base_machine=m88k machine=m88k/m88100 ;;
-mips*)		base_machine=mips machine=mips/$machine ;;
 mips64*)	base_machine=mips64 machine=mips/mips64/$machine ;;
+mips*)		base_machine=mips machine=mips/$machine ;;
 sparc[6789])	base_machine=sparc machine=sparc/$machine ;;
 supersparc)	base_machine=sparc machine=sparc/sparc8 ;;
 sparc64)	base_machine=sparc64 machine=sparc64/$machine ;;
diff --git a/elf/Makefile b/elf/Makefile
index ef9207c07b..269a872969 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -20,7 +20,7 @@
 
 subdir		:= elf
 
-headers		= elf.h bits/elfclass.h link.h dlfcn.h
+headers		= elf.h bits/elfclass.h bits/dlfcn.h link.h dlfcn.h
 routines	= $(dl-routines) dl-open dl-close dl-symbol dl-support \
 		  dl-version enbl-secure
 
@@ -88,6 +88,30 @@ $(objpfx)dl-allobjs.so: $(rtld-routines:%=$(objpfx)%.so)
 $(objpfx)librtld.so: $(objpfx)dl-allobjs.so $(common-objpfx)libc_pic.a
 	$(reloc-link) '-Wl,-(' $^ -lgcc '-Wl,-)'
 
+# Do we need a linker script?
+rtld-ldscript-in := $(firstword $(wildcard $(+sysdep_dirs:%=%/rtld-ldscript.in)))
+ifneq (,$(rtld-ldscript-in))
+LDFLAGS-rtld = -T $(objpfx)rtld-ldscript
+
+before-compile += $(objpfx)rtld-ldscript
+rtld-parms = $(wildcard $(+sysdep_dirs:%=%/rtld-parms))
+include $(rtld-parms)
+generated += rtld-ldscript
+$(objpfx)rtld-ldscript: $(rtld-ldscript-in) $(rtld-parms)
+	sed -e 's#@@rtld-oformat@@#$(rtld-oformat)#' \
+	    -e 's#@@rtld-arch@@#$(rtld-arch)#' \
+	    -e 's#@@rtld-entry@@#$(rtld-entry)#' \
+	    -e 's#@@rtld-base@@#$(rtld-base)#' $< >$@
+
+$(objpfx)ld.so: $(objpfx)librtld.so $(objpfx)rtld-ldscript
+	$(rtld-link) -Wl,-soname=$(rtld-installed-name)
+
+define rtld-link
+$(LINK.o) -nostdlib -nostartfiles -shared -o $@ \
+	  -Wl,-rpath=$(default-rpath) $(LDFLAGS-rtld) \
+	  $(filter-out $(objpfx)rtld-ldscript,$^)
+endef
+else
 $(objpfx)ld.so: $(objpfx)librtld.so
 	$(rtld-link) -Wl,-soname=$(rtld-installed-name)
 
@@ -95,6 +119,7 @@ define rtld-link
 $(LINK.o) -nostdlib -nostartfiles -shared -o $@ \
 	  -Wl,-rpath=$(default-rpath) $^
 endef
+endif
 
 # The dl code in the static libc needs a default library path.
 CFLAGS-dl-support.c = -D'DEFAULT_RPATH="$(default-rpath)"'
diff --git a/elf/dl-load.c b/elf/dl-load.c
index 10cc074a6a..87859219f1 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
@@ -44,6 +44,15 @@
 #define MAP_COPY	MAP_PRIVATE
 #endif
 
+/* Some systems link their relocatable objects for another base address
+   than 0.  We want to know the base address for these such that we can
+   subtract this address from the segment addresses during mapping.
+   This results in a more efficient address space usage.  Defaults to
+   zero for almost all systems.  */
+#ifndef MAP_BASE_ADDR
+#define MAP_BASE_ADDR(l)	0
+#endif
+
 
 #include <endian.h>
 #if BYTE_ORDER == BIG_ENDIAN
@@ -335,7 +344,8 @@ _dl_map_object_from_fd (char *name, int fd, char *realname,
  	caddr_t mapat;
 	ElfW(Addr) mappref;
 	size_t maplength = loadcmds[nloadcmds - 1].allocend - c->mapstart;
-	mappref = ELF_PREFERRED_ADDRESS (loader, maplength, c->mapstart);
+	mappref = (ELF_PREFERRED_ADDRESS (loader, maplength, c->mapstart)
+		   - MAP_BASE_ADDR (l));
 	mapat = map_segment (mappref, maplength, c->prot, 0, c->mapoff);
 	l->l_addr = (ElfW(Addr)) mapat - c->mapstart;
 
diff --git a/elf/dlfcn.h b/elf/dlfcn.h
index 9b06988e96..9db5fb4635 100644
--- a/elf/dlfcn.h
+++ b/elf/dlfcn.h
@@ -22,15 +22,8 @@
 
 #include <features.h>
 
-/* The MODE argument to `dlopen' contains one of the following: */
-#define RTLD_LAZY	0x001	/* Lazy function call binding.  */
-#define RTLD_NOW	0x002	/* Immediate function call binding.  */
-#define	RTLD_BINDING_MASK 0x3	/* Mask of binding time value.  */
-
-/* If the following bit is set in the MODE argument to `dlopen',
-   the symbols of the loaded object and its dependencies are made
-   visible as if the object were linked directly into the program.  */
-#define RTLD_GLOBAL	0x100
+/* Collect various system dependand definitions and declarations.  */
+#include <bits/dlfcn.h>
 
 /* 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
diff --git a/elf/elf.h b/elf/elf.h
index 63d36b141c..d01bc90c90 100644
--- a/elf/elf.h
+++ b/elf/elf.h
@@ -741,6 +741,8 @@ typedef struct
 #define E_MIPS_ARCH_1	  0x00000000	/* -mips1 code.  */
 #define E_MIPS_ARCH_2	  0x10000000	/* -mips2 code.  */
 #define E_MIPS_ARCH_3	  0x20000000	/* -mips3 code.  */
+#define E_MIPS_ARCH_4	  0x30000000	/* -mips4 code.  */
+#define E_MIPS_ARCH_5	  0x40000000	/* -mips5 code.  */
 
 /* Special section indices.  */
 
@@ -810,6 +812,8 @@ typedef struct
 /* Legal values for p_type field of Elf32_Phdr.  */
 
 #define PT_MIPS_REGINFO	0x70000000	/* Register usage information */
+#define PT_MIPS_RTPROC  0x70000001	/* Runtime procedure table. */
+#define PT_MIPS_OPTIONS 0x70000002
 
 /* Legal values for d_tag field of Elf32_Dyn.  */
 
diff --git a/elf/rtld.c b/elf/rtld.c
index 22c1059fd2..a025757e05 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -25,6 +25,7 @@
 #include <sys/mman.h>		/* Check if MAP_ANON is defined.  */
 #include <stdio-common/_itoa.h>
 #include <assert.h>
+#include <entry.h>
 #include "dynamic-link.h"
 
 
@@ -137,7 +138,7 @@ _dl_start (void *arg)
 /* Now life is peachy; we can do all normal operations.
    On to the real work.  */
 
-void _start (void);
+void ENTRY_POINT (void);
 
 /* Some helper functions.  */
 
@@ -268,7 +269,7 @@ dl_main (const ElfW(Phdr) *phdr,
   /* Set up a flag which tells we are just starting.  */
   _dl_starting_up = 1;
 
-  if (*user_entry == (ElfW(Addr)) &_start)
+  if (*user_entry == (ElfW(Addr)) &ENTRY_POINT)
     {
       /* Ho ho.  We are not the program interpreter!  We are the program
 	 itself!  This means someone ran ld.so as a command.  Well, that
diff --git a/extra-lib.mk b/extra-lib.mk
index f2efb4bf7e..ad9f28cc65 100644
--- a/extra-lib.mk
+++ b/extra-lib.mk
@@ -49,4 +49,7 @@ endef
 object-suffixes-left = $(object-suffixes-$(lib))
 include $(patsubst %,$(..)o-iterator.mk,$(object-suffixes-$(lib)))
 
+# Add the version script to the dependencies of the shared library.
+$(objpfx)$(lib).so: $($(lib)-map)
+
 endif
diff --git a/inet/getnameinfo.c b/inet/getnameinfo.c
index 7c28e551b3..030447addb 100644
--- a/inet/getnameinfo.c
+++ b/inet/getnameinfo.c
@@ -72,16 +72,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 struct hostent *_addr2hostname_hosts(const char *, int, int);
 #endif /* HOSTTABLE */
 
-#ifndef MAXHOSTNAMELEN
-#define MAXHOSTNAMELEN 128
-#endif
-
 #ifndef min
 #define min(x,y) (((x) > (y)) ? (y) : (x))
 #endif /* min */
 
-static char *domain;
-static char domainbuffer[MAXHOSTNAMELEN];
+static const char *domain;
 
 static char *nrl_domainname(void)
 {
@@ -114,32 +109,34 @@ static char *nrl_domainname(void)
       }
 
       if (h && (c = strchr(h->h_name, '.'))) {
-	strcpy(domain = domainbuffer, ++c);
+	domain = __strdup (++c);
 	goto ret;
       }
 
-      if (!gethostname(domainbuffer, sizeof(domainbuffer))) {
-	if (c = strchr(domainbuffer, '.')) {
-	  domain = ++c;
-	  goto ret;
-	}
+      while (gethostname (tmpbuf, tmpbuflen)) {
+	tmpbuflen *= 2;
+	tmpbuf = __alloca (tmpbuflen);
+      }
+      if (c = strchr(tmpbuf, '.')) {
+	domain = __strdup(++c);
+	goto ret;
+      }
 
-	while (__gethostbyname_r(domainbuffer, &th, tmpbuf, tmpbuflen, &h,
-				 &herror)) {
-	  if (herror == NETDB_INTERNAL) {
-	    if (errno == ERANGE) {
-	      tmpbuflen *= 2;
-	      tmpbuf = __alloca(tmpbuflen);
-	    }
-	  } else {
-	    break;
+      while (__gethostbyname_r(tmpbuf, &th, tmpbuf, tmpbuflen, &h,
+			       &herror)) {
+	if (herror == NETDB_INTERNAL) {
+	  if (errno == ERANGE) {
+	    tmpbuflen *= 2;
+	    tmpbuf = __alloca(tmpbuflen);
 	  }
+	} else {
+	  break;
 	}
+      }
 
-	if (h && (c = strchr(h->h_name, '.'))) {
-	  strcpy(domain = domainbuffer, ++c);
-	  goto ret;
-	}
+      if (h && (c = strchr(h->h_name, '.'))) {
+	domain = __strdup(++c);
+	goto ret;
       }
 
       {
@@ -147,7 +144,9 @@ static char *nrl_domainname(void)
 
 	in_addr.s_addr = htonl(0x7f000001);
 
-	while (__gethostbyaddr_r((const char *)&in_addr, sizeof(struct in_addr), AF_INET, &th, tmpbuf, tmpbuflen, &h, &herror)) {
+	while (__gethostbyaddr_r((const char *)&in_addr,
+				 sizeof(struct in_addr), AF_INET, &th, tmpbuf,
+				 tmpbuflen, &h, &herror)) {
 	  if (herror == NETDB_INTERNAL) {
 	    if (errno == ERANGE) {
 	      tmpbuflen *= 2;
@@ -159,7 +158,7 @@ static char *nrl_domainname(void)
 	}
 
 	if (h && (c = strchr(h->h_name, '.'))) {
-	  domain = domainbuffer, ++c;
+	  domain = __strdup(++c);
 	  goto ret;
 	}
       }
@@ -168,7 +167,7 @@ static char *nrl_domainname(void)
 
   ret:
     __libc_lock_unlock (lock);
-  };
+  }
 
   return domain;
 };
diff --git a/isomac.c b/isomac.c
index f1d2d7d4a1..47040e61e6 100644
--- a/isomac.c
+++ b/isomac.c
@@ -185,6 +185,7 @@ char *CC;
 /* The -I parameters for CC to find all headers.  */
 char *INC;
 
+static char *xstrndup (const char *, size_t);
 static const char **get_null_defines (void);
 static int check_header (const char *, const char **);
 
@@ -222,6 +223,20 @@ main (int argc, char *argv[])
 }
 
 
+static char *
+xstrndup (const char *s, size_t n)
+{
+  size_t len = n;
+  char *new = malloc (len + 1);
+
+  if (new == NULL)
+    return NULL;
+
+  new[len] = '\0';
+  return memcpy (new, s, len);
+}
+
+
 static const char **
 get_null_defines (void)
 {
@@ -285,7 +300,7 @@ get_null_defines (void)
       start = &line[8];
       for (end = start + 1; !isspace (*end) && *end != '\0'; ++end)
 	;
-      result[result_len++] = strndup (start, end - start);
+      result[result_len++] = xstrndup (start, end - start);
 
       if (first)
 	{
diff --git a/libio/strops.c b/libio/strops.c
index ee2ed16c51..afc293bd7d 100644
--- a/libio/strops.c
+++ b/libio/strops.c
@@ -88,7 +88,7 @@ DEFUN(_IO_str_init_static, (fp, ptr, size, pstart),
   if (pstart)
     {
       fp->_IO_write_ptr = pstart;
-      fp->_IO_write_end = pstart;
+      fp->_IO_write_end = ptr + size;
       fp->_IO_read_end = pstart;
     }
   else
@@ -158,7 +158,7 @@ DEFUN(_IO_str_overflow, (fp, c),
 	  fp->_IO_write_ptr = new_buf + (fp->_IO_write_ptr - old_buf);
 
 	  fp->_IO_write_base = new_buf;
-	  fp->_IO_write_end = new_buf + (fp->_IO_write_end - old_buf);
+	  fp->_IO_write_end = fp->_IO_buf_end;
 	}
     }
 
diff --git a/login/Makefile b/login/Makefile
index 6ee21d2285..407330707b 100644
--- a/login/Makefile
+++ b/login/Makefile
@@ -22,7 +22,7 @@
 
 subdir	:= login
 
-headers	:= utmp.h bits/utmp.h lastlog.h pty.h
+headers	:= utmp.h bits/utmp.h utmpx.h bits/utmpx.h lastlog.h pty.h
 
 routines := getutent getutent_r getutid getutline getutid_r getutline_r \
 	    utmp_file utmp_daemon utmpname updwtmp
diff --git a/login/getutent.c b/login/getutent.c
index e9462db18d..eb99158592 100644
--- a/login/getutent.c
+++ b/login/getutent.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
@@ -25,7 +25,7 @@ static struct utmp buffer;
 
 
 struct utmp *
-getutent (void)
+__getutent (void)
 {
   struct utmp *result;
 
@@ -34,3 +34,5 @@ getutent (void)
 
   return result;
 }
+weak_alias (__getutent, getutent)
+weak_alias (__getutent, getutxent)
diff --git a/login/getutent_r.c b/login/getutent_r.c
index 340e4747bd..a50e2786fd 100644
--- a/login/getutent_r.c
+++ b/login/getutent_r.c
@@ -63,6 +63,7 @@ __setutent (void)
   __libc_lock_unlock (__libc_utmp_lock);
 }
 weak_alias (__setutent, setutent)
+weak_alias (__setutent, setutxent)
 
 
 static int
@@ -105,6 +106,7 @@ __endutent (void)
   __libc_lock_unlock (__libc_utmp_lock);
 }
 weak_alias (__endutent, endutent)
+weak_alias (__endutent, endutxent)
 
 
 static void
@@ -154,8 +156,9 @@ __pututline (const struct utmp *data)
   return buffer;
 }
 weak_alias (__pututline, pututline)
+weak_alias (__pututline, pututxline)
 
-
+     
 static struct utmp *
 pututline_unknown (const struct utmp *data)
 {
diff --git a/login/login.c b/login/login.c
index cf8632daab..075ef15056 100644
--- a/login/login.c
+++ b/login/login.c
@@ -43,7 +43,7 @@ tty_name (int fd, char **tty, size_t buf_len)
 	{
 	  rv = ttyname_r (fd, buf, buf_len);
 
-	  if (rv < 0 || memchr (buf, '\0', buf_len))
+	  if (rv != 0 || memchr (buf, '\0', buf_len))
 	    /* We either got an error, or we succeeded and the
 	       returned name fit in the buffer.  */
 	    break;
diff --git a/login/programs/database.c b/login/programs/database.c
index 3138ae605c..087ec54d26 100644
--- a/login/programs/database.c
+++ b/login/programs/database.c
@@ -42,13 +42,13 @@ static int replace_entry (utmp_database *database, int old_position,
 			  int new_position, const struct utmp *entry);
 static int store_entry (utmp_database *database, int position,
 			const struct utmp *entry);
-static int get_mtime (const char *file, time_t *timer);
+static int get_mtime (int filedes, time_t *timer);
 
 
-/* Open the database specified by FILE and merge it with the
-   contents of the old format file specified by OLD_FILE.  Returns a
-   pointer to a newly allocated structure describing the database, or
-   NULL on error.  */
+/* Open the database specified by FILE and merge it with the contents
+   of the old format file specified by OLD_FILE.  Returns a pointer to
+   a newly allocated structure describing the database, or NULL on
+   error.  */
 utmp_database *
 open_database (const char *file, const char *old_file)
 {
@@ -57,31 +57,54 @@ open_database (const char *file, const char *old_file)
   /* Allocate memory.  */
   database = (utmp_database *) malloc (sizeof (utmp_database));
   if (database == NULL)
-    return NULL;
+    {
+      error (0, 0, _("memory exhausted"));
+      return NULL;
+    }
 
   memset (database, 0, sizeof (utmp_database));
 
-  /* Open database.  */
-  database->fd = open (file, O_RDWR);
+  /* Open database, create it if it doesn't exist already.  */
+  database->fd = open (file, O_RDWR | O_CREAT);
   if (database->fd < 0)
-    goto fail;
+    {
+      error (0, errno, "%s", file);
+      goto return_error;
+    }
 
-  database->old_fd = open (old_file, O_RDWR);
-  if (database->old_fd < 0)
-    goto fail;
+  database->file = strdup (file);
+  if (database->file == NULL)
+    {
+      error (0, 0, _("memory exhausted"));
+      goto return_error;
+    }
+
+  if (old_file)
+    {
+      database->old_fd = open (old_file, O_RDWR);
+      if (database->old_fd < 0)
+	{
+	  error (0, errno, "%s", old_file);
+	  goto return_error;
+	}
   
-  if ((file && !(database->file = strdup (file)))
-      || (old_file && !(database->old_file = strdup (old_file))))
-    goto fail;
+      database->old_file = strdup (old_file);
+      if (database->old_file == NULL)
+	{
+	  error (0, 0, _("memory exhausted"));
+	  goto return_error;
+	}
+    }
 
-  if (initialize_database (database) < 0
-      || synchronize_database (database) < 0)
-    goto fail;
+  /* Initialize database.  */
+  if (initialize_database (database) < 0)
+    goto return_error;
   
   return database;
 
-fail:
+return_error:
   close_database (database);
+  
   return NULL;
 }
 
@@ -100,8 +123,12 @@ synchronize_database (utmp_database *database)
       
       curtime = time (NULL);
       
-      if (get_mtime (database->old_file, &mtime) < 0)
-	return -1;
+      if (get_mtime (database->old_fd, &mtime) < 0)
+	{
+	  error (0, errno, _("%s: cannot get modification time"),
+		 database->old_file);
+	  return -1;
+	}
       
       if (mtime >= database->mtime)
 	{
@@ -118,7 +145,10 @@ synchronize_database (utmp_database *database)
 		  || !compare_entry (&old_entry, &entry))
 		{
 		  if (write_entry (database, position, &old_entry) < 0)
-		    return -1;
+		    {
+		      error (0, errno, "%s", database->file);
+		      return -1;
+		    }
 		}
 
 	      position++;
@@ -325,13 +355,19 @@ initialize_database (utmp_database *database)
 	      || entry.ut_type == OLD_TIME || entry.ut_type == NEW_TIME)
 	    {
 	      if (store_state_entry (database, position, &entry) < 0)
-		return -1;
+		{
+		  error (0, errno, "%s", database->file);
+		  return -1;
+		}
 	    }
 	  else
 #endif
 	    {
 	      if (store_process_entry (database, position, &entry) < 0)
-		return -1;
+		{
+		  error (0, errno, "%s", database->file);
+		  return -1;
+		}
 	    }
 
 	  /* Update position.  */
@@ -344,14 +380,17 @@ initialize_database (utmp_database *database)
 	    break;
 
 	  if (write_old_entry (database, position, &entry) < 0)
-	    return -1;
+	    {
+	      error (0, errno, "%s", database->file);
+	      return -1;
+	    }
 
 	  /* Update position.  */
 	  position++;
 	}
     }
 
-  return 0;
+  return synchronize_database (database);
 }
 
 
@@ -472,14 +511,14 @@ store_entry (utmp_database *database, int position,
 }
 
 
-/* Get modification time of FILE and put it in TIMER.  returns 0 if
-   successful, -1 if not.  */
+/* Get modification time of the file with file descriptor FILEDES and
+   put it in TIMER.  Returns 0 if successful, -1 if not.  */
 static int
-get_mtime (const char *file, time_t *timer)
+get_mtime (int filedes, time_t *timer)
 {
   struct stat st;
   
-  if (stat (file, &st) < 0)
+  if (fstat (filedes, &st) < 0)
     return -1;
 
   *timer = st.st_mtime;
diff --git a/login/programs/request.c b/login/programs/request.c
index 5e6bfa19cf..889ce0cba9 100644
--- a/login/programs/request.c
+++ b/login/programs/request.c
@@ -88,7 +88,7 @@ read_data (client_connection *connection)
     }
 
   if (nbytes < 0)
-    error (0, errno, "cannot read from client");
+    error (0, errno, _("cannot read from client"));
 
   return -1;
 }
@@ -117,7 +117,7 @@ write_data (client_connection *connection)
     }
 
   if (nbytes < 0)
-    error (0, errno, "cannot write to client");
+    error (0, errno, _("cannot write to client"));
 
   return -1;
 }
@@ -164,7 +164,7 @@ send_reply (client_connection *connection, const reply_header *reply)
   /* Check if the reply fits in the buffer.  */
   if ((size_t) (connection->write_end - connection->write_ptr) < reply->size)
     {
-      error (0, 0, "buffer overflow");
+      error (0, 0, _("buffer overflow"));
       return -1;
     }
 
diff --git a/login/programs/utmpd.c b/login/programs/utmpd.c
index 3c8d626a84..2fef776a69 100644
--- a/login/programs/utmpd.c
+++ b/login/programs/utmpd.c
@@ -139,12 +139,12 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
   
   /* Check if we are already running.  */
   if (check_pid (_PATH_UTMPDPID))
-    error (EXIT_FAILURE, 0, "already running");
+    error (EXIT_FAILURE, 0, _("already running"));
 
   /* Open UTMP database.  */
   utmp_db = open_database (_PATH_UTMP "x", _PATH_UTMP);
   if (utmp_db == NULL)
-    error (EXIT_FAILURE, errno, "%s", _PATH_UTMP);
+    exit (EXIT_FAILURE);
 
   /* Create sockets, with the right permissions.  */
   mask = umask (S_IXUSR | S_IXGRP | S_IXOTH);
@@ -156,7 +156,8 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
   /* Set the sockets up to accept connections.  */
   if (listen (ro_sock, MAX_CONNECTIONS) < 0
       || listen (rw_sock, MAX_CONNECTIONS) < 0)
-    error (EXIT_FAILURE, errno, "cannot enable socket to accept connections");
+    error (EXIT_FAILURE, errno,
+	   _("cannot enable socket to accept connections"));
 
   /* Behave like a daemon.  */
   if (!debug)
@@ -164,7 +165,7 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
       openlog ("utmpd", LOG_CONS | LOG_ODELAY, LOG_DAEMON);
       
       if (daemon (0, 0) < 0)
-	error (EXIT_FAILURE, errno, "cannot auto-background");
+	error (EXIT_FAILURE, errno, _("cannot auto-background"));
       forked = 1;
 
       if (write_pid (_PATH_UTMPDPID) < 0)
@@ -235,7 +236,7 @@ make_socket (const char *name)
   /* Create the socket.  */
   sock = socket (PF_UNIX, SOCK_STREAM, 0);
   if (sock < 0)
-    error (EXIT_FAILURE, errno, "cannot create socket");
+    error (EXIT_FAILURE, errno, _("cannot create socket"));
 
   /* Bind a name to the socket.  */
   addr.sun_family = AF_UNIX;
@@ -277,7 +278,7 @@ void handle_requests (void)
       read_fd_set = active_read_fd_set;
       write_fd_set = active_write_fd_set;
       if (select (FD_SETSIZE, &read_fd_set, &write_fd_set, NULL, NULL) < 0)
-	error (EXIT_FAILURE, errno, "cannot get input on sockets");
+	error (EXIT_FAILURE, errno, _("cannot get input on sockets"));
 
       /* Service all the sockets with input pending.  */
       for (fd = 0; fd < FD_SETSIZE; fd++)
@@ -290,7 +291,7 @@ void handle_requests (void)
 
 		  connection = accept_connection (fd, access);
 		  if (connection == NULL)
-		    error (0, errno, "cannot accept connection");
+		    error (0, errno, _("cannot accept connection"));
 
 		  FD_SET (connection->sock, &active_read_fd_set);
 		}
@@ -298,7 +299,7 @@ void handle_requests (void)
 		{
 		  connection = find_connection (fd);
 		  if (connection == NULL)
-		    error (EXIT_FAILURE, 0, "cannot find connection");
+		    error (EXIT_FAILURE, 0, _("cannot find connection"));
 
 		  if (read_data (connection) < 0)
 		    {
@@ -316,7 +317,7 @@ void handle_requests (void)
 	    {
 	      connection = find_connection (fd);
 	      if (connection == NULL)
-		error (EXIT_FAILURE, 0, "cannot find connection");
+		error (EXIT_FAILURE, 0, _("cannot find connection"));
 
 	      if (write_data (connection) < 0)
 		{
diff --git a/login/utmp_file.c b/login/utmp_file.c
index 51b33226e0..4e218d8baa 100644
--- a/login/utmp_file.c
+++ b/login/utmp_file.c
@@ -170,7 +170,7 @@ getutline_r_file (const struct utmp *line, struct utmp *buffer,
 		  struct utmp **result)
 {
   struct flock fl;
-  
+
   if (file_fd < 0 || file_offset == -1l)
     {
       *result = NULL;
@@ -215,7 +215,7 @@ unlock_return:
   fl.l_type = F_UNLCK;
   fcntl (file_fd, F_SETLKW, &fl);
 
-  return ((result == NULL) ? -1 : 0);
+  return ((*result == NULL) ? -1 : 0);
 }
 
 
@@ -251,7 +251,7 @@ internal_getut_r (const struct utmp *id, struct utmp *buffer)
 {
   int result = -1;
   struct flock fl;
-  
+
   /* Try to get the lock.  */
   memset (&fl, '\0', sizeof (struct flock));
   fl.l_type = F_RDLCK;
@@ -432,7 +432,7 @@ updwtmp_file (const char *file, const struct utmp *utmp)
   struct flock fl;
   off_t offset;
   int fd;
-  
+
   /* Open WTMP file.  */
   fd = open (file, O_WRONLY);
   if (fd < 0)
@@ -443,7 +443,7 @@ updwtmp_file (const char *file, const struct utmp *utmp)
   fl.l_type = F_WRLCK;
   fl.l_whence = SEEK_SET;
   fcntl (fd, F_SETLKW, &fl);
-  
+
   /* Remember original size of log file.  */
   offset = lseek (fd, 0, SEEK_END);
   if (offset % sizeof (struct utmp) != 0)
@@ -465,7 +465,7 @@ updwtmp_file (const char *file, const struct utmp *utmp)
     }
 
   result = 0;
-  
+
 unlock_return:
   /* And unlock the file.  */
   fl.l_type = F_UNLCK;
diff --git a/login/utmpx.h b/login/utmpx.h
new file mode 100644
index 0000000000..5873bf9310
--- /dev/null
+++ b/login/utmpx.h
@@ -0,0 +1,50 @@
+/* Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Mark Kettenis <kettenis@phys.uva.nl>, 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.  */
+
+#ifndef	_UTMPX_H
+#define	_UTMPX_H	1
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* Get system dependent values and data structures.  */
+#include <bits/utmpx.h>
+
+/* Open user accounting database.  */
+extern void *setutxent __P ((void));
+
+/* Close user accounting database.  */
+extern void endutxent __P ((void));
+
+/* Get the next entry from the user accounting database.  */
+extern struct utmpx *getutxent __P ((void));
+
+/* Get the user accounting database entry corresponding to ID.  */
+extern struct utmpx *getutxid __P ((const struct utmpx *__id));
+
+/* Get the user accounting database entry corresponding to LINE.  */
+extern struct utmpx *getutxline __P ((const struct utmpx *__line));
+
+/* Write the entry UTMPX into the user accounting database.  */
+extern struct utmpx *pututxline __P ((const struct utmpx *__utmpx));
+
+__END_DECLS
+
+#endif /* utmpx.h  */
diff --git a/misc/ttyslot.c b/misc/ttyslot.c
index 794cada0af..430f9c02d0 100644
--- a/misc/ttyslot.c
+++ b/misc/ttyslot.c
@@ -59,7 +59,7 @@ ttyslot()
 
 	setttyent();
 	for (cnt = 0; cnt < 3; ++cnt)
-		if (__ttyname_r (cnt, name, buflen) >= 0) {
+		if (__ttyname_r (cnt, name, buflen) == 0) {
 			if (p = rindex(name, '/'))
 				++p;
 			else
diff --git a/nis/ypclnt.c b/nis/ypclnt.c
index cc510b9541..85597144b2 100644
--- a/nis/ypclnt.c
+++ b/nis/ypclnt.c
@@ -22,6 +22,7 @@
 #include <fcntl.h>
 #include <bits/libc-lock.h>
 #include <rpc/rpc.h>
+#include <rpcsvc/nis.h>
 #include <rpcsvc/yp.h>
 #include <rpcsvc/ypclnt.h>
 #include <rpcsvc/ypupd.h>
@@ -39,7 +40,7 @@ typedef struct dom_binding dom_binding;
 
 static struct timeval TIMEOUT = {25, 0};
 static int const MAXTRIES = 5;
-static char __ypdomainname[MAXHOSTNAMELEN + 1] = "\0";
+static char __ypdomainname[NIS_MAXNAMELEN + 1] = "\0";
 __libc_lock_define_initialized (static, ypbindlist_lock)
 static dom_binding *__ypbindlist = NULL;
 
@@ -305,7 +306,7 @@ yp_get_default_domain (char **outdomain)
 
   if (__ypdomainname[0] == '\0')
     {
-      if (getdomainname (__ypdomainname, MAXHOSTNAMELEN))
+      if (getdomainname (__ypdomainname, NIS_MAXNAMELEN))
 	result = YPERR_NODOM;
       else
 	*outdomain = __ypdomainname;
diff --git a/setjmp/setjmp.h b/setjmp/setjmp.h
index 0bb6fd64ca..b36bf3c692 100644
--- a/setjmp/setjmp.h
+++ b/setjmp/setjmp.h
@@ -51,17 +51,17 @@ extern int __sigsetjmp __P ((jmp_buf __env, int __savemask));
 /* Set ENV to the current position and return 0, not saving the signal mask.
    This is just like `sigsetjmp (ENV, 0)'.
    The ISO C standard says `setjmp' is a macro.  */
-#define	setjmp(env)	__sigsetjmp ((env), 0)
+# define setjmp(env)	__sigsetjmp ((env), 0)
 #else
 /* We are in 4.3 BSD-compatibility mode in which `setjmp'
    saves the signal mask like `sigsetjmp (ENV, 1)'.  */
-#define	setjmp(env)	__sigsetjmp ((env), 1)
+# define setjmp(env)	__sigsetjmp ((env), 1)
 #endif /* Favor BSD.  */
 
-#ifdef __USE_BSD
+#if defined __USE_BSD || defined __USE_XOPEN
 /* Set ENV to the current position and return 0, not saving the signal mask.
    This is the 4.3 BSD name for ISO `setjmp'.  */
-#define _setjmp(env)	__sigsetjmp ((env), 0)
+# define _setjmp(env)	__sigsetjmp ((env), 0)
 #endif
 
 
@@ -69,13 +69,13 @@ extern int __sigsetjmp __P ((jmp_buf __env, int __savemask));
    `setjmp' call there return VAL, or 1 if VAL is 0.  */
 extern void longjmp __P ((jmp_buf __env, int __val))
      __attribute__ ((__noreturn__));
-#ifdef	__USE_BSD
+#if defined __USE_BSD || defined __USE_XOPEN
 /* Same.  Usually `_longjmp' is used with `_setjmp', which does not save
    the signal mask.  But it is how ENV was saved that determines whether
    `longjmp' restores the mask; `_longjmp' is just an alias.  */
 extern void _longjmp __P ((jmp_buf __env, int __val))
      __attribute__ ((__noreturn__));
-#endif /* Use BSD.  */
+#endif
 
 /* Internal machine-dependent function to restore context sans signal mask.  */
 extern void __longjmp __P ((__jmp_buf __env, int __val))
@@ -96,7 +96,7 @@ typedef jmp_buf sigjmp_buf;
 
 /* Store the calling environment in ENV, also saving the
    signal mask if SAVEMASK is nonzero.  Return 0.  */
-#define	sigsetjmp(env, savemask)	__sigsetjmp ((env), (savemask))
+# define sigsetjmp(env, savemask)	__sigsetjmp ((env), (savemask))
 
 /* Jump to the environment saved in ENV, making the
    sigsetjmp call there return VAL, or 1 if VAL is 0.
diff --git a/sysdeps/generic/Dist b/sysdeps/generic/Dist
index e82624a61c..bc9e492e4f 100644
--- a/sysdeps/generic/Dist
+++ b/sysdeps/generic/Dist
@@ -1,2 +1,3 @@
 make_siglist.c signame.c signame.h
 det_endian.c
+entry.h
diff --git a/sysdeps/generic/bits/dlfcn.h b/sysdeps/generic/bits/dlfcn.h
new file mode 100644
index 0000000000..79604fe8ff
--- /dev/null
+++ b/sysdeps/generic/bits/dlfcn.h
@@ -0,0 +1,33 @@
+/* System dependand definitions for run-time dynamic loading.
+   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.  */
+
+#ifndef	_BITS_DLFCN_H
+#define	_BITS_DLFCN_H 1
+
+/* The MODE argument to `dlopen' contains one of the following: */
+#define RTLD_LAZY	0x001	/* Lazy function call binding.  */
+#define RTLD_NOW	0x002	/* Immediate function call binding.  */
+#define	RTLD_BINDING_MASK 0x3	/* Mask of binding time value.  */
+
+/* If the following bit is set in the MODE argument to `dlopen',
+   the symbols of the loaded object and its dependencies are made
+   visible as if the object were linked directly into the program.  */
+#define RTLD_GLOBAL	0x100
+
+#endif	/* bits/dlfcn.h */
diff --git a/sysdeps/generic/dl-sysdep.c b/sysdeps/generic/dl-sysdep.c
index f10fca81fd..c5e85274b0 100644
--- a/sysdeps/generic/dl-sysdep.c
+++ b/sysdeps/generic/dl-sysdep.c
@@ -18,6 +18,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <elf.h>
+#include <entry.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/mman.h>
@@ -52,7 +53,7 @@ _dl_sysdep_start (void **start_argptr,
   gid_t egid = 0;
   unsigned int seen;
 
-  user_entry = (ElfW(Addr)) &_start;
+  user_entry = (ElfW(Addr)) &ENTRY_POINT;
   _dl_argc = *(long *) start_argptr;
   _dl_argv = (char **) start_argptr + 1;
   _environ = &_dl_argv[_dl_argc + 1];
diff --git a/sysdeps/generic/entry.h b/sysdeps/generic/entry.h
new file mode 100644
index 0000000000..cc0e1d88ab
--- /dev/null
+++ b/sysdeps/generic/entry.h
@@ -0,0 +1 @@
+#define ENTRY_POINT _start
diff --git a/sysdeps/gnu/bits/utmp.h b/sysdeps/gnu/bits/utmp.h
index db49ac845c..163f6427ec 100644
--- a/sysdeps/gnu/bits/utmp.h
+++ b/sysdeps/gnu/bits/utmp.h
@@ -16,35 +16,22 @@
    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>
+#ifndef _UTMP_H
+#error "Never use <bits/utmp.h> directly; include <utmpx.h> instead."
+#endif
 
 #include <paths.h>
 #include <sys/time.h>
 #include <sys/types.h>
 
 
-#define UT_UNKNOWN	0	/* for ut_type field */
-
-#define RUN_LVL		1
-#define BOOT_TIME	2
-#define NEW_TIME	3
-#define OLD_TIME	4
-
-#define INIT_PROCESS	5
-#define LOGIN_PROCESS	6
-#define USER_PROCESS	7
-#define DEAD_PROCESS	8
-#define ACCOUNTING	9
-
 #define UT_LINESIZE	32
 #define UT_NAMESIZE	32
 #define UT_HOSTSIZE	256
 
-__BEGIN_DECLS
 
+/* The structure describing an entry in the database of
+   previous logins.  */
 struct lastlog
 {
   time_t ll_time;
@@ -53,28 +40,8 @@ struct lastlog
 };
 
 
-/* XXX We are not ready to use this now.  It needs some more research.
-   Simly copying the behaviour of other implementations is no big
-   help.  */
-#if 0
-/* Which program created the record.  */
-enum utlogin
-{
-  unknown,
-  X,
-  local,
-  rlogin,
-  telnet,
-  rsh,
-  ftp,
-  screen,
-  splitvt,
-  xterm
-  /* More could be added here.  */
-};
-#endif
-
-
+/* The structure describing the status of a terminated process.  This
+   type is used in `struct utmp' below.  */
 struct exit_status
 {
   short int e_termination;	/* Process termination status.  */
@@ -82,16 +49,16 @@ struct exit_status
 };
 
 
+/* The structure describing an entry in the user accounting database.  */
 struct utmp
 {
   short int ut_type;		/* Type of login.  */
-  pid_t ut_pid;			/* Pid of login process.  */
-  char ut_line[UT_LINESIZE];	/* NUL-terminated devicename of tty.  */
-  char ut_id[4];		/* Inittab id. */
-  char ut_user[UT_NAMESIZE];	/* Username (not NUL terminated).  */
-#define ut_name	ut_user		/* Compatible field name for same.  */
+  pid_t ut_pid;			/* Process ID of login process.  */
+  char ut_line[UT_LINESIZE];	/* Devicename.  */
+  char ut_id[4];		/* Inittab ID.  */
+  char ut_user[UT_NAMESIZE];	/* Username.  */
   char ut_host[UT_HOSTSIZE];	/* Hostname for remote login.  */
-  struct exit_status ut_exit;	/* The exit status of a process marked
+  struct exit_status ut_exit;	/* Exit status of a process marked
 				   as DEAD_PROCESS.  */
   long ut_session;		/* Session ID, used for windowing.  */
   struct timeval ut_tv;		/* Time entry was made.  */
@@ -100,6 +67,7 @@ struct utmp
 };
 
 /* Backwards compatibility hacks.  */
+#define ut_name		ut_user
 #ifndef _NO_UT_TIME
 /* We have a problem here: `ut_time' is also used otherwise.  Define
    _NO_UT_TIME if the compiler complains.  */
@@ -108,6 +76,26 @@ struct utmp
 #define ut_xtime	ut_tv.tv_sec
 #define ut_addr		ut_addr_v6[0]
 
+
+/* Values for the `ut_type' field of a `struct utmp'.  */
+#define EMPTY		0	/* No valid user accounting information.  */
+
+#define RUN_LVL		1	/* The system's runlevel.  */
+#define BOOT_TIME	2	/* Time of system boot.  */
+#define NEW_TIME	3	/* Time after system clock changed.  */
+#define OLD_TIME	4	/* Time when system clock changed.  */
+
+#define INIT_PROCESS	5	/* Process spawned by the init process.  */
+#define LOGIN_PROCESS	6	/* Session leader of a logged in user.  */
+#define USER_PROCESS	7	/* Normal process.  */
+#define DEAD_PROCESS	8	/* Terminated process.  */
+
+#define ACCOUNTING	9
+
+/* Old Linux name for the EMPTY type.  */
+#define UT_UNKNOWN	EMPTY
+
+
 /* Tell the user that we have a modern system with UT_HOST, UT_PID,
    UT_TYPE, UT_ID and UT_TV fields.  */
 #define _HAVE_UT_TYPE	1
@@ -115,7 +103,3 @@ struct utmp
 #define _HAVE_UT_ID	1
 #define _HAVE_UT_TV	1
 #define _HAVE_UT_HOST	1
-
-__END_DECLS
-
-#endif /* !_UTMP_H_ */
diff --git a/sysdeps/gnu/bits/utmpx.h b/sysdeps/gnu/bits/utmpx.h
new file mode 100644
index 0000000000..4f1a876d0a
--- /dev/null
+++ b/sysdeps/gnu/bits/utmpx.h
@@ -0,0 +1,79 @@
+/* Structures and defenitions for the user accounting database.  GNU version.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   Contributed by Mark Kettenis <kettenis@phys.uva.nl>, 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.  */
+
+#ifndef _UTMPX_H
+#error "Never use <bits/utmpx.h> directly; include <utmpx.h> instead."
+#endif
+
+#include <bits/types.h>
+#include <sys/time.h>
+
+
+#define __UT_LINESIZE	32
+#define __UT_NAMESIZE	32
+#define __UT_HOSTSIZE	256
+
+   
+/* The structure describing the status of a terminated process.  This
+   type is used in `struct utmpx' below.  */
+struct __exit_status
+{
+  short int e_termination;	/* Process termination status.  */
+  short int e_exit;		/* Process exit status.  */
+};
+
+
+/* The structure describing an entry in the user accounting database.  */
+struct utmpx
+{
+  short int ut_type;		/* Type of login.  */
+  __pid_t ut_pid;		/* Process ID of login process.  */
+  char ut_line[__UT_LINESIZE];	/* Devicename.  */
+  char ut_id[4];		/* Inittab ID. */
+  char ut_user[__UT_NAMESIZE];	/* Username.  */
+  char ut_host[__UT_HOSTSIZE];	/* Hostname for remote login.  */
+  struct __exit_status ut_exit;	/* Exit status of a process marked
+				   as DEAD_PROCESS.  */
+  long ut_session;		/* Session ID, used for windowing.  */
+  struct timeval ut_tv;		/* Time entry was made.  */
+  __int32_t ut_addr_v6[4];	/* Internet address of remote host.  */
+  char pad[20];			/* Reserved for future use.  */
+};
+
+
+/* Values for the `ut_type' field of a `struct utmp'.  */
+#define EMPTY		0	/* No valid user accounting information.  */
+
+#define RUN_LVL		1	/* The system's runlevel.  */
+#define BOOT_TIME	2	/* Time of system boot.  */
+#define NEW_TIME	3	/* Time after system clock changed.  */
+#define OLD_TIME	4	/* Time when system clock changed.  */
+
+#define INIT_PROCESS	5	/* Process spawned by the init process.  */
+#define LOGIN_PROCESS	6	/* Session leader of a logged in user.  */
+#define USER_PROCESS	7	/* Normal process.  */
+#define DEAD_PROCESS	8	/* Terminated process.  */
+
+
+
+
+
+
+
+
diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h
index 64d36ca1a9..a83356fce1 100644
--- a/sysdeps/i386/dl-machine.h
+++ b/sysdeps/i386/dl-machine.h
@@ -237,6 +237,8 @@ _dl_start_user:\n\
 
 #ifdef RESOLVE
 
+extern char **_dl_argv;
+
 /* Perform the relocation specified by RELOC and SYM (which is fully resolved).
    MAP is the object containing the reloc.  */
 
@@ -275,6 +277,8 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
 	      strtab = ((void *) map->l_addr
 			+ map->l_info[DT_STRTAB]->d_un.d_ptr);
 	      _dl_sysdep_error ("Symbol `", strtab + refsym->st_name,
+				"' in `",
+				_dl_argv[0] ?: "<program name unknown>",
 				"' has different size in shared object, "
 				"consider re-linking\n", NULL);
 	    }
diff --git a/sysdeps/mips/bits/dlfcn.h b/sysdeps/mips/bits/dlfcn.h
new file mode 100644
index 0000000000..636da5662d
--- /dev/null
+++ b/sysdeps/mips/bits/dlfcn.h
@@ -0,0 +1,42 @@
+/* System dependand definitions for run-time dynamic loading.
+   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.  */
+
+#ifndef	_BITS_DLFCN_H
+#define	_BITS_DLFCN_H 1
+
+/* The MODE argument to `dlopen' contains one of the following: */
+#define RTLD_LAZY	0x001	/* Lazy function call binding.  */
+#define RTLD_NOW	0x002	/* Immediate function call binding.  */
+#define	RTLD_BINDING_MASK 0x3	/* Mask of binding time value.  */
+
+/* If the following bit is set in the MODE argument to `dlopen',
+   the symbols of the loaded object and its dependencies are made
+   visible as if the object were linked directly into the program.  */
+#define RTLD_GLOBAL	0x004
+
+__BEGIN_DECLS
+
+/* Some SGI specific calls that aren't implemented yet.  */
+extern void *sgidladd __P ((const char *, int));
+extern void *sgidlopen_version __P ((const char *, int, const char *, int));
+extern char *sgigetdsoversion __P ((const char *));
+
+__END_DECLS
+
+#endif	/* bits/dlfcn.h */
diff --git a/sysdeps/mips/bsd-_setjmp.S b/sysdeps/mips/bsd-_setjmp.S
index f519f19359..819a7018c4 100644
--- a/sysdeps/mips/bsd-_setjmp.S
+++ b/sysdeps/mips/bsd-_setjmp.S
@@ -23,14 +23,19 @@
 
 #include <sysdep.h>
 
+/* XXX Must this be __PIC__ ? --drepper */
 #ifdef PIC
 	.option pic2
 #endif
 ENTRY (_setjmp)
+	.set noreorder
 #ifdef PIC
 	.cpload t9
+	la	t9, C_SYMBOL_NAME (__sigsetjmp)
+	jr	t9
+#else
+	j	C_SYMBOL_NAME (__sigsetjmp)
 #endif
-	la t9, C_SYMBOL_NAME (__sigsetjmp)
-	nop
-	jr t9
-	li a1, 0		/* Pass a second argument of zero.  */
+	move	a1,zero		/* Pass a second argument of zero.  */
+	.set	reorder
+	.end	_setjmp
diff --git a/sysdeps/mips/bsd-setjmp.S b/sysdeps/mips/bsd-setjmp.S
index 9a22700718..f220404c2c 100644
--- a/sysdeps/mips/bsd-setjmp.S
+++ b/sysdeps/mips/bsd-setjmp.S
@@ -23,14 +23,19 @@
 
 #include <sysdep.h>
 
+/* XXX Must this be __PIC__ ? --drepper */
 #ifdef PIC
 	.option pic2
 #endif
 ENTRY (setjmp)
+	.set	noreorder
 #ifdef PIC
 	.cpload t9
+	la	t9, C_SYMBOL_NAME (__sigsetjmp)
+	jr	t9
+#else
+	j	C_SYMBOL_NAME (__sigsetjmp)
 #endif
-	la t9, C_SYMBOL_NAME (__sigsetjmp)
-	nop
-	jr t9
-	li a1, 1		/* Pass a second argument of one.  */
+	li	a1, 1		/* Pass a second argument of one.  */
+	.set	reorder
+	.end	setjmp
diff --git a/sysdeps/mips/dl-machine.h b/sysdeps/mips/dl-machine.h
index ff7d371025..cc7198b60e 100644
--- a/sysdeps/mips/dl-machine.h
+++ b/sysdeps/mips/dl-machine.h
@@ -24,6 +24,34 @@
 #define ELF_MACHINE_NAME "MIPS"
 
 #include <assert.h>
+#include <entry.h>
+
+#ifndef ENTRY_POINT
+#error ENTRY_POINT needs to be defined for MIPS.
+#endif
+
+#ifndef _RTLD_PROLOGUE
+#ifdef __STDC__
+#define _RTLD_PROLOGUE(entry) "\n\t.globl " #entry \
+			      "\n\t.ent " #entry \
+			      "\n\t" #entry ":\n\t"
+#else
+#define _RTLD_PROLOGUE(entry) "\n\t.globl entry\n\t.ent entry\n\t entry:\n\t"
+#endif
+#endif
+
+#ifndef _RTLD_EPILOGUE
+#ifdef __STDC__
+#define _RTLD_EPILOGUE(entry) "\t.end " #entry "\n"
+#else
+#define _RTLD_EPILOGUE(entry) "\t.end entry\n"
+#endif
+#endif
+
+/* I have no idea what I am doing. */
+#define ELF_MACHINE_RELOC_NOPLT			-1
+#define elf_machine_lookup_noplt_p(type)	(1)
+#define elf_machine_lookup_noexec_p(type)	(0)
 
 /* Translate a processor specific dynamic tag to the index
    in l_info array.  */
@@ -34,6 +62,18 @@
 #define ELF_MACHINE_ALIGN_MASK 0xffff
 #endif
 
+/*
+ * MIPS libraries are usually linked to a non-zero base address.  We
+ * subtrace the base address from the address where we map the object
+ * to.  This results in more efficient address space usage.
+ */
+#if 0
+#define MAP_BASE_ADDR(l) ((l)->l_info[DT_MIPS(BASE_ADDRESS)] ? \
+			  (l)->l_info[DT_MIPS(BASE_ADDRESS)]->d_un.d_ptr : 0)
+#else
+#define MAP_BASE_ADDR(l) 0x5ffe0000
+#endif
+
 /* If there is a DT_MIPS_RLD_MAP entry in the dynamic section, fill it in
    with the run-time address of the r_debug structure  */
 #define ELF_MACHINE_DEBUG_SETUP(l,r) \
@@ -43,7 +83,7 @@ do { if ((l)->l_info[DT_MIPS (RLD_MAP)]) \
    } while (0)
 
 /* Return nonzero iff E_MACHINE is compatible with the running host.  */
-static inline int
+static inline int __attribute__ ((unused))
 elf_machine_matches_host (ElfW(Half) e_machine)
 {
   switch (e_machine)
@@ -56,6 +96,16 @@ elf_machine_matches_host (ElfW(Half) e_machine)
     }
 }
 
+/* Return the link-time address of _DYNAMIC.  Conveniently, this is the
++   first element of the GOT.  This must be inlined in a function which
++   uses global data.  */
++static inline ElfW(Addr)
++elf_machine_dynamic (void)
++{
++  register ElfW(Addr) gp asm ("$28");
++  return * (ElfW(Addr) *) (gp - 0x7ff0);
++}
++
 static inline ElfW(Addr) *
 elf_mips_got_from_gpreg (ElfW(Addr) gpreg)
 {
@@ -75,6 +125,16 @@ elf_machine_got (void)
 }
 
 
+/* Return the link-time address of _DYNAMIC.  Conveniently, this is the
+   first element of the GOT.  This must be inlined in a function which
+   uses global data.  */
+static inline ElfW(Addr)
+elf_machine_dynamic (void)
+{
+  register ElfW(Addr) gp asm ("$28");
+  return * (ElfW(Addr) *) (gp - 0x7ff0);
+}
+
 /* Return the run-time load address of the shared object.  */
 static inline ElfW(Addr)
 elf_machine_load_address (void)
@@ -87,7 +147,9 @@ elf_machine_load_address (void)
        "	nop\n"
        "here:	dsubu %0, $31, %0\n"
        "	.set reorder\n"
-       : "=r" (addr));
+       :	"=r" (addr)
+       :	/* No inputs */
+       :	"$31");
 #else
   asm ("	.set noreorder\n"
        "	la %0, here\n"
@@ -95,7 +157,9 @@ elf_machine_load_address (void)
        "	nop\n"
        "here:	subu %0, $31, %0\n"
        "	.set reorder\n"
-       : "=r" (addr));
+       :	"=r" (addr)
+       :	/* No inputs */
+       :	"$31");
 #endif
   return addr;
 }
@@ -105,7 +169,7 @@ elf_machine_load_address (void)
 
 /* Relocate GOT. */
 static inline void
-elf_machine_got_rel (struct link_map *map)
+elf_machine_got_rel (struct link_map *map, int lazy)
 {
   ElfW(Addr) *got;
   ElfW(Sym) *sym;
@@ -119,7 +183,7 @@ elf_machine_got_rel (struct link_map *map)
       const ElfW(Sym) *ref = sym; \
       ElfW(Addr) sym_loadaddr; \
       sym_loadaddr = _dl_lookup_symbol (strtab + sym->st_name, &ref, scope, \
-					map->l_name, DL_LOOKUP_NOPLT); \
+					map->l_name, ELF_MACHINE_RELOC_NOPLT);\
       (ref)? sym_loadaddr + ref->st_value: 0; \
     })
 
@@ -151,7 +215,7 @@ elf_machine_got_rel (struct link_map *map)
 	{
 	  if (ELFW(ST_TYPE) (sym->st_info) == STT_FUNC)
 	    {
-	      if (sym->st_value /* && maybe_stub (sym->st_value) */)
+	      if (sym->st_value && lazy)
 		*got = sym->st_value + map->l_addr;
 	      else
 		*got = RESOLVE_GOTSYM (sym);
@@ -163,7 +227,7 @@ elf_machine_got_rel (struct link_map *map)
 	*got = RESOLVE_GOTSYM (sym);
       else if (ELFW(ST_TYPE) (sym->st_info) == STT_FUNC
 	       && *got != sym->st_value
-	       /* && maybe_stub (*got) */)
+	       && lazy)
 	*got += map->l_addr;
       else if (ELFW(ST_TYPE) (sym->st_info) == STT_SECTION)
 	{
@@ -193,6 +257,11 @@ elf_machine_runtime_setup (struct link_map *l, int lazy)
   extern void _dl_runtime_resolve (ElfW(Word));
   extern int _dl_mips_gnu_objects;
 
+#ifdef RTLD_BOOTSTRAP
+    {
+      return lazy;
+    }
+#endif
   if (lazy)
     {
       /* The GOT entries for functions have not yet been filled in.
@@ -216,7 +285,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy)
     }
 
   /* Relocate global offset table.  */
-  elf_machine_got_rel (l);
+  elf_machine_got_rel (l, lazy);
 
   return lazy;
 }
@@ -282,6 +351,7 @@ elf_machine_runtime_link_map (ElfW(Addr) gpreg, ElfW(Addr) stub_pc)
     }
 
   _dl_signal_error (0, NULL, "cannot find runtime link map");
+  return NULL;
 }
 
 /* Mips has no PLT but define elf_machine_relplt to be elf_machine_rel. */
@@ -295,211 +365,220 @@ elf_machine_runtime_link_map (ElfW(Addr) gpreg, ElfW(Addr) stub_pc)
    to usual c arguments.  */
 
 #ifdef __mips64
-#define ELF_MACHINE_RUNTIME_TRAMPOLINE \
-/* The flag _dl_mips_gnu_objects is set if all dynamic objects are \
-   generated by the gnu linker. */\
-int _dl_mips_gnu_objects = 1;\
-\
+#define ELF_MACHINE_RUNTIME_TRAMPOLINE					      \
+/* The flag _dl_mips_gnu_objects is set if all dynamic objects are	      \
+   generated by the gnu linker. */					      \
+int _dl_mips_gnu_objects = 1;						      \
+									      \
 /* This is called from assembly stubs below which the compiler can't see.  */ \
-static ElfW(Addr) \
-__dl_runtime_resolve (ElfW(Word), ElfW(Word), ElfW(Addr), ElfW(Addr)) \
-                  __attribute__ ((unused)); \
-\
-static ElfW(Addr) \
-__dl_runtime_resolve (ElfW(Word) sym_index,\
-		      ElfW(Word) return_address,\
-		      ElfW(Addr) old_gpreg,\
-		      ElfW(Addr) stub_pc)\
-{\
-  struct link_map *l = elf_machine_runtime_link_map (old_gpreg, stub_pc);\
-  const ElfW(Sym) *const symtab\
-    = (const ElfW(Sym) *) (l->l_addr + l->l_info[DT_SYMTAB]->d_un.d_ptr);\
-  const char *strtab\
-    = (void *) (l->l_addr + l->l_info[DT_STRTAB]->d_un.d_ptr);\
-  const ElfW(Addr) *got\
-    = (const ElfW(Addr) *) (l->l_addr + l->l_info[DT_PLTGOT]->d_un.d_ptr);\
-  const ElfW(Word) local_gotno\
-    = (const ElfW(Word)) l->l_info[DT_MIPS (LOCAL_GOTNO)]->d_un.d_val;\
-  const ElfW(Word) gotsym\
-    = (const ElfW(Word)) l->l_info[DT_MIPS (GOTSYM)]->d_un.d_val;\
-  const ElfW(Sym) *definer;\
-  ElfW(Addr) loadbase;\
-  ElfW(Addr) funcaddr;\
-  struct link_map **scope;\
-\
-  /* Look up the symbol's run-time value.  */\
-  scope = _dl_object_relocation_scope (l);\
-  definer = &symtab[sym_index];\
-\
-  loadbase = _dl_lookup_symbol (strtab + definer->st_name, &definer,\
-				scope, l->l_name, DL_LOOKUP_NOPLT);\
-\
-  *_dl_global_scope_end = NULL;\
-\
-  /* Apply the relocation with that value.  */\
-  funcaddr = loadbase + definer->st_value;\
-  *(got + local_gotno + sym_index - gotsym) = funcaddr;\
-\
-  return funcaddr;\
-}\
-\
-asm ("\n\
-	.text\n\
-	.align	3\n\
-	.globl	_dl_runtime_resolve\n\
-	.type	_dl_runtime_resolve,@function\n\
-	.ent	_dl_runtime_resolve\n\
-_dl_runtime_resolve:\n\
-	.set noreorder\n\
-	# Save old GP to $3.\n\
-	move	$3,$28\n\
-	# Modify t9 ($25) so as to point .cpload instruction.\n\
-	daddu	$25,2*8\n\
-	# Compute GP.\n\
-	.cpload $25\n\
-	.set reorder\n\
-	# Save slot call pc.\n\
-        move	$2, $31\n\
-	# Save arguments and sp value in stack.\n\
-	dsubu	$29, 10*8\n\
-	.cprestore 8*8\n\
-	sd	$15, 9*8($29)\n\
-	sd	$4, 3*8($29)\n\
-	sd	$5, 4*8($29)\n\
-	sd	$6, 5*8($29)\n\
-	sd	$7, 6*8($29)\n\
-	sd	$16, 7*8($29)\n\
-	move	$16, $29\n\
-	move	$4, $24\n\
-	move	$5, $15\n\
-	move	$6, $3\n\
-	move	$7, $2\n\
-	jal	__dl_runtime_resolve\n\
-	move	$29, $16\n\
-	ld	$31, 9*8($29)\n\
-	ld	$4, 3*8($29)\n\
-	ld	$5, 4*8($29)\n\
-	ld	$6, 5*8($29)\n\
-	ld	$7, 6*8($29)\n\
-	ld	$16, 7*8($29)\n\
-	daddu	$29, 10*8\n\
-	move	$25, $2\n\
-	jr	$25\n\
-	.end	_dl_runtime_resolve\n\
+static ElfW(Addr)							      \
+__dl_runtime_resolve (ElfW(Word), ElfW(Word), ElfW(Addr), ElfW(Addr))	      \
+                  __attribute__ ((unused));				      \
+									      \
+static ElfW(Addr)							      \
+__dl_runtime_resolve (ElfW(Word) sym_index,				      \
+		      ElfW(Word) return_address,			      \
+		      ElfW(Addr) old_gpreg,				      \
+		      ElfW(Addr) stub_pc)				      \
+{									      \
+  struct link_map *l = elf_machine_runtime_link_map (old_gpreg, stub_pc);     \
+  const ElfW(Sym) *const symtab						      \
+    = (const ElfW(Sym) *) (l->l_addr + l->l_info[DT_SYMTAB]->d_un.d_ptr);     \
+  const char *strtab							      \
+    = (void *) (l->l_addr + l->l_info[DT_STRTAB]->d_un.d_ptr);		      \
+  const ElfW(Addr) *got							      \
+    = (const ElfW(Addr) *) (l->l_addr + l->l_info[DT_PLTGOT]->d_un.d_ptr);    \
+  const ElfW(Word) local_gotno						      \
+    = (const ElfW(Word)) l->l_info[DT_MIPS (LOCAL_GOTNO)]->d_un.d_val;	      \
+  const ElfW(Word) gotsym						      \
+    = (const ElfW(Word)) l->l_info[DT_MIPS (GOTSYM)]->d_un.d_val;	      \
+  const ElfW(Sym) *definer;						      \
+  ElfW(Addr) loadbase;							      \
+  ElfW(Addr) funcaddr;							      \
+  struct link_map **scope;						      \
+									      \
+  /* Look up the symbol's run-time value.  */				      \
+  scope = _dl_object_relocation_scope (l);				      \
+  definer = &symtab[sym_index];						      \
+									      \
+  loadbase = _dl_lookup_symbol (strtab + definer->st_name, &definer,	      \
+				scope, l->l_name, ELF_MACHINE_RELOC_NOPLT);   \
+									      \
+  *_dl_global_scope_end = NULL;						      \
+									      \
+  /* Apply the relocation with that value.  */				      \
+  funcaddr = loadbase + definer->st_value;				      \
+  *(got + local_gotno + sym_index - gotsym) = funcaddr;			      \
+									      \
+  return funcaddr;							      \
+}									      \
+									      \
+asm ("\n								      \
+	.text\n								      \
+	.align	3\n							      \
+	.globl	_dl_runtime_resolve\n					      \
+	.type	_dl_runtime_resolve,@function\n				      \
+	.ent	_dl_runtime_resolve\n					      \
+_dl_runtime_resolve:\n							      \
+	.set noreorder\n						      \
+	# Save old GP to $3.\n						      \
+	move	$3,$28\n						      \
+	# Modify t9 ($25) so as to point .cpload instruction.\n		      \
+	daddu	$25,2*8\n						      \
+	# Compute GP.\n							      \
+	.cpload $25\n							      \
+	.set reorder\n							      \
+	# Save slot call pc.\n						      \
+        move	$2, $31\n						      \
+	# Save arguments and sp value in stack.\n			      \
+	dsubu	$29, 10*8\n						      \
+	.cprestore 8*8\n						      \
+	sd	$15, 9*8($29)\n						      \
+	sd	$4, 3*8($29)\n						      \
+	sd	$5, 4*8($29)\n						      \
+	sd	$6, 5*8($29)\n						      \
+	sd	$7, 6*8($29)\n						      \
+	sd	$16, 7*8($29)\n						      \
+	move	$16, $29\n						      \
+	move	$4, $24\n						      \
+	move	$5, $15\n						      \
+	move	$6, $3\n						      \
+	move	$7, $2\n						      \
+	jal	__dl_runtime_resolve\n					      \
+	move	$29, $16\n						      \
+	ld	$31, 9*8($29)\n						      \
+	ld	$4, 3*8($29)\n						      \
+	ld	$5, 4*8($29)\n						      \
+	ld	$6, 5*8($29)\n						      \
+	ld	$7, 6*8($29)\n						      \
+	ld	$16, 7*8($29)\n						      \
+	daddu	$29, 10*8\n						      \
+	move	$25, $2\n						      \
+	jr	$25\n							      \
+	.end	_dl_runtime_resolve\n					      \
 ");
 #else
-#define ELF_MACHINE_RUNTIME_TRAMPOLINE \
-/* The flag _dl_mips_gnu_objects is set if all dynamic objects are \
-   generated by the gnu linker. */\
-int _dl_mips_gnu_objects = 1;\
-\
+#define ELF_MACHINE_RUNTIME_TRAMPOLINE					      \
+/* The flag _dl_mips_gnu_objects is set if all dynamic objects are	      \
+   generated by the gnu linker. */					      \
+int _dl_mips_gnu_objects = 1;						      \
+									      \
 /* This is called from assembly stubs below which the compiler can't see.  */ \
-static ElfW(Addr) \
-__dl_runtime_resolve (ElfW(Word), ElfW(Word), ElfW(Addr), ElfW(Addr)) \
-                  __attribute__ ((unused)); \
-\
-static ElfW(Addr) \
-__dl_runtime_resolve (ElfW(Word) sym_index,\
-		      ElfW(Word) return_address,\
-		      ElfW(Addr) old_gpreg,\
-		      ElfW(Addr) stub_pc)\
-{\
-  struct link_map *l = elf_machine_runtime_link_map (old_gpreg, stub_pc);\
-  const ElfW(Sym) *const symtab\
-    = (const ElfW(Sym) *) (l->l_addr + l->l_info[DT_SYMTAB]->d_un.d_ptr);\
-  const char *strtab\
-    = (void *) (l->l_addr + l->l_info[DT_STRTAB]->d_un.d_ptr);\
-  const ElfW(Addr) *got\
-    = (const ElfW(Addr) *) (l->l_addr + l->l_info[DT_PLTGOT]->d_un.d_ptr);\
-  const ElfW(Word) local_gotno\
-    = (const ElfW(Word)) l->l_info[DT_MIPS (LOCAL_GOTNO)]->d_un.d_val;\
-  const ElfW(Word) gotsym\
-    = (const ElfW(Word)) l->l_info[DT_MIPS (GOTSYM)]->d_un.d_val;\
-  const ElfW(Sym) *definer;\
-  ElfW(Addr) loadbase;\
-  ElfW(Addr) funcaddr;\
-  struct link_map **scope;\
-\
-  /* Look up the symbol's run-time value.  */\
-  scope = _dl_object_relocation_scope (l);\
-  definer = &symtab[sym_index];\
-\
-  loadbase = _dl_lookup_symbol (strtab + definer->st_name, &definer,\
-				scope, l->l_name, DL_LOOKUP_NOPLT);\
-\
-  *_dl_global_scope_end = NULL;\
-\
-  /* Apply the relocation with that value.  */\
-  funcaddr = loadbase + definer->st_value;\
-  *(got + local_gotno + sym_index - gotsym) = funcaddr;\
-\
-  return funcaddr;\
-}\
-\
-asm ("\n\
-	.text\n\
-	.align	2\n\
-	.globl	_dl_runtime_resolve\n\
-	.type	_dl_runtime_resolve,@function\n\
-	.ent	_dl_runtime_resolve\n\
-_dl_runtime_resolve:\n\
-	.set noreorder\n\
-	# Save old GP to $3.\n\
-	move	$3,$28\n\
-	# Modify t9 ($25) so as to point .cpload instruction.\n\
-	addu	$25,8\n\
-	# Compute GP.\n\
-	.cpload $25\n\
-	.set reorder\n\
-	# Save slot call pc.\n\
-        move	$2, $31\n\
-	# Save arguments and sp value in stack.\n\
-	subu	$29, 40\n\
-	.cprestore 32\n\
-	sw	$15, 36($29)\n\
-	sw	$4, 12($29)\n\
-	sw	$5, 16($29)\n\
-	sw	$6, 20($29)\n\
-	sw	$7, 24($29)\n\
-	sw	$16, 28($29)\n\
-	move	$16, $29\n\
-	move	$4, $24\n\
-	move	$5, $15\n\
-	move	$6, $3\n\
-	move	$7, $2\n\
-	jal	__dl_runtime_resolve\n\
-	move	$29, $16\n\
-	lw	$31, 36($29)\n\
-	lw	$4, 12($29)\n\
-	lw	$5, 16($29)\n\
-	lw	$6, 20($29)\n\
-	lw	$7, 24($29)\n\
-	lw	$16, 28($29)\n\
-	addu	$29, 40\n\
-	move	$25, $2\n\
-	jr	$25\n\
-	.end	_dl_runtime_resolve\n\
+static ElfW(Addr)							      \
+__dl_runtime_resolve (ElfW(Word), ElfW(Word), ElfW(Addr), ElfW(Addr))	      \
+                  __attribute__ ((unused));				      \
+									      \
+static ElfW(Addr)							      \
+__dl_runtime_resolve (ElfW(Word) sym_index,				      \
+		      ElfW(Word) return_address,			      \
+		      ElfW(Addr) old_gpreg,				      \
+		      ElfW(Addr) stub_pc)				      \
+{									      \
+  struct link_map *l = elf_machine_runtime_link_map (old_gpreg, stub_pc);     \
+  const ElfW(Sym) *const symtab						      \
+    = (const ElfW(Sym) *) (l->l_addr + l->l_info[DT_SYMTAB]->d_un.d_ptr);     \
+  const char *strtab							      \
+    = (void *) (l->l_addr + l->l_info[DT_STRTAB]->d_un.d_ptr);		      \
+  const ElfW(Addr) *got							      \
+    = (const ElfW(Addr) *) (l->l_addr + l->l_info[DT_PLTGOT]->d_un.d_ptr);    \
+  const ElfW(Word) local_gotno						      \
+    = (const ElfW(Word)) l->l_info[DT_MIPS (LOCAL_GOTNO)]->d_un.d_val;	      \
+  const ElfW(Word) gotsym						      \
+    = (const ElfW(Word)) l->l_info[DT_MIPS (GOTSYM)]->d_un.d_val;	      \
+  const ElfW(Sym) *definer;						      \
+  ElfW(Addr) loadbase;							      \
+  ElfW(Addr) funcaddr;							      \
+  struct link_map **scope;						      \
+									      \
+  /* Look up the symbol's run-time value.  */				      \
+  scope = _dl_object_relocation_scope (l);				      \
+  definer = &symtab[sym_index];						      \
+									      \
+  loadbase = _dl_lookup_symbol (strtab + definer->st_name, &definer,	      \
+				scope, l->l_name, ELF_MACHINE_RELOC_NOPLT);   \
+									      \
+  *_dl_global_scope_end = NULL;						      \
+									      \
+  /* Apply the relocation with that value.  */				      \
+  funcaddr = loadbase + definer->st_value;				      \
+  *(got + local_gotno + sym_index - gotsym) = funcaddr;			      \
+									      \
+  return funcaddr;							      \
+}									      \
+									      \
+asm ("\n								      \
+	.text\n								      \
+	.align	2\n							      \
+	.globl	_dl_runtime_resolve\n					      \
+	.type	_dl_runtime_resolve,@function\n				      \
+	.ent	_dl_runtime_resolve\n					      \
+_dl_runtime_resolve:\n							      \
+	.set noreorder\n						      \
+	# Save slot call pc.\n						      \
+	move	$3, $31\n						      \
+	# Modify t9 ($25) so as to point .cpload instruction.\n		      \
+	addu	$25,8\n							      \
+	# Compute GP.\n							      \
+	.cpload $25\n							      \
+	.set reorder\n							      \
+	# Save slot call pc.\n						      \
+        move	$2, $31\n						      \
+	# Save arguments and sp value in stack.\n			      \
+	subu	$29, 40\n						      \
+	.cprestore 32\n							      \
+	sw	$15, 36($29)\n						      \
+	sw	$4, 12($29)\n						      \
+	sw	$5, 16($29)\n						      \
+	sw	$6, 20($29)\n						      \
+	sw	$7, 24($29)\n						      \
+	sw	$16, 28($29)\n						      \
+	move	$16, $29\n						      \
+	move	$4, $24\n						      \
+	move	$5, $15\n						      \
+	move	$6, $3\n						      \
+	move	$7, $2\n						      \
+	jal	__dl_runtime_resolve\n					      \
+	move	$29, $16\n						      \
+	lw	$31, 36($29)\n						      \
+	lw	$4, 12($29)\n						      \
+	lw	$5, 16($29)\n						      \
+	lw	$6, 20($29)\n						      \
+	lw	$7, 24($29)\n						      \
+	lw	$16, 28($29)\n						      \
+	addu	$29, 40\n						      \
+	move	$25, $2\n						      \
+	jr	$25\n							      \
+	.end	_dl_runtime_resolve\n					      \
 ");
 #endif
 
 /* Mask identifying addresses reserved for the user program,
    where the dynamic linker should not map anything.  */
-#define ELF_MACHINE_USER_ADDRESS_MASK	0x00000000UL
+#define ELF_MACHINE_USER_ADDRESS_MASK	0x80000000UL
 
 
 
 /* Initial entry point code for the dynamic linker.
    The C function `_dl_start' is the real entry point;
-   its return value is the user program's entry point.  */
+   its return value is the user program's entry point.
+   Note how we have to be careful about two things:
+
+   1) That we allocate a minimal stack of 24 bytes for
+      every function call, the MIPS ABI states that even
+      if all arguments are passed in registers the procedure
+      called can use the 16 byte area pointed to by $sp
+      when it is called to store away the arguments passed
+      to it.
+
+   2) That under Linux the entry is named __start
+      and not just plain _start.  */
 
 #ifdef __mips64
 #define RTLD_START asm ("\
 	.text\n\
-	.align	3\n\
-	.globl _start\n\
-	.globl _dl_start_user\n\
-	.ent _start\n\
-_start:\n\
+	.align	3\n"\
+_RTLD_PROLOGUE (ENTRY_POINT)\
+"	.globl _dl_start_user\n\
 	.set noreorder\n\
 	bltzal $0, 0f\n\
 	nop\n\
@@ -561,16 +640,15 @@ _dl_start_user:\n\
 	ld $5, 1*8($29)\n\
 	ld $6, 2*8$29)\n\
 	ld $7, 3*8($29)\n\
-	jr $25\n\
-	.end _start\n\
-");
+	jr $25\n"\
+_RTLD_EPILOGUE(ENTRY_POINT) \
+);
+
 #else
 #define RTLD_START asm ("\
-	.text\n\
-	.globl _start\n\
-	.globl _dl_start_user\n\
-	.ent _start\n\
-_start:\n\
+	.text\n"\
+_RTLD_PROLOGUE(ENTRY_POINT)\
+"	.globl _dl_start_user\n\
 	.set noreorder\n\
 	bltzal $0, 0f\n\
 	nop\n\
@@ -582,7 +660,9 @@ _start:\n\
 	la $4, _DYNAMIC\n\
 	sw $4, -0x7ff0($28)\n\
 	move $4, $29\n\
+	subu $29, 16\n\
 	jal _dl_start\n\
+	addiu $29, 16\n\
 	# Get the value of label '_dl_start_user' in t9 ($25).\n\
 	la $25, _dl_start_user\n\
 _dl_start_user:\n\
@@ -610,7 +690,9 @@ _dl_start_user:\n\
 	lw $4, 8($2)\n\
 	# Call _dl_init_next to return the address of an initializer\n\
 	# function to run.\n\
+	subu $29, 16\n\
 	jal _dl_init_next\n\
+	addiu $29, 16\n\
 	move $28, $16\n\
 	# Check for zero return,  when out of initializers.\n\
 	beq $2, $0, 2f\n\
@@ -624,16 +706,18 @@ _dl_start_user:\n\
 	move $28, $16\n\
 	# Loop to call _dl_init_next for the next initializer.\n\
 	b 1b\n\
+2:	# Clear the startup flag.  Assumes 32 bit ints.\n\
+	sw $0, _dl_starting_up\n\
 	# Pass our finalizer function to the user in ra.\n\
-2:	la $31, _dl_fini\n\
+	la $31, _dl_fini\n\
 	# Jump to the user entry point.\n\
 	move $25, $17\n\
 	lw $4, 0($29)\n\
 	lw $5, 4($29)\n\
 	lw $6, 8($29)\n\
 	lw $7, 12($29)\n\
-	jr $25\n\
-	.end _start\n\
+	jr $25\n"\
+_RTLD_EPILOGUE(ENTRY_POINT)\
 ");
 #endif
 
diff --git a/sysdeps/mips/elf/start.S b/sysdeps/mips/elf/start.S
index 355a4a905c..ce9ad9c7ec 100644
--- a/sysdeps/mips/elf/start.S
+++ b/sysdeps/mips/elf/start.S
@@ -17,6 +17,12 @@
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
+#include <entry.h>
+
+#ifndef ENTRY_POINT
+#error ENTRY_POINT needs to be defined for start.S on MIPS/ELF.
+#endif
+
 /* This is the canonical entry point, usually the first thing in the text
    segment.  The SVR4/Mips ABI (pages 3-31, 3-32) says that when the entry
    point runs, most registers' values are unspecified, except for:
@@ -53,8 +59,8 @@
 #endif
 
 	.text
-	.globl _start
-_start:
+	.globl ENTRY_POINT
+ENTRY_POINT:
 #ifdef PIC
 	SET_GP
 #endif
@@ -81,20 +87,9 @@ nofini:
 	   the prologue of __libc_init_first, we preload them to
 	   prevent clobbering the stack tops. In Hurd case, stack pointer
 	   ($29) may be VM_MAX_ADDRESS here. If so, we must modify it.  */
-#if (__mips64)
-	dli $4, 0x10000000000
-	bne $29, $4, 1f
-	dsubu $29, 32
-	sd $0, 0($29)
-	sd $0, 8($29)
-	sd $0, 16($29)
-	sd $0, 24($29)
-1:
-	ld $4, 0($29)
-	ld $5, 8($29)
-	ld $6, 16($29)
-	ld $7, 24($29)
-#else  /* __mips64 */
+#if 0
+	jal mach_host_self
+#endif
 	li $4, 0x80000000
 	bne $29, $4, 1f
 	subu $29, 16
@@ -107,23 +102,14 @@ nofini:
 	lw $5, 4($29)
 	lw $6, 8($29)
 	lw $7, 12($29)
-#endif  /* __mips64 */
-
 	jal __libc_init_first
 #ifdef PIC
 	SET_GP
 #endif
-#if (__mips64)
-	ld $4, 0($29)
-	ld $5, 8($29)
-	ld $6, 16($29)
-	ld $7, 24($29)
-#else  /* __mips64 */
 	lw $4, 0($29)
 	lw $5, 4($29)
 	lw $6, 8($29)
 	lw $7, 12($29)
-#endif  /* __mips64 */
 
 	/* Call `_init', which is the entry point to our own `.init'
 	   section; and register with `atexit' to have `exit' call
@@ -145,19 +131,11 @@ nofini:
 
 	/* Extract the arguments and environment as encoded on the stack
 	   and set up the arguments for `main': argc, argv, envp.  */
-#if (__mips64)
-	ld $4, 0($29)		/* argc */
-	daddu $5, $29, 8	/* argv */
-	dsll $6, $4, 3
-	daddu $6, $6, 8
-	daddu $6, $5, $6	/* envp = &argv[argc + 1] */
-#else  /* __mips64 */
 	lw $4, 0($29)		/* argc */
 	addu $5, $29, 4		/* argv */
 	sll $6, $4, 2
 	addu $6, $6, 4
 	addu $6, $5, $6		/* envp = &argv[argc + 1] */
-#endif  /* __mips64 */
 
 	/* Call the user's main function, and exit with its value.  */
 	jal main
@@ -172,10 +150,11 @@ hlt:	b hlt			/* Crash if somehow it does return.  */
 	.data
 	.globl __data_start
 __data_start:
-#if (__mips64)
-	.dword 0
-#else  /* __mips64 */
-	.word 0
-#endif  /* __mips64 */
+	.long 0
 	.weak data_start
 	data_start = __data_start
+
+	.comm errno, 4, 4
+#ifdef __ELF__
+	.type errno, @object
+#endif
diff --git a/sysdeps/mips/fpu_control.h b/sysdeps/mips/fpu_control.h
index 36e05a4f6e..e271ae1fcc 100644
--- a/sysdeps/mips/fpu_control.h
+++ b/sysdeps/mips/fpu_control.h
@@ -1,7 +1,7 @@
 /* FPU control word bits.  Mips version.
    Copyright (C) 1996, 1997 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
-   Contributed by Olaf Flebbe.
+   Contributed by Olaf Flebbe and Ralf Baechle.
 
    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
@@ -21,74 +21,84 @@
 #ifndef _FPU_CONTROL_H
 #define _FPU_CONTROL_H
 
-/* FP control/status register bit assignments.
+/* MIPS FPU floating point control register bits.
  *
- *     31-25    24  23     22-18       17-12          11-7       6-2     1-0
- *                                    (cause)      (enables)   (flags)
- * | reserved | FS | C | reserved | E V Z O U I | V Z O U I | V Z O U I | RM
+ * 31-25  -> floating point conditions code bits 7-1.  These bits are only
+ *           available in MIPS IV.
+ * 24     -> flush denormalized results to zero instead of
+ *           causing unimplemented operation exception.  This bit is only
+ *           available for MIPS III and newer.
+ * 23     -> Condition bit
+ * 22-18  -> reserved (read as 0, write with 0)
+ * 17     -> cause bit for unimplemented operation
+ * 16     -> cause bit for invalid exception
+ * 15     -> cause bit for division by zero exception
+ * 14     -> cause bit for overflow exception
+ * 13     -> cause bit for underflow exception
+ * 12     -> cause bit for inexact exception
+ * 11     -> enable exception for invalid exception
+ * 10     -> enable exception for division by zero exception
+ *  9     -> enable exception for overflow exception
+ *  8     -> enable exception for underflow exception
+ *  7     -> enable exception for inexact exception
+ *  6     -> flag invalid exception
+ *  5     -> flag division by zero exception
+ *  4     -> flag overflow exception
+ *  3     -> flag underflow exception
+ *  2     -> flag inexact exception
+ *  1-0   -> rounding control
  *
- * FS: When set, denormalized results are flushed to zero instead of
- *     causing an unimplemented operation exception.
- * C:  Condition bit.
- * E:  Unimplemented Operation.
- * V:  Invalid Operation.
- * Z:  Division by zero.
- * O:  Overflow.
- * U:  Underflow.
- * I:  Inexact Operation
- * RM: Rounding mode bits
- * 00 (RN) - rounding to nearest
- * 01 (RZ) - rounding toward zero
- * 10 (RP) - rounding down (toward - infinity)
- * 11 (RM) - rounding up (toward + infinity)
  *
+ * Rounding Control:
+ * 00 - rounding to nearest (RN)
+ * 01 - rounding toward zero (RZ)
+ * 01 - rounding (up) toward plus infinity (RP)
+ * 11 - rounding (down)toward minus infinity (RM)
  */
 
 #include <features.h>
 
 /* masking of interrupts */
-#define _FPU_MASK_IM  (1 << 11)
-#define _FPU_MASK_DM  (1 << 24)	/* XXX */
-#define _FPU_MASK_ZM  (1 << 10)
-#define _FPU_MASK_OM  (1 << 9)
-#define _FPU_MASK_UM  (1 << 8)
-#define _FPU_MASK_PM  (1 << 7)
-
-/* precision control */
-#define _FPU_EXTENDED 0
-#define _FPU_DOUBLE   0
-#define _FPU_SINGLE   0
+#define _FPU_MASK_V     0x0800  /* Invalid operation */
+#define _FPU_MASK_Z     0x0400  /* Division by zero  */
+#define _FPU_MASK_O     0x0200  /* Overflow          */
+#define _FPU_MASK_U     0x0100  /* Underflow         */
+#define _FPU_MASK_I     0x0080  /* Inexact operation */
+
+/* flush denormalized numbers to zero */
+#define _FPU_FLUSH_TZ   0x1000000
 
 /* rounding control */
-#define _FPU_RC_NEAREST 0x0    /* RECOMMENDED */
-#define _FPU_RC_DOWN    0x2
-#define _FPU_RC_UP      0x3
+#define _FPU_RC_NEAREST 0x0     /* RECOMMENDED */
 #define _FPU_RC_ZERO    0x1
+#define _FPU_RC_UP      0x2
+#define _FPU_RC_DOWN    0x3
 
-#define _FPU_RESERVED 0xfe7c0000  /* Reserved bits */
+#define _FPU_RESERVED 0xfe3c0000  /* Reserved bits in cw */
 
 
 /* The fdlibm code requires strict IEEE double precision arithmetic,
    and no interrupts for exceptions, rounding to nearest.  */
 
-#define _FPU_DEFAULT  0x0
+#define _FPU_DEFAULT  0x00000600
 
 /* IEEE:  same as above, but exceptions */
-#define _FPU_IEEE     (0x1f << 7)
+#define _FPU_IEEE     0x00000F80
 
 /* Type of the control word.  */
-typedef unsigned int fpu_control_t;
+typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__HI__)));
 
 /* Macros for accessing the hardware control word.  */
-#define _FPU_GETCW(cw) __asm__ ("cfc1 %0, $31; nop; nop" : "=r" (cw))
-#define _FPU_SETCW(cw) __asm__ ("ctc1 %0, $31; nop; nop" : : "r" (cw))
+#define _FPU_GETCW(cw) __asm__ ("cfc1 %0,$31" : "=r" (cw) : )
+#define _FPU_SETCW(cw) __asm__ ("ctc1 %0,$31" : : "r" (cw))
 
 /* Default control word set at startup.  */
 extern fpu_control_t __fpu_control;
 
 __BEGIN_DECLS
 
-/* Called at startup.  It can be used to manipulate fpu control register.  */
+/* Called at startup.  It can be used to manipulate the fpu control
+   register.  */
 extern void __setfpucw __P ((fpu_control_t));
 
 __END_DECLS
diff --git a/sysdeps/mips/mips64/rtld-parms b/sysdeps/mips/mips64/rtld-parms
new file mode 100644
index 0000000000..77dfc39ef4
--- /dev/null
+++ b/sysdeps/mips/mips64/rtld-parms
@@ -0,0 +1,3 @@
+ifndef rtld-wordsize
+rtld-wordsize = 64
+endif
diff --git a/sysdeps/mips/mipsel/rtld-parms b/sysdeps/mips/mipsel/rtld-parms
new file mode 100644
index 0000000000..07fac51647
--- /dev/null
+++ b/sysdeps/mips/mipsel/rtld-parms
@@ -0,0 +1,3 @@
+ifndef rtld-oformat
+rtld-oformat = elf32-littlemips
+endif
diff --git a/sysdeps/mips/rtld-ldscript.in b/sysdeps/mips/rtld-ldscript.in
new file mode 100644
index 0000000000..7c9f65f3e7
--- /dev/null
+++ b/sysdeps/mips/rtld-ldscript.in
@@ -0,0 +1,106 @@
+OUTPUT_FORMAT("@@rtld-oformat@@")
+OUTPUT_ARCH(@@rtld-arch@@)
+ENTRY(@@rtld-entry@@)
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = @@rtld-base@@;
+  .reginfo       : { *(.reginfo) }
+  .dynamic       : { *(.dynamic) }
+  .dynstr        : { *(.dynstr)		}
+  .dynsym        : { *(.dynsym)		}
+  .hash          : { *(.hash)		}
+  .rel.text      : { *(.rel.text)		}
+  .rela.text     : { *(.rela.text) 	}
+  .rel.data      : { *(.rel.data)		}
+  .rela.data     : { *(.rela.data) 	}
+  .rel.rodata    : { *(.rel.rodata) 	}
+  .rela.rodata   : { *(.rela.rodata) 	}
+  .rel.got       : { *(.rel.got)		}
+  .rela.got      : { *(.rela.got)		}
+  .rel.ctors     : { *(.rel.ctors)	}
+  .rela.ctors    : { *(.rela.ctors)	}
+  .rel.dtors     : { *(.rel.dtors)	}
+  .rela.dtors    : { *(.rela.dtors)	}
+  .rel.init      : { *(.rel.init)	}
+  .rela.init     : { *(.rela.init)	}
+  .rel.fini      : { *(.rel.fini)	}
+  .rela.fini     : { *(.rela.fini)	}
+  .rel.bss       : { *(.rel.bss)		}
+  .rela.bss      : { *(.rela.bss)		}
+  .rel.plt       : { *(.rel.plt)		}
+  .rela.plt      : { *(.rela.plt)		}
+  .rodata    : { *(.rodata)  }
+  .rodata1   : { *(.rodata1) }
+  .init          : { *(.init)	} =0
+  .text      :
+  {
+    *(.text)
+    *(.stub)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0
+  .fini      : { *(.fini)    } =0
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  It would
+     be more correct to do this:
+       . = 0x10000000;
+     The current expression does not correctly handle the case of a
+     text segment ending precisely at the end of a page; it causes the
+     data segment to skip a page.  The above expression does not have
+     this problem, but it will currently (2/95) cause BFD to allocate
+     a single segment, combining both text and data, for this case.
+     This will prevent the text segment from being shared among
+     multiple executions of the program; I think that is more
+     important than losing a page of the virtual address space (note
+     that no actual memory is lost; the page which is skipped can not
+     be referenced).  */
+  . += 0x10000;
+  .data    :
+  {
+    *(.data)
+    CONSTRUCTORS
+  }
+  .data1   : { *(.data1) }
+  .ctors         : { *(.ctors)   }
+  .dtors         : { *(.dtors)   }
+  _gp = ALIGN(16) + 0x7ff0;
+  .got           :
+  {
+    *(.got.plt) *(.got)
+   }
+  /* We want the small data sections together, so single-instruction offsets
+     can access them all, and initialized data all before uninitialized, so
+     we can shorten the on-disk segment size.  */
+  .sdata     : { *(.sdata) }
+  .lit8 : { *(.lit8) }
+  .lit4 : { *(.lit4) }
+  .sbss      : { *(.sbss) *(.scommon) }
+  .bss       :
+  {
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+  /* The normal linker scripts created by the binutils doesn't have the
+     symbols end and _end which breaks ld.so's dl-minimal.c.  */
+  _end = . ;
+  PROVIDE (end = .);
+  /* These are needed for ELF backends which have not yet been
+     converted to the new style linker.  */
+  .stab 0 : { *(.stab) }
+  .stabstr 0 : { *(.stabstr) }
+  /* DWARF debug sections.
+     Symbols in the .debug DWARF section are relative to the beginning of the
+     section so we begin .debug at 0.  It's not clear yet what needs to happen
+     for the others.   */
+  .debug          0 : { *(.debug) }
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  .line           0 : { *(.line) }
+  /* These must appear regardless of  .  */
+  .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
+  .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
+}
diff --git a/sysdeps/mips/setjmp.S b/sysdeps/mips/setjmp.S
index bc42dcb03b..607b5f268d 100644
--- a/sysdeps/mips/setjmp.S
+++ b/sysdeps/mips/setjmp.S
@@ -26,10 +26,20 @@
 #endif
 ENTRY (__sigsetjmp)
 #ifdef PIC
-	.cpload t9
+	.set	noreorder
+	.cpload	t9
+	.set	reorder
 #endif
-	move a2, sp
-	move a3, fp
-	la t9, __sigsetjmp_aux
-	nop
-	jr t9
+	move	a2, sp
+#ifdef fp
+	move	a3, fp
+#else
+	move	a3, $fp
+#endif
+#ifdef PIC
+	la	t9, __sigsetjmp_aux
+	jr	t9
+#else
+	j	__sigsetjmp_aux
+#endif
+	.end __sigsetjmp
diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
index f819bb4c0c..fb9709fee7 100644
--- a/sysdeps/posix/getaddrinfo.c
+++ b/sysdeps/posix/getaddrinfo.c
@@ -436,10 +436,10 @@ static int gaih_inet(const char *name, const struct gaih_service *service,
     struct gaih_servtuple *st2;
     struct gaih_addrtuple *at2 = at;
     int j;
-#ifndef MAXHOSTNAMELEN
-#define MAXHOSTNAMELEN 128
-#endif /* MAXHOSTNAMELEN */
-    char buffer[MAXHOSTNAMELEN];
+    /*
+      buffer is the size of an unformatted IPv6 address in printable format.
+     */
+    char buffer[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"];
 
     while(at2) {
       if (req->ai_flags & AI_CANONNAME) {
diff --git a/sysdeps/unix/getlogin.c b/sysdeps/unix/getlogin.c
index 6e8a9a2a87..84b7dd8276 100644
--- a/sysdeps/unix/getlogin.c
+++ b/sysdeps/unix/getlogin.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 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
@@ -46,7 +46,7 @@ getlogin (void)
      thing to do.  Note that ttyname(open("/dev/tty")) on those
      systems returns /dev/tty, so that is not a possible solution for
      getlogin().  */
-  if (__ttyname_r (0, real_tty_path, sizeof (tty_pathname)) < 0)
+  if (__ttyname_r (0, real_tty_path, sizeof (tty_pathname)) != 0)
     return NULL;
 
   real_tty_path += 5;		/* Remove "/dev/".  */
diff --git a/sysdeps/unix/getlogin_r.c b/sysdeps/unix/getlogin_r.c
index 75f17cb86f..8ec2fae754 100644
--- a/sysdeps/unix/getlogin_r.c
+++ b/sysdeps/unix/getlogin_r.c
@@ -1,5 +1,5 @@
 /* Reentrant function to return the current login name.  Unix version.
-   Copyright (C) 1991, 1992, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1991, 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
@@ -41,19 +41,17 @@ getlogin_r (name, name_len)
   struct utmp *ut, line, buffer;
 
   {
-    int err;
     int d = __open ("/dev/tty", 0);
     if (d < 0)
       return errno;
 
     result = ttyname_r (d, real_tty_path, sizeof (tty_pathname));
-    err = errno;
     (void) close (d);
 
-    if (result < 0)
+    if (result != 0)
       {
-	__set_errno (err);
-	return err;
+	__set_errno (result);
+	return result;
       }
   }
 
diff --git a/sysdeps/unix/mips/brk.S b/sysdeps/unix/mips/brk.S
index 197672669b..e38f735b92 100644
--- a/sysdeps/unix/mips/brk.S
+++ b/sysdeps/unix/mips/brk.S
@@ -24,46 +24,24 @@
 #endif
 
 #ifndef       HAVE_GNU_LD
-#define __end           end
+#define _end           end
 #endif
 
-.data
-.sdata
+	.data
 ENTRY(__curbrk)
-	.word __end
+	.word 0
 	.end __curbrk
-.text
-.set noreorder
-.set noat
 
-ENTRY(__brk)
-	/* Minimum is one page.  */
-	lui v0, 4096
-	lw v0, __end
-	nop
-
-	/* If they ask for less than a page, givvem the whole
-	   thing anyway.  */
-	sltu AT, a0, v0
-	beq AT, zero, down1
-	nop
-	move a0, v0
-down1:
-	li v0, SYS_brk
-	syscall
-	bne a3, zero, error
-
-	/* Update __curbrk and exit cleanly.  */
-	lui AT, 4096
+	.text
+SYSCALL__(brk, 1)
+	.set	reorder
+	/* Handle the query case.  */
+	bnez a0, 1f
+	move a0,v0
+1:	/* Update __curbrk and exit cleanly.  */
 	sw a0, __curbrk
-	j ra
 	move v0, zero
-
-	/* What a horrible way to die.  */
-error:	j syscall_error
-	nop
-	nop
-	nop
+	jr ra
 	.end __brk
 
 weak_alias (__brk, brk)
diff --git a/sysdeps/unix/mips/sysdep.S b/sysdeps/unix/mips/sysdep.S
index 0cfc302770..ac8335fe5b 100644
--- a/sysdeps/unix/mips/sysdep.S
+++ b/sysdeps/unix/mips/sysdep.S
@@ -21,10 +21,23 @@
 #define _ERRNO_H
 #include <bits/errno.h>
 
-/* .globl errno */
-.set noreorder
+	.comm errno, 4
+#ifdef __ELF__
+	.type errno, @object
+#endif
+
+	.set noreorder
 
-ENTRY(syscall_error)
+ENTRY(__syscall_error)
+#ifdef __PIC__
+	.set	noat
+	move	$1, $31
+	bltzal	$0, 0f
+	nop
+0:	.cpload	$31
+	move	$31, $1
+	.set	at
+#endif
 #if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN
 	/* We translate the system's EWOULDBLOCK error into EAGAIN.
 	   The GNU C library always defines EWOULDBLOCK==EAGAIN.
@@ -40,4 +53,8 @@ skip:
 	/* And just kick back a -1.  */
 	j ra
 	li v0, -1
-	.end syscall_error
+	END(__syscall_error)
+
+/* We provide this alias for compatilility with other Unices
+   like IRIX 5  */
+weak_alias (__syscall_error, syscall_error)
diff --git a/sysdeps/unix/mips/sysdep.h b/sysdeps/unix/mips/sysdep.h
index 2f148d0938..cbafbdcd9a 100644
--- a/sysdeps/unix/mips/sysdep.h
+++ b/sysdeps/unix/mips/sysdep.h
@@ -32,19 +32,41 @@
 /* Note that while it's better structurally, going back to call syscall_error
    can make things confusing if you're debugging---it looks like it's jumping
    backwards into the previous fn.  */
+#ifdef __PIC__
+ #define PSEUDO(name, syscall_name, args) \
+  .align 2;								      \
+  99: la t9,syscall_error;						      \
+  jr t9;								      \
+  ENTRY(name)								      \
+  .set noreorder;							      \
+  .cpload t9;								      \
+  li v0, SYS_##syscall_name;						      \
+  syscall;								      \
+  .set reorder;								      \
+  bne a3, zero, 99b;							      \
+syse1:
+#else
 #define PSEUDO(name, syscall_name, args) \
   .set noreorder;							      \
   .align 2;								      \
   99: j syscall_error;							      \
-  nop;							      		      \
   ENTRY(name)								      \
+  .set noreorder;							      \
   li v0, SYS_##syscall_name;						      \
   syscall;								      \
+  .set reorder;								      \
   bne a3, zero, 99b;							      \
-  nop;									      \
 syse1:
+#endif
+
+#undef PSEUDO_END
+#define PSEUDO_END(sym) .end sym
 
 #define ret	j ra ; nop
+
+#undef END
+#define END(sym)        .end sym
+
 #define r0	v0
 #define r1	v1
 /* The mips move insn is d,s.  */
diff --git a/sysdeps/unix/mips/wait.S b/sysdeps/unix/mips/wait.S
index a544156c4e..9ea55bc7d0 100644
--- a/sysdeps/unix/mips/wait.S
+++ b/sysdeps/unix/mips/wait.S
@@ -28,14 +28,14 @@ ENTRY(__wait)
 
 	li v0, SYS_wait
 	syscall
-	beq a3, zero, noerror
+	beqz a3, noerror
 	nop
-	j syscall_error
+	j __syscall_error
 	nop
 
 noerror:
 	/* If the arg is not NULL, store v1 there.  */
-	beq a0, zero, noarg
+	beqz a0, noarg
 	nop
 	sw v1, 0(a0)
 	nop
diff --git a/sysdeps/unix/sysv/linux/bits/ipc.h b/sysdeps/unix/sysv/linux/bits/ipc.h
index f5fea0d295..c01a81a83f 100644
--- a/sysdeps/unix/sysv/linux/bits/ipc.h
+++ b/sysdeps/unix/sysv/linux/bits/ipc.h
@@ -82,4 +82,4 @@ extern int __ipc __P ((int __call, int __first, int __second, int __third,
 
 __END_DECLS
 
-#endif /* _SYS_IPC_BUF_H */
+#endif /* bits/ipc_buf.h */
diff --git a/sysdeps/unix/sysv/linux/bits/msq.h b/sysdeps/unix/sysv/linux/bits/msq.h
index 0abc10f6e5..59559a31c3 100644
--- a/sysdeps/unix/sysv/linux/bits/msq.h
+++ b/sysdeps/unix/sysv/linux/bits/msq.h
@@ -75,4 +75,4 @@ struct msginfo
 
 __END_DECLS
 
-#endif /* _SYS_MSQ_BUF_H */
+#endif /* bits/msq_buf.h */
diff --git a/sysdeps/unix/sysv/linux/bits/sem.h b/sysdeps/unix/sysv/linux/bits/sem.h
index 049a71bc47..87951efea1 100644
--- a/sysdeps/unix/sysv/linux/bits/sem.h
+++ b/sysdeps/unix/sysv/linux/bits/sem.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
 
@@ -85,4 +85,4 @@ struct  seminfo
 
 __END_DECLS
 
-#endif /* _SYS_SEM_BUF_H */
+#endif /* bits/sem_buf.h */
diff --git a/sysdeps/unix/sysv/linux/bits/shm.h b/sysdeps/unix/sysv/linux/bits/shm.h
index 642b7bd191..6db01dd4a2 100644
--- a/sysdeps/unix/sysv/linux/bits/shm.h
+++ b/sysdeps/unix/sysv/linux/bits/shm.h
@@ -89,4 +89,4 @@ struct shm_info
 
 __END_DECLS
 
-#endif /* _SYS_SHM_BUF_H */
+#endif /* bits/shm_buf.h */
diff --git a/sysdeps/unix/sysv/linux/mips/Dist b/sysdeps/unix/sysv/linux/mips/Dist
new file mode 100644
index 0000000000..a205c94f95
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/Dist
@@ -0,0 +1,3 @@
+clone.S
+kernel_sigaction.h
+kernel_stat.h
diff --git a/sysdeps/unix/sysv/linux/mips/Makefile b/sysdeps/unix/sysv/linux/mips/Makefile
new file mode 100644
index 0000000000..e6240ea9a4
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/Makefile
@@ -0,0 +1,10 @@
+ifeq ($(subdir),signal)
+#sysdep_routines += sigsuspend
+endif
+
+ifeq ($(subdir),misc)
+sysdep_routines += cachectl cacheflush sysmips
+
+headers += regdef.h fpregdef.h sys/asm.h sys/cachectl.h sys/fpregdef.h \
+	   sys/regdef.h sys/sysmips.h
+endif
diff --git a/sysdeps/unix/sysv/linux/mips/bits/endian.h b/sysdeps/unix/sysv/linux/mips/bits/endian.h
new file mode 100644
index 0000000000..9f60758f36
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/bits/endian.h
@@ -0,0 +1,12 @@
+/* The MIPS architecture has selectable endianness.
+   Linux/MIPS exists in two both little and big endian flavours and we
+   want to be able to share the installed headerfiles between both,
+   so we define __BYTE_ORDER based on GCC's predefines.  */
+
+#ifdef __MIPSEB__
+#define __BYTE_ORDER __BIG_ENDIAN
+#else
+#ifdef __MIPSEL__
+#define __BYTE_ORDER __LITTLE_ENDIAN
+#endif
+#endif
diff --git a/sysdeps/unix/sysv/linux/mips/bits/fcntl.h b/sysdeps/unix/sysv/linux/mips/bits/fcntl.h
new file mode 100644
index 0000000000..2586140fdc
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/bits/fcntl.h
@@ -0,0 +1,100 @@
+/* O_*, F_*, FD_* bit values for Linux.
+   Copyright (C) 1995, 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.  */
+
+#ifndef _FCNTL_H
+#error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+#endif
+
+#include <sys/types.h>
+
+
+/* In GNU, read and write are bits (unlike BSD).  */
+#ifdef __USE_GNU
+#define O_READ		O_RDONLY	/* Open for reading.  */
+#define O_WRITE		O_WRONLY	/* Open for writing.  */
+#endif
+/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
+   located on an ext2 file system */
+#define O_ACCMODE	0x0003
+#define O_RDONLY	0x0000
+#define O_WRONLY	0x0001
+#define O_RDWR		0x0002
+#define O_APPEND	0x0008
+#define O_SYNC		0x0010
+#define O_NONBLOCK	0x0080
+#define O_CREAT         0x0100	/* not fcntl */
+#define O_TRUNC		0x0200	/* not fcntl */
+#define O_EXCL		0x0400	/* not fcntl */
+#define O_NOCTTY	0x0800	/* not fcntl */
+#define O_FSYNC		O_SYNC
+#define O_ASYNC		020000
+
+#define O_NDELAY	O_NONBLOCK
+
+#define F_DUPFD		0	/* dup */
+#define F_GETFD		1	/* get f_flags */
+#define F_SETFD		2	/* set f_flags */
+#define F_GETFL		3	/* more flags (cloexec) */
+#define F_SETFL		4
+#define F_GETLK		14
+#define F_SETLK		6
+#define F_SETLKW	7
+
+#define F_SETOWN	24	/*  for sockets. */
+#define F_GETOWN	23	/*  for sockets. */
+
+/* for F_[GET|SET]FL */
+#define FD_CLOEXEC	1	/* actually anything with low bit set goes */
+
+/* for posix fcntl() and lockf() */
+#define F_RDLCK		0
+#define F_WRLCK		1
+#define F_UNLCK		2
+
+/* for old implementation of bsd flock () */
+#define F_EXLCK		4	/* or 3 */
+#define F_SHLCK		8	/* or 4 */
+
+/* operations for bsd flock(), also used by the kernel implementation */
+#define LOCK_SH		1	/* shared lock */
+#define LOCK_EX		2	/* exclusive lock */
+#define LOCK_NB		4	/* or'd with one of the above to prevent		XXXXXXXXXXXXXXXXXX
+				   blocking */
+#define LOCK_UN		8	/* remove lock */
+
+typedef struct flock {
+	short l_type;
+	short l_whence;
+	__off_t l_start;
+	__off_t l_len;
+	long  l_sysid;			/* XXX */
+	__pid_t l_pid;
+	long  pad[4];			/* XXX */
+} flock_t;
+
+
+/* Define some more compatibility macros to be backward compatible with
+   BSD systems which did not managed to hide these kernel macros.  */
+#ifdef	__USE_BSD
+#define	FAPPEND		O_APPEND
+#define	FFSYNC		O_FSYNC
+#define FASYNC		O_ASYNC
+#define	FNONBLOCK	O_NONBLOCK
+#define	FNDELAY		O_NDELAY
+#endif /* Use BSD.  */
diff --git a/sysdeps/unix/sysv/linux/mips/bits/ioctl-types.h b/sysdeps/unix/sysv/linux/mips/bits/ioctl-types.h
new file mode 100644
index 0000000000..486022e6d9
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/bits/ioctl-types.h
@@ -0,0 +1,71 @@
+/* Structure types for pre-termios terminal ioctls.  Linux/MIPS version.
+   Copyright (C) 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.  */
+
+/*
+ * Never include this file directly; use <sys/ioctl.h> instead.
+ */
+
+#ifndef _BITS_IOCTL_TYPES_H
+#define _BITS_IOCTL_TYPES_H 1
+
+/* Get definition of constants for use with `ioctl'.  */
+#include <asm/ioctls.h>
+
+struct winsize
+  {
+    unsigned short ws_row;
+    unsigned short ws_col;
+    unsigned short ws_xpixel;
+    unsigned short ws_ypixel;
+  };
+
+#define NCC	8
+struct termio
+  {
+    unsigned short c_iflag;		/* input mode flags */
+    unsigned short c_oflag;		/* output mode flags */
+    unsigned short c_cflag;		/* control mode flags */
+    unsigned short c_lflag;		/* local mode flags */
+    char c_line;			/* line discipline */
+    /* Yes, this is really NCCS.  */
+    unsigned char c_cc[32 /* NCCS */]; /* control characters */
+  };
+
+/* modem lines */
+#define TIOCM_LE	0x001		/* line enable */
+#define TIOCM_DTR	0x002		/* data terminal ready */
+#define TIOCM_RTS	0x004		/* request to send */
+#define TIOCM_ST	0x010		/* secondary transmit */
+#define TIOCM_SR	0x020		/* secondary receive */
+#define TIOCM_CTS	0x040		/* clear to send */
+#define TIOCM_CAR	0x100		/* carrier detect */
+#define TIOCM_CD	TIOCM_CAR
+#define TIOCM_RNG	0x200		/* ring */
+#define TIOCM_RI	TIOCM_RNG
+#define TIOCM_DSR	0x400		/* data set ready */
+
+/* line disciplines */
+#define N_TTY		0
+#define N_SLIP		1
+#define N_MOUSE		2
+#define N_PPP		3
+#define N_STRIP		4
+#define N_AX25		5
+
+#endif /* bits/ioctl-types.h */
diff --git a/sysdeps/unix/sysv/linux/mips/bits/ipc.h b/sysdeps/unix/sysv/linux/mips/bits/ipc.h
new file mode 100644
index 0000000000..c5a3cd0049
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/bits/ipc.h
@@ -0,0 +1,85 @@
+/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+   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 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 _SYS_IPC_BUF_H
+
+#define _SYS_IPC_BUF_H	1
+#include <features.h>
+
+#include <sys/types.h>
+
+/* Mode bits for `msgget', `semget', and `shmget'.  */
+#define IPC_CREAT	01000		/* Create key if key does not exist. */
+#define IPC_EXCL	02000		/* Fail if key exists.  */
+#define IPC_NOWAIT	04000		/* Return error on wait.  */
+
+/* Control commands for `msgctl', `semctl', and `shmctl'.  */
+#define IPC_RMID	0		/* Remove identifier.  */
+#define IPC_SET		1		/* Set `ipc_perm' options.  */
+#define IPC_STAT	2		/* Get `ipc_perm' options.  */
+#define IPC_INFO	3		/* See ipcs.  */
+
+
+__BEGIN_DECLS
+
+/* Special key values.  */
+#define IPC_PRIVATE	((__key_t) 0)	/* Private key.  */
+
+
+/* Data structure used to pass permission information to IPC operations.  */
+struct ipc_perm
+  {
+    __key_t __key;			/* Key.  */
+    long uid;				/* Owner's user ID.  */
+    long gid;				/* Owner's group ID.  */
+    long cuid;				/* Creator's user ID.  */
+    long cgid;				/* Creator's group ID.  */
+    unsigned long mode;			/* Read/write permission.  */
+    unsigned short int __seq;		/* Sequence number.  */
+  };
+
+
+/* Kludge to work around Linux' restriction of only up to five
+   arguments to a system call.  */
+struct ipc_kludge
+  {
+    void *msgp;
+    long int msgtyp;
+  };
+
+/* The actual system call: all functions are multiplexed by this.  */
+extern int __ipc __P ((int __call, int __first, int __second, int __third,
+		       void *__ptr));
+
+/* The codes for the functions to use the multiplexer `__ipc'.  */
+#define IPCOP_semop	 1
+#define IPCOP_semget	 2
+#define IPCOP_semctl	 3
+#define IPCOP_msgsnd	11
+#define IPCOP_msgrcv	12
+#define IPCOP_msgget	13
+#define IPCOP_msgctl	14
+#define IPCOP_shmat	21
+#define IPCOP_shmdt	22
+#define IPCOP_shmget	23
+#define IPCOP_shmctl	24
+
+__END_DECLS
+
+#endif /* bits/ipc_buf.h */
diff --git a/sysdeps/unix/sysv/linux/mips/bits/shm.h b/sysdeps/unix/sysv/linux/mips/bits/shm.h
new file mode 100644
index 0000000000..9d4b20bb53
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/bits/shm.h
@@ -0,0 +1,92 @@
+/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+   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 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 _SYS_SHM_BUF_H
+
+#define _SYS_SHM_BUF_H	1
+#include <features.h>
+
+#include <sys/types.h>
+
+/* Permission flag for shmget.  */
+#define SHM_R		0400		/* or S_IRUGO from <linux/stat.h> */
+#define SHM_W		0200		/* or S_IWUGO from <linux/stat.h> */
+
+/* Flags for `shmat'.  */
+#define SHM_RDONLY	010000		/* attach read-only else read-write */
+#define SHM_RND		020000		/* round attach address to SHMLBA */
+#define SHM_REMAP	040000		/* take-over region on attach */
+
+/* Commands for `shmctl'.  */
+#define SHM_LOCK	11		/* lock segment (root only) */
+#define SHM_UNLOCK	12		/* unlock segment (root only) */
+
+
+__BEGIN_DECLS
+
+/* Data structure describing a set of semaphores.  */
+struct shmid_ds
+{
+  struct ipc_perm shm_perm;		/* operation permission struct */
+  int shm_segsz;			/* size of segment in bytes */
+  __time_t shm_atime;			/* time of last shmat() */
+  __time_t shm_dtime;			/* time of last shmdt() */
+  __time_t shm_ctime;			/* time of last change by shmctl() */
+  long shm_cpid;			/* pid of creator */
+  long shm_lpid;			/* pid of last shmop */
+  unsigned short int shm_nattch;	/* number of current attaches */
+  unsigned short int __shm_npages;	/* size of segment (pages) */
+  unsigned long int *__shm_pages;	/* array of ptrs to frames -> SHMMAX */
+  struct vm_area_struct *__attaches;	/* descriptors for attaches */
+};
+
+#ifdef __USE_MISC
+
+/* ipcs ctl commands */
+#define SHM_STAT 	13
+#define SHM_INFO 	14
+
+/* shm_mode upper byte flags */
+#define	SHM_DEST	01000	/* segment will be destroyed on last detach */
+#define SHM_LOCKED      02000   /* segment will not be swapped */
+
+struct	shminfo
+{
+  int shmmax;
+  int shmmin;
+  int shmmni;
+  int shmseg;
+  int shmall;
+};
+
+struct shm_info
+{
+  int   used_ids;
+  ulong shm_tot;	/* total allocated shm */
+  ulong shm_rss;	/* total resident shm */
+  ulong shm_swp;	/* total swapped shm */
+  ulong swap_attempts;
+  ulong swap_successes;
+};
+
+#endif /* __USE_MISC */
+
+__END_DECLS
+
+#endif /* bits/shm_buf.h */
diff --git a/sysdeps/unix/sysv/linux/mips/bits/sigaction.h b/sysdeps/unix/sysv/linux/mips/bits/sigaction.h
new file mode 100644
index 0000000000..66c58cc540
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/bits/sigaction.h
@@ -0,0 +1,62 @@
+/* The proper definitions for Linux/MIPS's sigaction.
+   Copyright (C) 1993, 1994, 1995, 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.  */
+
+/* Structure describing the action to be taken when a signal arrives.  */
+struct sigaction
+  {
+    /* Special flags.  */
+    unsigned int sa_flags;
+
+    /* Signal handler.  */
+    __sighandler_t sa_handler;
+
+    /* Additional set of signals to be blocked.  */
+    __sigset_t sa_mask;
+
+    /* The ABI says here are two unused ints following. */
+    /* Restore handler.  */
+    void (*sa_restorer) __P ((void));
+
+#if (_MIPS_ISA == _MIPS_ISA_MIPS1) || (_MIPS_ISA == _MIPS_ISA_MIPS2)
+    int sa_resv[1];
+#endif
+  };
+
+/* Bits in `sa_flags'.  */
+#define	SA_NOCLDSTOP 1		/* Don't send SIGCHLD when children stop.  */
+#ifdef __USE_MISC
+#define SA_STACK     0x08000000	/* Use signal stack by using `sa_restorer'.  */
+#define SA_RESTART   0x10000000	/* Don't restart syscall on signal return.  */
+#define SA_INTERRUPT 0x20000000	/* Historical no-op.  */
+#define SA_NODEFER   0x40000000	/* Don't automatically block the signal when
+				   its handler is being executed.  */
+#define SA_RESETHAND 0x80000000	/* Reset to SIG_DFL on entry to handler.  */
+
+/* Some aliases for the SA_ constants.  */
+#define SA_NOMASK	SA_NODEFER
+#define SA_ONESHOT	SA_RESETHAND
+#endif
+
+/* Values for the HOW argument to `sigprocmask'.  */
+#define SIG_NOP		0	/* 0 is unused to catch errors */
+#define	SIG_BLOCK	1	/* Block signals.  */
+#define	SIG_UNBLOCK	2	/* Unblock signals.  */
+#define	SIG_SETMASK	3	/* Set the set of blocked signals.  */
+#define SIG_SETMASK32	256	/* Goodie from SGI for BSD compatibility:
+				   set only the low 32 bit of the sigset.  */
diff --git a/sysdeps/unix/sysv/linux/mips/bits/signum.h b/sysdeps/unix/sysv/linux/mips/bits/signum.h
new file mode 100644
index 0000000000..5254a2b420
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/bits/signum.h
@@ -0,0 +1,30 @@
+/* Signal number definitions.  Linux version.
+   Copyright (C) 1995, 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.  */
+
+#ifdef	_SIGNAL_H
+
+/* Take these architecture specific stuff from the kernel header files.  */
+#define __need_fake_sigfuns
+#define __need_signums
+#include <asm/signal.h>
+
+#endif	/* <signal.h> included.  */
+
+#define __need__nsig
+#include <asm/signal.h>
diff --git a/sysdeps/unix/sysv/linux/mips/bits/socket.h b/sysdeps/unix/sysv/linux/mips/bits/socket.h
new file mode 100644
index 0000000000..15f420fc9c
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/bits/socket.h
@@ -0,0 +1,178 @@
+/* System-specific socket constants and types.  Linux version.
+   Copyright (C) 1991, 92, 94, 95, 96, 97 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.  */
+
+#ifndef _SYS_SOCKET_H
+#error "Never include <bits/socket.h> directly; use <sys/socket.h> instead."
+#endif
+
+
+#include <features.h>
+
+#define	__need_size_t
+#define __need_NULL
+#include <stddef.h>
+
+
+__BEGIN_DECLS
+
+/* Supported address families. */
+#define PF_UNSPEC	0
+#define PF_UNIX		1		/* Unix domain sockets 		*/
+#define PF_LOCAL	1		/* POSIX name for AF_UNIX	*/
+#define PF_FILE		PF_LOCAL	/* POSIX name for PF_LOCAL.	*/
+#define PF_INET		2		/* Internet IP Protocol 	*/
+#define PF_AX25		3		/* Amateur Radio AX.25 		*/
+#define PF_IPX		4		/* Novell IPX 			*/
+#define PF_APPLETALK	5		/* Appletalk DDP 		*/
+#define PF_NETROM	6		/* Amateur Radio NET/ROM 	*/
+#define PF_BRIDGE	7		/* Multiprotocol bridge 	*/
+#define PF_AAL5		8		/* Reserved for Werner's ATM 	*/
+#define PF_X25		9		/* Reserved for X.25 project 	*/
+#define PF_INET6	10		/* IP version 6			*/
+#define PF_ROSE		11		/* Amateur Radio X.25 PLP	*/
+#define PF_DECNET	12		/* Reserved for DECnet project	*/
+#define PF_NETBEUI	13		/* Reserved for 802.2LLC project*/
+#define PF_MAX		32		/* For now.. */
+
+/* Protocol families, same as address families. */
+#define AF_UNSPEC	PF_UNSPEC
+#define AF_UNIX		PF_UNIX
+#define AF_LOCAL	PF_LOCAL
+#define AF_FILE		PF_FILE
+#define AF_INET		PF_INET
+#define AF_AX25		PF_AX25
+#define AF_IPX		PF_IPX
+#define AF_APPLETALK	PF_APPLETALK
+#define	AF_NETROM	PF_NETROM
+#define AF_BRIDGE	PF_BRIDGE
+#define AF_AAL5		PF_AAL5
+#define AF_X25		PF_X25
+#define AF_INET6	PF_INET6
+#define AF_ROSE		PF_ROSE
+#define AF_DECNET	PF_DECNET
+#define AF_NETBEUI	PF_NETBEUI
+
+#define AF_MAX		PF_MAX
+
+/* Raw IP packet level.  */
+#define SOL_RAW		255
+
+/* Maximum queue length specifiable by listen.  */
+#define SOMAXCONN	128
+
+/* Get the definition of the macro to define the common sockaddr members.  */
+#include <bits/sockaddr.h>
+
+/* Structure describing a generic socket address.  */
+struct sockaddr
+  {
+    __SOCKADDR_COMMON (sa_);	/* Common data: address family and length.  */
+    char sa_data[14];		/* Address data.  */
+  };
+
+
+/* Bits in the FLAGS argument to `send', `recv', et al.  */
+enum
+  {
+    MSG_OOB		= 0x01,	/* Process out-of-band data.  */
+    MSG_PEEK		= 0x02,	/* Peek at incoming messages.  */
+    MSG_DONTROUTE	= 0x04,	/* Don't use local routing.  */
+    MSG_CTRUNC		= 0x08,	/* Control data lost before delivery.  */
+    MSG_PROXY		= 0x10	/* Supply or ask second address.  */
+  };
+
+
+/* Structure describing messages sent by
+   `sendmsg' and received by `recvmsg'.  */
+struct msghdr
+  {
+    __ptr_t msg_name;		/* Address to send to/receive from.  */
+    int msg_namelen;		/* Length of address data.  */
+    /* XXX Should be type `size_t' according to POSIX.1g.  */
+
+    struct iovec *msg_iov;	/* Vector of data to send/receive into.  */
+    int msg_iovlen;		/* Number of elements in the vector.  */
+    /* XXX Should be type `size_t' according to POSIX.1g.  */
+
+    __ptr_t msg_control;	/* Ancillary data (eg BSD filedesc passing). */
+    int msg_controllen;		/* Ancillary data buffer length.  */
+    /* XXX Should be type `size_t' according to POSIX.1g.  */
+    int msg_flags;		/* Flags on received message.  */
+  };
+
+/* Structure used for storage of ancillary data object information.  */
+struct cmsghdr
+  {
+    int cmsg_len;		/* Length of data in cmsg_data plus length
+				   of cmsghdr structure.  */
+    /* XXX Should be type `size_t' according to POSIX.1g.  */
+    int cmsg_level;		/* Originating protocol.  */
+    int cmsg_type;		/* Protocol specific type.  */
+#if !defined __STRICT_ANSI__ && defined __GNUC__ && __GNUC__ >= 2
+    unsigned char __cmsg_data[0]; /* Ancillary data.  */
+#endif
+  };
+
+/* Ancillary data object manipulation macros.  */
+#if !defined __STRICT_ANSI__ && defined __GNUC__ && __GNUC__ >= 2
+# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data)
+#else
+# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1))
+#endif
+#define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg)
+#define CMSG_FIRSTHDR(mhdr) \
+  ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr)			      \
+   ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) NULL)
+
+
+#ifndef _EXTERN_INLINE
+# define _EXTERN_INLINE extern __inline
+#endif
+extern struct cmsghdr *__cmsg_nxthdr __P ((struct msghdr *__mhdr,
+					   struct cmsghdr *__cmsg));
+_EXTERN_INLINE struct cmsghdr *
+__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg)
+{
+  unsigned char *__p;
+
+  if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr))
+    /* The kernel header does this so there may be a reason.  */
+    return NULL;
+
+  __p = (((unsigned char *) __cmsg)
+	 + ((__cmsg->cmsg_len + sizeof (long int) - 1) & ~sizeof (long int)));
+  if (__p >= (unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen)
+    /* No more entries.  */
+    return NULL;
+  return (struct cmsghdr *) __p;
+}
+
+
+/* Get socket manipulation related informations from kernel headers.  */
+#include <asm/socket.h>
+
+
+/* Structure used to manipulate the SO_LINGER option.  */
+struct linger
+  {
+    int l_onoff;		/* Nonzero to linger on close.  */
+    int l_linger;		/* Time to linger.  */
+  };
+
+__END_DECLS
diff --git a/sysdeps/unix/sysv/linux/mips/bits/stat.h b/sysdeps/unix/sysv/linux/mips/bits/stat.h
new file mode 100644
index 0000000000..a797b34c38
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/bits/stat.h
@@ -0,0 +1,97 @@
+/* Copyright (C) 1992, 1995, 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.  */
+
+/*
+ * Never include this file directly; use <sys/stat.h> instead.
+ */
+
+#ifndef _BITS_STAT_H
+#define _BITS_STAT_H	1
+
+/* Versions of the `struct stat' data structure.  */
+#define _STAT_VER_LINUX_OLD	1
+#define _STAT_VER_SVR4		2
+#define _STAT_VER_LINUX		3
+#define _STAT_VER		_STAT_VER_LINUX	/* The one defined below.  */
+
+/* Versions of the `xmknod' interface.  */
+#define _MKNOD_VER_LINUX	1
+#define _MKNOD_VER_SVR4		2
+#define _MKNOD_VER		_MKNOD_VER_LINUX /* The bits defined below.  */
+
+/* Structure describing file characteristics.  */
+struct stat
+  {
+    unsigned long int st_dev;
+    long int st_pad1[3];
+    __ino_t st_ino;		/* File serial number.		*/
+    __mode_t st_mode;		/* File mode.  */
+    __nlink_t st_nlink;		/* Link count.  */
+    __uid_t st_uid;		/* User ID of the file's owner.	*/
+    __gid_t st_gid;		/* Group ID of the file's group.*/
+    unsigned long int st_rdev;	/* Device number, if device.  */
+    long int st_pad2[2];
+    __off_t st_size;		/* Size of file, in bytes.  */
+    /* SVR4 added this extra long to allow for expansion of off_t.  */
+    long int st_pad3;
+    /*
+     * Actually this should be timestruc_t st_atime, st_mtime and
+     * st_ctime but we don't have it under Linux.
+     */
+    __time_t st_atime;		/* Time of last access.  */
+    long int __reserved0;
+    __time_t st_mtime;		/* Time of last modification.  */
+    long int __reserved1;
+    __time_t st_ctime;		/* Time of last status change.  */
+    long int __reserved2;
+    long int st_blksize;	/* Optimal block size for I/O.  */
+#define	_STATBUF_ST_BLKSIZE	/* Tell code we have this member.  */
+    long int st_blocks;		/* Number of 512-byte blocks allocated.  */
+    char st_fstype[16];		/* Filesystem type name */
+    long int st_pad4[8];
+    /* Linux specific fields */
+    unsigned int st_flags;
+    unsigned int st_gen;
+  };
+
+
+/* Encoding of the file mode.  */
+
+#define	__S_IFMT	0170000	/* These bits determine file type.  */
+
+/* File types.  */
+#define	__S_IFDIR	0040000	/* Directory.  */
+#define	__S_IFCHR	0020000	/* Character device.  */
+#define	__S_IFBLK	0060000	/* Block device.  */
+#define	__S_IFREG	0100000	/* Regular file.  */
+#define	__S_IFIFO	0010000	/* FIFO.  */
+
+/* These don't actually exist on System V, but having them doesn't hurt.  */
+#define	__S_IFLNK	0120000	/* Symbolic link.  */
+#define	__S_IFSOCK	0140000	/* Socket.  */
+
+/* Protection bits.  */
+
+#define	__S_ISUID	04000	/* Set user ID on execution.  */
+#define	__S_ISGID	02000	/* Set group ID on execution.  */
+#define	__S_ISVTX	01000	/* Save swapped text after use (sticky).  */
+#define	__S_IREAD	0400	/* Read by owner.  */
+#define	__S_IWRITE	0200	/* Write by owner.  */
+#define	__S_IEXEC	0100	/* Execute by owner.  */
+
+#endif	/* bits/stat.h */
diff --git a/sysdeps/unix/sysv/linux/mips/bits/statfs.h b/sysdeps/unix/sysv/linux/mips/bits/statfs.h
new file mode 100644
index 0000000000..3b2306147c
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/bits/statfs.h
@@ -0,0 +1,44 @@
+/* Copyright (C) 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.  */
+
+/*
+ * Never include this file directly; use <sys/statfs.h> instead.
+ */
+
+#ifndef _BITS_STATFS_H
+#define _BITS_STATFS_H
+
+struct statfs
+  {
+    long int f_type;
+#define f_fstyp f_type
+    long int f_bsize;
+    long int f_frsize;	/* Fragment size - unsupported */
+    long int f_blocks;
+    long int f_bfree;
+    long int f_files;
+    long int f_ffree;
+
+	/* Linux specials */
+    long int f_bavail;
+    __fsid_t f_fsid;
+    long int f_namelen;
+    long int f_spare[6];
+  };
+
+#endif	/* bits/statfs.h */
diff --git a/sysdeps/unix/sysv/linux/mips/bits/termios.h b/sysdeps/unix/sysv/linux/mips/bits/termios.h
new file mode 100644
index 0000000000..c8a24694d9
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/bits/termios.h
@@ -0,0 +1,260 @@
+/* termios type and macro definitions.  Linux/MIPS version.
+   Copyright (C) 1993, 1994, 1995, 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.  */
+
+/*
+ * Never include this file directly; use <termios.h> instead.
+ */
+
+
+#ifndef _BITS_TERMIOS_H
+#define _BITS_TERMIOS_H 1
+
+typedef unsigned char	cc_t;
+typedef unsigned int	speed_t;
+typedef unsigned int	tcflag_t;
+
+
+#if defined __USE_BSD
+
+struct sgttyb
+  {
+    char sg_ispeed;
+    char sg_ospeed;
+    char sg_erase;
+    char sg_kill;
+    int	sg_flags;	/* SGI special - int, not short */
+  };
+
+struct tchars
+  {
+    char t_intrc;
+    char t_quitc;
+    char t_startc;
+    char t_stopc;
+    char t_eofc;
+    char t_brkc;
+  };
+
+struct ltchars
+  {
+    char t_suspc;		/* stop process signal */
+    char t_dsuspc;		/* delayed stop process signal */
+    char t_rprntc;		/* reprint line */
+    char t_flushc;		/* flush output (toggles) */
+    char t_werasc;		/* word erase */
+    char t_lnextc;		/* literal next character */
+  };
+
+#endif /* defined(__BSD) */
+
+#define NCCS 32
+struct termios
+  {
+    tcflag_t c_iflag;		/* input mode flags */
+    tcflag_t c_oflag;		/* output mode flags */
+    tcflag_t c_cflag;		/* control mode flags */
+    tcflag_t c_lflag;		/* local mode flags */
+    cc_t c_line;			/* line discipline */
+    cc_t c_cc[NCCS];		/* control characters */
+    speed_t c_ispeed;		/* input speed */
+    speed_t c_ospeed;		/* output speed */
+  };
+
+/* c_cc characters */
+#define VINTR		 0		/* Interrupt character [ISIG].  */
+#define VQUIT		 1		/* Quit character [ISIG].  */
+#define VERASE		 2		/* Erase character [ICANON].  */
+#define VKILL		 3		/* Kill-line character [ICANON].  */
+#define VMIN		 4		/* Minimum number of bytes read at once [!ICANON].  */
+#define VTIME		 5		/* Time-out value (tenths of a second) [!ICANON].  */
+#if defined (__USE_BSD)
+#define VEOL2		 6		/* Second EOL character [ICANON].  */
+/* The next two are guesses ... */
+#define VSWTC		 7		/* ??? */
+#endif
+#define VSWTCH		VSWTC
+#define VSTART		 8		/* Start (X-ON) character [IXON, IXOFF].  */
+#define VSTOP		 9		/* Stop (X-OFF) character [IXON, IXOFF].  */
+#define VSUSP		10		/* Suspend character [ISIG].  */
+#if 0
+/*
+ * VDSUSP is not supported
+ */
+#if defined (__USE_BSD)
+#define VDSUSP		11		/* Delayed suspend character [ISIG].  */
+#endif
+#endif
+#if defined (__USE_BSD)
+#define VREPRINT	12		/* Reprint-line character [ICANON].  */
+#endif
+#if defined (__USE_BSD)
+#define VDISCARD	13		/* Discard character [IEXTEN].  */
+#define VWERASE		14		/* Word-erase character [ICANON].  */
+#define VLNEXT		15		/* Literal-next character [IEXTEN].  */
+#endif
+#define VEOF		16		/* End-of-file character [ICANON].  */
+#define VEOL		17		/* End-of-line character [ICANON].  */
+
+/* c_iflag bits */
+#define IGNBRK	0000001		/* Ignore break condition.  */
+#define BRKINT	0000002		/* Signal interrupt on break.  */
+#define IGNPAR	0000004		/* Ignore characters with parity errors.  */
+#define PARMRK	0000010		/* Mark parity and framing errors.  */
+#define INPCK	0000020		/* Enable input parity check.  */
+#define ISTRIP	0000040		/* Strip 8th bit off characters.  */
+#define INLCR	0000100		/* Map NL to CR on input.  */
+#define IGNCR	0000200		/* Ignore CR.  */
+#define ICRNL	0000400		/* Map CR to NL on input.  */
+#if defined (__USE_BSD)
+#define IUCLC	0001000		/* Map upper case to lower case on input.  */
+#endif
+#define IXON	0002000		/* Enable start/stop output control.  */
+#if defined (__USE_BSD)
+#define IXANY	0004000		/* Any character will restart after stop.  */
+#endif
+#define IXOFF	0010000		/* Enable start/stop input control.  */
+#if defined (__USE_BSD)
+#define IMAXBEL	0020000		/* Ring bell when input queue is full.  */
+#endif
+
+/* c_oflag bits */
+#define OPOST	0000001		/* Perform output processing.  */
+#if defined (__USE_BSD)
+#define OLCUC	0000002		/* Map lower case to upper case on output.  */
+#define ONLCR	0000004		/* Map NL to CR-NL on output.  */
+#define OCRNL	0000010
+#define ONOCR	0000020
+#define ONLRET	0000040
+#define OFILL	0000100
+#define OFDEL	0000200
+#define NLDLY	0000400
+#define   NL0	0000000
+#define   NL1	0000400
+#define CRDLY	0003000
+#define   CR0	0000000
+#define   CR1	0001000
+#define   CR2	0002000
+#define   CR3	0003000
+#define TABDLY	0014000
+#define   TAB0	0000000
+#define   TAB1	0004000
+#define   TAB2	0010000
+#define   TAB3	0014000
+#define   XTABS	0014000
+#define BSDLY	0020000
+#define   BS0	0000000
+#define   BS1	0020000
+#define VTDLY	0040000
+#define   VT0	0000000
+#define   VT1	0040000
+#define FFDLY	0100000
+#define   FF0	0000000
+#define   FF1	0100000
+/*
+#define PAGEOUT ???
+#define WRAP    ???
+ */
+#endif
+
+/* c_cflag bit meaning */
+#define CBAUD	0010017
+#define  B0	0000000		/* hang up */
+#define  B50	0000001
+#define  B75	0000002
+#define  B110	0000003
+#define  B134	0000004
+#define  B150	0000005
+#define  B200	0000006
+#define  B300	0000007
+#define  B600	0000010
+#define  B1200	0000011
+#define  B1800	0000012
+#define  B2400	0000013
+#define  B4800	0000014
+#define  B9600	0000015
+#define  B19200	0000016
+#define  B38400	0000017
+#define EXTA B19200
+#define EXTB B38400
+#define CSIZE	0000060		/* Number of bits per byte (mask).  */
+#define   CS5	0000000		/* 5 bits per byte.  */
+#define   CS6	0000020		/* 6 bits per byte.  */
+#define   CS7	0000040		/* 7 bits per byte.  */
+#define   CS8	0000060		/* 8 bits per byte.  */
+#define CSTOPB	0000100		/* Two stop bits instead of one.  */
+#define CREAD	0000200		/* Enable receiver.  */
+#define PARENB	0000400		/* Parity enable.  */
+#define PARODD	0001000		/* Odd parity instead of even.  */
+#define HUPCL	0002000		/* Hang up on last close.  */
+#define CLOCAL	0004000		/* Ignore modem status lines.  */
+#if defined (__USE_BSD)
+#define CBAUDEX 0010000
+#define  B57600  0010001
+#define  B115200 0010002
+#define  B230400 0010003
+#define  B460800 0010004
+#define CIBAUD	  002003600000	/* input baud rate (not used) */
+#define CRTSCTS	  020000000000		/* flow control */
+#endif
+
+/* c_lflag bits */
+#define ISIG	0000001		/* Enable signals.  */
+#define ICANON	0000002		/* Do erase and kill processing.  */
+#define XCASE	0000004
+#define ECHO	0000010		/* Enable echo.  */
+#define ECHOE	0000020		/* Visual erase for ERASE.  */
+#define ECHOK	0000040		/* Echo NL after KILL.  */
+#define ECHONL	0000100		/* Echo NL even if ECHO is off.  */
+#define NOFLSH	0000200		/* Disable flush after interrupt.  */
+#define IEXTEN	0000400		/* Enable DISCARD and LNEXT.  */
+#if defined (__USE_BSD)
+#define ECHOCTL	0001000		/* Echo control characters as ^X.  */
+#define ECHOPRT	0002000		/* Hardcopy visual erase.  */
+#define ECHOKE	0004000		/* Visual erase for KILL.  */
+#endif
+#define FLUSHO	0020000
+#if defined (__USE_BSD)
+#define PENDIN	0040000		/* Retype pending input (state).  */
+#endif
+#define TOSTOP	0100000		/* Send SIGTTOU for background output.  */
+#define ITOSTOP	TOSTOP
+
+/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
+#define TIOCSER_TEMT    0x01	/* Transmitter physically empty */
+
+/* tcflow() and TCXONC use these */
+#define	TCOOFF		0	/* Suspend output.  */
+#define	TCOON		1	/* Restart suspended output.  */
+#define	TCIOFF		2	/* Send a STOP character.  */
+#define	TCION		3	/* Send a START character.  */
+
+/* tcflush() and TCFLSH use these */
+#define	TCIFLUSH	0	/* Discard data received but not yet read.  */
+#define	TCOFLUSH	1	/* Discard data written but not yet sent.  */
+#define	TCIOFLUSH	2	/* Discard all pending data.  */
+
+/* tcsetattr uses these */
+#define	TCSANOW		0x540e	/* Same as TCSETS; change immediately.  */
+#define	TCSADRAIN	0x540f	/* Same as TCSETSW; change when pending output is written.  */
+#define	TCSAFLUSH	0x5410	/* Same as TCSETSF; flush pending input before changing.  */
+
+#define _IOT_termios /* Hurd ioctl type field.  */ \
+  _IOT (_IOTS (cflag_t), 4, _IOTS (cc_t), NCCS, _IOTS (speed_t), 2)
+
+#endif /* bits/termios.h */
diff --git a/sysdeps/unix/sysv/linux/mips/bits/time.h b/sysdeps/unix/sysv/linux/mips/bits/time.h
new file mode 100644
index 0000000000..5fcef0fb8c
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/bits/time.h
@@ -0,0 +1,54 @@
+/* System-dependent timing definitions.  Linux/MIPS version.
+   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.  */
+
+/*
+ * Never include this file directly; use <time.h> instead.
+ */
+
+#ifdef __need_timeval
+# undef __need_timeval
+# ifndef _STRUCT_TIMEVAL
+#  define _STRUCT_TIMEVAL	1
+/* A time value that is accurate to the nearest
+   microsecond but also has a range of years.  */
+struct timeval
+  {
+    long tv_sec;			/* Seconds.  */
+    long tv_usec;		/* Microseconds.  */
+  };
+# endif	/* struct timeval */
+#endif	/* need timeval */
+
+
+#ifndef _BITS_TIME_H
+#define _BITS_TIME_H	1
+
+/* ISO/IEC 9899:1990 7.12.1: <time.h>
+   The macro `CLOCKS_PER_SEC' is the number per second of the value
+   returned by the `clock' function. */
+/* CAE XSH, Issue 4, Version 2: <time.h>
+   The value of CLOCKS_PER_SEC is required to be 1 million on all
+   XSI-conformant systems. */
+# define CLOCKS_PER_SEC  1000000
+
+/* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK
+   presents the real value for clock ticks per second for the system.  */
+# define CLK_TCK 100		/* XXX not correct for all systems.  */
+
+#endif  /* bits/time.h */
diff --git a/sysdeps/unix/sysv/linux/mips/clone.S b/sysdeps/unix/sysv/linux/mips/clone.S
new file mode 100644
index 0000000000..357f70e47f
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/clone.S
@@ -0,0 +1,125 @@
+/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ralf Baechle <ralf@gnu.ai.mit.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 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.  */
+
+/* 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 <sys/asm.h>
+#include <asm/unistd.h>
+#include <sysdep.h>
+#define _ERRNO_H	1
+#include <bits/errno.h>
+
+/* int clone(int (*fn)(), void *child_stack, int flags, int nargs, ...) */
+
+#define FRAMESZ  4*SZREG
+#if _MIPS_SIM == _MIPS_SIM_ABI32
+#define MAX_REG_ARGS 4
+#else
+#define MAX_REG_ARGS 6
+#endif
+
+	.text
+NESTED(__clone,4*SZREG,sp)
+#ifdef __PIC__
+	.set		noreorder
+	.cpload		$25
+	.set		reorder
+	.cprestore	16
+#endif
+	PTR_SUBIU	sp,FRAMESZ
+#ifdef PROF
+	.set		noat
+	move		$1,ra
+	jal		_mcount
+	.set		at
+#endif
+
+	/* Sanity check arguments.  */
+	li		v0,EINVAL
+	beqz		a0,error	/* no NULL function pointers */
+	beqz		a1,error	/* no NULL stack pointers */
+	bltz		a3,error	/* no negative argument counts */
+
+	/* Allocate space on the new stack and copy args over */
+	move		t0,a3		# save nargs for __thread_start
+	PTR_SLL		t1,a3,PTR_SCALESHIFT
+	PTR_ADDU	t1,a3,sp
+1:	REG_L		t2,-SZREG(t1)
+	PTR_SUBIU	t1,SZREG
+	REG_S		t2,-SZREG(a1)
+	PTR_SUBIU	a3,1
+	PTR_SUBIU	a1,SZREG
+	bnez		a3,1b
+
+	/* Do the system call */
+	move		t9,a0		# get fn ptr out of the way
+	move		a0,a2
+	li		v0,__NR_clone
+	syscall
+
+	bnez		a3,error
+	beqz		v0,__thread_start
+
+	/* Successful return from the parent */
+	PTR_ADDIU	sp,FRAMESZ
+	ret
+
+	/* Something bad happened -- no child created */
+error:
+	PTR_ADDIU	sp,FRAMESZ
+#ifdef PIC
+	la		t9,__syscall_error
+	jr		t9
+#else
+	j		__syscall_error
+#endif
+	END(__clone)
+
+/* Load up the arguments to the function.  Put this block of code in
+   its own function so that we can terminate the stack trace with our
+   debug info.
+
+   At this point we have t0=nargs, t9=fn, sp=&arg[0].  */
+
+NESTED(__thread_start,32,sp)
+	/* Stackframe has been created on entry of clone() */
+	/* Calculate address of jump into argument loading code */
+	li		t1,MAX_REG_ARGS
+	slt		t0,t1,t2       /* max MAX_REG_ARGS args in registers */
+	MOVN		(t2,t1,t0)
+	la		v0,arg0
+	PTR_SLL		t1,t0,PTR_SCALESHIFT
+	PTR_SUBU	v0,t1
+	jr		v0
+
+	/* Load the integer register arguments */
+	REG_L		a0,SZREG(sp)
+arg0:
+
+	/* Call the user's function */
+	jalr		t9
+
+	/* Call _exit rather than doing it inline for breakpoint purposes */
+	move		a0,v0
+	jal		_exit
+
+	END(__thread_start)
+
+weak_alias(__clone, clone)
diff --git a/sysdeps/unix/sysv/linux/mips/entry.h b/sysdeps/unix/sysv/linux/mips/entry.h
new file mode 100644
index 0000000000..3db6d93636
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/entry.h
@@ -0,0 +1 @@
+#define ENTRY_POINT __start
diff --git a/sysdeps/unix/sysv/linux/mips/fpregdef.h b/sysdeps/unix/sysv/linux/mips/fpregdef.h
new file mode 100644
index 0000000000..a963d5f588
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/fpregdef.h
@@ -0,0 +1 @@
+#include <sys/fpregdef.h>
diff --git a/sysdeps/unix/sysv/linux/mips/fxstat.c b/sysdeps/unix/sysv/linux/mips/fxstat.c
new file mode 100644
index 0000000000..4a3c486a4a
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/fxstat.c
@@ -0,0 +1,80 @@
+/* fxstat using old-style Unix fstat system call.
+   Copyright (C) 1991, 1995, 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 <errno.h>
+#include <stddef.h>
+#include <sys/stat.h>
+
+#include <kernel_stat.h>
+
+extern int __syscall_fstat (int, struct kernel_stat *);
+
+/* Get information about the file descriptor FD in BUF.  */
+int
+__fxstat (int vers, int fd, struct stat *buf)
+{
+  struct kernel_stat kbuf;
+  int result;
+
+  switch (vers)
+    {
+    case _STAT_VER_LINUX_OLD:
+      /* Nothing to do.  The struct is in the form the kernel expects
+	 it to be.  */
+      result = __syscall_fstat (fd, (struct kernel_stat *) buf);
+      break;
+
+    case _STAT_VER_LINUX:
+      /* Do the system call.  */
+      result = __syscall_fstat (fd, &kbuf);
+
+      /* Convert to current kernel version of `struct stat'.  */
+      buf->st_dev = kbuf.st_dev;
+      buf->st_pad1[0]  = 0; buf->st_pad1[1]  = 0; buf->st_pad1[2]  = 0;
+      buf->st_ino = kbuf.st_ino;
+      buf->st_mode = kbuf.st_mode;
+      buf->st_nlink = kbuf.st_nlink;
+      buf->st_uid = kbuf.st_uid;
+      buf->st_gid = kbuf.st_gid;
+      buf->st_rdev = kbuf.st_rdev;
+      buf->st_pad2[0] = 0; buf->st_pad2[1] = 0;
+      buf->st_pad3 = 0;
+      buf->st_size = kbuf.st_size;
+      buf->st_blksize = kbuf.st_blksize;
+      buf->st_blocks = kbuf.st_blocks;
+
+      buf->st_atime = kbuf.st_atime; buf->__reserved0 = 0;
+      buf->st_mtime = kbuf.st_mtime; buf->__reserved1 = 0;
+      buf->st_ctime = kbuf.st_ctime; buf->__reserved2 = 0;
+
+      buf->st_pad4[0] = 0; buf->st_pad4[1] = 0;
+      buf->st_pad4[2] = 0; buf->st_pad4[3] = 0;
+      buf->st_pad4[4] = 0; buf->st_pad4[5] = 0;
+      buf->st_pad4[6] = 0; buf->st_pad4[7] = 0;
+      break;
+
+    default:
+      __set_errno (EINVAL);
+      result = -1;
+      break;
+    }
+
+  return result;
+}
+weak_alias (__fxstat, _fxstat)
diff --git a/sysdeps/unix/sysv/linux/mips/kernel_sigaction.h b/sysdeps/unix/sysv/linux/mips/kernel_sigaction.h
new file mode 100644
index 0000000000..bb7fe6bece
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/kernel_sigaction.h
@@ -0,0 +1,22 @@
+/* This is the sigaction structure from the Linux 2.1.24 kernel.  */
+
+#include <sgidefs.h>
+
+#define HAVE_SA_RESTORER
+
+struct kernel_sigaction {
+	unsigned int	sa_flags;
+	__sighandler_t	sa_handler;
+	unsigned long	sa_mask;
+	unsigned int    __pad0[3]; /* reserved, keep size constant */
+
+	/* Abi says here follows reserved int[2] */
+	void		(*sa_restorer)(void);
+#if (_MIPS_ISA == _MIPS_ISA_MIPS1) || (_MIPS_ISA == _MIPS_ISA_MIPS2)
+	/*
+	 * For 32 bit code we have to pad struct sigaction to get
+	 * constant size for the ABI
+	 */
+	int		pad1[1]; /* reserved */
+#endif
+};
diff --git a/sysdeps/unix/sysv/linux/mips/kernel_stat.h b/sysdeps/unix/sysv/linux/mips/kernel_stat.h
new file mode 100644
index 0000000000..c6419baf37
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/kernel_stat.h
@@ -0,0 +1,28 @@
+/* Definition of `struct stat' used in the kernel..  */
+struct kernel_stat
+  {
+    unsigned long int st_dev;
+    long int __pad1[3];			/* Reserved for network id */
+    unsigned long int st_ino;
+    unsigned long int st_mode;
+    unsigned long int st_nlink;
+    long int st_uid;
+    long int st_gid;
+    unsigned long int st_rdev;
+    long int __pad2[2];
+    long int st_size;
+    long int __pad3;
+    unsigned int st_atime;
+    unsigned int __unused1;
+    unsigned int st_mtime;
+    unsigned int __unused2;
+    unsigned int st_ctime;
+    unsigned int __unused3;
+    long int st_blksize;
+    long int st_blocks;
+    char st_fstype[16];			/* Filesystem type name, unsupported */
+    long st_pad4[8];
+    /* Linux specific fields */
+    unsigned int st_flags;
+    unsigned int st_gen;
+  };
diff --git a/sysdeps/unix/sysv/linux/mips/kernel_termios.h b/sysdeps/unix/sysv/linux/mips/kernel_termios.h
new file mode 100644
index 0000000000..35be1bb290
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/kernel_termios.h
@@ -0,0 +1,20 @@
+#ifndef _SYS_KERNEL_TERMIOS_H
+#define _SYS_KERNEL_TERMIOS_H 1
+/* The following corresponds to the values from the Linux 2.1.24 kernel.  */
+
+/* We need the definition of tcflag_t, cc_t, and speed_t.  */
+#include <bits/termios.h>
+
+#define __KERNEL_NCCS 23
+
+struct __kernel_termios
+  {
+    tcflag_t c_iflag;		/* input mode flags */
+    tcflag_t c_oflag;		/* output mode flags */
+    tcflag_t c_cflag;		/* control mode flags */
+    tcflag_t c_lflag;		/* local mode flags */
+    cc_t c_line;		/* line discipline */
+    cc_t c_cc[__KERNEL_NCCS];	/* control characters */
+  };
+
+#endif /* kernel_termios.h */
diff --git a/sysdeps/unix/sysv/linux/mips/lxstat.h b/sysdeps/unix/sysv/linux/mips/lxstat.h
new file mode 100644
index 0000000000..7907b2f2d2
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/lxstat.h
@@ -0,0 +1,80 @@
+/* lxstat using old-style Unix lstat system call.
+   Copyright (C) 1991, 1995, 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 <errno.h>
+#include <stddef.h>
+#include <sys/stat.h>
+
+#include <kernel_stat.h>
+
+extern int __syscall_lstat (const char *, struct kernel_stat *);
+
+/* Get information about the file NAME in BUF.  */
+int
+__lxstat (int vers, const char *name, struct stat *buf)
+{
+  struct kernel_stat kbuf;
+  int result;
+
+  switch (vers)
+    {
+    case _STAT_VER_LINUX_OLD:
+      /* Nothing to do.  The struct is in the form the kernel expects
+	 it to be.  */
+      result = __syscall_lstat (name, (struct kernel_stat *) buf);
+      break;
+
+    case _STAT_VER_LINUX:
+      /* Do the system call.  */
+      result = __syscall_lstat (name, &kbuf);
+
+      /* Convert to current kernel version of `struct stat'.  */
+      buf->st_dev = kbuf.st_dev;
+      buf->st_pad1[0]  = 0; buf->st_pad1[1]  = 0; buf->st_pad1[2]  = 0;
+      buf->st_ino = kbuf.st_ino;
+      buf->st_mode = kbuf.st_mode;
+      buf->st_nlink = kbuf.st_nlink;
+      buf->st_uid = kbuf.st_uid;
+      buf->st_gid = kbuf.st_gid;
+      buf->st_rdev = kbuf.st_rdev;
+      buf->st_pad2[0] = 0; buf->st_pad2[1] = 0;
+      buf->st_pad3 = 0;
+      buf->st_size = kbuf.st_size;
+      buf->st_blksize = kbuf.st_blksize;
+      buf->st_blocks = kbuf.st_blocks;
+
+      buf->st_atime = kbuf.st_atime; buf->__reserved0 = 0;
+      buf->st_mtime = kbuf.st_mtime; buf->__reserved1 = 0;
+      buf->st_ctime = kbuf.st_ctime; buf->__reserved2 = 0;
+
+      buf->st_pad4[0] = 0; buf->st_pad4[1] = 0;
+      buf->st_pad4[2] = 0; buf->st_pad4[3] = 0;
+      buf->st_pad4[4] = 0; buf->st_pad4[5] = 0;
+      buf->st_pad4[6] = 0; buf->st_pad4[7] = 0;
+      break;
+
+    default:
+      __set_errno (EINVAL);
+      result = -1;
+      break;
+    }
+
+  return result;
+}
+weak_alias (__lxstat, _lxstat)
diff --git a/sysdeps/unix/sysv/linux/mips/regdef.h b/sysdeps/unix/sysv/linux/mips/regdef.h
new file mode 100644
index 0000000000..b613c8b250
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/regdef.h
@@ -0,0 +1 @@
+#include <sys/regdef.h>
diff --git a/sysdeps/unix/sysv/linux/mips/sgidef.h b/sysdeps/unix/sysv/linux/mips/sgidef.h
new file mode 100644
index 0000000000..a36ece0175
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/sgidef.h
@@ -0,0 +1,28 @@
+/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ralf Baechle <ralf@gnu.ai.mit.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., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SGIDEFS_H
+#define _SGIDEFS_H	1
+
+/*
+ * The real definitions come from the Linux kernel sources
+ */
+#include <asm/sgidefs.h>
+
+#endif /* sgidefs.h */
diff --git a/sysdeps/unix/sysv/linux/mips/sys/acct.h b/sysdeps/unix/sysv/linux/mips/sys/acct.h
new file mode 100644
index 0000000000..ee596db82b
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/sys/acct.h
@@ -0,0 +1,66 @@
+/* Copyright (C) 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.  */
+
+#ifndef _SYS_ACCT_H
+
+#define _SYS_ACCT_H	1
+#include <features.h>
+
+#define	__need_time_t
+#include <time.h>
+
+
+__BEGIN_DECLS
+
+#define ACCT_COMM 16
+
+struct acct
+  {
+    char ac_comm[ACCT_COMM];		/* Accounting command name.  */
+    time_t ac_utime;			/* Accounting user time.  */
+    time_t ac_stime;			/* Accounting system time.  */
+    time_t ac_etime;			/* Accounting elapsed time.  */
+    time_t ac_btime;			/* Beginning time.  */
+    long ac_uid;			/* Accounting user ID.  */
+    long ac_gid;			/* Accounting group ID.  */
+    unsigned long int ac_tty;		/* Controlling tty.  */
+    /* Please note that the value of the `ac_tty' field, a device number,
+       is encoded differently in the kernel and for the libc dev_t type.  */
+    char ac_flag;			/* Accounting flag.  */
+    long int ac_minflt;			/* Accounting minor pagefaults.  */
+    long int ac_majflt;			/* Accounting major pagefaults.  */
+    long int ac_exitcode;		/* Accounting process exitcode.  */
+  };
+
+enum
+  {
+    AFORK = 0001,		/* Has executed fork, but no exec.  */
+    ASU = 0002,			/* Used super-user privileges.  */
+    ACORE = 0004,		/* Dumped core.  */
+    AXSIG = 0010		/* Killed by a signal.  */
+  };
+
+#define AHZ     100
+
+
+/* Switch process accounting on and off.  */
+extern int acct __P ((__const char *__filename));
+
+__END_DECLS
+
+#endif	/* sys/acct.h */
diff --git a/sysdeps/unix/sysv/linux/mips/sys/asm.h b/sysdeps/unix/sysv/linux/mips/sys/asm.h
new file mode 100644
index 0000000000..346a9c4ec2
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/sys/asm.h
@@ -0,0 +1,28 @@
+/* Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ralf Baechle <ralf@gnu.ai.mit.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., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYS_ASM_H
+#define _SYS_ASM_H
+
+/*
+ * The real definitions come from the Linux kernel sources
+ */
+#include <asm/asm.h>
+
+#endif /* sys/asm.h */
diff --git a/sysdeps/unix/sysv/linux/mips/sys/cachectl.h b/sysdeps/unix/sysv/linux/mips/sys/cachectl.h
new file mode 100644
index 0000000000..740c24d6a8
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/sys/cachectl.h
@@ -0,0 +1,42 @@
+/* Copyright (C) 1995, 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.  */
+
+#ifndef _SYS_CACHECTL_H
+#define _SYS_CACHECTL_H 1
+
+#include <features.h>
+
+/*
+ * Get the kernel definition for the op bits.
+ */
+#include <asm/cachectl.h>
+
+__BEGIN_DECLS
+
+#ifdef __USE_MISC
+extern int cachectl __P ((void *addr, __const int nbytes, __const int op));
+#endif
+extern int __cachectl __P ((void *addr, __const int nbytes, __const int op));
+#ifdef __USE_MISC
+extern int cacheflush __P ((void *addr, __const int nbytes, __const int op));
+#endif
+extern int _flush_cache __P ((char *addr, __const int nbytes, __const int op));
+
+__END_DECLS
+
+#endif /* sys/cachectl.h */
diff --git a/sysdeps/unix/sysv/linux/mips/sys/fpregdef.h b/sysdeps/unix/sysv/linux/mips/sys/fpregdef.h
new file mode 100644
index 0000000000..48d8f7513e
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/sys/fpregdef.h
@@ -0,0 +1,27 @@
+/* Copyright (C) 1991, 92, 94, 95, 96, 97 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.  */
+
+#ifndef _SYS_FPREGDEF_H
+#define _SYS_FPREGDEF_H
+
+/*
+ * The real definitions come from the Linux kernel sources
+ */
+#include <asm/fpregdef.h>
+
+#endif /* sys/fpregdef.h */
diff --git a/sysdeps/unix/sysv/linux/mips/sys/procfs.h b/sysdeps/unix/sysv/linux/mips/sys/procfs.h
new file mode 100644
index 0000000000..d740954a8d
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/sys/procfs.h
@@ -0,0 +1,109 @@
+/* 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.  */
+
+#ifndef _SYS_PROCFS_H
+
+#define _SYS_PROCFS_H	1
+#include <features.h>
+
+/* This is somehow modelled after the file of the same name on SysVr4
+   systems.  It provides a definition of the core file format for ELF
+   used on Linux.  */
+
+#include <signal.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <asm/user.h>
+#include <asm/elf.h>
+
+__BEGIN_DECLS
+
+struct elf_siginfo
+  {
+    int si_signo;			/* Signal number.  */
+    int si_code;			/* Extra code.  */
+    int si_errno;			/* Errno.  */
+  };
+
+typedef elf_greg_t greg_t;
+typedef elf_gregset_t gregset_t;
+typedef elf_fpregset_t fpregset_t;
+#define NGREG ELF_NGREG
+
+/* Definitions to generate Intel SVR4-like core files.  These mostly
+   have the same names as the SVR4 types with "elf_" tacked on the
+   front to prevent clashes with linux definitions, and the typedef
+   forms have been avoided.  This is mostly like the SVR4 structure,
+   but more Linuxy, with things that Linux does not support and which
+   gdb doesn't really use excluded.  Fields present but not used are
+   marked with "XXX".  */
+struct elf_prstatus
+  {
+#if 0
+    long int pr_flags;			/* XXX Process flags.  */
+    short int pr_why;			/* XXX Reason for process halt.  */
+    short int pr_what;			/* XXX More detailed reason.  */
+#endif
+    struct elf_siginfo pr_info;		/* Info associated with signal.  */
+    short int pr_cursig;		/* Current signal.  */
+    unsigned long int pr_sigpend;	/* Set of pending signals.  */
+    unsigned long int pr_sighold;	/* Set of held signals.  */
+#if 0
+    struct sigaltstack pr_altstack;	/* Alternate stack info.  */
+    struct sigaction pr_action;		/* Signal action for current sig.  */
+#endif
+    __pid_t pr_pid;
+    __pid_t pr_ppid;
+    __pid_t pr_pgrp;
+    __pid_t pr_sid;
+    struct timeval pr_utime;		/* User time.  */
+    struct timeval pr_stime;		/* System time.  */
+    struct timeval pr_cutime;		/* Cumulative user time.  */
+    struct timeval pr_cstime;		/* Cumulative system time.  */
+#if 0
+    long int pr_instr;			/* Current instruction.  */
+#endif
+    elf_gregset_t pr_reg;		/* GP registers.  */
+    int pr_fpvalid;			/* True if math copro being used.  */
+  };
+
+
+#define ELF_PRARGSZ     (80)    /* Number of chars for args */
+
+struct elf_prpsinfo
+  {
+    char pr_state;			/* Numeric process state.  */
+    char pr_sname;			/* Char for pr_state.  */
+    char pr_zomb;			/* Zombie.  */
+    char pr_nice;			/* Nice val.  */
+    unsigned long int pr_flag;		/* Flags.  */
+    long pr_uid;
+    long pr_gid;
+    int pr_pid, pr_ppid, pr_pgrp, pr_sid;
+    /* Lots missing */
+    char pr_fname[16];			/* Filename of executable.  */
+    char pr_psargs[ELF_PRARGSZ];	/* Initial part of arg list.  */
+  };
+
+
+typedef struct elf_prstatus prstatus_t;
+typedef struct elf_prpsinfo prpsinfo_t;
+
+__END_DECLS
+
+#endif	/* sys/procfs.h */
diff --git a/sysdeps/unix/sysv/linux/mips/sys/regdef.h b/sysdeps/unix/sysv/linux/mips/sys/regdef.h
new file mode 100644
index 0000000000..700fd66f0b
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/sys/regdef.h
@@ -0,0 +1,29 @@
+/* Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ralf Baechle <ralf@gnu.ai.mit.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., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _REGDEF_H
+#define _REGDEF_H	1
+
+/*
+ * The real definitions come from the Linux kernel sources
+ */
+#include <asm/regdef.h>
+#include <asm/fpregdef.h>
+
+#endif /* regdef.h */
diff --git a/sysdeps/unix/sysv/linux/mips/sys/syscall.h b/sysdeps/unix/sysv/linux/mips/sys/syscall.h
new file mode 100644
index 0000000000..82f8427aa0
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/sys/syscall.h
@@ -0,0 +1,1187 @@
+/* Copyright (C) 1995, 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.  */
+
+#ifndef	_SYSCALL_H
+#define	_SYSCALL_H	1
+
+/* This file should list the numbers of the system the system knows.
+   But instead of duplicating this we use the information available
+   from the kernel sources.  */
+#include <asm/unistd.h>
+
+/*
+ * SVR4 syscalls are in the range from 1 to 999
+ */
+#define SYS_SVR4			0
+#define SYS_SVR4_syscall		(SYS_SVR4 +   0)
+#define SYS_SVR4_exit			(SYS_SVR4 +   1)
+#define SYS_SVR4_fork			(SYS_SVR4 +   2)
+#define SYS_SVR4_read			(SYS_SVR4 +   3)
+#define SYS_SVR4_write			(SYS_SVR4 +   4)
+#define SYS_SVR4_open			(SYS_SVR4 +   5)
+#define SYS_SVR4_close			(SYS_SVR4 +   6)
+#define SYS_SVR4_wait			(SYS_SVR4 +   7)
+#define SYS_SVR4_creat			(SYS_SVR4 +   8)
+#define SYS_SVR4_link			(SYS_SVR4 +   9)
+#define SYS_SVR4_unlink			(SYS_SVR4 +  10)
+#define SYS_SVR4_exec			(SYS_SVR4 +  11)
+#define SYS_SVR4_chdir			(SYS_SVR4 +  12)
+#define SYS_SVR4_gtime			(SYS_SVR4 +  13)
+#define SYS_SVR4_mknod			(SYS_SVR4 +  14)
+#define SYS_SVR4_chmod			(SYS_SVR4 +  15)
+#define SYS_SVR4_chown			(SYS_SVR4 +  16)
+#define SYS_SVR4_sbreak			(SYS_SVR4 +  17)
+#define SYS_SVR4_stat			(SYS_SVR4 +  18)
+#define SYS_SVR4_lseek			(SYS_SVR4 +  19)
+#define SYS_SVR4_getpid			(SYS_SVR4 +  20)
+#define SYS_SVR4_mount			(SYS_SVR4 +  21)
+#define SYS_SVR4_umount			(SYS_SVR4 +  22)
+#define SYS_SVR4_setuid			(SYS_SVR4 +  23)
+#define SYS_SVR4_getuid			(SYS_SVR4 +  24)
+#define SYS_SVR4_stime			(SYS_SVR4 +  25)
+#define SYS_SVR4_ptrace			(SYS_SVR4 +  26)
+#define SYS_SVR4_alarm			(SYS_SVR4 +  27)
+#define SYS_SVR4_fstat			(SYS_SVR4 +  28)
+#define SYS_SVR4_pause			(SYS_SVR4 +  29)
+#define SYS_SVR4_utime			(SYS_SVR4 +  30)
+#define SYS_SVR4_stty			(SYS_SVR4 +  31)
+#define SYS_SVR4_gtty			(SYS_SVR4 +  32)
+#define SYS_SVR4_access			(SYS_SVR4 +  33)
+#define SYS_SVR4_nice			(SYS_SVR4 +  34)
+#define SYS_SVR4_statfs			(SYS_SVR4 +  35)
+#define SYS_SVR4_sync			(SYS_SVR4 +  36)
+#define SYS_SVR4_kill			(SYS_SVR4 +  37)
+#define SYS_SVR4_fstatfs		(SYS_SVR4 +  38)
+#define SYS_SVR4_setpgrp		(SYS_SVR4 +  39)
+#define SYS_SVR4_cxenix			(SYS_SVR4 +  40)
+#define SYS_SVR4_dup			(SYS_SVR4 +  41)
+#define SYS_SVR4_pipe			(SYS_SVR4 +  42)
+#define SYS_SVR4_times			(SYS_SVR4 +  43)
+#define SYS_SVR4_profil			(SYS_SVR4 +  44)
+#define SYS_SVR4_plock			(SYS_SVR4 +  45)
+#define SYS_SVR4_setgid			(SYS_SVR4 +  46)
+#define SYS_SVR4_getgid			(SYS_SVR4 +  47)
+#define SYS_SVR4_sig			(SYS_SVR4 +  48)
+#define SYS_SVR4_msgsys			(SYS_SVR4 +  49)
+#define SYS_SVR4_sysmips		(SYS_SVR4 +  50)
+#define SYS_SVR4_sysacct		(SYS_SVR4 +  51)
+#define SYS_SVR4_shmsys			(SYS_SVR4 +  52)
+#define SYS_SVR4_semsys			(SYS_SVR4 +  53)
+#define SYS_SVR4_ioctl			(SYS_SVR4 +  54)
+#define SYS_SVR4_uadmin			(SYS_SVR4 +  55)
+#define SYS_SVR4_exch 			(SYS_SVR4 +  56)
+#define SYS_SVR4_utssys			(SYS_SVR4 +  57)
+#define SYS_SVR4_fsync			(SYS_SVR4 +  58)
+#define SYS_SVR4_exece			(SYS_SVR4 +  59)
+#define SYS_SVR4_umask			(SYS_SVR4 +  60)
+#define SYS_SVR4_chroot			(SYS_SVR4 +  61)
+#define SYS_SVR4_fcntl			(SYS_SVR4 +  62)
+#define SYS_SVR4_ulimit			(SYS_SVR4 +  63)
+#define SYS_SVR4_reserved1		(SYS_SVR4 +  64)
+#define SYS_SVR4_reserved2		(SYS_SVR4 +  65)
+#define SYS_SVR4_reserved3		(SYS_SVR4 +  66)
+#define SYS_SVR4_reserved4		(SYS_SVR4 +  67)
+#define SYS_SVR4_reserved5		(SYS_SVR4 +  68)
+#define SYS_SVR4_reserved6		(SYS_SVR4 +  69)
+#define SYS_SVR4_advfs			(SYS_SVR4 +  70)
+#define SYS_SVR4_unadvfs		(SYS_SVR4 +  71)
+#define SYS_SVR4_unused1		(SYS_SVR4 +  72)
+#define SYS_SVR4_unused2		(SYS_SVR4 +  73)
+#define SYS_SVR4_rfstart		(SYS_SVR4 +  74)
+#define SYS_SVR4_unused3		(SYS_SVR4 +  75)
+#define SYS_SVR4_rdebug			(SYS_SVR4 +  76)
+#define SYS_SVR4_rfstop			(SYS_SVR4 +  77)
+#define SYS_SVR4_rfsys			(SYS_SVR4 +  78)
+#define SYS_SVR4_rmdir			(SYS_SVR4 +  79)
+#define SYS_SVR4_mkdir			(SYS_SVR4 +  80)
+#define SYS_SVR4_getdents		(SYS_SVR4 +  81)
+#define SYS_SVR4_libattach		(SYS_SVR4 +  82)
+#define SYS_SVR4_libdetach		(SYS_SVR4 +  83)
+#define SYS_SVR4_sysfs			(SYS_SVR4 +  84)
+#define SYS_SVR4_getmsg			(SYS_SVR4 +  85)
+#define SYS_SVR4_putmsg			(SYS_SVR4 +  86)
+#define SYS_SVR4_poll			(SYS_SVR4 +  87)
+#define SYS_SVR4_lstat			(SYS_SVR4 +  88)
+#define SYS_SVR4_symlink		(SYS_SVR4 +  89)
+#define SYS_SVR4_readlink		(SYS_SVR4 +  90)
+#define SYS_SVR4_setgroups		(SYS_SVR4 +  91)
+#define SYS_SVR4_getgroups		(SYS_SVR4 +  92)
+#define SYS_SVR4_fchmod			(SYS_SVR4 +  93)
+#define SYS_SVR4_fchown			(SYS_SVR4 +  94)
+#define SYS_SVR4_sigprocmask		(SYS_SVR4 +  95)
+#define SYS_SVR4_sigsuspend		(SYS_SVR4 +  96)
+#define SYS_SVR4_sigaltstack		(SYS_SVR4 +  97)
+#define SYS_SVR4_sigaction		(SYS_SVR4 +  98)
+#define SYS_SVR4_sigpending		(SYS_SVR4 +  99)
+#define SYS_SVR4_setcontext		(SYS_SVR4 + 100)
+#define SYS_SVR4_evsys			(SYS_SVR4 + 101)
+#define SYS_SVR4_evtrapret		(SYS_SVR4 + 102)
+#define SYS_SVR4_statvfs		(SYS_SVR4 + 103)
+#define SYS_SVR4_fstatvfs		(SYS_SVR4 + 104)
+#define SYS_SVR4_reserved7		(SYS_SVR4 + 105)
+#define SYS_SVR4_nfssys			(SYS_SVR4 + 106)
+#define SYS_SVR4_waitid			(SYS_SVR4 + 107)
+#define SYS_SVR4_sigsendset		(SYS_SVR4 + 108)
+#define SYS_SVR4_hrtsys			(SYS_SVR4 + 109)
+#define SYS_SVR4_acancel		(SYS_SVR4 + 110)
+#define SYS_SVR4_async			(SYS_SVR4 + 111)
+#define SYS_SVR4_priocntlset		(SYS_SVR4 + 112)
+#define SYS_SVR4_pathconf		(SYS_SVR4 + 113)
+#define SYS_SVR4_mincore		(SYS_SVR4 + 114)
+#define SYS_SVR4_mmap			(SYS_SVR4 + 115)
+#define SYS_SVR4_mprotect		(SYS_SVR4 + 116)
+#define SYS_SVR4_munmap			(SYS_SVR4 + 117)
+#define SYS_SVR4_fpathconf		(SYS_SVR4 + 118)
+#define SYS_SVR4_vfork			(SYS_SVR4 + 119)
+#define SYS_SVR4_fchdir			(SYS_SVR4 + 120)
+#define SYS_SVR4_readv			(SYS_SVR4 + 121)
+#define SYS_SVR4_writev			(SYS_SVR4 + 122)
+#define SYS_SVR4_xstat			(SYS_SVR4 + 123)
+#define SYS_SVR4_lxstat			(SYS_SVR4 + 124)
+#define SYS_SVR4_fxstat			(SYS_SVR4 + 125)
+#define SYS_SVR4_xmknod			(SYS_SVR4 + 126)
+#define SYS_SVR4_clocal			(SYS_SVR4 + 127)
+#define SYS_SVR4_setrlimit		(SYS_SVR4 + 128)
+#define SYS_SVR4_getrlimit		(SYS_SVR4 + 129)
+#define SYS_SVR4_lchown			(SYS_SVR4 + 130)
+#define SYS_SVR4_memcntl		(SYS_SVR4 + 131)
+#define SYS_SVR4_getpmsg		(SYS_SVR4 + 132)
+#define SYS_SVR4_putpmsg		(SYS_SVR4 + 133)
+#define SYS_SVR4_rename			(SYS_SVR4 + 134)
+#define SYS_SVR4_nuname			(SYS_SVR4 + 135)
+#define SYS_SVR4_setegid		(SYS_SVR4 + 136)
+#define SYS_SVR4_sysconf		(SYS_SVR4 + 137)
+#define SYS_SVR4_adjtime		(SYS_SVR4 + 138)
+#define SYS_SVR4_sysinfo		(SYS_SVR4 + 139)
+#define SYS_SVR4_reserved8		(SYS_SVR4 + 140)
+#define SYS_SVR4_seteuid		(SYS_SVR4 + 141)
+#define SYS_SVR4_PYRAMID_statis		(SYS_SVR4 + 142)
+#define SYS_SVR4_PYRAMID_tuning		(SYS_SVR4 + 143)
+#define SYS_SVR4_PYRAMID_forcerr	(SYS_SVR4 + 144)
+#define SYS_SVR4_PYRAMID_mpcntl		(SYS_SVR4 + 145)
+#define SYS_SVR4_reserved9		(SYS_SVR4 + 146)
+#define SYS_SVR4_reserved10		(SYS_SVR4 + 147)
+#define SYS_SVR4_reserved11		(SYS_SVR4 + 148)
+#define SYS_SVR4_reserved12		(SYS_SVR4 + 149)
+#define SYS_SVR4_reserved13		(SYS_SVR4 + 150)
+#define SYS_SVR4_reserved14		(SYS_SVR4 + 151)
+#define SYS_SVR4_reserved15		(SYS_SVR4 + 152)
+#define SYS_SVR4_reserved16		(SYS_SVR4 + 153)
+#define SYS_SVR4_reserved17		(SYS_SVR4 + 154)
+#define SYS_SVR4_reserved18		(SYS_SVR4 + 155)
+#define SYS_SVR4_reserved19		(SYS_SVR4 + 156)
+#define SYS_SVR4_reserved20		(SYS_SVR4 + 157)
+#define SYS_SVR4_reserved21		(SYS_SVR4 + 158)
+#define SYS_SVR4_reserved22		(SYS_SVR4 + 159)
+#define SYS_SVR4_reserved23		(SYS_SVR4 + 160)
+#define SYS_SVR4_reserved24		(SYS_SVR4 + 161)
+#define SYS_SVR4_reserved25		(SYS_SVR4 + 162)
+#define SYS_SVR4_reserved26		(SYS_SVR4 + 163)
+#define SYS_SVR4_reserved27		(SYS_SVR4 + 164)
+#define SYS_SVR4_reserved28		(SYS_SVR4 + 165)
+#define SYS_SVR4_reserved29		(SYS_SVR4 + 166)
+#define SYS_SVR4_reserved30		(SYS_SVR4 + 167)
+#define SYS_SVR4_reserved31		(SYS_SVR4 + 168)
+#define SYS_SVR4_reserved32		(SYS_SVR4 + 169)
+#define SYS_SVR4_reserved33		(SYS_SVR4 + 170)
+#define SYS_SVR4_reserved34		(SYS_SVR4 + 171)
+#define SYS_SVR4_reserved35		(SYS_SVR4 + 172)
+#define SYS_SVR4_reserved36		(SYS_SVR4 + 173)
+#define SYS_SVR4_reserved37		(SYS_SVR4 + 174)
+#define SYS_SVR4_reserved38		(SYS_SVR4 + 175)
+#define SYS_SVR4_reserved39		(SYS_SVR4 + 176)
+#define SYS_SVR4_reserved40		(SYS_SVR4 + 177)
+#define SYS_SVR4_reserved41		(SYS_SVR4 + 178)
+#define SYS_SVR4_reserved42		(SYS_SVR4 + 179)
+#define SYS_SVR4_reserved43		(SYS_SVR4 + 180)
+#define SYS_SVR4_reserved44		(SYS_SVR4 + 181)
+#define SYS_SVR4_reserved45		(SYS_SVR4 + 182)
+#define SYS_SVR4_reserved46		(SYS_SVR4 + 183)
+#define SYS_SVR4_reserved47		(SYS_SVR4 + 184)
+#define SYS_SVR4_reserved48		(SYS_SVR4 + 185)
+#define SYS_SVR4_reserved49		(SYS_SVR4 + 186)
+#define SYS_SVR4_reserved50		(SYS_SVR4 + 187)
+#define SYS_SVR4_reserved51		(SYS_SVR4 + 188)
+#define SYS_SVR4_reserved52		(SYS_SVR4 + 189)
+#define SYS_SVR4_reserved53		(SYS_SVR4 + 190)
+#define SYS_SVR4_reserved54		(SYS_SVR4 + 191)
+#define SYS_SVR4_reserved55		(SYS_SVR4 + 192)
+#define SYS_SVR4_reserved56		(SYS_SVR4 + 193)
+#define SYS_SVR4_reserved57		(SYS_SVR4 + 194)
+#define SYS_SVR4_reserved58		(SYS_SVR4 + 195)
+#define SYS_SVR4_reserved59		(SYS_SVR4 + 196)
+#define SYS_SVR4_reserved60		(SYS_SVR4 + 197)
+#define SYS_SVR4_reserved61		(SYS_SVR4 + 198)
+#define SYS_SVR4_reserved62		(SYS_SVR4 + 199)
+#define SYS_SVR4_reserved63		(SYS_SVR4 + 200)
+#define SYS_SVR4_aread			(SYS_SVR4 + 201)
+#define SYS_SVR4_awrite			(SYS_SVR4 + 202)
+#define SYS_SVR4_listio			(SYS_SVR4 + 203)
+#define SYS_SVR4_mips_acancel		(SYS_SVR4 + 204)
+#define SYS_SVR4_astatus		(SYS_SVR4 + 205)
+#define SYS_SVR4_await			(SYS_SVR4 + 206)
+#define SYS_SVR4_areadv			(SYS_SVR4 + 207)
+#define SYS_SVR4_awritev		(SYS_SVR4 + 208)
+#define SYS_SVR4_MIPS_reserved1		(SYS_SVR4 + 209)
+#define SYS_SVR4_MIPS_reserved2		(SYS_SVR4 + 210)
+#define SYS_SVR4_MIPS_reserved3		(SYS_SVR4 + 211)
+#define SYS_SVR4_MIPS_reserved4		(SYS_SVR4 + 212)
+#define SYS_SVR4_MIPS_reserved5		(SYS_SVR4 + 213)
+#define SYS_SVR4_MIPS_reserved6		(SYS_SVR4 + 214)
+#define SYS_SVR4_MIPS_reserved7		(SYS_SVR4 + 215)
+#define SYS_SVR4_MIPS_reserved8		(SYS_SVR4 + 216)
+#define SYS_SVR4_MIPS_reserved9		(SYS_SVR4 + 217)
+#define SYS_SVR4_MIPS_reserved10	(SYS_SVR4 + 218)
+#define SYS_SVR4_MIPS_reserved11	(SYS_SVR4 + 219)
+#define SYS_SVR4_MIPS_reserved12	(SYS_SVR4 + 220)
+#define SYS_SVR4_CDC_reserved1		(SYS_SVR4 + 221)
+#define SYS_SVR4_CDC_reserved2		(SYS_SVR4 + 222)
+#define SYS_SVR4_CDC_reserved3		(SYS_SVR4 + 223)
+#define SYS_SVR4_CDC_reserved4		(SYS_SVR4 + 224)
+#define SYS_SVR4_CDC_reserved5		(SYS_SVR4 + 225)
+#define SYS_SVR4_CDC_reserved6		(SYS_SVR4 + 226)
+#define SYS_SVR4_CDC_reserved7		(SYS_SVR4 + 227)
+#define SYS_SVR4_CDC_reserved8		(SYS_SVR4 + 228)
+#define SYS_SVR4_CDC_reserved9		(SYS_SVR4 + 229)
+#define SYS_SVR4_CDC_reserved10		(SYS_SVR4 + 230)
+#define SYS_SVR4_CDC_reserved11		(SYS_SVR4 + 231)
+#define SYS_SVR4_CDC_reserved12		(SYS_SVR4 + 232)
+#define SYS_SVR4_CDC_reserved13		(SYS_SVR4 + 233)
+#define SYS_SVR4_CDC_reserved14		(SYS_SVR4 + 234)
+#define SYS_SVR4_CDC_reserved15		(SYS_SVR4 + 235)
+#define SYS_SVR4_CDC_reserved16		(SYS_SVR4 + 236)
+#define SYS_SVR4_CDC_reserved17		(SYS_SVR4 + 237)
+#define SYS_SVR4_CDC_reserved18		(SYS_SVR4 + 238)
+#define SYS_SVR4_CDC_reserved19		(SYS_SVR4 + 239)
+#define SYS_SVR4_CDC_reserved20		(SYS_SVR4 + 240)
+
+/*
+ * SYS V syscalls are in the range from 1000 to 1999
+ */
+#define SYS_SYSV			1000
+#define SYS_SYSV_syscall		(SYS_SYSV +   0)
+#define SYS_SYSV_exit			(SYS_SYSV +   1)
+#define SYS_SYSV_fork			(SYS_SYSV +   2)
+#define SYS_SYSV_read			(SYS_SYSV +   3)
+#define SYS_SYSV_write			(SYS_SYSV +   4)
+#define SYS_SYSV_open			(SYS_SYSV +   5)
+#define SYS_SYSV_close			(SYS_SYSV +   6)
+#define SYS_SYSV_wait			(SYS_SYSV +   7)
+#define SYS_SYSV_creat			(SYS_SYSV +   8)
+#define SYS_SYSV_link			(SYS_SYSV +   9)
+#define SYS_SYSV_unlink			(SYS_SYSV +  10)
+#define SYS_SYSV_execv			(SYS_SYSV +  11)
+#define SYS_SYSV_chdir			(SYS_SYSV +  12)
+#define SYS_SYSV_time			(SYS_SYSV +  13)
+#define SYS_SYSV_mknod			(SYS_SYSV +  14)
+#define SYS_SYSV_chmod			(SYS_SYSV +  15)
+#define SYS_SYSV_chown			(SYS_SYSV +  16)
+#define SYS_SYSV_brk			(SYS_SYSV +  17)
+#define SYS_SYSV_stat			(SYS_SYSV +  18)
+#define SYS_SYSV_lseek			(SYS_SYSV +  19)
+#define SYS_SYSV_getpid			(SYS_SYSV +  20)
+#define SYS_SYSV_mount			(SYS_SYSV +  21)
+#define SYS_SYSV_umount			(SYS_SYSV +  22)
+#define SYS_SYSV_setuid			(SYS_SYSV +  23)
+#define SYS_SYSV_getuid			(SYS_SYSV +  24)
+#define SYS_SYSV_stime			(SYS_SYSV +  25)
+#define SYS_SYSV_ptrace			(SYS_SYSV +  26)
+#define SYS_SYSV_alarm			(SYS_SYSV +  27)
+#define SYS_SYSV_fstat			(SYS_SYSV +  28)
+#define SYS_SYSV_pause			(SYS_SYSV +  29)
+#define SYS_SYSV_utime			(SYS_SYSV +  30)
+#define SYS_SYSV_stty			(SYS_SYSV +  31)
+#define SYS_SYSV_gtty			(SYS_SYSV +  32)
+#define SYS_SYSV_access			(SYS_SYSV +  33)
+#define SYS_SYSV_nice			(SYS_SYSV +  34)
+#define SYS_SYSV_statfs			(SYS_SYSV +  35)
+#define SYS_SYSV_sync			(SYS_SYSV +  36)
+#define SYS_SYSV_kill			(SYS_SYSV +  37)
+#define SYS_SYSV_fstatfs		(SYS_SYSV +  38)
+#define SYS_SYSV_setpgrp		(SYS_SYSV +  39)
+#define SYS_SYSV_syssgi			(SYS_SYSV +  40)
+#define SYS_SYSV_dup			(SYS_SYSV +  41)
+#define SYS_SYSV_pipe			(SYS_SYSV +  42)
+#define SYS_SYSV_times			(SYS_SYSV +  43)
+#define SYS_SYSV_profil			(SYS_SYSV +  44)
+#define SYS_SYSV_plock			(SYS_SYSV +  45)
+#define SYS_SYSV_setgid			(SYS_SYSV +  46)
+#define SYS_SYSV_getgid			(SYS_SYSV +  47)
+#define SYS_SYSV_sig			(SYS_SYSV +  48)
+#define SYS_SYSV_msgsys			(SYS_SYSV +  49)
+#define SYS_SYSV_sysmips		(SYS_SYSV +  50)
+#define SYS_SYSV_acct			(SYS_SYSV +  51)
+#define SYS_SYSV_shmsys			(SYS_SYSV +  52)
+#define SYS_SYSV_semsys			(SYS_SYSV +  53)
+#define SYS_SYSV_ioctl			(SYS_SYSV +  54)
+#define SYS_SYSV_uadmin			(SYS_SYSV +  55)
+#define SYS_SYSV_sysmp			(SYS_SYSV +  56)
+#define SYS_SYSV_utssys			(SYS_SYSV +  57)
+#define SYS_SYSV_USG_reserved1		(SYS_SYSV +  58)
+#define SYS_SYSV_execve			(SYS_SYSV +  59)
+#define SYS_SYSV_umask			(SYS_SYSV +  60)
+#define SYS_SYSV_chroot			(SYS_SYSV +  61)
+#define SYS_SYSV_fcntl			(SYS_SYSV +  62)
+#define SYS_SYSV_ulimit			(SYS_SYSV +  63)
+#define SYS_SYSV_SAFARI4_reserved1	(SYS_SYSV +  64)
+#define SYS_SYSV_SAFARI4_reserved2	(SYS_SYSV +  65)
+#define SYS_SYSV_SAFARI4_reserved3	(SYS_SYSV +  66)
+#define SYS_SYSV_SAFARI4_reserved4	(SYS_SYSV +  67)
+#define SYS_SYSV_SAFARI4_reserved5	(SYS_SYSV +  68)
+#define SYS_SYSV_SAFARI4_reserved6	(SYS_SYSV +  69)
+#define SYS_SYSV_advfs			(SYS_SYSV +  70)
+#define SYS_SYSV_unadvfs		(SYS_SYSV +  71)
+#define SYS_SYSV_rmount			(SYS_SYSV +  72)
+#define SYS_SYSV_rumount		(SYS_SYSV +  73)
+#define SYS_SYSV_rfstart		(SYS_SYSV +  74)
+#define SYS_SYSV_getrlimit64		(SYS_SYSV +  75)
+#define SYS_SYSV_setrlimit64		(SYS_SYSV +  76)
+#define SYS_SYSV_nanosleep		(SYS_SYSV +  77)
+#define SYS_SYSV_lseek64		(SYS_SYSV +  78)
+#define SYS_SYSV_rmdir			(SYS_SYSV +  79)
+#define SYS_SYSV_mkdir			(SYS_SYSV +  80)
+#define SYS_SYSV_getdents		(SYS_SYSV +  81)
+#define SYS_SYSV_sginap			(SYS_SYSV +  82)
+#define SYS_SYSV_sgikopt		(SYS_SYSV +  83)
+#define SYS_SYSV_sysfs			(SYS_SYSV +  84)
+#define SYS_SYSV_getmsg			(SYS_SYSV +  85)
+#define SYS_SYSV_putmsg			(SYS_SYSV +  86)
+#define SYS_SYSV_poll			(SYS_SYSV +  87)
+#define SYS_SYSV_sigreturn		(SYS_SYSV +  88)
+#define SYS_SYSV_accept			(SYS_SYSV +  89)
+#define SYS_SYSV_bind			(SYS_SYSV +  90)
+#define SYS_SYSV_connect		(SYS_SYSV +  91)
+#define SYS_SYSV_gethostid		(SYS_SYSV +  92)
+#define SYS_SYSV_getpeername		(SYS_SYSV +  93)
+#define SYS_SYSV_getsockname		(SYS_SYSV +  94)
+#define SYS_SYSV_getsockopt		(SYS_SYSV +  95)
+#define SYS_SYSV_listen			(SYS_SYSV +  96)
+#define SYS_SYSV_recv			(SYS_SYSV +  97)
+#define SYS_SYSV_recvfrom		(SYS_SYSV +  98)
+#define SYS_SYSV_recvmsg		(SYS_SYSV +  99)
+#define SYS_SYSV_select			(SYS_SYSV + 100)
+#define SYS_SYSV_send			(SYS_SYSV + 101)
+#define SYS_SYSV_sendmsg		(SYS_SYSV + 102)
+#define SYS_SYSV_sendto			(SYS_SYSV + 103)
+#define SYS_SYSV_sethostid		(SYS_SYSV + 104)
+#define SYS_SYSV_setsockopt		(SYS_SYSV + 105)
+#define SYS_SYSV_shutdown		(SYS_SYSV + 106)
+#define SYS_SYSV_socket			(SYS_SYSV + 107)
+#define SYS_SYSV_gethostname		(SYS_SYSV + 108)
+#define SYS_SYSV_sethostname		(SYS_SYSV + 109)
+#define SYS_SYSV_getdomainname		(SYS_SYSV + 110)
+#define SYS_SYSV_setdomainname		(SYS_SYSV + 111)
+#define SYS_SYSV_truncate		(SYS_SYSV + 112)
+#define SYS_SYSV_ftruncate		(SYS_SYSV + 113)
+#define SYS_SYSV_rename			(SYS_SYSV + 114)
+#define SYS_SYSV_symlink		(SYS_SYSV + 115)
+#define SYS_SYSV_readlink		(SYS_SYSV + 116)
+#define SYS_SYSV_lstat			(SYS_SYSV + 117)
+#define SYS_SYSV_nfsmount		(SYS_SYSV + 118)
+#define SYS_SYSV_nfssvc			(SYS_SYSV + 119)
+#define SYS_SYSV_getfh			(SYS_SYSV + 120)
+#define SYS_SYSV_async_daemon		(SYS_SYSV + 121)
+#define SYS_SYSV_exportfs		(SYS_SYSV + 122)
+#define SYS_SYSV_setregid		(SYS_SYSV + 123)
+#define SYS_SYSV_setreuid		(SYS_SYSV + 124)
+#define SYS_SYSV_getitimer		(SYS_SYSV + 125)
+#define SYS_SYSV_setitimer		(SYS_SYSV + 126)
+#define SYS_SYSV_adjtime		(SYS_SYSV + 127)
+#define SYS_SYSV_BSD_getime		(SYS_SYSV + 128)
+#define SYS_SYSV_sproc			(SYS_SYSV + 129)
+#define SYS_SYSV_prctl			(SYS_SYSV + 130)
+#define SYS_SYSV_procblk		(SYS_SYSV + 131)
+#define SYS_SYSV_sprocsp		(SYS_SYSV + 132)
+#define SYS_SYSV_sgigsc			(SYS_SYSV + 133)
+#define SYS_SYSV_mmap			(SYS_SYSV + 134)
+#define SYS_SYSV_munmap			(SYS_SYSV + 135)
+#define SYS_SYSV_mprotect		(SYS_SYSV + 136)
+#define SYS_SYSV_msync			(SYS_SYSV + 137)
+#define SYS_SYSV_madvise		(SYS_SYSV + 138)
+#define SYS_SYSV_pagelock		(SYS_SYSV + 139)
+#define SYS_SYSV_getpagesize		(SYS_SYSV + 140)
+#define SYS_SYSV_quotactl		(SYS_SYSV + 141)
+#define SYS_SYSV_libdetach		(SYS_SYSV + 142)
+#define SYS_SYSV_BSDgetpgrp		(SYS_SYSV + 143)
+#define SYS_SYSV_BSDsetpgrp		(SYS_SYSV + 144)
+#define SYS_SYSV_vhangup		(SYS_SYSV + 145)
+#define SYS_SYSV_fsync			(SYS_SYSV + 146)
+#define SYS_SYSV_fchdir			(SYS_SYSV + 147)
+#define SYS_SYSV_getrlimit		(SYS_SYSV + 148)
+#define SYS_SYSV_setrlimit		(SYS_SYSV + 149)
+#define SYS_SYSV_cacheflush		(SYS_SYSV + 150)
+#define SYS_SYSV_cachectl		(SYS_SYSV + 151)
+#define SYS_SYSV_fchown			(SYS_SYSV + 152)
+#define SYS_SYSV_fchmod			(SYS_SYSV + 153)
+#define SYS_SYSV_wait3			(SYS_SYSV + 154)
+#define SYS_SYSV_socketpair		(SYS_SYSV + 155)
+#define SYS_SYSV_sysinfo		(SYS_SYSV + 156)
+#define SYS_SYSV_nuname			(SYS_SYSV + 157)
+#define SYS_SYSV_xstat			(SYS_SYSV + 158)
+#define SYS_SYSV_lxstat			(SYS_SYSV + 159)
+#define SYS_SYSV_fxstat			(SYS_SYSV + 160)
+#define SYS_SYSV_xmknod			(SYS_SYSV + 161)
+#define SYS_SYSV_ksigaction		(SYS_SYSV + 162)
+#define SYS_SYSV_sigpending		(SYS_SYSV + 163)
+#define SYS_SYSV_sigprocmask		(SYS_SYSV + 164)
+#define SYS_SYSV_sigsuspend		(SYS_SYSV + 165)
+#define SYS_SYSV_sigpoll		(SYS_SYSV + 166)
+#define SYS_SYSV_swapctl		(SYS_SYSV + 167)
+#define SYS_SYSV_getcontext		(SYS_SYSV + 168)
+#define SYS_SYSV_setcontext		(SYS_SYSV + 169)
+#define SYS_SYSV_waitsys		(SYS_SYSV + 170)
+#define SYS_SYSV_sigstack		(SYS_SYSV + 171)
+#define SYS_SYSV_sigaltstack		(SYS_SYSV + 172)
+#define SYS_SYSV_sigsendset		(SYS_SYSV + 173)
+#define SYS_SYSV_statvfs		(SYS_SYSV + 174)
+#define SYS_SYSV_fstatvfs		(SYS_SYSV + 175)
+#define SYS_SYSV_getpmsg		(SYS_SYSV + 176)
+#define SYS_SYSV_putpmsg		(SYS_SYSV + 177)
+#define SYS_SYSV_lchown			(SYS_SYSV + 178)
+#define SYS_SYSV_priocntl		(SYS_SYSV + 179)
+#define SYS_SYSV_ksigqueue		(SYS_SYSV + 180)
+#define SYS_SYSV_readv			(SYS_SYSV + 181)
+#define SYS_SYSV_writev			(SYS_SYSV + 182)
+#define SYS_SYSV_truncate64		(SYS_SYSV + 183)
+#define SYS_SYSV_ftruncate64		(SYS_SYSV + 184)
+#define SYS_SYSV_mmap64			(SYS_SYSV + 185)
+#define SYS_SYSV_dmi			(SYS_SYSV + 186)
+#define SYS_SYSV_pread			(SYS_SYSV + 187)
+#define SYS_SYSV_pwrite			(SYS_SYSV + 188)
+
+/*
+ * BSD 4.3 syscalls are in the range from 2000 to 2999
+ */
+#define SYS_BSD43			2000
+#define SYS_BSD43_syscall		(SYS_BSD43 +   0)
+#define SYS_BSD43_exit			(SYS_BSD43 +   1)
+#define SYS_BSD43_fork			(SYS_BSD43 +   2)
+#define SYS_BSD43_read			(SYS_BSD43 +   3)
+#define SYS_BSD43_write			(SYS_BSD43 +   4)
+#define SYS_BSD43_open			(SYS_BSD43 +   5)
+#define SYS_BSD43_close			(SYS_BSD43 +   6)
+#define SYS_BSD43_wait			(SYS_BSD43 +   7)
+#define SYS_BSD43_creat			(SYS_BSD43 +   8)
+#define SYS_BSD43_link			(SYS_BSD43 +   9)
+#define SYS_BSD43_unlink		(SYS_BSD43 +  10)
+#define SYS_BSD43_exec			(SYS_BSD43 +  11)
+#define SYS_BSD43_chdir			(SYS_BSD43 +  12)
+#define SYS_BSD43_time			(SYS_BSD43 +  13)
+#define SYS_BSD43_mknod			(SYS_BSD43 +  14)
+#define SYS_BSD43_chmod			(SYS_BSD43 +  15)
+#define SYS_BSD43_chown			(SYS_BSD43 +  16)
+#define SYS_BSD43_sbreak		(SYS_BSD43 +  17)
+#define SYS_BSD43_oldstat		(SYS_BSD43 +  18)
+#define SYS_BSD43_lseek			(SYS_BSD43 +  19)
+#define SYS_BSD43_getpid		(SYS_BSD43 +  20)
+#define SYS_BSD43_oldmount		(SYS_BSD43 +  21)
+#define SYS_BSD43_umount		(SYS_BSD43 +  22)
+#define SYS_BSD43_setuid		(SYS_BSD43 +  23)
+#define SYS_BSD43_getuid		(SYS_BSD43 +  24)
+#define SYS_BSD43_stime			(SYS_BSD43 +  25)
+#define SYS_BSD43_ptrace		(SYS_BSD43 +  26)
+#define SYS_BSD43_alarm			(SYS_BSD43 +  27)
+#define SYS_BSD43_oldfstat		(SYS_BSD43 +  28)
+#define SYS_BSD43_pause			(SYS_BSD43 +  29)
+#define SYS_BSD43_utime			(SYS_BSD43 +  30)
+#define SYS_BSD43_stty			(SYS_BSD43 +  31)
+#define SYS_BSD43_gtty			(SYS_BSD43 +  32)
+#define SYS_BSD43_access		(SYS_BSD43 +  33)
+#define SYS_BSD43_nice			(SYS_BSD43 +  34)
+#define SYS_BSD43_ftime			(SYS_BSD43 +  35)
+#define SYS_BSD43_sync			(SYS_BSD43 +  36)
+#define SYS_BSD43_kill			(SYS_BSD43 +  37)
+#define SYS_BSD43_stat			(SYS_BSD43 +  38)
+#define SYS_BSD43_oldsetpgrp		(SYS_BSD43 +  39)
+#define SYS_BSD43_lstat			(SYS_BSD43 +  40)
+#define SYS_BSD43_dup			(SYS_BSD43 +  41)
+#define SYS_BSD43_pipe			(SYS_BSD43 +  42)
+#define SYS_BSD43_times			(SYS_BSD43 +  43)
+#define SYS_BSD43_profil		(SYS_BSD43 +  44)
+#define SYS_BSD43_msgsys		(SYS_BSD43 +  45)
+#define SYS_BSD43_setgid		(SYS_BSD43 +  46)
+#define SYS_BSD43_getgid		(SYS_BSD43 +  47)
+#define SYS_BSD43_ssig			(SYS_BSD43 +  48)
+#define SYS_BSD43_reserved1		(SYS_BSD43 +  49)
+#define SYS_BSD43_reserved2		(SYS_BSD43 +  50)
+#define SYS_BSD43_sysacct		(SYS_BSD43 +  51)
+#define SYS_BSD43_phys			(SYS_BSD43 +  52)
+#define SYS_BSD43_lock			(SYS_BSD43 +  53)
+#define SYS_BSD43_ioctl			(SYS_BSD43 +  54)
+#define SYS_BSD43_reboot		(SYS_BSD43 +  55)
+#define SYS_BSD43_mpxchan		(SYS_BSD43 +  56)
+#define SYS_BSD43_symlink		(SYS_BSD43 +  57)
+#define SYS_BSD43_readlink		(SYS_BSD43 +  58)
+#define SYS_BSD43_execve		(SYS_BSD43 +  59)
+#define SYS_BSD43_umask			(SYS_BSD43 +  60)
+#define SYS_BSD43_chroot		(SYS_BSD43 +  61)
+#define SYS_BSD43_fstat			(SYS_BSD43 +  62)
+#define SYS_BSD43_reserved3		(SYS_BSD43 +  63)
+#define SYS_BSD43_getpagesize		(SYS_BSD43 +  64)
+#define SYS_BSD43_mremap		(SYS_BSD43 +  65)
+#define SYS_BSD43_vfork			(SYS_BSD43 +  66)
+#define SYS_BSD43_vread			(SYS_BSD43 +  67)
+#define SYS_BSD43_vwrite		(SYS_BSD43 +  68)
+#define SYS_BSD43_sbrk			(SYS_BSD43 +  69)
+#define SYS_BSD43_sstk			(SYS_BSD43 +  70)
+#define SYS_BSD43_mmap			(SYS_BSD43 +  71)
+#define SYS_BSD43_vadvise		(SYS_BSD43 +  72)
+#define SYS_BSD43_munmap		(SYS_BSD43 +  73)
+#define SYS_BSD43_mprotect		(SYS_BSD43 +  74)
+#define SYS_BSD43_madvise		(SYS_BSD43 +  75)
+#define SYS_BSD43_vhangup		(SYS_BSD43 +  76)
+#define SYS_BSD43_vlimit		(SYS_BSD43 +  77)
+#define SYS_BSD43_mincore		(SYS_BSD43 +  78)
+#define SYS_BSD43_getgroups		(SYS_BSD43 +  79)
+#define SYS_BSD43_setgroups		(SYS_BSD43 +  80)
+#define SYS_BSD43_getpgrp		(SYS_BSD43 +  81)
+#define SYS_BSD43_setpgrp		(SYS_BSD43 +  82)
+#define SYS_BSD43_setitimer		(SYS_BSD43 +  83)
+#define SYS_BSD43_wait3			(SYS_BSD43 +  84)
+#define SYS_BSD43_swapon		(SYS_BSD43 +  85)
+#define SYS_BSD43_getitimer		(SYS_BSD43 +  86)
+#define SYS_BSD43_gethostname		(SYS_BSD43 +  87)
+#define SYS_BSD43_sethostname		(SYS_BSD43 +  88)
+#define SYS_BSD43_getdtablesize		(SYS_BSD43 +  89)
+#define SYS_BSD43_dup2			(SYS_BSD43 +  90)
+#define SYS_BSD43_getdopt		(SYS_BSD43 +  91)
+#define SYS_BSD43_fcntl			(SYS_BSD43 +  92)
+#define SYS_BSD43_select		(SYS_BSD43 +  93)
+#define SYS_BSD43_setdopt		(SYS_BSD43 +  94)
+#define SYS_BSD43_fsync			(SYS_BSD43 +  95)
+#define SYS_BSD43_setpriority		(SYS_BSD43 +  96)
+#define SYS_BSD43_socket		(SYS_BSD43 +  97)
+#define SYS_BSD43_connect		(SYS_BSD43 +  98)
+#define SYS_BSD43_oldaccept		(SYS_BSD43 +  99)
+#define SYS_BSD43_getpriority		(SYS_BSD43 + 100)
+#define SYS_BSD43_send			(SYS_BSD43 + 101)
+#define SYS_BSD43_recv			(SYS_BSD43 + 102)
+#define SYS_BSD43_sigreturn		(SYS_BSD43 + 103)
+#define SYS_BSD43_bind			(SYS_BSD43 + 104)
+#define SYS_BSD43_setsockopt		(SYS_BSD43 + 105)
+#define SYS_BSD43_listen		(SYS_BSD43 + 106)
+#define SYS_BSD43_vtimes		(SYS_BSD43 + 107)
+#define SYS_BSD43_sigvec		(SYS_BSD43 + 108)
+#define SYS_BSD43_sigblock		(SYS_BSD43 + 109)
+#define SYS_BSD43_sigsetmask		(SYS_BSD43 + 110)
+#define SYS_BSD43_sigpause		(SYS_BSD43 + 111)
+#define SYS_BSD43_sigstack		(SYS_BSD43 + 112)
+#define SYS_BSD43_oldrecvmsg		(SYS_BSD43 + 113)
+#define SYS_BSD43_oldsendmsg		(SYS_BSD43 + 114)
+#define SYS_BSD43_vtrace		(SYS_BSD43 + 115)
+#define SYS_BSD43_gettimeofday		(SYS_BSD43 + 116)
+#define SYS_BSD43_getrusage		(SYS_BSD43 + 117)
+#define SYS_BSD43_getsockopt		(SYS_BSD43 + 118)
+#define SYS_BSD43_reserved4		(SYS_BSD43 + 119)
+#define SYS_BSD43_readv			(SYS_BSD43 + 120)
+#define SYS_BSD43_writev		(SYS_BSD43 + 121)
+#define SYS_BSD43_settimeofday		(SYS_BSD43 + 122)
+#define SYS_BSD43_fchown		(SYS_BSD43 + 123)
+#define SYS_BSD43_fchmod		(SYS_BSD43 + 124)
+#define SYS_BSD43_oldrecvfrom		(SYS_BSD43 + 125)
+#define SYS_BSD43_setreuid		(SYS_BSD43 + 126)
+#define SYS_BSD43_setregid		(SYS_BSD43 + 127)
+#define SYS_BSD43_rename		(SYS_BSD43 + 128)
+#define SYS_BSD43_truncate		(SYS_BSD43 + 129)
+#define SYS_BSD43_ftruncate		(SYS_BSD43 + 130)
+#define SYS_BSD43_flock			(SYS_BSD43 + 131)
+#define SYS_BSD43_semsys		(SYS_BSD43 + 132)
+#define SYS_BSD43_sendto		(SYS_BSD43 + 133)
+#define SYS_BSD43_shutdown		(SYS_BSD43 + 134)
+#define SYS_BSD43_socketpair		(SYS_BSD43 + 135)
+#define SYS_BSD43_mkdir			(SYS_BSD43 + 136)
+#define SYS_BSD43_rmdir			(SYS_BSD43 + 137)
+#define SYS_BSD43_utimes		(SYS_BSD43 + 138)
+#define SYS_BSD43_sigcleanup		(SYS_BSD43 + 139)
+#define SYS_BSD43_adjtime		(SYS_BSD43 + 140)
+#define SYS_BSD43_oldgetpeername	(SYS_BSD43 + 141)
+#define SYS_BSD43_gethostid		(SYS_BSD43 + 142)
+#define SYS_BSD43_sethostid		(SYS_BSD43 + 143)
+#define SYS_BSD43_getrlimit		(SYS_BSD43 + 144)
+#define SYS_BSD43_setrlimit		(SYS_BSD43 + 145)
+#define SYS_BSD43_killpg		(SYS_BSD43 + 146)
+#define SYS_BSD43_shmsys		(SYS_BSD43 + 147)
+#define SYS_BSD43_quota			(SYS_BSD43 + 148)
+#define SYS_BSD43_qquota		(SYS_BSD43 + 149)
+#define SYS_BSD43_oldgetsockname	(SYS_BSD43 + 150)
+#define SYS_BSD43_sysmips		(SYS_BSD43 + 151)
+#define SYS_BSD43_cacheflush		(SYS_BSD43 + 152)
+#define SYS_BSD43_cachectl		(SYS_BSD43 + 153)
+#define SYS_BSD43_debug			(SYS_BSD43 + 154)
+#define SYS_BSD43_reserved5		(SYS_BSD43 + 155)
+#define SYS_BSD43_reserved6		(SYS_BSD43 + 156)
+#define SYS_BSD43_nfs_mount		(SYS_BSD43 + 157)
+#define SYS_BSD43_nfs_svc		(SYS_BSD43 + 158)
+#define SYS_BSD43_getdirentries		(SYS_BSD43 + 159)
+#define SYS_BSD43_statfs		(SYS_BSD43 + 160)
+#define SYS_BSD43_fstatfs		(SYS_BSD43 + 161)
+#define SYS_BSD43_unmount		(SYS_BSD43 + 162)
+#define SYS_BSD43_async_daemon		(SYS_BSD43 + 163)
+#define SYS_BSD43_nfs_getfh		(SYS_BSD43 + 164)
+#define SYS_BSD43_getdomainname		(SYS_BSD43 + 165)
+#define SYS_BSD43_setdomainname		(SYS_BSD43 + 166)
+#define SYS_BSD43_pcfs_mount		(SYS_BSD43 + 167)
+#define SYS_BSD43_quotactl		(SYS_BSD43 + 168)
+#define SYS_BSD43_oldexportfs		(SYS_BSD43 + 169)
+#define SYS_BSD43_smount		(SYS_BSD43 + 170)
+#define SYS_BSD43_mipshwconf		(SYS_BSD43 + 171)
+#define SYS_BSD43_exportfs		(SYS_BSD43 + 172)
+#define SYS_BSD43_nfsfh_open		(SYS_BSD43 + 173)
+#define SYS_BSD43_libattach		(SYS_BSD43 + 174)
+#define SYS_BSD43_libdetach		(SYS_BSD43 + 175)
+#define SYS_BSD43_accept		(SYS_BSD43 + 176)
+#define SYS_BSD43_reserved7		(SYS_BSD43 + 177)
+#define SYS_BSD43_reserved8		(SYS_BSD43 + 178)
+#define SYS_BSD43_recvmsg		(SYS_BSD43 + 179)
+#define SYS_BSD43_recvfrom		(SYS_BSD43 + 180)
+#define SYS_BSD43_sendmsg		(SYS_BSD43 + 181)
+#define SYS_BSD43_getpeername		(SYS_BSD43 + 182)
+#define SYS_BSD43_getsockname		(SYS_BSD43 + 183)
+#define SYS_BSD43_aread			(SYS_BSD43 + 184)
+#define SYS_BSD43_awrite		(SYS_BSD43 + 185)
+#define SYS_BSD43_listio		(SYS_BSD43 + 186)
+#define SYS_BSD43_acancel		(SYS_BSD43 + 187)
+#define SYS_BSD43_astatus		(SYS_BSD43 + 188)
+#define SYS_BSD43_await			(SYS_BSD43 + 189)
+#define SYS_BSD43_areadv		(SYS_BSD43 + 190)
+#define SYS_BSD43_awritev		(SYS_BSD43 + 191)
+
+/*
+ * POSIX syscalls are in the range from 3000 to 3999
+ */
+#define SYS_POSIX			3000
+#define SYS_POSIX_syscall		(SYS_POSIX +   0)
+#define SYS_POSIX_exit			(SYS_POSIX +   1)
+#define SYS_POSIX_fork			(SYS_POSIX +   2)
+#define SYS_POSIX_read			(SYS_POSIX +   3)
+#define SYS_POSIX_write			(SYS_POSIX +   4)
+#define SYS_POSIX_open			(SYS_POSIX +   5)
+#define SYS_POSIX_close			(SYS_POSIX +   6)
+#define SYS_POSIX_wait			(SYS_POSIX +   7)
+#define SYS_POSIX_creat			(SYS_POSIX +   8)
+#define SYS_POSIX_link			(SYS_POSIX +   9)
+#define SYS_POSIX_unlink		(SYS_POSIX +  10)
+#define SYS_POSIX_exec			(SYS_POSIX +  11)
+#define SYS_POSIX_chdir			(SYS_POSIX +  12)
+#define SYS_POSIX_gtime			(SYS_POSIX +  13)
+#define SYS_POSIX_mknod			(SYS_POSIX +  14)
+#define SYS_POSIX_chmod			(SYS_POSIX +  15)
+#define SYS_POSIX_chown			(SYS_POSIX +  16)
+#define SYS_POSIX_sbreak		(SYS_POSIX +  17)
+#define SYS_POSIX_stat			(SYS_POSIX +  18)
+#define SYS_POSIX_lseek			(SYS_POSIX +  19)
+#define SYS_POSIX_getpid		(SYS_POSIX +  20)
+#define SYS_POSIX_mount			(SYS_POSIX +  21)
+#define SYS_POSIX_umount		(SYS_POSIX +  22)
+#define SYS_POSIX_setuid		(SYS_POSIX +  23)
+#define SYS_POSIX_getuid		(SYS_POSIX +  24)
+#define SYS_POSIX_stime			(SYS_POSIX +  25)
+#define SYS_POSIX_ptrace		(SYS_POSIX +  26)
+#define SYS_POSIX_alarm			(SYS_POSIX +  27)
+#define SYS_POSIX_fstat			(SYS_POSIX +  28)
+#define SYS_POSIX_pause			(SYS_POSIX +  29)
+#define SYS_POSIX_utime			(SYS_POSIX +  30)
+#define SYS_POSIX_stty			(SYS_POSIX +  31)
+#define SYS_POSIX_gtty			(SYS_POSIX +  32)
+#define SYS_POSIX_access		(SYS_POSIX +  33)
+#define SYS_POSIX_nice			(SYS_POSIX +  34)
+#define SYS_POSIX_statfs		(SYS_POSIX +  35)
+#define SYS_POSIX_sync			(SYS_POSIX +  36)
+#define SYS_POSIX_kill			(SYS_POSIX +  37)
+#define SYS_POSIX_fstatfs		(SYS_POSIX +  38)
+#define SYS_POSIX_getpgrp		(SYS_POSIX +  39)
+#define SYS_POSIX_syssgi		(SYS_POSIX +  40)
+#define SYS_POSIX_dup			(SYS_POSIX +  41)
+#define SYS_POSIX_pipe			(SYS_POSIX +  42)
+#define SYS_POSIX_times			(SYS_POSIX +  43)
+#define SYS_POSIX_profil		(SYS_POSIX +  44)
+#define SYS_POSIX_lock			(SYS_POSIX +  45)
+#define SYS_POSIX_setgid		(SYS_POSIX +  46)
+#define SYS_POSIX_getgid		(SYS_POSIX +  47)
+#define SYS_POSIX_sig			(SYS_POSIX +  48)
+#define SYS_POSIX_msgsys		(SYS_POSIX +  49)
+#define SYS_POSIX_sysmips		(SYS_POSIX +  50)
+#define SYS_POSIX_sysacct		(SYS_POSIX +  51)
+#define SYS_POSIX_shmsys		(SYS_POSIX +  52)
+#define SYS_POSIX_semsys		(SYS_POSIX +  53)
+#define SYS_POSIX_ioctl			(SYS_POSIX +  54)
+#define SYS_POSIX_uadmin		(SYS_POSIX +  55)
+#define SYS_POSIX_exch			(SYS_POSIX +  56)
+#define SYS_POSIX_utssys		(SYS_POSIX +  57)
+#define SYS_POSIX_USG_reserved1		(SYS_POSIX +  58)
+#define SYS_POSIX_exece			(SYS_POSIX +  59)
+#define SYS_POSIX_umask			(SYS_POSIX +  60)
+#define SYS_POSIX_chroot		(SYS_POSIX +  61)
+#define SYS_POSIX_fcntl			(SYS_POSIX +  62)
+#define SYS_POSIX_ulimit		(SYS_POSIX +  63)
+#define SYS_POSIX_SAFARI4_reserved1	(SYS_POSIX +  64)
+#define SYS_POSIX_SAFARI4_reserved2	(SYS_POSIX +  65)
+#define SYS_POSIX_SAFARI4_reserved3	(SYS_POSIX +  66)
+#define SYS_POSIX_SAFARI4_reserved4	(SYS_POSIX +  67)
+#define SYS_POSIX_SAFARI4_reserved5	(SYS_POSIX +  68)
+#define SYS_POSIX_SAFARI4_reserved6	(SYS_POSIX +  69)
+#define SYS_POSIX_advfs			(SYS_POSIX +  70)
+#define SYS_POSIX_unadvfs		(SYS_POSIX +  71)
+#define SYS_POSIX_rmount		(SYS_POSIX +  72)
+#define SYS_POSIX_rumount		(SYS_POSIX +  73)
+#define SYS_POSIX_rfstart		(SYS_POSIX +  74)
+#define SYS_POSIX_reserved1		(SYS_POSIX +  75)
+#define SYS_POSIX_rdebug		(SYS_POSIX +  76)
+#define SYS_POSIX_rfstop		(SYS_POSIX +  77)
+#define SYS_POSIX_rfsys			(SYS_POSIX +  78)
+#define SYS_POSIX_rmdir			(SYS_POSIX +  79)
+#define SYS_POSIX_mkdir			(SYS_POSIX +  80)
+#define SYS_POSIX_getdents		(SYS_POSIX +  81)
+#define SYS_POSIX_sginap		(SYS_POSIX +  82)
+#define SYS_POSIX_sgikopt		(SYS_POSIX +  83)
+#define SYS_POSIX_sysfs			(SYS_POSIX +  84)
+#define SYS_POSIX_getmsg		(SYS_POSIX +  85)
+#define SYS_POSIX_putmsg		(SYS_POSIX +  86)
+#define SYS_POSIX_poll			(SYS_POSIX +  87)
+#define SYS_POSIX_sigreturn		(SYS_POSIX +  88)
+#define SYS_POSIX_accept		(SYS_POSIX +  89)
+#define SYS_POSIX_bind			(SYS_POSIX +  90)
+#define SYS_POSIX_connect		(SYS_POSIX +  91)
+#define SYS_POSIX_gethostid		(SYS_POSIX +  92)
+#define SYS_POSIX_getpeername		(SYS_POSIX +  93)
+#define SYS_POSIX_getsockname		(SYS_POSIX +  94)
+#define SYS_POSIX_getsockopt		(SYS_POSIX +  95)
+#define SYS_POSIX_listen		(SYS_POSIX +  96)
+#define SYS_POSIX_recv			(SYS_POSIX +  97)
+#define SYS_POSIX_recvfrom		(SYS_POSIX +  98)
+#define SYS_POSIX_recvmsg		(SYS_POSIX +  99)
+#define SYS_POSIX_select		(SYS_POSIX + 100)
+#define SYS_POSIX_send			(SYS_POSIX + 101)
+#define SYS_POSIX_sendmsg		(SYS_POSIX + 102)
+#define SYS_POSIX_sendto		(SYS_POSIX + 103)
+#define SYS_POSIX_sethostid		(SYS_POSIX + 104)
+#define SYS_POSIX_setsockopt		(SYS_POSIX + 105)
+#define SYS_POSIX_shutdown		(SYS_POSIX + 106)
+#define SYS_POSIX_socket		(SYS_POSIX + 107)
+#define SYS_POSIX_gethostname		(SYS_POSIX + 108)
+#define SYS_POSIX_sethostname		(SYS_POSIX + 109)
+#define SYS_POSIX_getdomainname		(SYS_POSIX + 110)
+#define SYS_POSIX_setdomainname		(SYS_POSIX + 111)
+#define SYS_POSIX_truncate		(SYS_POSIX + 112)
+#define SYS_POSIX_ftruncate		(SYS_POSIX + 113)
+#define SYS_POSIX_rename		(SYS_POSIX + 114)
+#define SYS_POSIX_symlink		(SYS_POSIX + 115)
+#define SYS_POSIX_readlink		(SYS_POSIX + 116)
+#define SYS_POSIX_lstat			(SYS_POSIX + 117)
+#define SYS_POSIX_nfs_mount		(SYS_POSIX + 118)
+#define SYS_POSIX_nfs_svc		(SYS_POSIX + 119)
+#define SYS_POSIX_nfs_getfh		(SYS_POSIX + 120)
+#define SYS_POSIX_async_daemon		(SYS_POSIX + 121)
+#define SYS_POSIX_exportfs		(SYS_POSIX + 122)
+#define SYS_POSIX_SGI_setregid		(SYS_POSIX + 123)
+#define SYS_POSIX_SGI_setreuid		(SYS_POSIX + 124)
+#define SYS_POSIX_getitimer		(SYS_POSIX + 125)
+#define SYS_POSIX_setitimer		(SYS_POSIX + 126)
+#define SYS_POSIX_adjtime		(SYS_POSIX + 127)
+#define SYS_POSIX_SGI_bsdgettime	(SYS_POSIX + 128)
+#define SYS_POSIX_SGI_sproc		(SYS_POSIX + 129)
+#define SYS_POSIX_SGI_prctl		(SYS_POSIX + 130)
+#define SYS_POSIX_SGI_blkproc		(SYS_POSIX + 131)
+#define SYS_POSIX_SGI_reserved1		(SYS_POSIX + 132)
+#define SYS_POSIX_SGI_sgigsc		(SYS_POSIX + 133)
+#define SYS_POSIX_SGI_mmap		(SYS_POSIX + 134)
+#define SYS_POSIX_SGI_munmap		(SYS_POSIX + 135)
+#define SYS_POSIX_SGI_mprotect		(SYS_POSIX + 136)
+#define SYS_POSIX_SGI_msync		(SYS_POSIX + 137)
+#define SYS_POSIX_SGI_madvise		(SYS_POSIX + 138)
+#define SYS_POSIX_SGI_mpin		(SYS_POSIX + 139)
+#define SYS_POSIX_SGI_getpagesize	(SYS_POSIX + 140)
+#define SYS_POSIX_SGI_libattach		(SYS_POSIX + 141)
+#define SYS_POSIX_SGI_libdetach		(SYS_POSIX + 142)
+#define SYS_POSIX_SGI_getpgrp		(SYS_POSIX + 143)
+#define SYS_POSIX_SGI_setpgrp		(SYS_POSIX + 144)
+#define SYS_POSIX_SGI_reserved2		(SYS_POSIX + 145)
+#define SYS_POSIX_SGI_reserved3		(SYS_POSIX + 146)
+#define SYS_POSIX_SGI_reserved4		(SYS_POSIX + 147)
+#define SYS_POSIX_SGI_reserved5		(SYS_POSIX + 148)
+#define SYS_POSIX_SGI_reserved6		(SYS_POSIX + 149)
+#define SYS_POSIX_cacheflush		(SYS_POSIX + 150)
+#define SYS_POSIX_cachectl		(SYS_POSIX + 151)
+#define SYS_POSIX_fchown		(SYS_POSIX + 152)
+#define SYS_POSIX_fchmod		(SYS_POSIX + 153)
+#define SYS_POSIX_wait3			(SYS_POSIX + 154)
+#define SYS_POSIX_mmap			(SYS_POSIX + 155)
+#define SYS_POSIX_munmap		(SYS_POSIX + 156)
+#define SYS_POSIX_madvise		(SYS_POSIX + 157)
+#define SYS_POSIX_BSD_getpagesize	(SYS_POSIX + 158)
+#define SYS_POSIX_setreuid		(SYS_POSIX + 159)
+#define SYS_POSIX_setregid		(SYS_POSIX + 160)
+#define SYS_POSIX_setpgid		(SYS_POSIX + 161)
+#define SYS_POSIX_getgroups		(SYS_POSIX + 162)
+#define SYS_POSIX_setgroups		(SYS_POSIX + 163)
+#define SYS_POSIX_gettimeofday		(SYS_POSIX + 164)
+#define SYS_POSIX_getrusage		(SYS_POSIX + 165)
+#define SYS_POSIX_getrlimit		(SYS_POSIX + 166)
+#define SYS_POSIX_setrlimit		(SYS_POSIX + 167)
+#define SYS_POSIX_waitpid		(SYS_POSIX + 168)
+#define SYS_POSIX_dup2			(SYS_POSIX + 169)
+#define SYS_POSIX_reserved2		(SYS_POSIX + 170)
+#define SYS_POSIX_reserved3		(SYS_POSIX + 171)
+#define SYS_POSIX_reserved4		(SYS_POSIX + 172)
+#define SYS_POSIX_reserved5		(SYS_POSIX + 173)
+#define SYS_POSIX_reserved6		(SYS_POSIX + 174)
+#define SYS_POSIX_reserved7		(SYS_POSIX + 175)
+#define SYS_POSIX_reserved8		(SYS_POSIX + 176)
+#define SYS_POSIX_reserved9		(SYS_POSIX + 177)
+#define SYS_POSIX_reserved10		(SYS_POSIX + 178)
+#define SYS_POSIX_reserved11		(SYS_POSIX + 179)
+#define SYS_POSIX_reserved12		(SYS_POSIX + 180)
+#define SYS_POSIX_reserved13		(SYS_POSIX + 181)
+#define SYS_POSIX_reserved14		(SYS_POSIX + 182)
+#define SYS_POSIX_reserved15		(SYS_POSIX + 183)
+#define SYS_POSIX_reserved16		(SYS_POSIX + 184)
+#define SYS_POSIX_reserved17		(SYS_POSIX + 185)
+#define SYS_POSIX_reserved18		(SYS_POSIX + 186)
+#define SYS_POSIX_reserved19		(SYS_POSIX + 187)
+#define SYS_POSIX_reserved20		(SYS_POSIX + 188)
+#define SYS_POSIX_reserved21		(SYS_POSIX + 189)
+#define SYS_POSIX_reserved22		(SYS_POSIX + 190)
+#define SYS_POSIX_reserved23		(SYS_POSIX + 191)
+#define SYS_POSIX_reserved24		(SYS_POSIX + 192)
+#define SYS_POSIX_reserved25		(SYS_POSIX + 193)
+#define SYS_POSIX_reserved26		(SYS_POSIX + 194)
+#define SYS_POSIX_reserved27		(SYS_POSIX + 195)
+#define SYS_POSIX_reserved28		(SYS_POSIX + 196)
+#define SYS_POSIX_reserved29		(SYS_POSIX + 197)
+#define SYS_POSIX_reserved30		(SYS_POSIX + 198)
+#define SYS_POSIX_reserved31		(SYS_POSIX + 199)
+#define SYS_POSIX_reserved32		(SYS_POSIX + 200)
+#define SYS_POSIX_reserved33		(SYS_POSIX + 201)
+#define SYS_POSIX_reserved34		(SYS_POSIX + 202)
+#define SYS_POSIX_reserved35		(SYS_POSIX + 203)
+#define SYS_POSIX_reserved36		(SYS_POSIX + 204)
+#define SYS_POSIX_reserved37		(SYS_POSIX + 205)
+#define SYS_POSIX_reserved38		(SYS_POSIX + 206)
+#define SYS_POSIX_reserved39		(SYS_POSIX + 207)
+#define SYS_POSIX_reserved40		(SYS_POSIX + 208)
+#define SYS_POSIX_reserved41		(SYS_POSIX + 209)
+#define SYS_POSIX_reserved42		(SYS_POSIX + 210)
+#define SYS_POSIX_reserved43		(SYS_POSIX + 211)
+#define SYS_POSIX_reserved44		(SYS_POSIX + 212)
+#define SYS_POSIX_reserved45		(SYS_POSIX + 213)
+#define SYS_POSIX_reserved46		(SYS_POSIX + 214)
+#define SYS_POSIX_reserved47		(SYS_POSIX + 215)
+#define SYS_POSIX_reserved48		(SYS_POSIX + 216)
+#define SYS_POSIX_reserved49		(SYS_POSIX + 217)
+#define SYS_POSIX_reserved50		(SYS_POSIX + 218)
+#define SYS_POSIX_reserved51		(SYS_POSIX + 219)
+#define SYS_POSIX_reserved52		(SYS_POSIX + 220)
+#define SYS_POSIX_reserved53		(SYS_POSIX + 221)
+#define SYS_POSIX_reserved54		(SYS_POSIX + 222)
+#define SYS_POSIX_reserved55		(SYS_POSIX + 223)
+#define SYS_POSIX_reserved56		(SYS_POSIX + 224)
+#define SYS_POSIX_reserved57		(SYS_POSIX + 225)
+#define SYS_POSIX_reserved58		(SYS_POSIX + 226)
+#define SYS_POSIX_reserved59		(SYS_POSIX + 227)
+#define SYS_POSIX_reserved60		(SYS_POSIX + 228)
+#define SYS_POSIX_reserved61		(SYS_POSIX + 229)
+#define SYS_POSIX_reserved62		(SYS_POSIX + 230)
+#define SYS_POSIX_reserved63		(SYS_POSIX + 231)
+#define SYS_POSIX_reserved64		(SYS_POSIX + 232)
+#define SYS_POSIX_reserved65		(SYS_POSIX + 233)
+#define SYS_POSIX_reserved66		(SYS_POSIX + 234)
+#define SYS_POSIX_reserved67		(SYS_POSIX + 235)
+#define SYS_POSIX_reserved68		(SYS_POSIX + 236)
+#define SYS_POSIX_reserved69		(SYS_POSIX + 237)
+#define SYS_POSIX_reserved70		(SYS_POSIX + 238)
+#define SYS_POSIX_reserved71		(SYS_POSIX + 239)
+#define SYS_POSIX_reserved72		(SYS_POSIX + 240)
+#define SYS_POSIX_reserved73		(SYS_POSIX + 241)
+#define SYS_POSIX_reserved74		(SYS_POSIX + 242)
+#define SYS_POSIX_reserved75		(SYS_POSIX + 243)
+#define SYS_POSIX_reserved76		(SYS_POSIX + 244)
+#define SYS_POSIX_reserved77		(SYS_POSIX + 245)
+#define SYS_POSIX_reserved78		(SYS_POSIX + 246)
+#define SYS_POSIX_reserved79		(SYS_POSIX + 247)
+#define SYS_POSIX_reserved80		(SYS_POSIX + 248)
+#define SYS_POSIX_reserved81		(SYS_POSIX + 249)
+#define SYS_POSIX_reserved82		(SYS_POSIX + 250)
+#define SYS_POSIX_reserved83		(SYS_POSIX + 251)
+#define SYS_POSIX_reserved84		(SYS_POSIX + 252)
+#define SYS_POSIX_reserved85		(SYS_POSIX + 253)
+#define SYS_POSIX_reserved86		(SYS_POSIX + 254)
+#define SYS_POSIX_reserved87		(SYS_POSIX + 255)
+#define SYS_POSIX_reserved88		(SYS_POSIX + 256)
+#define SYS_POSIX_reserved89		(SYS_POSIX + 257)
+#define SYS_POSIX_reserved90		(SYS_POSIX + 258)
+#define SYS_POSIX_reserved91		(SYS_POSIX + 259)
+#define SYS_POSIX_netboot		(SYS_POSIX + 260)
+#define SYS_POSIX_netunboot		(SYS_POSIX + 261)
+#define SYS_POSIX_rdump			(SYS_POSIX + 262)
+#define SYS_POSIX_setsid		(SYS_POSIX + 263)
+#define SYS_POSIX_getmaxsig		(SYS_POSIX + 264)
+#define SYS_POSIX_sigpending		(SYS_POSIX + 265)
+#define SYS_POSIX_sigprocmask		(SYS_POSIX + 266)
+#define SYS_POSIX_sigsuspend		(SYS_POSIX + 267)
+#define SYS_POSIX_sigaction		(SYS_POSIX + 268)
+#define SYS_POSIX_MIPS_reserved1	(SYS_POSIX + 269)
+#define SYS_POSIX_MIPS_reserved2	(SYS_POSIX + 270)
+#define SYS_POSIX_MIPS_reserved3	(SYS_POSIX + 271)
+#define SYS_POSIX_MIPS_reserved4	(SYS_POSIX + 272)
+#define SYS_POSIX_MIPS_reserved5	(SYS_POSIX + 273)
+#define SYS_POSIX_MIPS_reserved6	(SYS_POSIX + 274)
+#define SYS_POSIX_MIPS_reserved7	(SYS_POSIX + 275)
+#define SYS_POSIX_MIPS_reserved8	(SYS_POSIX + 276)
+#define SYS_POSIX_MIPS_reserved9	(SYS_POSIX + 277)
+#define SYS_POSIX_MIPS_reserved10	(SYS_POSIX + 278)
+#define SYS_POSIX_MIPS_reserved11	(SYS_POSIX + 279)
+#define SYS_POSIX_TANDEM_reserved1	(SYS_POSIX + 280)
+#define SYS_POSIX_TANDEM_reserved2	(SYS_POSIX + 281)
+#define SYS_POSIX_TANDEM_reserved3	(SYS_POSIX + 282)
+#define SYS_POSIX_TANDEM_reserved4	(SYS_POSIX + 283)
+#define SYS_POSIX_TANDEM_reserved5	(SYS_POSIX + 284)
+#define SYS_POSIX_TANDEM_reserved6	(SYS_POSIX + 285)
+#define SYS_POSIX_TANDEM_reserved7	(SYS_POSIX + 286)
+#define SYS_POSIX_TANDEM_reserved8	(SYS_POSIX + 287)
+#define SYS_POSIX_TANDEM_reserved9	(SYS_POSIX + 288)
+#define SYS_POSIX_TANDEM_reserved10	(SYS_POSIX + 289)
+#define SYS_POSIX_TANDEM_reserved11	(SYS_POSIX + 290)
+#define SYS_POSIX_TANDEM_reserved12	(SYS_POSIX + 291)
+#define SYS_POSIX_TANDEM_reserved13	(SYS_POSIX + 292)
+#define SYS_POSIX_TANDEM_reserved14	(SYS_POSIX + 293)
+#define SYS_POSIX_TANDEM_reserved15	(SYS_POSIX + 294)
+#define SYS_POSIX_TANDEM_reserved16	(SYS_POSIX + 295)
+#define SYS_POSIX_TANDEM_reserved17	(SYS_POSIX + 296)
+#define SYS_POSIX_TANDEM_reserved18	(SYS_POSIX + 297)
+#define SYS_POSIX_TANDEM_reserved19	(SYS_POSIX + 298)
+#define SYS_POSIX_TANDEM_reserved20	(SYS_POSIX + 299)
+#define SYS_POSIX_SGI_reserved7		(SYS_POSIX + 300)
+#define SYS_POSIX_SGI_reserved8		(SYS_POSIX + 301)
+#define SYS_POSIX_SGI_reserved9		(SYS_POSIX + 302)
+#define SYS_POSIX_SGI_reserved10	(SYS_POSIX + 303)
+#define SYS_POSIX_SGI_reserved11	(SYS_POSIX + 304)
+#define SYS_POSIX_SGI_reserved12	(SYS_POSIX + 305)
+#define SYS_POSIX_SGI_reserved13	(SYS_POSIX + 306)
+#define SYS_POSIX_SGI_reserved14	(SYS_POSIX + 307)
+#define SYS_POSIX_SGI_reserved15	(SYS_POSIX + 308)
+#define SYS_POSIX_SGI_reserved16	(SYS_POSIX + 309)
+#define SYS_POSIX_SGI_reserved17	(SYS_POSIX + 310)
+#define SYS_POSIX_SGI_reserved18	(SYS_POSIX + 311)
+#define SYS_POSIX_SGI_reserved19	(SYS_POSIX + 312)
+#define SYS_POSIX_SGI_reserved20	(SYS_POSIX + 313)
+#define SYS_POSIX_SGI_reserved21	(SYS_POSIX + 314)
+#define SYS_POSIX_SGI_reserved22	(SYS_POSIX + 315)
+#define SYS_POSIX_SGI_reserved23	(SYS_POSIX + 316)
+#define SYS_POSIX_SGI_reserved24	(SYS_POSIX + 317)
+#define SYS_POSIX_SGI_reserved25	(SYS_POSIX + 318)
+#define SYS_POSIX_SGI_reserved26	(SYS_POSIX + 319)
+
+/*
+ * Linux syscalls are in the range from 4000 to 4999
+ * Hopefully these syscall numbers are unused ...  If not everyone using
+ * statically linked binaries is pretty <censored - the government>.  You've
+ * been warned.
+ */
+#define SYS_Linux			4000
+#define SYS_syscall			(SYS_Linux +   0)
+#define SYS_exit			(SYS_Linux +   1)
+#define SYS_fork			(SYS_Linux +   2)
+#define SYS_read			(SYS_Linux +   3)
+#define SYS_write			(SYS_Linux +   4)
+#define SYS_open			(SYS_Linux +   5)
+#define SYS_close			(SYS_Linux +   6)
+#define SYS_waitpid			(SYS_Linux +   7)
+#define SYS_creat			(SYS_Linux +   8)
+#define SYS_link			(SYS_Linux +   9)
+#define SYS_unlink			(SYS_Linux +  10)
+#define SYS_execve			(SYS_Linux +  11)
+#define SYS_chdir			(SYS_Linux +  12)
+#define SYS_time			(SYS_Linux +  13)
+#define SYS_mknod			(SYS_Linux +  14)
+#define SYS_chmod			(SYS_Linux +  15)
+#define SYS_chown			(SYS_Linux +  16)
+#define SYS_break			(SYS_Linux +  17)
+#define SYS_oldstat			(SYS_Linux +  18)
+#define SYS_lseek			(SYS_Linux +  19)
+#define SYS_getpid			(SYS_Linux +  20)
+#define SYS_mount			(SYS_Linux +  21)
+#define SYS_umount			(SYS_Linux +  22)
+#define SYS_setuid			(SYS_Linux +  23)
+#define SYS_getuid			(SYS_Linux +  24)
+#define SYS_stime			(SYS_Linux +  25)
+#define SYS_ptrace			(SYS_Linux +  26)
+#define SYS_alarm			(SYS_Linux +  27)
+#define SYS_oldfstat			(SYS_Linux +  28)
+#define SYS_pause			(SYS_Linux +  29)
+#define SYS_utime			(SYS_Linux +  30)
+#define SYS_stty			(SYS_Linux +  31)
+#define SYS_gtty			(SYS_Linux +  32)
+#define SYS_access			(SYS_Linux +  33)
+#define SYS_nice			(SYS_Linux +  34)
+#define SYS_ftime			(SYS_Linux +  35)
+#define SYS_sync			(SYS_Linux +  36)
+#define SYS_kill			(SYS_Linux +  37)
+#define SYS_rename			(SYS_Linux +  38)
+#define SYS_mkdir			(SYS_Linux +  39)
+#define SYS_rmdir			(SYS_Linux +  40)
+#define SYS_dup				(SYS_Linux +  41)
+#define SYS_pipe			(SYS_Linux +  42)
+#define SYS_times			(SYS_Linux +  43)
+#define SYS_prof			(SYS_Linux +  44)
+#define SYS_brk				(SYS_Linux +  45)
+#define SYS_setgid			(SYS_Linux +  46)
+#define SYS_getgid			(SYS_Linux +  47)
+#define SYS_signal			(SYS_Linux +  48)
+#define SYS_geteuid			(SYS_Linux +  49)
+#define SYS_getegid			(SYS_Linux +  50)
+#define SYS_acct			(SYS_Linux +  51)
+#define SYS_phys			(SYS_Linux +  52)
+#define SYS_lock			(SYS_Linux +  53)
+#define SYS_ioctl			(SYS_Linux +  54)
+#define SYS_fcntl			(SYS_Linux +  55)
+#define SYS_mpx				(SYS_Linux +  56)
+#define SYS_setpgid			(SYS_Linux +  57)
+#define SYS_ulimit			(SYS_Linux +  58)
+#define SYS_oldolduname			(SYS_Linux +  59)
+#define SYS_umask			(SYS_Linux +  60)
+#define SYS_chroot			(SYS_Linux +  61)
+#define SYS_ustat			(SYS_Linux +  62)
+#define SYS_dup2			(SYS_Linux +  63)
+#define SYS_getppid			(SYS_Linux +  64)
+#define SYS_getpgrp			(SYS_Linux +  65)
+#define SYS_setsid			(SYS_Linux +  66)
+#define SYS_sigaction			(SYS_Linux +  67)
+#define SYS_sgetmask			(SYS_Linux +  68)
+#define SYS_ssetmask			(SYS_Linux +  69)
+#define SYS_setreuid			(SYS_Linux +  70)
+#define SYS_setregid			(SYS_Linux +  71)
+#define SYS_sigsuspend			(SYS_Linux +  72)
+#define SYS_sigpending			(SYS_Linux +  73)
+#define SYS_sethostname			(SYS_Linux +  74)
+#define SYS_setrlimit			(SYS_Linux +  75)
+#define SYS_getrlimit			(SYS_Linux +  76)
+#define SYS_getrusage			(SYS_Linux +  77)
+#define SYS_gettimeofday		(SYS_Linux +  78)
+#define SYS_settimeofday		(SYS_Linux +  79)
+#define SYS_getgroups			(SYS_Linux +  80)
+#define SYS_setgroups			(SYS_Linux +  81)
+#define SYS_reserved82			(SYS_Linux +  82)
+#define SYS_symlink			(SYS_Linux +  83)
+#define SYS_oldlstat			(SYS_Linux +  84)
+#define SYS_readlink			(SYS_Linux +  85)
+#define SYS_uselib			(SYS_Linux +  86)
+#define SYS_swapon			(SYS_Linux +  87)
+#define SYS_reboot			(SYS_Linux +  88)
+#define SYS_readdir			(SYS_Linux +  89)
+#define SYS_mmap			(SYS_Linux +  90)
+#define SYS_munmap			(SYS_Linux +  91)
+#define SYS_truncate			(SYS_Linux +  92)
+#define SYS_ftruncate			(SYS_Linux +  93)
+#define SYS_fchmod			(SYS_Linux +  94)
+#define SYS_fchown			(SYS_Linux +  95)
+#define SYS_getpriority			(SYS_Linux +  96)
+#define SYS_setpriority			(SYS_Linux +  97)
+#define SYS_profil			(SYS_Linux +  98)
+#define SYS_statfs			(SYS_Linux +  99)
+#define SYS_fstatfs			(SYS_Linux + 100)
+#define SYS_ioperm			(SYS_Linux + 101)
+#define SYS_socketcall			(SYS_Linux + 102)
+#define SYS_syslog			(SYS_Linux + 103)
+#define SYS_setitimer			(SYS_Linux + 104)
+#define SYS_getitimer			(SYS_Linux + 105)
+#define SYS_stat			(SYS_Linux + 106)
+#define SYS_lstat			(SYS_Linux + 107)
+#define SYS_fstat			(SYS_Linux + 108)
+#define SYS_olduname			(SYS_Linux + 109)
+#define SYS_iopl			(SYS_Linux + 110)
+#define SYS_vhangup			(SYS_Linux + 111)
+#define SYS_idle			(SYS_Linux + 112)
+#define SYS_vm86			(SYS_Linux + 113)
+#define SYS_wait4			(SYS_Linux + 114)
+#define SYS_swapoff			(SYS_Linux + 115)
+#define SYS_sysinfo			(SYS_Linux + 116)
+#define SYS_ipc				(SYS_Linux + 117)
+#define SYS_fsync			(SYS_Linux + 118)
+#define SYS_sigreturn			(SYS_Linux + 119)
+#define SYS_clone			(SYS_Linux + 120)
+#define SYS_setdomainname		(SYS_Linux + 121)
+#define SYS_uname			(SYS_Linux + 122)
+#define SYS_modify_ldt			(SYS_Linux + 123)
+#define SYS_adjtimex			(SYS_Linux + 124)
+#define SYS_mprotect			(SYS_Linux + 125)
+#define SYS_sigprocmask			(SYS_Linux + 126)
+#define SYS_create_module		(SYS_Linux + 127)
+#define SYS_init_module			(SYS_Linux + 128)
+#define SYS_delete_module		(SYS_Linux + 129)
+#define SYS_get_kernel_syms		(SYS_Linux + 130)
+#define SYS_quotactl			(SYS_Linux + 131)
+#define SYS_getpgid			(SYS_Linux + 132)
+#define SYS_fchdir			(SYS_Linux + 133)
+#define SYS_bdflush			(SYS_Linux + 134)
+#define SYS_sysfs			(SYS_Linux + 135)
+#define SYS_personality			(SYS_Linux + 136)
+#define SYS_afs_syscall			(SYS_Linux + 137) /* Syscall for Andrew File System */
+#define SYS_setfsuid			(SYS_Linux + 138)
+#define SYS_setfsgid			(SYS_Linux + 139)
+#define SYS__llseek			(SYS_Linux + 140)
+#define SYS_getdents			(SYS_Linux + 141)
+#define SYS__newselect			(SYS_Linux + 142)
+#define SYS_syscall_flock		(SYS_Linux + 143)
+#define SYS_msync			(SYS_Linux + 144)
+#define SYS_readv			(SYS_Linux + 145)
+#define SYS_writev			(SYS_Linux + 146)
+#define SYS_cacheflush			(SYS_Linux + 147)
+#define SYS_cachectl			(SYS_Linux + 148)
+#define SYS_sysmips			(SYS_Linux + 149)
+#define SYS_setup			(SYS_Linux + 150)	/* used only by init, to get system going */
+#define SYS_getsid			(SYS_Linux + 151)
+#define SYS_fdatasync			(SYS_Linux + 152)
+#define SYS__sysctl			(SYS_Linux + 153)
+#define SYS_mlock			(SYS_Linux + 154)
+#define SYS_munlock			(SYS_Linux + 155)
+#define SYS_mlockall			(SYS_Linux + 156)
+#define SYS_munlockall			(SYS_Linux + 157)
+#define SYS_sched_setparam		(SYS_Linux + 158)
+#define SYS_sched_getparam		(SYS_Linux + 159)
+#define SYS_sched_setscheduler		(SYS_Linux + 160)
+#define SYS_sched_getscheduler		(SYS_Linux + 161)
+#define SYS_sched_yield			(SYS_Linux + 162)
+#define SYS_sched_get_priority_max	(SYS_Linux + 163)
+#define SYS_sched_get_priority_min	(SYS_Linux + 164)
+#define SYS_sched_rr_get_interval	(SYS_Linux + 165)
+#define SYS_nanosleep			(SYS_Linux + 166)
+#define SYS_mremap			(SYS_Linux + 167)
+#define SYS_accept			(SYS_Linux + 168)
+#define SYS_bind			(SYS_Linux + 169)
+#define SYS_connect			(SYS_Linux + 170)
+#define SYS_getpeername			(SYS_Linux + 171)
+#define SYS_getsockname			(SYS_Linux + 172)
+#define SYS_getsockopt			(SYS_Linux + 173)
+#define SYS_listen			(SYS_Linux + 174)
+#define SYS_recv			(SYS_Linux + 175)
+#define SYS_recvfrom			(SYS_Linux + 176)
+#define SYS_recvmsg			(SYS_Linux + 177)
+#define SYS_send			(SYS_Linux + 178)
+#define SYS_sendmsg			(SYS_Linux + 179)
+#define SYS_sendto			(SYS_Linux + 180)
+#define SYS_setsockopt			(SYS_Linux + 181)
+#define SYS_shutdown			(SYS_Linux + 182)
+#define SYS_socket			(SYS_Linux + 183)
+#define SYS_socketpair			(SYS_Linux + 184)
+#define SYS_setresuid			(SYS_Linux + 185)
+#define SYS_getresuid			(SYS_Linux + 186)
+#define SYS_query_module		(SYS_Linux + 187)
+#define SYS_poll			(SYS_Linux + 188)
+#define SYS_nfsservctl			(SYS_Linux + 189)
+
+#endif	/* sys/syscall.h */
diff --git a/sysdeps/unix/sysv/linux/mips/sys/sysmips.h b/sysdeps/unix/sysv/linux/mips/sys/sysmips.h
new file mode 100644
index 0000000000..cbb7eba2b4
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/sys/sysmips.h
@@ -0,0 +1,36 @@
+/* Copyright (C) 1991, 92, 94, 95, 96, 97 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.  */
+
+#ifndef _SYS_SYSMIPS_H
+#define _SYS_SYSMIPS_H 1
+
+#include <features.h>
+
+/*
+ * Get the kernel definition for sysmips(2)
+ */
+#include <asm/sysmips.h>
+
+__BEGIN_DECLS
+
+extern int sysmips __P ((__const int cmd, __const int arg1,
+			 __const int arg2, __const int arg3));
+
+__END_DECLS
+
+#endif /* sys/sysmips.h */
diff --git a/sysdeps/unix/sysv/linux/mips/syscalls.list b/sysdeps/unix/sysv/linux/mips/syscalls.list
new file mode 100644
index 0000000000..6dd9cd81c5
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/syscalls.list
@@ -0,0 +1,46 @@
+# File name	Caller	Syscall name	# args	Strong name	Weak names
+
+#
+# Calls for compatibility with existing MIPS OS implementations and
+# compilers.
+#
+cachectl	-	cachectl	3	__cachectl	cachectl
+cacheflush	-	cacheflush	3	_flush_cache	cacheflush
+sysmips		-	sysmips		4	__sysmips	sysmips
+
+# override select.S in parent directory:
+select		-	select		5	__select	select
+sigsuspend	-	sigsuspend	1	__sigsuspend	sigsuspend
+
+#
+# Socket functions; Linux/MIPS doesn't use the socketcall(2) wrapper;
+# it's provided for compatibility, though.
+#
+accept		-	accept		3	__accept	accept
+bind		-	bind		3	__bind		bind
+connect		-	connect		3	__connect	connect
+getpeername	-	getpeername	3	__getpeername	getpeername
+getsockname	-	getsockname	3	__getsockname	getsockname
+getsockopt	-	getsockopt	5	__getsockopt	getsockopt
+listen		-	listen		2	__listen	listen
+recv		-	recv		4	__recv		recv
+recvfrom	-	recvfrom	6	__recvfrom	recvfrom
+recvmsg		-	recvmsg		3	__recvmsg	recvmsg
+send		-	send		4	__send		send
+sendmsg		-	sendmsg		3	__sendmsg	sendmsg
+sendto		-	sendto		6	__sendto	sendto
+setsockopt	-	setsockopt	5	__setsockopt	setsockopt
+shutdown	-	shutdown	2	__shutdown	shutdown
+socket		-	socket		3	__socket	socket
+socketpair	-	socketpair	4	__socketpair	socketpair
+
+#
+# There are defined locally because the caller is also defined in this dir.
+#
+s_llseek	llseek	_llseek		5	__sys_llseek
+s_sigaction	sigaction sigaction	3	__syscall_sigaction
+s_ustat		ustat	ustat		2	__syscall_ustat
+sys_mknod	xmknod	mknod		3	__syscall_mknod
+sys_fstat	fxstat	fstat		2	__syscall_fstat
+sys_lstat	lxstat	lstat		2	__syscall_lstat
+sys_stat	xstat	stat		2	__syscall_stat
diff --git a/sysdeps/unix/sysv/linux/mips/ustat.c b/sysdeps/unix/sysv/linux/mips/ustat.c
new file mode 100644
index 0000000000..447ab2947e
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/ustat.c
@@ -0,0 +1,35 @@
+/* Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 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 <sys/ustat.h>
+#include <sys/sysmacros.h>
+
+
+extern int __syscall_ustat (unsigned long dev, struct ustat *ubuf);
+
+int
+ustat (dev_t dev, struct ustat *ubuf)
+{
+  unsigned long k_dev;
+
+  /* We must convert the value to dev_t type used by the kernel.  */
+  k_dev = ((major (dev) & 0xff) << 8) | (minor (dev) & 0xff);
+
+  return __syscall_ustat (k_dev, ubuf);
+}
diff --git a/sysdeps/unix/sysv/linux/mips/xmknod.c b/sysdeps/unix/sysv/linux/mips/xmknod.c
new file mode 100644
index 0000000000..c7ff64fecb
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/xmknod.c
@@ -0,0 +1,47 @@
+/* xmknod call using old-style Unix mknod system call.
+   Copyright (C) 1991, 1993, 1995, 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 <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/sysmacros.h>
+
+extern int __syscall_mknod (const char *, unsigned long, unsigned int);
+
+/* Create a device file named PATH, with permission and special bits MODE
+   and device number DEV (which can be constructed from major and minor
+   device numbers with the `makedev' macro above).  */
+int
+__xmknod (int vers, const char *path, mode_t mode, dev_t *dev)
+{
+  unsigned long k_dev;
+
+  if (vers != _MKNOD_VER)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  /* We must convert the value to dev_t type used by the kernel.  */
+  k_dev = ((major (*dev) & 0xff) << 8) | (minor (*dev) & 0xff);
+
+  return __syscall_mknod (path, mode, k_dev);
+}
+
+weak_alias (__xmknod, _xmknod)
diff --git a/sysdeps/unix/sysv/linux/mips/xstat.c b/sysdeps/unix/sysv/linux/mips/xstat.c
new file mode 100644
index 0000000000..9f7eb58e0a
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/xstat.c
@@ -0,0 +1,80 @@
+/* xstat using old-style Unix stat system call.
+   Copyright (C) 1991, 1995, 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 <errno.h>
+#include <stddef.h>
+#include <sys/stat.h>
+
+#include <kernel_stat.h>
+
+extern int __syscall_stat (const char *, struct kernel_stat *);
+
+/* Get information about the file NAME in BUF.  */
+int
+__xstat (int vers, const char *name, struct stat *buf)
+{
+  struct kernel_stat kbuf;
+  int result;
+
+  switch (vers)
+    {
+    case _STAT_VER_LINUX_OLD:
+      /* Nothing to do.  The struct is in the form the kernel expects
+	 it to be.  */
+      result = __syscall_stat (name, (struct kernel_stat *) buf);
+      break;
+
+    case _STAT_VER_LINUX:
+      /* Do the system call.  */
+      result = __syscall_stat (name, &kbuf);
+
+      /* Convert to current kernel version of `struct stat'.  */
+      buf->st_dev = kbuf.st_dev;
+      buf->st_pad1[0]  = 0; buf->st_pad1[1]  = 0; buf->st_pad1[2]  = 0;
+      buf->st_ino = kbuf.st_ino;
+      buf->st_mode = kbuf.st_mode;
+      buf->st_nlink = kbuf.st_nlink;
+      buf->st_uid = kbuf.st_uid;
+      buf->st_gid = kbuf.st_gid;
+      buf->st_rdev = kbuf.st_rdev;
+      buf->st_pad2[0] = 0; buf->st_pad2[1] = 0;
+      buf->st_pad3 = 0;
+      buf->st_size = kbuf.st_size;
+      buf->st_blksize = kbuf.st_blksize;
+      buf->st_blocks = kbuf.st_blocks;
+
+      buf->st_atime = kbuf.st_atime; buf->__reserved0 = 0;
+      buf->st_mtime = kbuf.st_mtime; buf->__reserved1 = 0;
+      buf->st_ctime = kbuf.st_ctime; buf->__reserved2 = 0;
+
+      buf->st_pad4[0] = 0; buf->st_pad4[1] = 0;
+      buf->st_pad4[2] = 0; buf->st_pad4[3] = 0;
+      buf->st_pad4[4] = 0; buf->st_pad4[5] = 0;
+      buf->st_pad4[6] = 0; buf->st_pad4[7] = 0;
+      break;
+
+    default:
+      __set_errno (EINVAL);
+      result = -1;
+      break;
+    }
+
+  return result;
+}
+weak_alias (__xstat, _xstat)
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index f11370d6cb..a3b0eef691 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -67,7 +67,8 @@ sys_readv	readv	readv		3	__syscall_readv
 sys_stat	xstat	stat		2	__syscall_stat
 sys_writev	writev	writev		3	__syscall_writev
 sysinfo		EXTRA	sysinfo		1	sysinfo
-swapon		-	swapon		2	swapon
+swapon		-	swapon		2	__swapon	swapon
+swapoff		-	swapoff		1	__swapoff	swapoff
 umount		EXTRA	umount		1	__umount	umount
 uselib		EXTRA	uselib		1	uselib
 wait4		-	wait4		4	__wait4		wait4
diff --git a/time/Makefile b/time/Makefile
index 5b20e1d071..123ba2d08a 100644
--- a/time/Makefile
+++ b/time/Makefile
@@ -32,7 +32,7 @@ routines	:= offtime asctime clock ctime ctime_r difftime	\
 		   tzfile gettimeofday settimeofday adjtime	\
 		   getitimer setitimer				\
 		   stime dysize timegm ftime			\
-		   strptime
+		   strptime getdate
 
 others	:= ap zdump zic
 tests	:= test_time clocktest test-tz
diff --git a/time/getdate.c b/time/getdate.c
new file mode 100644
index 0000000000..a3153a9591
--- /dev/null
+++ b/time/getdate.c
@@ -0,0 +1,247 @@
+/* Convert a string representation of time to a time value.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Mark Kettenis <kettenis@phys.uva.nl>, 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 <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <sys/stat.h>
+
+
+/* Prototypes for local functions.  */
+static int first_wday (int year, int mon, int wday);
+static int check_mday (int year, int mon, int mday);
+
+
+/* Set to one of the following values to indicate an error.
+     1  the DATEMSK environment variable is null or undefined,
+     2  the template file cannot be opened for reading,
+     3  failed to get file status information,
+     4  the template file is not a regular file,
+     5  an error is encountered while reading the template file,
+     6  memory allication failed (not enough memory available),
+     7  there is no line in the template that matches the input,
+     8  invalid input specification Example: February 31 or a time is
+        specified that can not be represented in a time_t (representing
+	the time in seconds since 00:00:00 UTC, January 1, 1970) */
+int getdate_err = 0;
+
+
+/* Returns the first weekday WDAY of month MON in the year YEAR.  */
+static int
+first_wday (int year, int mon, int wday)
+{
+  struct tm tm;
+
+  if (wday == INT_MIN)
+    return 1;
+
+  memset (&tm, 0, sizeof (struct tm));
+  tm.tm_year = year;
+  tm.tm_mon = mon;
+  tm.tm_mday = 1;
+  mktime (&tm);
+
+  return (1 + (wday - tm.tm_wday + 7) % 7);
+}
+
+
+/* Returns 1 if MDAY is a valid day of the month in month MON of year
+   YEAR, and 0 if it is not.  */
+static int
+check_mday (int year, int mon, int mday)
+{
+  switch (mon)
+    {
+    case 1:
+    case 3:
+    case 5:
+    case 7:
+    case 8:
+    case 10:
+    case 12:
+      if (mday >= 1 && mday <= 31)
+	return 1;
+      break;
+    case 4:
+    case 6:
+    case 9:
+    case 11:
+      if (mday >= 1 && mday <= 30)
+	return 1;
+      break;
+    case 2:
+      if (mday >= 1 && mday < (__isleap (year) ? 29 : 28))
+	return 1;
+      break;
+    }
+
+  return 0;
+}
+
+
+int
+__getdate_r (const char *string, struct tm *tp)
+{
+  FILE *fp;
+  char *line;
+  size_t len;
+  char *datemsk;
+  char *result = NULL;
+  time_t timer;
+  struct tm tm;
+  struct stat st;
+  int mday_ok = 0;
+
+  datemsk = getenv ("DATEMSK");
+  if (datemsk == NULL || *datemsk == '\0')
+    return 1;
+
+  if (stat (datemsk, &st) < 0)
+    return 3;
+
+  if (!S_ISREG (st.st_mode))
+    return 4;
+
+  /* Open the template file.  */
+  fp = fopen (datemsk, "r");
+  if (fp == NULL)
+    return 2;
+
+  line = NULL;
+  len = 0;
+  do
+    {
+      ssize_t n;
+
+      n = __getline (&line, &len, fp);
+      if (n < 0)
+	break;
+      if (line[n - 1] == '\n')
+	line[n - 1] = '\0';
+
+      /* Do the conversion.  */
+      tp->tm_year = tp->tm_mon = tp->tm_mday = tp->tm_wday = INT_MIN;
+      tp->tm_hour = tp->tm_sec = tp->tm_min = INT_MIN;
+      result = strptime (string, line, tp);
+      if (result && *result == '\0')
+	break;
+    }
+  while (!feof (fp));
+
+  /* Free the buffer.  */
+  free (line);
+
+  /* Check for errors. */
+  if (ferror (fp))
+    {
+      fclose (fp);
+      return 5;
+    }
+
+  /* Close template file.  */
+  fclose (fp);
+
+  if (result == NULL)
+    return 7;
+
+  /* Get current time.  */
+  time (&timer);
+  __localtime_r (&timer, &tm);
+
+  /* If only the weekday is given, today is assumed if the given day
+     is equal to the current day and next week if it is less.  */
+  if (tp->tm_wday >= 0 && tp->tm_wday <= 6 && tp->tm_year == INT_MIN
+      && tp->tm_mon == INT_MIN && tp->tm_mday == INT_MIN)
+    {
+      tp->tm_year = tm.tm_year;
+      tp->tm_mon = tm.tm_mon;
+      tp->tm_mday = tm.tm_mday + (tp->tm_wday - tm.tm_wday + 7) % 7;
+      mday_ok = 1;
+    }
+
+  /* If only the month is given, the current month is assumed if the
+     given month is equal to the current month and next year if it is
+     less and no year is given (the first day of month is assumed if
+     no day is given.  */
+  if (tp->tm_mon >= 0 && tp->tm_mon <= 11 && tp->tm_mday == INT_MIN)
+    {
+      if (tp->tm_year == INT_MIN)
+	tp->tm_year = tm.tm_year + (((tp->tm_mon - tm.tm_mon) < 0) ? 1 : 0);
+      tp->tm_mday = first_wday (tp->tm_year, tp->tm_mon, tp->tm_wday);
+      mday_ok = 1;
+    }
+
+  /* If no hour, minute and second are given the current hour, minute
+     and second are assumed.  */
+  if (tp->tm_hour == INT_MIN && tp->tm_min == INT_MIN && tp->tm_sec == INT_MIN)
+    {
+      tp->tm_hour = tm.tm_hour;
+      tp->tm_min = tm.tm_min;
+      tp->tm_sec = tm.tm_sec;
+    }
+
+  /* If no date is given, today is assumed if the given hour is
+     greater than the current hour and tomorrow is assumed if
+     it is less.  */
+  if (tp->tm_hour >= 0 && tp->tm_hour <= 23
+      && tp->tm_year == INT_MIN && tp->tm_mon == INT_MIN
+      && tp->tm_mday == INT_MIN && tp->tm_wday == INT_MIN)
+    {
+      tp->tm_year = tm.tm_year;
+      tp->tm_mon = tm.tm_mon;
+      tp->tm_mday = tm.tm_mday + ((tp->tm_hour - tm.tm_hour) < 0 ? 1 : 0);
+      mday_ok = 1;
+    }
+
+  /* Fill in the gaps.  */
+  if (tp->tm_year == INT_MIN)
+    tp->tm_year = tm.tm_year;
+  if (tp->tm_hour == INT_MIN)
+    tp->tm_hour = 0;
+  if (tp->tm_min == INT_MIN)
+    tp->tm_min = 0;
+  if (tp->tm_sec == INT_MIN)
+    tp->tm_sec = 0;
+
+  /* Check if the day of month is within range, and if the time can be
+     represented in a time_t.  We make use of the fact that the mktime
+     call normalizes the struct tm.  */
+  if ((!mday_ok && !check_mday (tp->tm_year, tp->tm_mon, tp->tm_mday))
+      || mktime (tp) == (time_t) -1)
+    return 8;
+
+  return 0;
+}
+#ifdef weak_alias
+weak_alias (__getdate_r, getdate_r)
+#endif
+
+
+struct tm *
+getdate (const char *string)
+{
+  /* Buffer returned by getdate.  */
+  static struct tm tmbuf;
+  int errval = __getdate_r (string, &tmbuf);
+
+  return errval == 0 ? &tmbuf : NULL;
+}
diff --git a/time/time.h b/time/time.h
index ce9b9755b1..d062ba1cc0 100644
--- a/time/time.h
+++ b/time/time.h
@@ -275,6 +275,38 @@ extern int nanosleep __P ((__const struct timespec *__requested_time,
 #endif
 
 
+#ifdef __USE_XOPEN_EXTENDED
+/* Set to one of the following values to indicate an error.
+     1  the DATEMSK environment variable is null or undefined,
+     2  the template file cannot be opened for reading,
+     3  failed to get file status information,
+     4  the template file is not a regular file,
+     5  an error is encountered while reading the template file,
+     6  memory allication failed (not enough memory available),
+     7  there is no line in the template that matches the input,
+     8  invalid input specification Example: February 31 or a time is
+        specified that can not be represented in a time_t (representing
+	the time in seconds since 00:00:00 UTC, January 1, 1970) */
+extern int getdate_err;
+
+/* Parse the given string as a date specification and return a value
+   representing the value.  The templates from the file identified by
+   the environment variable DATEMSK are used.  In case of an error
+   `getdate_err' is set.  */
+extern struct tm *getdate __P ((__const char *__string));
+#endif
+
+#ifdef __USE_GNU
+/* Since `getdate' is not reentrant because of the use of `getdate_err'
+   and the static buffer to return the result in, we provide a thread-safe
+   variant.  The functionality is the same.  The result is returned in
+   the buffer pointed to by RESBUFP and in case of an error the return
+   value is != 0 with the same values as given above for `getdate_err'.  */
+extern int __getdate_r __P ((__const char *__string, struct tm *__resbufp));
+extern int getdate_r __P ((__const char *__string, struct tm *__resbufp));
+#endif
+
+
 __END_DECLS
 
 #endif /* <time.h> included.  */