ucontext.h revision 0e85fb6121cf365207ee737314130a526dbe0eac
1e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin/* 2e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * Copyright (C) 2014 The Android Open Source Project 3e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * All rights reserved. 4e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * 5e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * Redistribution and use in source and binary forms, with or without 6e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * modification, are permitted provided that the following conditions 7e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * are met: 8e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * * Redistributions of source code must retain the above copyright 9e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * notice, this list of conditions and the following disclaimer. 10e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * * Redistributions in binary form must reproduce the above copyright 11e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * notice, this list of conditions and the following disclaimer in 12e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * the documentation and/or other materials provided with the 13e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * distribution. 14e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * 15e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin * SUCH DAMAGE. 27e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin */ 28e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 29e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin#ifndef _SYS_UCONTEXT_H_ 30e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin#define _SYS_UCONTEXT_H_ 31e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 32e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin#include <signal.h> 33e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin#include <sys/user.h> 34e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 35e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin__BEGIN_DECLS 36e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 37677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#if defined(__arm__) 38677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 394e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughesenum { 404e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R0 = 0, 414e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R1, 424e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R2, 434e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R3, 444e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R4, 454e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R5, 464e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R6, 474e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R7, 484e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R8, 494e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R9, 504e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R10, 514e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R11, 524e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R12, 534e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R13, 544e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R14, 554e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R15, 564e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes}; 574e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes 584e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes#define NGREG 18 /* Like glibc. */ 594e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes 604e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughestypedef int greg_t; 614e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughestypedef greg_t gregset_t[NGREG]; 624e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes 634e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes/* TODO: fpregset_t. */ 644e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes 654e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes#include <asm/sigcontext.h> 664e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughestypedef struct sigcontext mcontext_t; 674e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes 684e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughestypedef struct ucontext { 694e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes unsigned long uc_flags; 704e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes struct ucontext* uc_link; 714e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes stack_t uc_stack; 724e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes mcontext_t uc_mcontext; 734e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes sigset_t uc_sigmask; 740e85fb6121cf365207ee737314130a526dbe0eacCalin Juravle char __padding[128 - sizeof(sigset_t)]; 750e85fb6121cf365207ee737314130a526dbe0eacCalin Juravle unsigned long uc_regspace[128] __attribute__((__aligned__(8))); 764e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes} ucontext_t; 77677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 787b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy#elif defined(__aarch64__) 79677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 807b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy/* TODO: gregset_t and fpregset_t. */ 817b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy 827b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy#include <asm/sigcontext.h> 837b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroytypedef struct sigcontext mcontext_t; 847b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy 857b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroytypedef struct ucontext { 867b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy unsigned long uc_flags; 877b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy struct ucontext *uc_link; 887b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy stack_t uc_stack; 897b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy sigset_t uc_sigmask; 9050249bca00d2c7d237e67d4d276057bb59508804Elliott Hughes char __padding[128 - sizeof(sigset_t)]; 917b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy mcontext_t uc_mcontext; 927b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy} ucontext_t; 93677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 94677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#elif defined(__i386__) 95677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 96677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughesenum { 97677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_GS = 0, 98677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_FS, 99677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_ES, 100677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_DS, 101677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_EDI, 102677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_ESI, 103677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_EBP, 104677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_ESP, 105677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_EBX, 106677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_EDX, 107677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_ECX, 108677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_EAX, 109677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_TRAPNO, 110677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_ERR, 111677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_EIP, 112677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_CS, 113677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_EFL, 114677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_UESP, 115677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_SS, 116677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes NGREG 117677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes}; 118677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 119677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughestypedef int greg_t; 120677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughestypedef greg_t gregset_t[NGREG]; 121677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 122677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughesstruct _libc_fpreg { 123677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned short significand[4]; 124677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned short exponent; 125677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes}; 126677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 127677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughesstruct _libc_fpstate { 128677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long cw; 129677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long sw; 130677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long tag; 131677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long ipoff; 132677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long cssel; 133677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long dataoff; 134677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long datasel; 135677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes struct _libc_fpreg _st[8]; 136677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long status; 137677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes}; 138677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 139677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughestypedef struct _libc_fpstate* fpregset_t; 140677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 141677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughestypedef struct { 142677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes gregset_t gregs; 143677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes fpregset_t fpregs; 144677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long oldmask; 145677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long cr2; 146677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes} mcontext_t; 147677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 148677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughestypedef struct ucontext { 149677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long uc_flags; 150677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes struct ucontext* uc_link; 151677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes stack_t uc_stack; 152677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes mcontext_t uc_mcontext; 153677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes sigset_t uc_sigmask; 154a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle char __padding[128 - sizeof(sigset_t)]; 155a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle struct _libc_fpstate __fpregs_mem; 156677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes} ucontext_t; 157677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 158677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#elif defined(__mips__) 159677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 16002c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes/* glibc doesn't have names for MIPS registers. */ 16102c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes 16202c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes#define NGREG 32 16302c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes#define NFPREG 32 16402c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes 16502c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughestypedef unsigned long long greg_t; 16602c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughestypedef greg_t gregset_t[NGREG]; 16702c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes 16802c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughestypedef struct fpregset { 16902c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes union { 17002c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes double fp_dregs[NFPREG]; 17102c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes struct { 17202c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes float _fp_fregs; 17302c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned _fp_pad; 17402c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes } fp_fregs[NFPREG]; 17502c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes } fp_r; 17602c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes} fpregset_t; 17702c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes 17802c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughestypedef struct { 17902c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned regmask; 18002c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned status; 18102c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes greg_t pc; 18202c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes gregset_t gregs; 18302c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes fpregset_t fpregs; 18402c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned fp_owned; 18502c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned fpc_csr; 18602c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned fpc_eir; 18702c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned used_math; 18802c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned dsp; 18902c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes greg_t mdhi; 19002c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes greg_t mdlo; 19102c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned long hi1; 19202c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned long lo1; 19302c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned long hi2; 19402c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned long lo2; 19502c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned long hi3; 19602c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned long lo3; 19702c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes} mcontext_t; 19802c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes 19902c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughestypedef struct ucontext { 20002c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned long uc_flags; 20102c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes struct ucontext* uc_link; 20202c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes stack_t uc_stack; 20302c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes mcontext_t uc_mcontext; 20402c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes sigset_t uc_sigmask; 20502c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes} ucontext_t; 206677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 207677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#elif defined(__mips64__) 208677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 209677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#error TODO 210677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 211677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#elif defined(__x86_64__) 212e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 213e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupinenum { 214e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R8 = 0, 215e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R9, 216e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R10, 217e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R11, 218e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R12, 219e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R13, 220e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R14, 221e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R15, 222e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RDI, 223e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RSI, 224e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RBP, 225e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RBX, 226e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RDX, 227e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RAX, 228e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RCX, 229e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RSP, 230e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RIP, 231e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_EFL, 232e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_CSGSFS, 233e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_ERR, 234e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_TRAPNO, 235e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_OLDMASK, 236e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_CR2, 237e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin NGREG 238e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin}; 239e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 240e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupintypedef long greg_t; 241e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupintypedef greg_t gregset_t[NGREG]; 242e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 243a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravlestruct _libc_fpxreg { 244a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle unsigned short significand[4]; 245a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle unsigned short exponent; 246a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle unsigned short padding[3]; 247a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle}; 248a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle 249a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravlestruct _libc_xmmreg { 250a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint32_t element[4]; 251a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle}; 252a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle 253a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravlestruct _libc_fpstate { 254a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint16_t cwd; 255a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint16_t swd; 256a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint16_t ftw; 257a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint16_t fop; 258a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint64_t rip; 259a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint64_t rdp; 260a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint32_t mxcsr; 261a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint32_t mxcr_mask; 262a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle struct _libc_fpxreg _st[8]; 263a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle struct _libc_xmmreg _xmm[16]; 264a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint32_t padding[24]; 265a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle}; 266a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle 267a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravletypedef struct _libc_fpstate* fpregset_t; 268e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 269e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupintypedef struct { 270e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin gregset_t gregs; 271e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin fpregset_t fpregs; 272c5992a036ba380f56e5be3d2d6b1abb34064b20eElliott Hughes unsigned long __reserved1[8]; 273e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin} mcontext_t; 274e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 275e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupintypedef struct ucontext { 276e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin unsigned long uc_flags; 277e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin struct ucontext* uc_link; 278e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin stack_t uc_stack; 279e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin mcontext_t uc_mcontext; 280e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin sigset_t uc_sigmask; 281a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle char __padding[128 - sizeof(sigset_t)]; 282a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle struct _libc_fpstate __fpregs_mem; 283e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin} ucontext_t; 284e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 285677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#endif 286e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 287e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin__END_DECLS 288e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 289e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin#endif /* _SYS_UCONTEXT_H_ */ 290