diff --git a/libc/arch-mips/include/machine/setjmp.h b/libc/arch-mips/include/machine/setjmp.h
index 0237002..55ba7be 100644
--- a/libc/arch-mips/include/machine/setjmp.h
+++ b/libc/arch-mips/include/machine/setjmp.h
@@ -1,56 +1,10 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
+/*	$OpenBSD: setjmp.h,v 1.2 2004/08/10 21:10:56 pefo Exp $	*/
 
-#ifndef _ARCH_MIPS_MACHINE_SETJMP_H_
-#define _ARCH_MIPS_MACHINE_SETJMP_H_
+/* Public domain */
 
-#define _JBLEN          157    /* size, in longs, of a jmp_buf */
+#ifndef _MIPS_SETJMP_H_
+#define _MIPS_SETJMP_H_
 
-#define SC_REGMASK      (0*REGSZ)
-#define SC_STATUS       (1*REGSZ)
-#define SC_PC           (2*REGSZ)
-#define SC_REGS         (SC_PC+8)
-#define SC_FPREGS       (SC_REGS+32*8)
-#define SC_ACX          (SC_FPREGS+32*REGSZ_FP)
-#define SC_FPC_CSR      (SC_ACX+1*REGSZ)
-#define SC_FPC_EIR      (SC_ACX+2*REGSZ)
-#define SC_USED_MATH    (SC_ACX+3*REGSZ)
-#define SC_DSP          (SC_ACX+4*REGSZ)
-#define SC_MDHI         (SC_ACX+5*REGSZ)
-#define SC_MDLO         (SC_MDHI+8)
-#define SC_HI1          (SC_MDLO+8)
-#define SC_LO1          (SC_HI1+1*REGSZ)
-#define SC_HI2          (SC_HI1+2*REGSZ)
-#define SC_LO2          (SC_HI1+3*REGSZ)
-#define SC_HI3          (SC_HI1+4*REGSZ)
-#define SC_LO3          (SC_HI1+5*REGSZ)
-/* OpenBSD compatibility */
-#define SC_MASK         SC_REGMASK
-#define SC_FPUSED       SC_USED_MATH
+#define	_JBLEN	157		/* size, in longs, of a jmp_buf */
 
-#endif /* !_ARCH_MIPS_INCLUDE_MACHINE_SETJMP_H_ */
+#endif /* !_MIPS_SETJMP_H_ */
diff --git a/libc/arch-mips/include/machine/signal.h b/libc/arch-mips/include/machine/signal.h
index 6378c61..4efb856 100644
--- a/libc/arch-mips/include/machine/signal.h
+++ b/libc/arch-mips/include/machine/signal.h
@@ -1,58 +1,147 @@
+/*	$OpenBSD: signal.h,v 1.8 2006/01/09 18:18:37 millert Exp $	*/
+
 /*
- * Copyright (C) 2012 The Android Open Source Project
- * All rights reserved.
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Ralph Campbell.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
- *  * Redistributions of source code must retain the above copyright
+ * 1. Redistributions of source code must retain the above copyright
  *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
  *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
+ *
+ *	@(#)signal.h	8.1 (Berkeley) 6/10/93
  */
-#ifndef _ARCH_MIPS_MACHINE_SIGNAL_H_
-#define _ARCH_MIPS_MACHINE_SIGNAL_H_
+
+#ifndef _MIPS_SIGNAL_H_
+#define _MIPS_SIGNAL_H_
 
 #include <sys/cdefs.h>
 
-__BEGIN_DECLS
+#if !defined(__LANGUAGE_ASSEMBLY)
+#include <sys/types.h>
 
-#include <asm/signal.h>
-#include <asm/sigcontext.h>
-
-#ifdef _ASM_GENERIC_SIGINFO_H
-#error "You cannot include <asm/siginfo.h> before <signal.h>!"
-#endif
-#define __ARCH_SI_UID_T __kernel_uid32_t
-#include <asm/siginfo.h>
-#undef __ARCH_SI_UID_T
-
-#include <stdint.h>
-
-/* See comment in arch-arm/include/machine/signal.h.
- * The MIPS kernel also uses 128-bit signal masks while defining sigset-t
- * as a 32-bit type.
+/*
+ * Machine-dependent signal definitions
  */
-typedef unsigned long __kernel_sigset_t[4];
+typedef int sig_atomic_t;
 
