diff --git a/libc/arch-arm/include/machine/signal.h b/libc/arch-arm/include/machine/signal.h
deleted file mode 100644
index ead980c..0000000
--- a/libc/arch-arm/include/machine/signal.h
+++ /dev/null
@@ -1,79 +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_ARM_MACHINE_SIGNAL_H_
-#define _ARCH_ARM_MACHINE_SIGNAL_H_
-
-#include <stddef.h>
-#include <sys/cdefs.h>
-#include <sys/types.h>
-
-__BEGIN_DECLS
-
-/* Include the kernel-specific definitions */
-#include <asm/posix_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>
-
-/* Despite the fact that <linux/types.h> defines sigset_t as a 32-bit type,
- * the ARM kernel *really* expects a 64-bit signal set type during syscalls.
- *
- * The reason for this is that the kernel headers have a different definition
- * for sigset_t depending on the value of the __KERNEL__ macro. When we cleanup
- * the headers, before placing them under bionic/libc/kernel/, this macro is
- * optimized as undefined, to the 32-bit definition stays.
- *
- * Ironically, the reason the kernel headers do this is to accomodate old
- * versions of GLibc. More recent versions provide complete wrappers for the
- * corresponding kernel types so don't have this problem (their sigset_t can
- * always hold up to 1024 signals, independent of the platform).
- */
-typedef unsigned long __kernel_sigset_t[2];
-
-/* _NSIG is used by the SIGRTMAX definition under <asm/signal.h>, however
- * its definition is part of a #if __KERNEL__ .. #endif block in the original
- * kernel headers and is thus not part of our cleaned-up versions.
- *
- * Looking at the current kernel sources, it is defined as 64 for ARM.
- */
-#ifndef _NSIG
-#  define _NSIG  64
-#endif
-
-
-__END_DECLS
-
-#endif /* _ARCH_ARM_MACHINE_SIGNAL_H_ */
diff --git a/libc/arch-arm/include/machine/ucontext.h b/libc/arch-arm/include/machine/ucontext.h
deleted file mode 100644
index 2d2884c..0000000
--- a/libc/arch-arm/include/machine/ucontext.h
+++ /dev/null
@@ -1,170 +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_ARM_SYS_UCONTEXT_H_
-#define _ARCH_ARM_SYS_UCONTEXT_H_
-
-#include <stdint.h>
-#include <sys/cdefs.h>
-#include <sys/types.h>
-#include <machine/signal.h>
-
-__BEGIN_DECLS
-
-/* Technical note:
- *
- * There are similarities and differences in the way GLibc and the ARM Linux
- * kernel declare ucontext_t. Here are the details:
- *
- *  - Both declare mcontext_t as a typedef for 'struct sigcontext'. This goes
- *    against the GLibc convention of providing a custom mcontext_t declaration
- *    for all other platforms.
- *
- *    One notable difference on ARM is that to access register values, one
- *    has to use named fields like "arm_r0", "arm_sp", "arm_pc".
- *
- *    On other platforms, GLibc mcontext_t provides a gregs[] array of
- *    32-bit values to access the value of core registers instead. Plus
- *    some helper enums + macros to index it (e.g. REG_EBP on i386).
- *
- *    Note that some client code, when ported to Android, provide custom
- *    mcontext_t declaration that use the gregs[] convention. For the sake
- *    of portability, this header follows the ARM GLibc convention of using
- *    explicit field names. This means that such client code will need to be
- *    adapted. Possibly by checking against __BIONIC_HAVE_UCONTEXT_T defined
- *    in <sys/cdefs.h>
- *
- * - On ARM, the floating-point state is not stored in mcontext_t.
- *   Instead, it is stored in the ucontext_t structure, in the '_uc_regspace'
- *   field at the end, but both the Kernel and GLibc use a different
- *   convention for exact layout:
- *
- *   * The state saved by the kernel (which would be accessible from the
- *     ucontext_t received from a SA_SIGINGO handler) has a layout that
- *     depends on the exact kernel configuration. For more details see
- *     the "struct aux_sigframe" declaration in the kernel's ucontext.h
- *     which defines the format. It is *not* exposed by this header.
- *
- *   * The FP state saved by GLibc's getcontext()/setcontext() functions
- *     uses a different custom storage scheme that depends on the reported
- *     ELF HWCAPs. If VFP is enabled, only registers d8-d15 are saved to
- *     the storage space, in addition to some status/exception registers.
- *     This is not surprising because d0-d7 are callee-saved in the
- *     ARM EABI.
- *
- *     It also looks like this implementation cannot handle VFPv3-D32/NEON
- *     by saving/restoring the state of d16-d31 available on these CPUs.
- *
- *   Note that client code that needs to access the FP state typically
- *   does so through ptrace() using the special PTRACE_GETVFPREGS op.
- *   This is what gdbserver and debuggerd use to extract that information.
- *
- *   In conclusion, there is no reliable way to extract the FP state from
- *   a ucontext_t on ARM.
- *
- * - The ARM GLibc ucontext.h defines a 'struct _libc_fpstate' structure
- *   that is never used by GLibc source code, and which doesn't seem to
- *   match either the kernel of getcontext/setcontext() layout.
- *
- *   It was introduced by the following patch, reason is unclear but may be
- *   related to the GLibc test suite:
- *
- *      http://www.cygwin.com/ml/libc-ports/2011-12/msg00032.html
- *
- *   This header does *not* define this type, or fpregset_t either.
- *
- *  Reference source files:
- *    $KERNEL/arch/arm/include/asm/fpstate.h
- *    $KERNEL/arch/arm/include/asm/sigcontext.h
- *    $KERNEL/arch/arm/include/asm/ucontext.h
- *    $KERNEL/arch/arm/include/asm/user.h
- *
- *    $GLIBC/ports/sysdeps/unix/sysv/linux/arm/getcontext.S
- *    $GLIBC/ports/sysdeps/unix/sysv/linux/arm/setcontext.S
- *    $GLIBC/ports/sysdeps/unix/sysv/linux/arm/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;
-  /* The kernel reserves 1024 bits for the signal mask, even if it only
-   * uses the first 64 ones. */
-  int _unused[32 - (sizeof(__kernel_sigset_t) / sizeof(int))];
-  /* Used to store coprocessor + VFP register state on ARMv7-A */
-  unsigned long              uc_regspace[128] __attribute__((__aligned__(8)));
-} __kernel_ucontext_t;
-
-/* Second, the GLibc-compatible version */
-
-/* On ARM, GLibc mcontext_t is a simple typedef to 'struct sigcontext',
- * just like the kernel does. This means that to access register values,
- * you will need to use the specific named field (e.g. 'arm_r0', 'arm_pc').
- *
- * Note that on all other platforms, GLibc uses a gregs[] array instead.
- * Follow the GLibc logic, or lack of, for ease of portability.
- *
- * Curiously, GLibc also defines enums and macros for REG_R0 .. REG_R15,
- * plus the gregset_t type, NREGS macro, fpregset_t types, etc.. while they
- * are never used by any code. They are *not* declared here.
- *
- * This also means there is no 'official' or 'documented' way to access
- * the state of the FP registers (while the GLibc implementation does
- * save/restore them in getcontext()/swapcontext()).
- */
-typedef struct sigcontext mcontext_t;
-
-/* Technical note:
- *
- * GLibc defines an ARM-specific 'struct _libc_fpstate' that seems to match
- * the FPU state stored in uc_regspace[] below. However, its declaration does
- * not match either the kernel declaration, or the actual GLibc
- * implementation of *context() functions.
- *
- * It is suspected that this is a remnant of the obsolete VFPv1 era that
- * was never updated. As such, client code shall *not* rely on this and
- * there is no definition for it provided here.
- */
-
-typedef struct ucontext {
-  uint32_t          uc_flags;
-  struct ucontext*  uc_link;
-  stack_t           uc_stack;
-  mcontext_t        uc_mcontext;
-  /* Only expose the 32 non-realtime signals in Bionic's 32-bit sigset_t
-   * The _unused field is required padding from the kernel. */
-  sigset_t          uc_sigmask;
-  int               _unused[32 - sizeof(sigset_t)/sizeof(int)];
-  uint32_t          uc_regspace[128] __attribute__((__aligned__(8)));
-} ucontext_t;
-
-__END_DECLS
-
-#endif /* _ARCH_ARM_SYS_UCONTEXT_H_ */
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_ */
diff --git a/libc/arch-x86/include/machine/signal.h b/libc/arch-x86/include/machine/signal.h
deleted file mode 100644
index ba3fe37..0000000
--- a/libc/arch-x86/include/machine/signal.h
+++ /dev/null
@@ -1,67 +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_X86_MACHINE_SIGNAL_H_
-#define _ARCH_X86_MACHINE_SIGNAL_H_
-
-#include <stddef.h>
-#include <sys/types.h>
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-
-#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 x86 kernel also uses 64-bit signal masks while defining sigset-t
- * as a 32-bit type.
- */
-typedef unsigned long __kernel_sigset_t[2];
-
-/* _NSIG is used by the SIGRTMAX definition under <asm/signal.h>, however
- * its definition is part of a #if __KERNEL__ .. #endif block in the original
- * kernel headers and is thus not part of our cleaned-up versions.
- *
- * Looking at the current kernel sources, it is defined as 64 for x86.
- */
-#ifndef _NSIG
-#  define _NSIG  64
-#endif
-
-__END_DECLS
-
-#endif /* _ARCH_X86_MACHINE_SIGNAL_H_ */
diff --git a/libc/arch-x86/include/machine/ucontext.h b/libc/arch-x86/include/machine/ucontext.h
deleted file mode 100644
index da226c9..0000000
--- a/libc/arch-x86/include/machine/ucontext.h
+++ /dev/null
@@ -1,184 +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_X86_SYS_UCONTEXT_H_
-#define _ARCH_X86_SYS_UCONTEXT_H_
-
-#include <signal.h>
-#include <stdint.h>
-
-__BEGIN_DECLS
-
-/* Technical note:
- *
- * On x86, there are differences in the way GLibc and the Linux kernel declare
- * ucontext_t. Here are the details (they differ from ARM significantly):
- *
- *  - 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
- *    conventions.
- *
- *    The biggest difference is that 'struct sigcontext' requires named fields
- *    like "eax", or "ebp" to access the state of register values, while GLibc
- *    provides an array (gregs[]) of 32-bit values, that can be accessed
- *    through indexing, plus some enum/macros like REG_EAX or REG_ESP to get
- *    to specific register values.
- *
- *    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>
- *
- *  - The floating-point state is not stored in the mcontext_t. For historical
- *    reasons, the 'fpregs' field of 'mcontext_t' is really a pointer to a
- *    different block of memory. More specifically:
- *
- *    * When passed to a signal handler, the pointer points to some memory
- *      on the signal stack, populated by the kernel before calling the
- *      handler in user space.
- *
- *    * In GLibc's getcontext()/setcontext() implementation, the pointer will
- *      point to the ucontext_t structure (more specifically the __fpregs_mem
- *      field after uc_sigmask).
- *
- *    * Note that in both cases, the pointer can be NULL if no floating-point
- *      operation has been performed on the current thread yet.
- *
- * - The 'struct _libc_fpstate' structure declared by GLibc corresponds to
- *   both the FP state managed by getcontext()/setcontext(), and the start
- *   of the FP state stored by the kernel and passed to a signal handler.
- *
- *   This matches the data saved by the FNSTENV IA-32 instruction.
- *
- *   IMPORTANT: GLibc does not save the MMX/SSE state, i.e. it does not use
- *              FXSAVE / FXRSTOR instructions in *context() functions.
- *
- *   It is used by client code to retrieve the state of the FPU registers
- *   (e.g. Google Breakpad does that).
- *
- *  Reference source files:
- *    $KERNEL/arch/x86/include/asm/sigcontext_32.h
- *    $KERNEL/arch/x86/include/asm/sigcontext.h
- *    $KERNEL/arch/x86/include/asm/ucontext.h
- *
- *    $GLIBC/sysdeps/unix/sysv/linux/i386/getcontext.S
- *    $GLIBC/sysdeps/unix/sysv/linux/i386/setcontext.S
- *    $GLIBC/sysdeps/unix/sysv/linux/x86/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 */
-
-#define NGREG   19
-typedef int     greg_t;
-typedef greg_t  gregset_t[NGREG];
-
-enum {
-  REG_GS = 0, REG_FS, REG_ES, REG_DS,
-  REG_EDI, REG_ESI, REG_EBP, REG_ESP,
-  REG_EBX, REG_EDX, REG_ECX, REG_EAX,
-  REG_TRAPNO, REG_ERR, REG_EIP, REG_CS,
-  REG_EFL, REG_UESP, REG_SS
-};
-
-/* GLibc defines both macros and enums. Probably to let client do
- *  #ifdef REG_XXXX ... #endif. Do the same here. */
-#define REG_GS     REG_GS
-#define REG_FS     REG_FS
-#define REG_ES     REG_ES
-#define REG_DS     REG_DS
-
-#define REG_EDI    REG_EDI
-#define REG_ESI    REG_ESI
-#define REG_EBP    REG_EBP
-#define REG_ESP    REG_ESP
-
-#define REG_EBX    REG_EBX
-#define REG_EDX    REG_EDX
-#define REG_ECX    REG_ECX
-#define REG_EAX    REG_EAX
-
-#define REG_TRAPNO REG_TRAPNO
-#define REG_ERR    REG_ERR
-#define REG_EIP    REG_EIP
-#define REG_CS     REG_CS
-#define REG_EFL    REG_EFL
-#define REG_UESP   REG_UESP
-#define REG_SS     REG_SS
-
-/* 80-bit floating-point register */
-struct _libc_fpreg {
-  unsigned short significand[4];
-  unsigned short exponent;
-};
-
-/* Simple floating-point state, see FNSTENV instruction */
-struct _libc_fpstate {
-  unsigned long cw;
-  unsigned long sw;
-  unsigned long tag;
-  unsigned long ipoff;
-  unsigned long cssel;
-  unsigned long dataoff;
-  unsigned long datasel;
-  struct _libc_fpreg _st[8];
-  unsigned long status;
-};
-
-typedef struct _libc_fpstate* fpregset_t;
-
-typedef struct {
-  gregset_t   gregs;
-  fpregset_t  fpregs;   /* Really a pointer to _libc_fpstate! */
-} mcontext_t;
-
-typedef struct ucontext {
-  uint32_t          uc_flags;
-  struct ucontext*  uc_link;
-  stack_t           uc_stack;
-  mcontext_t        uc_mcontext;
-  /* Only expose the 32 non-realtime 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)];
-  /* Storage area for *context() functions only - private, don't use. */
-  struct _libc_fpstate __fpregs_mem;
-  /* Growth opportunity - in case we want to save MMX/SSE stuff there too */
-  int _unused2[128 - sizeof(struct _libc_fpstate)/sizeof(int)];
-} ucontext_t;
-
-__END_DECLS
-
-#endif /* _ARCH_X86_SYS_UCONTEXT_H_ */
diff --git a/libc/bionic/pthread.c b/libc/bionic/pthread.c
index a6c1908..da3a551 100644
--- a/libc/bionic/pthread.c
+++ b/libc/bionic/pthread.c
@@ -2106,8 +2106,8 @@
  * the C library ABI, so perform a little runtime translation here.
  */
 typedef union {
-    sigset_t           bionic;
-    __kernel_sigset_t  kernel;
+    sigset_t   bionic;
+    uint32_t   kernel[2];
 } kernel_sigset_t;
 
 /* this is a private syscall stub */
