ucontext.h revision 50249bca00d2c7d237e67d4d276057bb59508804
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;
153677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes  /* TODO: __fpregs_mem? */
154677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes} ucontext_t;
155677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes
156677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#elif defined(__mips__)
157677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes
15802c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes/* glibc doesn't have names for MIPS registers. */
15902c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes
16002c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes#define NGREG 32
16102c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes#define NFPREG 32
16202c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes
16302c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughestypedef unsigned long long greg_t;
16402c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughestypedef greg_t gregset_t[NGREG];
16502c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes
16602c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughestypedef struct fpregset {
16702c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  union {
16802c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes    double fp_dregs[NFPREG];
16902c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes    struct {
17002c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes      float _fp_fregs;
17102c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes      unsigned _fp_pad;
17202c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes    } fp_fregs[NFPREG];
17302c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  } fp_r;
17402c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes} fpregset_t;
17502c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes
17602c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughestypedef struct {
17702c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  unsigned regmask;
17802c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  unsigned status;
17902c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  greg_t pc;
18002c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  gregset_t gregs;
18102c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  fpregset_t fpregs;
18202c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  unsigned fp_owned;
18302c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  unsigned fpc_csr;
18402c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  unsigned fpc_eir;
18502c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  unsigned used_math;
18602c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  unsigned dsp;
18702c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  greg_t mdhi;
18802c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  greg_t mdlo;
18902c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  unsigned long hi1;
19002c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  unsigned long lo1;
19102c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  unsigned long hi2;
19202c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  unsigned long lo2;
19302c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  unsigned long hi3;
19402c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  unsigned long lo3;
19502c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes} mcontext_t;
19602c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes
19702c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughestypedef struct ucontext {
19802c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  unsigned long uc_flags;
19902c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  struct ucontext* uc_link;
20002c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  stack_t uc_stack;
20102c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  mcontext_t uc_mcontext;
20202c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes  sigset_t uc_sigmask;
20302c661b88384a4a0cd5dd2b32123968bd992873fElliott Hughes} ucontext_t;
204677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes
205677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#elif defined(__mips64__)
206677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes
207677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#error TODO
208677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes
209677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#elif defined(__x86_64__)
210e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin
211e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupinenum {
212e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_R8 = 0,
213e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_R9,
214e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_R10,
215e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_R11,
216e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_R12,
217e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_R13,
218e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_R14,
219e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_R15,
220e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_RDI,
221e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_RSI,
222e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_RBP,
223e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_RBX,
224e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_RDX,
225e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_RAX,
226e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_RCX,
227e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_RSP,
228e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_RIP,
229e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_EFL,
230e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_CSGSFS,
231e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_ERR,
232e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_TRAPNO,
233e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_OLDMASK,
234e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  REG_CR2,
235e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  NGREG
236e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin};
237e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin
238e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupintypedef long greg_t;
239e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupintypedef greg_t gregset_t[NGREG];
240e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin
241e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupintypedef struct user_i387_struct* fpregset_t;
242e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin
243e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupintypedef struct {
244e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  gregset_t gregs;
245e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  fpregset_t fpregs;
246e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  /* TODO: reserved space? */
247e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin} mcontext_t;
248e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin
249e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupintypedef struct ucontext {
250e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  unsigned long uc_flags;
251e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  struct ucontext* uc_link;
252e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  stack_t uc_stack;
253e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  mcontext_t uc_mcontext;
254e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  sigset_t uc_sigmask;
255e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin  /* TODO: __fpregs_mem? */
256e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin} ucontext_t;
257e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin
258677a07cb9a3f5964e9ead4d37b9f775d971c61e0Elliott Hughes#endif
259e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin
260e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin__END_DECLS
261e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin
262e61d106008f7d77fa1c0de43ac27311320225135Pavel Chupin#endif /* _SYS_UCONTEXT_H_ */
263