111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (C) 2014 The Android Open Source Project 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * All rights reserved. 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Redistribution and use in source and binary forms, with or without 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * modification, are permitted provided that the following conditions 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * are met: 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * * Redistributions of source code must retain the above copyright 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * notice, this list of conditions and the following disclaimer. 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * * Redistributions in binary form must reproduce the above copyright 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * notice, this list of conditions and the following disclaimer in 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * the documentation and/or other materials provided with the 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * distribution. 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * SUCH DAMAGE. 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _SYS_UCONTEXT_H_ 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _SYS_UCONTEXT_H_ 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <signal.h> 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <sys/user.h> 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__BEGIN_DECLS 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined(__arm__) 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertenum { 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R0 = 0, 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R1, 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R2, 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R3, 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R4, 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R5, 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R6, 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R7, 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R8, 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R9, 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R10, 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R11, 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R12, 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R13, 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R14, 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R15, 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NGREG 18 /* Like glibc. */ 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef int greg_t; 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef greg_t gregset_t[NGREG]; 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct user_fpregs fpregset_t; 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <asm/sigcontext.h> 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct sigcontext mcontext_t; 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct ucontext { 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long uc_flags; 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct ucontext* uc_link; 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert stack_t uc_stack; 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert mcontext_t uc_mcontext; 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert sigset_t uc_sigmask; 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Android has a wrong (smaller) sigset_t on ARM. 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint32_t __padding_rt_sigset; 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // The kernel adds extra padding after uc_sigmask to match glibc sigset_t on ARM. 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char __padding[120]; 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long uc_regspace[128] __attribute__((__aligned__(8))); 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} ucontext_t; 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#elif defined(__aarch64__) 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NGREG 34 /* x0..x30 + sp + pc + pstate */ 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef unsigned long greg_t; 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef greg_t gregset_t[NGREG]; 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct user_fpsimd_struct fpregset_t; 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <asm/sigcontext.h> 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct sigcontext mcontext_t; 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct ucontext { 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long uc_flags; 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct ucontext *uc_link; 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert stack_t uc_stack; 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert sigset_t uc_sigmask; 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // The kernel adds extra padding after uc_sigmask to match glibc sigset_t on ARM64. 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char __padding[128 - sizeof(sigset_t)]; 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert mcontext_t uc_mcontext; 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} ucontext_t; 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#elif defined(__i386__) 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertenum { 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_GS = 0, 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_FS, 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_ES, 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_DS, 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_EDI, 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_ESI, 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_EBP, 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_ESP, 11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_EBX, 11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_EDX, 11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_ECX, 11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_EAX, 11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_TRAPNO, 11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_ERR, 11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_EIP, 11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_CS, 11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_EFL, 12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_UESP, 12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_SS, 12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert NGREG 12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef int greg_t; 12611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef greg_t gregset_t[NGREG]; 12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct _libc_fpreg { 12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned short significand[4]; 13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned short exponent; 13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct _libc_fpstate { 13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long cw; 13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long sw; 13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long tag; 13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long ipoff; 13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long cssel; 13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long dataoff; 14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long datasel; 14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct _libc_fpreg _st[8]; 14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long status; 14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct _libc_fpstate* fpregset_t; 14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct { 14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert gregset_t gregs; 14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert fpregset_t fpregs; 15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long oldmask; 15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long cr2; 15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} mcontext_t; 15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 15411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct ucontext { 15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long uc_flags; 15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct ucontext* uc_link; 15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert stack_t uc_stack; 15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert mcontext_t uc_mcontext; 15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert sigset_t uc_sigmask; 16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Android has a wrong (smaller) sigset_t on x86. 16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint32_t __padding_rt_sigset; 16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct _libc_fpstate __fpregs_mem; 16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} ucontext_t; 16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#elif defined(__mips__) 16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* glibc doesn't have names for MIPS registers. */ 16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NGREG 32 17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NFPREG 32 17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef unsigned long long greg_t; 17311cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef greg_t gregset_t[NGREG]; 17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct fpregset { 17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert union { 17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert double fp_dregs[NFPREG]; 17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct { 17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float _fp_fregs; 18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned _fp_pad; 18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } fp_fregs[NFPREG]; 18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } fp_r; 18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} fpregset_t; 18411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef __LP64__ 18611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct { 18711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert gregset_t gregs; 18811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert fpregset_t fpregs; 18911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert greg_t mdhi; 19011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert greg_t hi1; 19111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert greg_t hi2; 19211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert greg_t hi3; 19311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert greg_t mdlo; 19411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert greg_t lo1; 19511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert greg_t lo2; 19611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert greg_t lo3; 19711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert greg_t pc; 19811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint32_t fpc_csr; 19911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint32_t used_math; 20011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint32_t dsp; 20111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint32_t reserved; 20211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} mcontext_t; 20311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 20411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct { 20511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned regmask; 20611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned status; 20711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert greg_t pc; 20811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert gregset_t gregs; 20911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert fpregset_t fpregs; 21011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned fp_owned; 21111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned fpc_csr; 21211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned fpc_eir; 21311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned used_math; 21411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned dsp; 21511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert greg_t mdhi; 21611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert greg_t mdlo; 21711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long hi1; 21811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long lo1; 21911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long hi2; 22011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long lo2; 22111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long hi3; 22211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long lo3; 22311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} mcontext_t; 22411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 22511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 22611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct ucontext { 22711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long uc_flags; 22811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct ucontext* uc_link; 22911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert stack_t uc_stack; 23011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert mcontext_t uc_mcontext; 23111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert sigset_t uc_sigmask; 23211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} ucontext_t; 23311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 23411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#elif defined(__x86_64__) 23511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 23611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertenum { 23711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R8 = 0, 23811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R9, 23911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R10, 24011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R11, 24111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R12, 24211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R13, 24311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R14, 24411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_R15, 24511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_RDI, 24611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_RSI, 24711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_RBP, 24811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_RBX, 24911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_RDX, 25011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_RAX, 25111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_RCX, 25211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_RSP, 25311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_RIP, 25411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_EFL, 25511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_CSGSFS, 25611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_ERR, 25711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_TRAPNO, 25811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_OLDMASK, 25911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert REG_CR2, 26011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert NGREG 26111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 26211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 26311cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef long greg_t; 26411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef greg_t gregset_t[NGREG]; 26511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 26611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct _libc_fpxreg { 26711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned short significand[4]; 26811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned short exponent; 26911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned short padding[3]; 27011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 27111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 27211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct _libc_xmmreg { 27311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint32_t element[4]; 27411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 27511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 27611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct _libc_fpstate { 27711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint16_t cwd; 27811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint16_t swd; 27911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint16_t ftw; 28011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint16_t fop; 28111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint64_t rip; 28211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint64_t rdp; 28311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint32_t mxcsr; 28411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint32_t mxcr_mask; 28511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct _libc_fpxreg _st[8]; 28611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct _libc_xmmreg _xmm[16]; 28711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint32_t padding[24]; 28811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 28911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 29011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct _libc_fpstate* fpregset_t; 29111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 29211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct { 29311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert gregset_t gregs; 29411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert fpregset_t fpregs; 29511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long __reserved1[8]; 29611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} mcontext_t; 29711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 29811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct ucontext { 29911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned long uc_flags; 30011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct ucontext* uc_link; 30111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert stack_t uc_stack; 30211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert mcontext_t uc_mcontext; 30311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert sigset_t uc_sigmask; 30411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct _libc_fpstate __fpregs_mem; 30511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} ucontext_t; 30611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 30711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 30811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 30911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__END_DECLS 31011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 31111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _SYS_UCONTEXT_H_ */ 312