@@ -2124,8 +2124,8 @@
     kernel_sigset_t  in_set, *in_set_ptr;
     kernel_sigset_t  out_set;
 
-    memset(&in_set.kernel, 0, sizeof(in_set.kernel));
-    memset(&out_set.kernel, 0, sizeof(out_set.kernel));
+    in_set.kernel[0] = in_set.kernel[1] = 0;
+    out_set.kernel[0] = out_set.kernel[1] = 0;
 
     /* 'in_set_ptr' is the second parameter to __rt_sigprocmask. It must be NULL
      * if 'set' is NULL to ensure correct semantics (which in this case would
diff --git a/libc/include/signal.h b/libc/include/signal.h
index bcb58c2..6432c18 100644
--- a/libc/include/signal.h
+++ b/libc/include/signal.h
@@ -29,62 +29,30 @@
 #define _SIGNAL_H_
 
 #include <sys/cdefs.h>
+#include <limits.h>		/* For LONG_BIT */
+#include <string.h>		/* For memset() */
 #include <sys/types.h>
-#include <machine/signal.h>
-#include <machine/ucontext.h>
+#include <asm/signal.h>
 
-#include <limits.h>             /* For LONG_BIT */
-#include <string.h>             /* For memset() */
+#define __ARCH_SI_UID_T __kernel_uid32_t
+#include <asm/siginfo.h>
+#undef __ARCH_SI_UID_T
 
 __BEGIN_DECLS
 