-/* Note: Unlike ARM and x86, the MIPS <asm/signal.h> properly defines _NSIG
- * and thus SIGRTMAX. */
+#if __BSD_VISIBLE || __XPG_VISIBLE >= 420
 
-__END_DECLS
+/*
+ * Information pushed on stack when a signal is delivered.
+ * This is used by the kernel to restore state following
+ * execution of the signal handler.  It is also made available
+ * to the handler to allow it to restore state properly if
+ * a non-standard exit is performed.
+ */
 
-#endif /* _ARCH_MIPS_MACHINE_SIGNAL_H_ */
+#if defined(__ANDROID__)
+
+/*
+ * The Linux and OpenBSD sigcontext structures are slightly different
+ * This is the Linux O32 ABI compatible sigcontext
+ */
+
+struct sigcontext {
+	unsigned int sc_regmask;
+	unsigned int sc_status;
+	unsigned long long sc_pc;
+	unsigned long long sc_regs[32];
+	unsigned long long sc_fpregs[32];
+	unsigned int sc_acx;
+	unsigned int sc_fpc_csr;
+	unsigned int sc_fpc_eir;
+	unsigned int sc_used_math;
+	unsigned int sc_dsp;
+	unsigned long long sc_mdhi;
+	unsigned long long sc_mdlo;
+	unsigned long sc_hi1;
+	unsigned long sc_lo1;
+	unsigned long sc_hi2;
+	unsigned long sc_lo2;
+	unsigned long sc_hi3;
+	unsigned long sc_lo3;
+};
+
+#else
+
+struct	sigcontext {
+	long	sc_onstack;	/* sigstack state to restore */
+	long	 sc_mask;	/* signal mask to restore */
+	__register_t sc_pc;	/* pc at time of signal */
+	__register_t sc_regs[32]; /* processor regs 0 to 31 */
+	__register_t mullo;	/* mullo and mulhi registers... */
+	__register_t mulhi;	/* mullo and mulhi registers... */
+	f_register_t sc_fpregs[33]; /* fp regs 0 to 31 and csr */
+	long	sc_fpused;	/* fp has been used */
+	long	sc_fpc_eir;	/* floating point exception instruction reg */
+	long	xxx[8];		/* XXX reserved */
+};
+#endif
+#endif /* __BSD_VISIBLE || __XPG_VISIBLE >= 420 */
+
+#else /* __LANGUAGE_ASSEMBLY */
+
+#ifdef __ANDROID__
+
+#define	SC_REGMASK	(0*REGSZ)
+#define	SC_STATUS	(1*REGSZ)
+#define	SC_PC		(2*REGSZ)
+#define	SC_REGS		(SC_PC+8)
+#define	SC_FPREGS	(SC_REGS+32*8)
+#define	SC_ACX		(SC_FPREGS+32*REGSZ_FP)
+#define	SC_FPC_CSR	(SC_ACX+1*REGSZ)
+#define	SC_FPC_EIR	(SC_ACX+2*REGSZ)
+#define	SC_USED_MATH	(SC_ACX+3*REGSZ)
+#define	SC_DSP		(SC_ACX+4*REGSZ)
+#define	SC_MDHI		(SC_ACX+5*REGSZ)
+#define	SC_MDLO		(SC_MDHI+8)
+#define	SC_HI1		(SC_MDLO+8)
+#define	SC_LO1		(SC_HI1+1*REGSZ)
+#define	SC_HI2		(SC_HI1+2*REGSZ)
+#define	SC_LO2		(SC_HI1+3*REGSZ)
+#define	SC_HI3		(SC_HI1+4*REGSZ)
+#define	SC_LO3		(SC_HI1+5*REGSZ)
+/* OpenBSD compatibility */
+#define	SC_MASK		SC_REGMASK
+#define	SC_FPUSED	SC_USED_MATH
+
+#else
+
+#define SC_ONSTACK	(0 * REGSZ)
+#define	SC_MASK		(1 * REGSZ)
+#define	SC_PC		(2 * REGSZ)
+#define	SC_REGS		(3 * REGSZ)
+#define	SC_MULLO	(35 * REGSZ)
+#define	SC_MULHI	(36 * REGSZ)
+#define	SC_FPREGS	(37 * REGSZ)
+#define	SC_FPUSED	(70 * REGSZ)
+#define	SC_FPC_EIR	(71 * REGSZ)
+
+#endif /* __ANDROID__ */
+
+#endif /* __LANGUAGE_ASSEMBLY */
+
+#endif	/* !_MIPS_SIGNAL_H_ */
diff --git a/libc/arch-mips/include/machine/ucontext.h b/libc/arch-mips/include/machine/ucontext.h
deleted file mode 100644
index df3b64b..0000000
--- a/libc/arch-mips/include/machine/ucontext.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#ifndef _ARCH_MIPS_SYS_UCONTEXT_H_
-#define _ARCH_MIPS_SYS_UCONTEXT_H_
-
-#include <signal.h>
-#include <stdint.h>
-
-__BEGIN_DECLS
-
-/* Technical note:
- *
- * On MIPS, there are differences in the way GLibc and the Linux kernel declare
- * ucontext_t:
- *
- *  - The kernel implements 'uc_mcontext' with a 'struct sigcontext',
- *    while GLibc defines 'mcontext_t' in a binary-compatible way
- *    (same size, same binary layout), but with different field naming/access
- *    convention.
- *
- *    The biggest difference is the naming of the fields. The kernel uses
- *    a 'sc_' prefix (e.g. "sc_gregs[]"), while GLibc does not ("gregs[]").
- *
- *    For maximum portability of existing client code, this header follows
- *    the GLibc convention. Client code, and the C library, should never
- *    try to include <asm/ucontext.h>
- *
- *  Apart from that, all floating point state is stored in uc_mcontext
- *  in the same way, which is much simpler than ARM and x86 schemes for it.
- *  As such, there is no _libc_fpstate.
- *
- *  Reference source files:
- *    $KERNEL/arch/mips/include/asm/sigcontext.h
- *    $KERNEL/arch/mips/include/asm/ucontext.h
- *
- *    $GLIBC/sysdeps/unix/sysv/linux/mips/getcontext.S
- *    $GLIBC/sysdeps/unix/sysv/linux/mips/setcontext.S
- *    $GLIBC/sysdeps/unix/sysv/linux/mips/sys/ucontext.h
- */
-
-/* First, the kernel-compatible version, for reference. */
-typedef struct __kernel_ucontext {
-  unsigned long              uc_flags;
-  struct __kernel_ucontext*  uc_link;
-  stack_t                    uc_stack;
-  struct sigcontext          uc_mcontext;
-  __kernel_sigset_t          uc_sigmask;
-} __kernel_ucontext_t;
-
-/* Second, the GLibc-compatible version */
-
-__extension__ /* Required to build in ANSI C mode */
-typedef unsigned long long greg_t;
-
-#define NGREG   32
-#define NFPREG  32
-
-typedef greg_t  gregset_t[NGREG];
-
-typedef struct fpregset {
-  union {
-    double fp_dregs[NFPREG];
-    struct {
-      float     _fp_fregs;
-      unsigned  _fp_pad;
-    } fp_fregs[NFPREG];
-  } fp_r;
-} fpregset_t;
-
-#ifndef _MIPS_SIM
-#error "_MIPS_SIM should be defined by your Android MIPS toolchain!"
-#endif
-
-#ifndef _OABI32
-#error "_OABI32 should be defined by your Android MIPS toolchain!"
-#endif
-
-#if _MIPS_SIM != _OABI32
-#error "Only _OABI32 is supported on Android MIPS!"
-#endif
-
-typedef struct {
-  unsigned   regmask;
-  unsigned   status;
-  greg_t     pc;
-  gregset_t  gregs;
-  fpregset_t fpregs;
-  unsigned   fp_owned;
-  unsigned   fpc_csr;
-  unsigned   fpc_eir;
-  unsigned   used_math;
-  unsigned   dsp;
-  greg_t     mdhi;
-  greg_t     mdlo;
-  unsigned   hi1;
-  unsigned   lo1;
-  unsigned   hi2;
-  unsigned   lo2;
-  unsigned   hi3;
-  unsigned   lo3;
-} mcontext_t;
-
-typedef struct ucontext {
-  uint32_t          uc_flags;
-  struct ucontext*  uc_link;
-  stack_t           uc_stack;
-  mcontext_t        uc_mcontext;
-  /* Only expose the signals in Bionic's 32-bit sigset_t.
-   * The _unused field is required padding from the kernel. */
-  sigset_t          uc_sigmask;
-  char _unused[sizeof(__kernel_sigset_t) - sizeof(sigset_t)];
-} ucontext_t;
-
-__END_DECLS
-
-#endif /* _ARCH_MIPS_SYS_UCONTEXT_H_ */
