From c1b44ecc5385e68e81667068e03b32c2084a85b1 Mon Sep 17 00:00:00 2001 From: David 'Digit' Turner Date: Wed, 17 Oct 2012 19:10:11 +0200 Subject: [PATCH] Revert "libc: Provide ucontext_t/mcontext_t/" This creates build issues in the internal Android tree. Will investigate later. Original patch: https://android-review.googlesource.com/#/c/38875/ Change-Id: I12c5995ebf172890051af42a5d3b31014c9c5117 --- libc/arch-arm/include/machine/signal.h | 79 ---------- libc/arch-arm/include/machine/ucontext.h | 170 -------------------- libc/arch-mips/bionic/_setjmp.S | 2 +- libc/arch-mips/bionic/setjmp.S | 2 +- libc/arch-mips/include/machine/setjmp.h | 58 +------ libc/arch-mips/include/machine/signal.h | 171 +++++++++++++++----- libc/arch-mips/include/machine/ucontext.h | 141 ----------------- libc/arch-x86/include/machine/signal.h | 67 -------- libc/arch-x86/include/machine/ucontext.h | 184 ---------------------- libc/bionic/pthread.c | 8 +- libc/include/signal.h | 66 ++------ libc/include/sys/cdefs.h | 8 - libc/include/sys/ucontext.h | 43 ----- libc/include/time.h | 5 +- 14 files changed, 163 insertions(+), 841 deletions(-) delete mode 100644 libc/arch-arm/include/machine/signal.h delete mode 100644 libc/arch-arm/include/machine/ucontext.h delete mode 100644 libc/arch-mips/include/machine/ucontext.h delete mode 100644 libc/arch-x86/include/machine/signal.h delete mode 100644 libc/arch-x86/include/machine/ucontext.h delete mode 100644 libc/include/sys/ucontext.h diff --git a/libc/arch-arm/include/machine/signal.h b/libc/arch-arm/include/machine/signal.h deleted file mode 100644 index ead980c80..000000000 --- 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 -#include -#include - -__BEGIN_DECLS - -/* Include the kernel-specific definitions */ -#include -#include -#include - -#ifdef _ASM_GENERIC_SIGINFO_H -#error "You cannot include before !" -#endif -#define __ARCH_SI_UID_T __kernel_uid32_t -#include -#undef __ARCH_SI_UID_T - -#include - -/* Despite the fact that 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 , 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 2d2884c1c..000000000 --- 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 -#include -#include -#include - -__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 - * - * - 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 42a5aed27..e7083ae29 100644 --- a/libc/arch-mips/bionic/_setjmp.S +++ b/libc/arch-mips/bionic/_setjmp.S @@ -31,7 +31,7 @@ #include #include -#include +#include /* * _setjmp, _longjmp (not restoring signal state) diff --git a/libc/arch-mips/bionic/setjmp.S b/libc/arch-mips/bionic/setjmp.S index 0b1538c42..7c21195b6 100644 --- a/libc/arch-mips/bionic/setjmp.S +++ b/libc/arch-mips/bionic/setjmp.S @@ -31,7 +31,7 @@ #include #include -#include +#include /* * 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 0237002b4..55ba7bebb 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 6378c61ed..4efb856f0 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 -__BEGIN_DECLS +#if !defined(__LANGUAGE_ASSEMBLY) +#include -#include -#include - -#ifdef _ASM_GENERIC_SIGINFO_H -#error "You cannot include before !" -#endif -#define __ARCH_SI_UID_T __kernel_uid32_t -#include -#undef __ARCH_SI_UID_T - -#include - -/* 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 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 df3b64b7c..000000000 --- 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 -#include - -__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 - * - * 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 ba3fe37a9..000000000 --- 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 -#include -#include - -__BEGIN_DECLS - -#include -#include - -#ifdef _ASM_GENERIC_SIGINFO_H -#error "You cannot include before !" -#endif -#define __ARCH_SI_UID_T __kernel_uid32_t -#include -#undef __ARCH_SI_UID_T - -#include - -/* 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 , 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 da226c99b..000000000 --- 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 -#include - -__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 - * - * - 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 a6c19087d..da3a55152 100644 --- a/libc/bionic/pthread.c +++ b/libc/bionic/pthread.c @@ -2106,8 +2106,8 @@ int pthread_kill(pthread_t tid, int sig) * 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 @@ int pthread_sigmask(int how, const sigset_t *set, sigset_t *oset) 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 bcb58c265..6432c189b 100644 --- a/libc/include/signal.h +++ b/libc/include/signal.h @@ -29,62 +29,30 @@ #define _SIGNAL_H_ #include +#include /* For LONG_BIT */ +#include /* For memset() */ #include -#include -#include +#include -#include /* For LONG_BIT */ -#include /* For memset() */ +#define __ARCH_SI_UID_T __kernel_uid32_t +#include +#undef __ARCH_SI_UID_T __BEGIN_DECLS -/* Previous versions of 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 - * to indicate that 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 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 on Android - * to ensure maximum portability (i.e. to old platform/NDK releases). - * As in: - * - * #include - * #ifdef __BIONIC__ - * #include - * #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 - * #ifdef __BIONIC__ - * # include - * # 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 , or . Client code can check - * against the macro __BIONIC_HAVE_UCONTEXT_T to determine if it does. - * - * Beware, that does _not_ mean that and related functions are - * available. - */ - typedef int sig_atomic_t; +/* _NSIG is used by the SIGRTMAX definition under , 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 6bae25c9e..ca81cb666 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 now defines 'struct sigcontext' - * properly. See comments in */ -#define __BIONIC_HAVE_STRUCT_SIGCONTEXT 1 - -/* Indicates to client code that now defines 'ucontext_t' */ -/* NOTE: That does not mean that 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 8c7b3d7e7..000000000 --- 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 - * . - * - * Client code that directly includes this file exists. Note that - * the better, POSIX-compliant, way to get these declarations is to include - * . - */ - -#include - -#endif /* _SYS_UCONTEXT_H_ */ diff --git a/libc/include/time.h b/libc/include/time.h index f65ac4e7c..e280e0af1 100644 --- a/libc/include/time.h +++ b/libc/include/time.h @@ -30,7 +30,10 @@ #include #include -#include /* for struct sigevent */ + +#define __ARCH_SI_UID_T __kernel_uid32_t +#include +#undef __ARCH_SI_UID_T __BEGIN_DECLS