diff --git a/libc/arch-arm/include/machine/signal.h b/libc/arch-arm/include/machine/signal.h
new file mode 100644
index 0000000..ead980c
--- /dev/null
+++ b/libc/arch-arm/include/machine/signal.h
@@ -0,0 +1,79 @@
+/*
+ * 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
new file mode 100644
index 0000000..2d2884c
--- /dev/null
+++ b/libc/arch-arm/include/machine/ucontext.h
@@ -0,0 +1,170 @@
+/*
+ * 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 e7083ae..42a5aed 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/signal.h>
+#include <machine/setjmp.h>
 
 /*
  * _setjmp, _longjmp (not restoring signal state)
diff --git a/libc/arch-mips/bionic/setjmp.S b/libc/arch-mips/bionic/setjmp.S
index 7c21195..0b1538c 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/signal.h>
+#include <machine/setjmp.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 55ba7be..0237002 100644
--- a/libc/arch-mips/include/machine/setjmp.h
+++ b/libc/arch-mips/include/machine/setjmp.h
@@ -1,10 +1,56 @@
-/*	$OpenBSD: setjmp.h,v 1.2 2004/08/10 21:10:56 pefo Exp $	*/
+/*
+ * 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.
+ */
 
-/* Public domain */
+#ifndef _ARCH_MIPS_MACHINE_SETJMP_H_
+#define _ARCH_MIPS_MACHINE_SETJMP_H_
 
-#ifndef _MIPS_SETJMP_H_
-#define _MIPS_SETJMP_H_
+#define _JBLEN          157    /* size, in longs, of a jmp_buf */
 
-#define	_JBLEN	157		/* size, in longs, of a jmp_buf */
+#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
 
-#endif /* !_MIPS_SETJMP_H_ */
+#endif /* !_ARCH_MIPS_INCLUDE_MACHINE_SETJMP_H_ */
diff --git a/libc/arch-mips/include/machine/signal.h b/libc/arch-mips/include/machine/signal.h
index 4efb856..6378c61 100644
--- a/libc/arch-mips/include/machine/signal.h
+++ b/libc/arch-mips/include/machine/signal.h
@@ -1,147 +1,58 @@
-/*	$OpenBSD: signal.h,v 1.8 2006/01/09 18:18:37 millert Exp $	*/
-
 /*
- * 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.
+ * 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:
- * 1. Redistributions of source code must retain the above copyright
+ *  * Redistributions of source code must retain the above copyright
  *    notice, this list of conditions and the following disclaimer.
- * 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.
+ *  * 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 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
+ * 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.
- *
- *	@(#)signal.h	8.1 (Berkeley) 6/10/93
  */
-
-#ifndef _MIPS_SIGNAL_H_
-#define _MIPS_SIGNAL_H_
+#ifndef _ARCH_MIPS_MACHINE_SIGNAL_H_
+#define _ARCH_MIPS_MACHINE_SIGNAL_H_
 
 #include <sys/cdefs.h>
 
-#if !defined(__LANGUAGE_ASSEMBLY)
-#include <sys/types.h>
+__BEGIN_DECLS
 
-/*
- * Machine-dependent signal definitions
- */
-typedef int sig_atomic_t;
+#include <asm/signal.h>
+#include <asm/sigcontext.h>
 
-#if __BSD_VISIBLE || __XPG_VISIBLE >= 420
-
-/*
- * 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.
- */
-
-#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 */
-};
+#ifdef _ASM_GENERIC_SIGINFO_H
+#error "You cannot include <asm/siginfo.h> before <signal.h>!"
 #endif
-#endif /* __BSD_VISIBLE || __XPG_VISIBLE >= 420 */
+#define __ARCH_SI_UID_T __kernel_uid32_t
+#include <asm/siginfo.h>
+#undef __ARCH_SI_UID_T
 
-#else /* __LANGUAGE_ASSEMBLY */
+#include <stdint.h>
 
-#ifdef __ANDROID__
+/* 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.
+ */
+typedef unsigned long __kernel_sigset_t[4];
 
-#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
+/* Note: Unlike ARM and x86, the MIPS <asm/signal.h> properly defines _NSIG
+ * and thus SIGRTMAX. */
 
-#else
+__END_DECLS
 
-#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_ */
+#endif /* _ARCH_MIPS_MACHINE_SIGNAL_H_ */
diff --git a/libc/arch-mips/include/machine/ucontext.h b/libc/arch-mips/include/machine/ucontext.h
new file mode 100644
index 0000000..df3b64b
--- /dev/null
+++ b/libc/arch-mips/include/machine/ucontext.h
@@ -0,0 +1,141 @@
+/*
+ * 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
new file mode 100644
index 0000000..ba3fe37
--- /dev/null
+++ b/libc/arch-x86/include/machine/signal.h
@@ -0,0 +1,67 @@
+/*
+ * 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
new file mode 100644
index 0000000..da226c9
--- /dev/null
+++ b/libc/arch-x86/include/machine/ucontext.h
@@ -0,0 +1,184 @@
+/*
+ * 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 da3a551..a6c1908 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;
-    uint32_t   kernel[2];
+    sigset_t           bionic;
+    __kernel_sigset_t  kernel;
 } 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;
 
-    in_set.kernel[0] = in_set.kernel[1] = 0;
-    out_set.kernel[0] = out_set.kernel[1] = 0;
+    memset(&in_set.kernel, 0, sizeof(in_set.kernel));
+    memset(&out_set.kernel, 0, sizeof(out_set.kernel));
 
     /* '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 6432c18..bcb58c2 100644
--- a/libc/include/signal.h
+++ b/libc/include/signal.h
@@ -29,29 +29,61 @@
 #define _SIGNAL_H_
 
 #include <sys/cdefs.h>
-#include <limits.h>		/* For LONG_BIT */
-#include <string.h>		/* For memset() */
 #include <sys/types.h>
-#include <asm/signal.h>
+#include <machine/signal.h>
+#include <machine/ucontext.h>
 
-#define __ARCH_SI_UID_T __kernel_uid32_t
-#include <asm/siginfo.h>
-#undef __ARCH_SI_UID_T
+#include <limits.h>             /* For LONG_BIT */
+#include <string.h>             /* For memset() */
 
 __BEGIN_DECLS
 
-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.
+/* 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.
  *
- * Looking at the current kernel sources, it is defined as 64 for all
- * architectures except for the 'mips' one which set it to 128.
+ * 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
  */
-#ifndef _NSIG
-#  define _NSIG  64
-#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;
 
 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 ca81cb6..6bae25c 100644
--- a/libc/include/sys/cdefs.h
+++ b/libc/include/sys/cdefs.h
@@ -510,4 +510,12 @@
 #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
new file mode 100644
index 0000000..8c7b3d7
--- /dev/null
+++ b/libc/include/sys/ucontext.h
@@ -0,0 +1,43 @@
+/*
+ * 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 e280e0a..f65ac4e 100644
--- a/libc/include/time.h
+++ b/libc/include/time.h
@@ -30,10 +30,7 @@
 
 #include <sys/cdefs.h>
 #include <sys/time.h>
-
-#define __ARCH_SI_UID_T __kernel_uid32_t
-#include <asm/siginfo.h>
-#undef __ARCH_SI_UID_T
+#include <machine/signal.h>  /* for struct sigevent */
 
 __BEGIN_DECLS
 
