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 32203e13d97de840e01eded6a267fef9f245cf3a15Elliott Hughes#include <sys/cdefs.h> 3316016df79f846d6d21266c3b1dce1e7c24dc4be1Josh Gao 3416016df79f846d6d21266c3b1dce1e7c24dc4be1Josh Gao#include <signal.h> 35e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin#include <sys/user.h> 36e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 37e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin__BEGIN_DECLS 38e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 39677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#if defined(__arm__) 40677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 414e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughesenum { 424e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R0 = 0, 434e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R1, 444e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R2, 454e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R3, 464e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R4, 474e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R5, 484e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R6, 494e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R7, 504e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R8, 514e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R9, 524e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R10, 534e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R11, 544e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R12, 554e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R13, 564e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R14, 574e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes REG_R15, 584e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes}; 594e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes 604e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes#define NGREG 18 /* Like glibc. */ 614e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes 624e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughestypedef int greg_t; 634e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughestypedef greg_t gregset_t[NGREG]; 64bf18c61798d1ae9197ae087ed85e94eef55e8678Dan Alberttypedef struct user_fpregs fpregset_t; 654e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes 664e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes#include <asm/sigcontext.h> 674e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughestypedef struct sigcontext mcontext_t; 684e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes 694e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughestypedef struct ucontext { 704e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes unsigned long uc_flags; 714e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes struct ucontext* uc_link; 724e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes stack_t uc_stack; 734e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes mcontext_t uc_mcontext; 7426a8eb50a84e131d34d10d5d167d67e9995399bdElliott Hughes sigset_t uc_sigmask; 753ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes /* Android has a wrong (smaller) sigset_t on ARM. */ 7626a8eb50a84e131d34d10d5d167d67e9995399bdElliott Hughes uint32_t __padding_rt_sigset; 773ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes /* The kernel adds extra padding after uc_sigmask to match glibc sigset_t on ARM. */ 78bdca3802c9c9d033fbc553ed24b92ac78859a463Calin Juravle char __padding[120]; 790e85fb6121cf365207ee737314130a526dbe0eacCalin Juravle unsigned long uc_regspace[128] __attribute__((__aligned__(8))); 804e72fcc3c2b8bcaab653732dfd3edd137602c648Elliott Hughes} ucontext_t; 81677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 827b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy#elif defined(__aarch64__) 83677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 848e4d371091e5738346f5c6ad395b8487c2a5ec67Elliott Hughes#define NGREG 34 /* x0..x30 + sp + pc + pstate */ 858e4d371091e5738346f5c6ad395b8487c2a5ec67Elliott Hughestypedef unsigned long greg_t; 868e4d371091e5738346f5c6ad395b8487c2a5ec67Elliott Hughestypedef greg_t gregset_t[NGREG]; 870577733c2e15a4745d5c75f59e5f56dd179a4aa7Elliott Hughestypedef struct user_fpsimd_struct fpregset_t; 88bf18c61798d1ae9197ae087ed85e94eef55e8678Dan Albert 897b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy#include <asm/sigcontext.h> 907b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroytypedef struct sigcontext mcontext_t; 917b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy 927b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroytypedef struct ucontext { 937b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy unsigned long uc_flags; 947b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy struct ucontext *uc_link; 957b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy stack_t uc_stack; 967b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy sigset_t uc_sigmask; 973ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes /* The kernel adds extra padding after uc_sigmask to match glibc sigset_t on ARM64. */ 9850249bca00d2c7d237e67d4d276057bb59508804Elliott Hughes char __padding[128 - sizeof(sigset_t)]; 997b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy mcontext_t uc_mcontext; 1007b95807fa086174cbab146cbd7c60a6d2e386917Ross McIlroy} ucontext_t; 101677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 102677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#elif defined(__i386__) 103677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 104677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughesenum { 105677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_GS = 0, 106677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_FS, 107677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_ES, 108677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_DS, 109677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_EDI, 110677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_ESI, 111677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_EBP, 112677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_ESP, 113677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_EBX, 114677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_EDX, 115677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_ECX, 116677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_EAX, 117677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_TRAPNO, 118677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_ERR, 119677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_EIP, 120677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_CS, 121677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_EFL, 122677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_UESP, 123677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes REG_SS, 124677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes NGREG 125677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes}; 126677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 127677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughestypedef int greg_t; 128677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughestypedef greg_t gregset_t[NGREG]; 129677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 130677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughesstruct _libc_fpreg { 131677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned short significand[4]; 132677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned short exponent; 133677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes}; 134677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 135677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughesstruct _libc_fpstate { 136677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long cw; 137677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long sw; 138677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long tag; 139677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long ipoff; 140677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long cssel; 141677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long dataoff; 142677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long datasel; 143677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes struct _libc_fpreg _st[8]; 144677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long status; 145677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes}; 146677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 147677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughestypedef struct _libc_fpstate* fpregset_t; 148677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 149677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughestypedef struct { 150677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes gregset_t gregs; 151677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes fpregset_t fpregs; 152677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long oldmask; 153677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long cr2; 154677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes} mcontext_t; 155677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 156677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughestypedef struct ucontext { 157677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes unsigned long uc_flags; 158677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes struct ucontext* uc_link; 159677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes stack_t uc_stack; 160677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes mcontext_t uc_mcontext; 16126a8eb50a84e131d34d10d5d167d67e9995399bdElliott Hughes sigset_t uc_sigmask; 1623ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes /* Android has a wrong (smaller) sigset_t on x86. */ 16326a8eb50a84e131d34d10d5d167d67e9995399bdElliott Hughes uint32_t __padding_rt_sigset; 164a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle struct _libc_fpstate __fpregs_mem; 165677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes} ucontext_t; 166677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 167677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#elif defined(__mips__) 168677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 16902c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes/* glibc doesn't have names for MIPS registers. */ 17002c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes 17102c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes#define NGREG 32 17202c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes#define NFPREG 32 17302c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes 17402c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughestypedef unsigned long long greg_t; 17502c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughestypedef greg_t gregset_t[NGREG]; 17602c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes 17702c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughestypedef struct fpregset { 17802c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes union { 17902c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes double fp_dregs[NFPREG]; 18002c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes struct { 18102c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes float _fp_fregs; 18202c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned _fp_pad; 18302c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes } fp_fregs[NFPREG]; 18402c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes } fp_r; 18502c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes} fpregset_t; 18602c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes 187e247e1c89e068f5c1e1d235157d7f60c50c67d0cFaraz Shahbazker#ifdef __LP64__ 188e247e1c89e068f5c1e1d235157d7f60c50c67d0cFaraz Shahbazkertypedef struct { 189e247e1c89e068f5c1e1d235157d7f60c50c67d0cFaraz Shahbazker gregset_t gregs; 190e247e1c89e068f5c1e1d235157d7f60c50c67d0cFaraz Shahbazker fpregset_t fpregs; 191e247e1c89e068f5c1e1d235157d7f60c50c67d0cFaraz Shahbazker greg_t mdhi; 192e247e1c89e068f5c1e1d235157d7f60c50c67d0cFaraz Shahbazker greg_t hi1; 193e247e1c89e068f5c1e1d235157d7f60c50c67d0cFaraz Shahbazker greg_t hi2; 194e247e1c89e068f5c1e1d235157d7f60c50c67d0cFaraz Shahbazker greg_t hi3; 195e247e1c89e068f5c1e1d235157d7f60c50c67d0cFaraz Shahbazker greg_t mdlo; 196e247e1c89e068f5c1e1d235157d7f60c50c67d0cFaraz Shahbazker greg_t lo1; 197e247e1c89e068f5c1e1d235157d7f60c50c67d0cFaraz Shahbazker greg_t lo2; 198e247e1c89e068f5c1e1d235157d7f60c50c67d0cFaraz Shahbazker greg_t lo3; 199e247e1c89e068f5c1e1d235157d7f60c50c67d0cFaraz Shahbazker greg_t pc; 200e247e1c89e068f5c1e1d235157d7f60c50c67d0cFaraz Shahbazker uint32_t fpc_csr; 201e247e1c89e068f5c1e1d235157d7f60c50c67d0cFaraz Shahbazker uint32_t used_math; 202e247e1c89e068f5c1e1d235157d7f60c50c67d0cFaraz Shahbazker uint32_t dsp; 203e247e1c89e068f5c1e1d235157d7f60c50c67d0cFaraz Shahbazker uint32_t reserved; 204e247e1c89e068f5c1e1d235157d7f60c50c67d0cFaraz Shahbazker} mcontext_t; 205e247e1c89e068f5c1e1d235157d7f60c50c67d0cFaraz Shahbazker#else 20602c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughestypedef struct { 20702c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned regmask; 20802c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned status; 20902c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes greg_t pc; 21002c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes gregset_t gregs; 21102c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes fpregset_t fpregs; 21202c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned fp_owned; 21302c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned fpc_csr; 21402c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned fpc_eir; 21502c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned used_math; 21602c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned dsp; 21702c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes greg_t mdhi; 21802c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes greg_t mdlo; 21902c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned long hi1; 22002c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned long lo1; 22102c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned long hi2; 22202c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned long lo2; 22302c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned long hi3; 22402c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned long lo3; 22502c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes} mcontext_t; 226e247e1c89e068f5c1e1d235157d7f60c50c67d0cFaraz Shahbazker#endif 22702c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes 22802c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughestypedef struct ucontext { 22902c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes unsigned long uc_flags; 23002c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes struct ucontext* uc_link; 23102c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes stack_t uc_stack; 23202c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes mcontext_t uc_mcontext; 23302c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes sigset_t uc_sigmask; 23402c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes} ucontext_t; 235677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes 236677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#elif defined(__x86_64__) 237e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 238e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupinenum { 239e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R8 = 0, 240e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R9, 241e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R10, 242e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R11, 243e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R12, 244e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R13, 245e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R14, 246e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_R15, 247e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RDI, 248e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RSI, 249e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RBP, 250e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RBX, 251e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RDX, 252e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RAX, 253e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RCX, 254e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RSP, 255e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_RIP, 256e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_EFL, 257e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_CSGSFS, 258e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_ERR, 259e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_TRAPNO, 260e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_OLDMASK, 261e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin REG_CR2, 262e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin NGREG 263e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin}; 264e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 265e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupintypedef long greg_t; 266e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupintypedef greg_t gregset_t[NGREG]; 267e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 268a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravlestruct _libc_fpxreg { 269a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle unsigned short significand[4]; 270a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle unsigned short exponent; 271a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle unsigned short padding[3]; 272a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle}; 273a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle 274a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravlestruct _libc_xmmreg { 275a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint32_t element[4]; 276a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle}; 277a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle 278a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravlestruct _libc_fpstate { 279a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint16_t cwd; 280a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint16_t swd; 281a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint16_t ftw; 282a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint16_t fop; 283a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint64_t rip; 284a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint64_t rdp; 285a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint32_t mxcsr; 286a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint32_t mxcr_mask; 287a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle struct _libc_fpxreg _st[8]; 288a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle struct _libc_xmmreg _xmm[16]; 289a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle uint32_t padding[24]; 290a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle}; 291a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle 292a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravletypedef struct _libc_fpstate* fpregset_t; 293e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 294e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupintypedef struct { 295e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin gregset_t gregs; 296e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin fpregset_t fpregs; 297c5992a036ba380f56e5be3d2d6b1abb34064b20eElliott Hughes unsigned long __reserved1[8]; 298e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin} mcontext_t; 299e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 300e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupintypedef struct ucontext { 301e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin unsigned long uc_flags; 302e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin struct ucontext* uc_link; 303e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin stack_t uc_stack; 304e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin mcontext_t uc_mcontext; 305e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin sigset_t uc_sigmask; 306a6ab968ca0af18d84620a692f76af0d8e857c9c8Calin Juravle struct _libc_fpstate __fpregs_mem; 307e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin} ucontext_t; 308e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 309677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#endif 310e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 311e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin__END_DECLS 312e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin 313e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin#endif /* _SYS_UCONTEXT_H_ */ 314