-/* Previous versions of <signal.h> didn't define 'struct sigcontext'. This
- * has led client code to redefine the structure, sometimes in a custom and
- * incompatible way.
- *
- * The __BIONIC_HAVE_STRUCT_SIGCONTEXT macro is defined in <sys/cdefs.h>
- * to indicate that <signal.h> does indeed define the structure. For
- * maximum source compatibility, client code should follow these guidelines:
- *
- *  - If client code is guaranteed to build against a recent NDK/platform
- *    version, just include <signal.h> as usual, and use the
- *    'struct sigcontext'.
- *
- *  - If client code wants to build against older NDK/platform versions,
- *    and only uses 'struct sigcontext' without accessing _any_
- *    of its fields, just always include <asm/sigcontext.h> on Android
- *    to ensure maximum portability (i.e. to old platform/NDK releases).
- *    As in:
- *
- *        #include <signal.h>
- *        #ifdef __BIONIC__
- *        #include <asm/sigcontext.h>
- *        #endif
- *
- *  - Otherwise, if the client has a custom sigcontext definition and wants to
- *    keep it to minimize source changes, use a macro trick as below to avoid
- *    naming conflicts:
- *
- *        #include <signal.h>
- *        #ifdef __BIONIC__
- *        #  include <asm/sigcontext.h>
- *        #  ifdef __BIONIC_HAVE_STRUCT_SIGCONTEXT
- *        #    undef sigcontext
- *        #    define sigcontext  my_custom_sigcontext
- *        #  endif
- *        #endif
- */
-
-/* Similarly, previous versions of the C library didn't define ucontext_t
- * and mcontext_t in <signal.h>, or <sys/ucontext.h>. Client code can check
- * against the macro __BIONIC_HAVE_UCONTEXT_T to determine if it does.
- *
- * Beware, that does _not_ mean that <ucontext.h> and related functions are
- * available.
- */
-
 typedef int sig_atomic_t;
 
