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