2.9
[glibc/nacl-glibc.git] / sysdeps / i386 / sys / ucontext.h
blob0202eb0e095e4a9e0f21bba87d975a7874ef48d0
1 /* Copyright (C) 1997,99,2000 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
14 You should have received a copy of the GNU Lesser General Public
15 License along with the GNU C Library; if not, write to the Free
16 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17 02111-1307 USA. */
19 /* System V/i386 ABI compliant context switching support. */
21 #ifndef _SYS_UCONTEXT_H
22 #define _SYS_UCONTEXT_H 1
24 #include <features.h>
25 #include <signal.h>
27 /* Type for general register. */
28 typedef int greg_t;
30 /* Number of general registers. */
31 #define NGREG 19
33 /* Container for all general registers. */
34 typedef greg_t gregset_t[NGREG];
36 /* Number of each register is the `gregset_t' array. */
37 enum
39 REG_GS = 0,
40 #define REG_GS REG_GS
41 REG_FS,
42 #define REG_FS REG_FS
43 REG_ES,
44 #define REG_ES REG_ES
45 REG_DS,
46 #define REG_DS REG_DS
47 REG_EDI,
48 #define REG_EDI REG_EDI
49 REG_ESI,
50 #define REG_ESI REG_ESI
51 REG_EBP,
52 #define REG_EBP REG_EBP
53 REG_ESP,
54 #define REG_ESP REG_ESP
55 REG_EBX,
56 #define REG_EBX REG_EBX
57 REG_EDX,
58 #define REG_EDX REG_EDX
59 REG_ECX,
60 #define REG_ECX REG_ECX
61 REG_EAX,
62 #define REG_EAX REG_EAX
63 REG_TRAPNO,
64 #define REG_TRAPNO REG_TRAPNO
65 REG_ERR,
66 #define REG_ERR REG_ERR
67 REG_EIP,
68 #define REG_EIP REG_EIP
69 REG_CS,
70 #define REG_CS REG_CS
71 REG_EFL,
72 #define REG_EFL REG_EFL
73 REG_UESP,
74 #define REG_UESP REG_UESP
75 REG_SS
76 #define REG_SS REG_SS
79 /* Structure to describe FPU registers. */
80 typedef struct fpregset
82 union
84 struct fpchip_state
86 int state[27];
87 int status;
88 } fpchip_state;
90 struct fp_emul_space
92 char fp_emul[246];
93 char fp_epad[2];
94 } fp_emul_space;
96 int f_fpregs[62];
97 } fp_reg_set;
99 long int f_wregs[33];
100 } fpregset_t;
102 /* Context to describe whole processor state. */
103 typedef struct
105 gregset_t gregs;
106 fpregset_t fpregs;
107 } mcontext_t;
109 /* Userlevel context. */
110 typedef struct ucontext
112 unsigned long int uc_flags;
113 struct ucontext *uc_link;
114 __sigset_t uc_sigmask;
115 stack_t uc_stack;
116 mcontext_t uc_mcontext;
117 long int uc_filler[5];
118 } ucontext_t;
120 #endif /* sys/ucontext.h */