+/* _NSIG is used by the SIGRTMAX definition under <asm/signal.h>, however
+ * its definition is part of a #if __KERNEL__ .. #endif block in the original
+ * kernel headers and is thus not part of our cleaned-up versions.
+ *
+ * Looking at the current kernel sources, it is defined as 64 for all
+ * architectures except for the 'mips' one which set it to 128.
+ */
+#ifndef _NSIG
+#  define _NSIG  64
+#endif
+
 extern const char * const sys_siglist[];
 extern const char * const sys_signame[];
 
diff --git a/libc/include/sys/cdefs.h b/libc/include/sys/cdefs.h
index 6bae25c..ca81cb6 100644
--- a/libc/include/sys/cdefs.h
+++ b/libc/include/sys/cdefs.h
@@ -510,12 +510,4 @@
 #define __BIONIC_FORTIFY_UNKNOWN_SIZE ((size_t) -1)
 #endif
 
-/* Indicates to client code that <signal.h> now defines 'struct sigcontext'
- * properly. See comments in <signal.h> */
-#define __BIONIC_HAVE_STRUCT_SIGCONTEXT  1
-
-/* Indicates to client code that <signal.h> now defines 'ucontext_t' */
-/* NOTE: That does not mean that <ucontext.h> is available! */
-#define __BIONIC_HAVE_UCONTEXT_T  1
-
 #endif /* !_SYS_CDEFS_H_ */
