ucontext.h revision a6ab968ca0af18d84620a692f76af0d8e857c9c8
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; 744e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes /* TODO: uc_regspace */ 754e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes} ucontext_t; 76677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 777b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy#elif defined(__aarch64__) 78677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 797b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy/* TODO: gregset_t and fpregset_t. */ 807b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy 817b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy#include <asm/sigcontext.h> 827b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroytypedef struct sigcontext mcontext_t; 837b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy 847b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroytypedef struct ucontext { 857b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy unsigned long uc_flags; 867b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy struct ucontext *uc_link; 877b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy stack_t uc_stack; 887b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy sigset_t uc_sigmask; 8950249bca00d2c7d237e67d4d276057bb59508804Elliott Hughes char __padding[128 - sizeof(sigset_t)]; 907b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy mcontext_t uc_mcontext; 917b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy} ucontext_t; 92677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 93677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#elif defined(__i386__) 94677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 95677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughesenum { 96677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_GS = 0, 97677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_FS, 98677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_ES, 99677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_DS, 100677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_EDI, 101677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_ESI, 102677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_EBP, 103677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_ESP, 104677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_EBX, 105677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_EDX, 106677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_ECX, 107677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_EAX, 108677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_TRAPNO, 109677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_ERR, 110677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_EIP, 111677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_CS, 112677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_EFL, 113677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_UESP, 114677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_SS, 115677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes NGREG 116677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes}; 117677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 118677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughestypedef int greg_t; 119677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughestypedef greg_t gregset_t[NGREG]; 120677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 121677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughesstruct _libc_fpreg { 122677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned short significand[4]; 123677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned short exponent; 124677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes}; 125677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 126677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughesstruct _libc_fpstate { 127677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long cw; 128677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long sw; 129677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long tag; 130677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long ipoff; 131677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long cssel; 132677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long dataoff; 133677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long datasel; 134677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes struct _libc_fpreg _st[8]; 135677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long status; 136677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes}; 137677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 138677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughestypedef struct _libc_fpstate* fpregset_t; 139677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 140677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughestypedef struct { 141677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes gregset_t gregs; 142677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes fpregset_t fpregs; 143677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long oldmask; 144677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long cr2; 145677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes} mcontext_t; 146677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 147677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughestypedef struct ucontext { 148677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long uc_flags; 149677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes struct ucontext* uc_link; 150677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes stack_t uc_stack; 151677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes mcontext_t uc_mcontext; 152677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes sigset_t uc_sigmask; 153a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle char __padding[128 - sizeof(sigset_t)]; 154a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle struct _libc_fpstate __fpregs_mem; 155677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes} ucontext_t; 156677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 157677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#elif defined(__mips__) 158677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 15902c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes/* glibc doesn't have names for MIPS registers. */ 16002c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes 16102c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes#define NGREG 32 16202c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes#define NFPREG 32 16302c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes 16402c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughestypedef unsigned long long greg_t; 16502c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughestypedef greg_t gregset_t[NGREG]; 16602c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes 16702c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughestypedef struct fpregset { 16802c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes union { 16902c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes double fp_dregs[NFPREG]; 17002c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes struct { 17102c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes float _fp_fregs; 17202c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned _fp_pad; 17302c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes } fp_fregs[NFPREG]; 17402c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes } fp_r; 17502c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes} fpregset_t; 17602c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes 17702c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughestypedef struct { 17802c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned regmask; 17902c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned status; 18002c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes greg_t pc; 18102c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes gregset_t gregs; 18202c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes fpregset_t fpregs; 18302c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned fp_owned; 18402c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned fpc_csr; 18502c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned fpc_eir; 18602c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned used_math; 18702c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned dsp; 18802c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes greg_t mdhi; 18902c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes greg_t mdlo; 19002c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned long hi1; 19102c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned long lo1; 19202c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned long hi2; 19302c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned long lo2; 19402c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned long hi3; 19502c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned long lo3; 19602c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes} mcontext_t; 19702c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes 19802c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughestypedef struct ucontext { 19902c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned long uc_flags; 20002c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes struct ucontext* uc_link; 20102c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes stack_t uc_stack; 20202c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes mcontext_t uc_mcontext; 20302c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes sigset_t uc_sigmask; 20402c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes} ucontext_t; 205677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 206677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#elif defined(__mips64__) 207677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 208677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#error TODO 209677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 210677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#elif defined(__x86_64__) 211e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 212e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupinenum { 213e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R8 = 0, 214e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R9, 215e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R10, 216e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R11, 217e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R12, 218e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R13, 219e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R14, 220e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R15, 221e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RDI, 222e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RSI, 223e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RBP, 224e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RBX, 225e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RDX, 226e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RAX, 227e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RCX, 228e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RSP, 229e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RIP, 230e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_EFL, 231e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_CSGSFS, 232e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_ERR, 233e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_TRAPNO, 234e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_OLDMASK, 235e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_CR2, 236e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin NGREG 237e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin}; 238e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 239e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupintypedef long greg_t; 240e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupintypedef greg_t gregset_t[NGREG]; 241e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 242a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravlestruct _libc_fpxreg { 243a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle unsigned short significand[4]; 244a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle unsigned short exponent; 245a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle unsigned short padding[3]; 246a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle}; 247a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle 248a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravlestruct _libc_xmmreg { 249a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint32_t element[4]; 250a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle}; 251a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle 252a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravlestruct _libc_fpstate { 253a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint16_t cwd; 254a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint16_t swd; 255a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint16_t ftw; 256a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint16_t fop; 257a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint64_t rip; 258a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint64_t rdp; 259a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint32_t mxcsr; 260a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint32_t mxcr_mask; 261a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle struct _libc_fpxreg _st[8]; 262a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle struct _libc_xmmreg _xmm[16]; 263a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint32_t padding[24]; 264a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle}; 265a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle 266a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravletypedef struct _libc_fpstate* fpregset_t; 267e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 268e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupintypedef struct { 269e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin gregset_t gregs; 270e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin fpregset_t fpregs; 271c5992a036ba380f56e5be3d2d6b1abb34064b20eElliott Hughes unsigned long __reserved1[8]; 272e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin} mcontext_t; 273e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 274e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupintypedef struct ucontext { 275e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin unsigned long uc_flags; 276e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin struct ucontext* uc_link; 277e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin stack_t uc_stack; 278e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin mcontext_t uc_mcontext; 279e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin sigset_t uc_sigmask; 280a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle char __padding[128 - sizeof(sigset_t)]; 281a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle struct _libc_fpstate __fpregs_mem; 282e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin} ucontext_t; 283e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 284677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#endif 285e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 286e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin__END_DECLS 287e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 288e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin#endif /* _SYS_UCONTEXT_H_ */ 289