From 9eac1b60d347ed3ed4e3f387e01ec55d8bf13f41 Mon Sep 17 00:00:00 2001 From: Andrew Hsieh Date: Mon, 15 Sep 2014 14:33:31 -0700 Subject: [PATCH] Added sys/ucontext.h and sys/user.h to all API levels. Also 1. Header singal.h now includes 2. asm/user.h include sys/user.h 3. change use of user_i387_struct to user_fpregs_struct See bionic 26a8eb50a84e131d34d10d5d167d67e9995399bd Change-Id: I9592e98b90d773ef5babb428a6a6ef208fe86327 --- .../android-3/arch-arm/include/asm/user.h | 61 +--- ndk/platforms/android-3/include/elf.h | 2 + ndk/platforms/android-3/include/signal.h | 3 + .../android-3/include/sys/ucontext.h | 289 ++++++++++++++++++ ndk/platforms/android-3/include/sys/user.h | 242 +++++++++++++++ ndk/platforms/android-3/include/ucontext.h | 34 +++ ndk/platforms/android-8/include/signal.h | 3 + .../android-9/arch-mips/include/asm/user.h | 33 +- .../android-9/arch-x86/include/asm/elf.h | 2 +- .../android-9/arch-x86/include/asm/user.h | 3 +- ndk/platforms/android-L/include/signal.h | 3 + .../android-L/include/sys/ucontext.h | 12 +- 12 files changed, 586 insertions(+), 101 deletions(-) create mode 100644 ndk/platforms/android-3/include/sys/ucontext.h create mode 100644 ndk/platforms/android-3/include/sys/user.h create mode 100644 ndk/platforms/android-3/include/ucontext.h diff --git a/ndk/platforms/android-3/arch-arm/include/asm/user.h b/ndk/platforms/android-3/arch-arm/include/asm/user.h index d0baecd65..7e786f48d 100644 --- a/ndk/platforms/android-3/arch-arm/include/asm/user.h +++ b/ndk/platforms/android-3/arch-arm/include/asm/user.h @@ -9,64 +9,5 @@ *** **************************************************************************** ****************************************************************************/ -#ifndef _ARM_USER_H -#define _ARM_USER_H -#include -#include - -struct user_fp { - struct fp_reg { - unsigned int sign1:1; - unsigned int unused:15; - unsigned int sign2:1; - unsigned int exponent:14; - unsigned int j:1; - unsigned int mantissa1:31; - unsigned int mantissa0:32; - } fpregs[8]; - unsigned int fpsr:32; - unsigned int fpcr:32; - unsigned char ftype[8]; - unsigned int init_flag; -}; - -struct user{ - - struct pt_regs regs; - - int u_fpvalid; - - unsigned long int u_tsize; - unsigned long int u_dsize; - unsigned long int u_ssize; - unsigned long start_code; - unsigned long start_stack; - long int signal; - int reserved; - struct pt_regs * u_ar0; - - unsigned long magic; - char u_comm[32]; - int u_debugreg[8]; - struct user_fp u_fp; - struct user_fp_struct * u_fp0; - -}; -#define NBPG PAGE_SIZE -#define UPAGES 1 -#define HOST_TEXT_START_ADDR (u.start_code) -#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) - -struct user_vfp { - unsigned long long fpregs[32]; - unsigned long fpscr; -}; - -struct user_vfp_exc { - unsigned long fpexc; - unsigned long fpinst; - unsigned long fpinst2; -}; - -#endif +#include diff --git a/ndk/platforms/android-3/include/elf.h b/ndk/platforms/android-3/include/elf.h index cb8ffb77c..d0294f7c9 100644 --- a/ndk/platforms/android-3/include/elf.h +++ b/ndk/platforms/android-3/include/elf.h @@ -28,6 +28,7 @@ #ifndef _ELF_H #define _ELF_H +#if !defined(AT_NULL) /* these definitions are missing from the BSD sources */ enum { AT_NULL = 0, @@ -51,6 +52,7 @@ enum { AT_SECURE = 23 }; +#endif #include #include diff --git a/ndk/platforms/android-3/include/signal.h b/ndk/platforms/android-3/include/signal.h index 0bfd550c7..00621904d 100644 --- a/ndk/platforms/android-3/include/signal.h +++ b/ndk/platforms/android-3/include/signal.h @@ -38,6 +38,9 @@ #include #undef __ARCH_SI_UID_T +#include +#define __BIONIC_HAVE_UCONTEXT_T + __BEGIN_DECLS typedef int sig_atomic_t; diff --git a/ndk/platforms/android-3/include/sys/ucontext.h b/ndk/platforms/android-3/include/sys/ucontext.h new file mode 100644 index 000000000..b8d4d5812 --- /dev/null +++ b/ndk/platforms/android-3/include/sys/ucontext.h @@ -0,0 +1,289 @@ +/* + * Copyright (C) 2014 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_ + +#include +#include + +__BEGIN_DECLS + +#if defined(__arm__) + +enum { + REG_R0 = 0, + REG_R1, + REG_R2, + REG_R3, + REG_R4, + REG_R5, + REG_R6, + REG_R7, + REG_R8, + REG_R9, + REG_R10, + REG_R11, + REG_R12, + REG_R13, + REG_R14, + REG_R15, +}; + +#define NGREG 18 /* Like glibc. */ + +typedef int greg_t; +typedef greg_t gregset_t[NGREG]; + +#include +typedef struct sigcontext mcontext_t; + +typedef struct ucontext { + unsigned long uc_flags; + struct ucontext* uc_link; + stack_t uc_stack; + mcontext_t uc_mcontext; + sigset_t uc_sigmask; + // Android has a wrong (smaller) sigset_t on ARM. + uint32_t __padding_rt_sigset; + // The kernel adds extra padding after uc_sigmask to match glibc sigset_t on ARM. + char __padding[120]; + unsigned long uc_regspace[128] __attribute__((__aligned__(8))); +} ucontext_t; + +#elif defined(__aarch64__) + +#include +typedef struct sigcontext mcontext_t; + +typedef struct ucontext { + unsigned long uc_flags; + struct ucontext *uc_link; + stack_t uc_stack; + sigset_t uc_sigmask; + // The kernel adds extra padding after uc_sigmask to match glibc sigset_t on ARM64. + char __padding[128 - sizeof(sigset_t)]; + mcontext_t uc_mcontext; +} ucontext_t; + +#elif defined(__i386__) + +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, + NGREG +}; + +typedef int greg_t; +typedef greg_t gregset_t[NGREG]; + +struct _libc_fpreg { + unsigned short significand[4]; + unsigned short exponent; +}; + +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; + unsigned long oldmask; + unsigned long cr2; +} mcontext_t; + +typedef struct ucontext { + unsigned long uc_flags; + struct ucontext* uc_link; + stack_t uc_stack; + mcontext_t uc_mcontext; + sigset_t uc_sigmask; + // Android has a wrong (smaller) sigset_t on x86. + uint32_t __padding_rt_sigset; + struct _libc_fpstate __fpregs_mem; +} ucontext_t; + +#elif defined(__mips__) + +/* glibc doesn't have names for MIPS registers. */ + +#define NGREG 32 +#define NFPREG 32 + +typedef unsigned long long greg_t; +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; + +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 long hi1; + unsigned long lo1; + unsigned long hi2; + unsigned long lo2; + unsigned long hi3; + unsigned long lo3; +} mcontext_t; + +typedef struct ucontext { + unsigned long uc_flags; + struct ucontext* uc_link; + stack_t uc_stack; + mcontext_t uc_mcontext; + sigset_t uc_sigmask; +} ucontext_t; + +#elif defined(__mips64__) + +#error TODO + +#elif defined(__x86_64__) + +enum { + REG_R8 = 0, + REG_R9, + REG_R10, + REG_R11, + REG_R12, + REG_R13, + REG_R14, + REG_R15, + REG_RDI, + REG_RSI, + REG_RBP, + REG_RBX, + REG_RDX, + REG_RAX, + REG_RCX, + REG_RSP, + REG_RIP, + REG_EFL, + REG_CSGSFS, + REG_ERR, + REG_TRAPNO, + REG_OLDMASK, + REG_CR2, + NGREG +}; + +typedef long greg_t; +typedef greg_t gregset_t[NGREG]; + +struct _libc_fpxreg { + unsigned short significand[4]; + unsigned short exponent; + unsigned short padding[3]; +}; + +struct _libc_xmmreg { + uint32_t element[4]; +}; + +struct _libc_fpstate { + uint16_t cwd; + uint16_t swd; + uint16_t ftw; + uint16_t fop; + uint64_t rip; + uint64_t rdp; + uint32_t mxcsr; + uint32_t mxcr_mask; + struct _libc_fpxreg _st[8]; + struct _libc_xmmreg _xmm[16]; + uint32_t padding[24]; +}; + +typedef struct _libc_fpstate* fpregset_t; + +typedef struct { + gregset_t gregs; + fpregset_t fpregs; + unsigned long __reserved1[8]; +} mcontext_t; + +typedef struct ucontext { + unsigned long uc_flags; + struct ucontext* uc_link; + stack_t uc_stack; + mcontext_t uc_mcontext; + sigset_t uc_sigmask; + struct _libc_fpstate __fpregs_mem; +} ucontext_t; + +#endif + +__END_DECLS + +#endif /* _SYS_UCONTEXT_H_ */ diff --git a/ndk/platforms/android-3/include/sys/user.h b/ndk/platforms/android-3/include/sys/user.h new file mode 100644 index 000000000..18684f183 --- /dev/null +++ b/ndk/platforms/android-3/include/sys/user.h @@ -0,0 +1,242 @@ +/* + * Copyright (C) 2013 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_USER_H_ +#define _SYS_USER_H_ + +#include +#include /* For PAGE_SIZE. */ + +__BEGIN_DECLS + +#if __i386__ + +struct user_fpregs_struct { + long cwd; + long swd; + long twd; + long fip; + long fcs; + long foo; + long fos; + long st_space[20]; +}; +struct user_fxsr_struct { + unsigned short cwd; + unsigned short swd; + unsigned short twd; + unsigned short fop; + long fip; + long fcs; + long foo; + long fos; + long mxcsr; + long reserved; + long st_space[32]; + long xmm_space[32]; + long padding[56]; +}; +struct user_regs_struct { + long ebx; + long ecx; + long edx; + long esi; + long edi; + long ebp; + long eax; + long xds; + long xes; + long xfs; + long xgs; + long orig_eax; + long eip; + long xcs; + long eflags; + long esp; + long xss; +}; +struct user { + struct user_regs_struct regs; + int u_fpvalid; + struct user_fpregs_struct i387; + unsigned long int u_tsize; + unsigned long int u_dsize; + unsigned long int u_ssize; + unsigned long start_code; + unsigned long start_stack; + long int signal; + int reserved; + unsigned long u_ar0; + struct user_fpregs_struct* u_fpstate; + unsigned long magic; + char u_comm[32]; + int u_debugreg[8]; +}; + +#elif defined(__x86_64__) + +struct user_fpregs_struct { + unsigned short cwd; + unsigned short swd; + unsigned short ftw; + unsigned short fop; + __u64 rip; + __u64 rdp; + __u32 mxcsr; + __u32 mxcsr_mask; + __u32 st_space[32]; + __u32 xmm_space[64]; + __u32 padding[24]; +}; +struct user_regs_struct { + unsigned long r15; + unsigned long r14; + unsigned long r13; + unsigned long r12; + unsigned long rbp; + unsigned long rbx; + unsigned long r11; + unsigned long r10; + unsigned long r9; + unsigned long r8; + unsigned long rax; + unsigned long rcx; + unsigned long rdx; + unsigned long rsi; + unsigned long rdi; + unsigned long orig_rax; + unsigned long rip; + unsigned long cs; + unsigned long eflags; + unsigned long rsp; + unsigned long ss; + unsigned long fs_base; + unsigned long gs_base; + unsigned long ds; + unsigned long es; + unsigned long fs; + unsigned long gs; +}; +struct user { + struct user_regs_struct regs; + int u_fpvalid; + int pad0; + struct user_fpregs_struct i387; + unsigned long int u_tsize; + unsigned long int u_dsize; + unsigned long int u_ssize; + unsigned long start_code; + unsigned long start_stack; + long int signal; + int reserved; + int pad1; + unsigned long u_ar0; + struct user_fpregs_struct* u_fpstate; + unsigned long magic; + char u_comm[32]; + unsigned long u_debugreg[8]; + unsigned long error_code; + unsigned long fault_address; +}; + +#elif defined(__mips__) + +struct user { + unsigned long regs[180 / sizeof(unsigned long) + 64]; + size_t u_tsize; + size_t u_dsize; + size_t u_ssize; + unsigned long start_code; + unsigned long start_data; + unsigned long start_stack; + long int signal; + unsigned long u_ar0; + unsigned long magic; + char u_comm[32]; +}; + +#elif defined(__arm__) + +struct user_fpregs { + struct fp_reg { + unsigned int sign1:1; + unsigned int unused:15; + unsigned int sign2:1; + unsigned int exponent:14; + unsigned int j:1; + unsigned int mantissa1:31; + unsigned int mantissa0:32; + } fpregs[8]; + unsigned int fpsr:32; + unsigned int fpcr:32; + unsigned char ftype[8]; + unsigned int init_flag; +}; +struct user_regs { + unsigned long uregs[18]; +}; +struct user_vfp { + unsigned long long fpregs[32]; + unsigned long fpscr; +}; +struct user_vfp_exc { + unsigned long fpexc; + unsigned long fpinst; + unsigned long fpinst2; +}; +struct user { + struct user_regs regs; + int u_fpvalid; + unsigned long int u_tsize; + unsigned long int u_dsize; + unsigned long int u_ssize; + unsigned long start_code; + unsigned long start_stack; + long int signal; + int reserved; + struct user_regs* u_ar0; + unsigned long magic; + char u_comm[32]; + int u_debugreg[8]; + struct user_fpregs u_fp; + struct user_fpregs* u_fp0; +}; + +#elif defined(__aarch64__) + +// There are no user structures for 64 bit arm. + +#else + +#error "Unsupported architecture." + +#endif + +__END_DECLS + +#endif /* _SYS_USER_H_ */ diff --git a/ndk/platforms/android-3/include/ucontext.h b/ndk/platforms/android-3/include/ucontext.h new file mode 100644 index 000000000..5ea29820e --- /dev/null +++ b/ndk/platforms/android-3/include/ucontext.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2014 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 _UCONTEXT_H_ +#define _UCONTEXT_H_ + +#include + +#endif /* _UCONTEXT_H_ */ diff --git a/ndk/platforms/android-8/include/signal.h b/ndk/platforms/android-8/include/signal.h index c9a517064..e64e1fa06 100644 --- a/ndk/platforms/android-8/include/signal.h +++ b/ndk/platforms/android-8/include/signal.h @@ -39,6 +39,9 @@ #include #undef __ARCH_SI_UID_T +#include +#define __BIONIC_HAVE_UCONTEXT_T + __BEGIN_DECLS typedef int sig_atomic_t; diff --git a/ndk/platforms/android-9/arch-mips/include/asm/user.h b/ndk/platforms/android-9/arch-mips/include/asm/user.h index a87f23942..122d00223 100644 --- a/ndk/platforms/android-9/arch-mips/include/asm/user.h +++ b/ndk/platforms/android-9/arch-mips/include/asm/user.h @@ -16,34 +16,5 @@ *** **************************************************************************** ****************************************************************************/ -#ifndef _ASM_USER_H -#define _ASM_USER_H -#include -#include -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ -#define EF_SIZE 180 -struct user { - unsigned long regs[EF_SIZE / - sizeof(unsigned long) + 64]; -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ - size_t u_tsize; - size_t u_dsize; - size_t u_ssize; - unsigned long start_code; -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ - unsigned long start_data; - unsigned long start_stack; - long int signal; - unsigned long u_ar0; -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ - unsigned long magic; - char u_comm[32]; -}; -#define NBPG PAGE_SIZE -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ -#define UPAGES 1 -#define HOST_TEXT_START_ADDR (u.start_code) -#define HOST_DATA_START_ADDR (u.start_data) -#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ -#endif + +#include \ No newline at end of file diff --git a/ndk/platforms/android-9/arch-x86/include/asm/elf.h b/ndk/platforms/android-9/arch-x86/include/asm/elf.h index 2d1edfd66..508952fbf 100644 --- a/ndk/platforms/android-9/arch-x86/include/asm/elf.h +++ b/ndk/platforms/android-9/arch-x86/include/asm/elf.h @@ -26,7 +26,7 @@ typedef unsigned long elf_greg_t; #define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof(elf_greg_t)) typedef elf_greg_t elf_gregset_t[ELF_NGREG]; /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ -typedef struct user_i387_struct elf_fpregset_t; +typedef struct user_fpregs_struct elf_fpregset_t; typedef struct user_fxsr_struct elf_fpxregset_t; #define R_386_NONE 0 #define R_386_32 1 diff --git a/ndk/platforms/android-9/arch-x86/include/asm/user.h b/ndk/platforms/android-9/arch-x86/include/asm/user.h index 054182ed5..5538df121 100644 --- a/ndk/platforms/android-9/arch-x86/include/asm/user.h +++ b/ndk/platforms/android-9/arch-x86/include/asm/user.h @@ -16,4 +16,5 @@ *** **************************************************************************** ****************************************************************************/ -#include "user_32.h" + +#include diff --git a/ndk/platforms/android-L/include/signal.h b/ndk/platforms/android-L/include/signal.h index f1849c5d4..e23e65b80 100644 --- a/ndk/platforms/android-L/include/signal.h +++ b/ndk/platforms/android-L/include/signal.h @@ -48,6 +48,9 @@ # include #endif +#include +#define __BIONIC_HAVE_UCONTEXT_T + __BEGIN_DECLS typedef int sig_atomic_t; diff --git a/ndk/platforms/android-L/include/sys/ucontext.h b/ndk/platforms/android-L/include/sys/ucontext.h index f62380d8a..b8d4d5812 100644 --- a/ndk/platforms/android-L/include/sys/ucontext.h +++ b/ndk/platforms/android-L/include/sys/ucontext.h @@ -68,11 +68,9 @@ typedef struct ucontext { struct ucontext* uc_link; stack_t uc_stack; mcontext_t uc_mcontext; + sigset_t uc_sigmask; // Android has a wrong (smaller) sigset_t on ARM. - union { - sigset_t bionic; - uint32_t kernel[2]; - } uc_sigmask; + uint32_t __padding_rt_sigset; // The kernel adds extra padding after uc_sigmask to match glibc sigset_t on ARM. char __padding[120]; unsigned long uc_regspace[128] __attribute__((__aligned__(8))); @@ -152,11 +150,9 @@ typedef struct ucontext { struct ucontext* uc_link; stack_t uc_stack; mcontext_t uc_mcontext; + sigset_t uc_sigmask; // Android has a wrong (smaller) sigset_t on x86. - union { - sigset_t bionic; - uint32_t kernel[2]; - } uc_sigmask; + uint32_t __padding_rt_sigset; struct _libc_fpstate __fpregs_mem; } ucontext_t;