diff --git a/libc/arch-mips/bionic/_setjmp.S b/libc/arch-mips/bionic/_setjmp.S
index 42a5aed..e7083ae 100644
--- a/libc/arch-mips/bionic/_setjmp.S
+++ b/libc/arch-mips/bionic/_setjmp.S
@@ -31,7 +31,7 @@
 
 #include <machine/asm.h>
 #include <machine/regnum.h>
-#include <machine/setjmp.h>
+#include <machine/signal.h>
 
 /*
  * _setjmp, _longjmp (not restoring signal state)
diff --git a/libc/arch-mips/bionic/setjmp.S b/libc/arch-mips/bionic/setjmp.S
index 0b1538c..7c21195 100644
--- a/libc/arch-mips/bionic/setjmp.S
+++ b/libc/arch-mips/bionic/setjmp.S
@@ -31,7 +31,7 @@
 
 #include <machine/asm.h>
 #include <machine/regnum.h>
-#include <machine/setjmp.h>
+#include <machine/signal.h>
 
 /*
  * setjmp, longjmp implementation for libc. this code depends
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_ */