diff --git a/libc/include/sys/ucontext.h b/libc/include/sys/ucontext.h
deleted file mode 100644
index 8c7b3d7..0000000
--- a/libc/include/sys/ucontext.h
+++ /dev/null
@@ -1,43 +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 _SYS_UCONTEXT_H_
-#define _SYS_UCONTEXT_H_
-
-/* While not standard, this header is typically provided by GLibc and the
- * BSD C library to provide for the definition of ucontext_t and mcontext_t,
- * without the declarations of the deprecated *context() functions in
- * <ucontext.h>.
- *
- * Client code that directly includes this file exists. Note that
- * the better, POSIX-compliant, way to get these declarations is to include
- * <signal.h>.
- */
-
-#include <machine/ucontext.h>
-
-#endif /* _SYS_UCONTEXT_H_ */
diff --git a/libc/include/time.h b/libc/include/time.h
index f65ac4e..e280e0a 100644
--- a/libc/include/time.h
+++ b/libc/include/time.h
@@ -30,7 +30,10 @@
 
 #include <sys/cdefs.h>
 #include <sys/time.h>
-#include <machine/signal.h>  /* for struct sigevent */
+
+#define __ARCH_SI_UID_T __kernel_uid32_t
+#include <asm/siginfo.h>
+#undef __ARCH_SI_UID_T
 
 __BEGIN_DECLS
 
