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