about summary refs log tree commit diff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-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
65 files changed, 3991 insertions, 409 deletions
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