Do not include <sys/user.h>.
[kopensolaris-gnu/glibc.git] / sysdeps / unix / sysv / linux / i386 / sys / ucontext.h
1 /* Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Library General Public License as
6    published by the Free Software Foundation; either version 2 of the
7    License, or (at your option) any later version.
8
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    Library General Public License for more details.
13
14    You should have received a copy of the GNU Library General Public
15    License along with the GNU C Library; see the file COPYING.LIB.  If not,
16    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17    Boston, MA 02111-1307, USA.  */
18
19 #ifndef _SYS_UCONTEXT_H
20 #define _SYS_UCONTEXT_H 1
21
22 #include <features.h>
23 #include <signal.h>
24
25 /* We need the signal context definitions even if they are not used
26    included in <signal.h>.  */
27 #include <bits/sigcontext.h>
28
29
30 /* Type for general register.  */
31 typedef int greg_t;
32
33 /* Number of general registers.  */
34 #define NGREG   19
35
36 /* Container for all general registers.  */
37 typedef greg_t gregset_t[NGREG];
38
39 #ifdef __USE_GNU
40 /* Number of each register is the `gregset_t' array.  */
41 enum
42 {
43   REG_GS = 0,
44 # define REG_GS         REG_GS
45   REG_FS,
46 # define REG_FS         REG_FS
47   REG_ES,
48 # define REG_ES         REG_ES
49   REG_DS,
50 # define REG_DS         REG_DS
51   REG_EDI,
52 # define REG_EDI        REG_EDI
53   REG_ESI,
54 # define REG_ESI        REG_ESI
55   REG_EBP,
56 # define REG_EBP        REG_EBP
57   REG_ESP,
58 # define REG_ESP        REG_ESP
59   REG_EBX,
60 # define REG_EBX        REG_EBX
61   REG_EDX,
62 # define REG_EDX        REG_EDX
63   REG_ECX,
64 # define REG_ECX        REG_ECX
65   REG_EAX,
66 # define REG_EAX        REG_EAX
67   REG_TRAPNO,
68 # define REG_TRAPNO     REG_TRAPNO
69   REG_ERR,
70 # define REG_ERR        REG_ERR
71   REG_EIP,
72 # define REG_EIP        REG_EIP
73   REG_CS,
74 # define REG_CS         REG_CS
75   REG_EFL,
76 # define REG_EFL        REG_EFL
77   REG_UESP,
78 # define REG_UESP       REG_UESP
79   REG_SS
80 # define REG_SS REG_SS
81 };
82 #endif
83
84 /* Definitions taken from the kernel headers.  */
85 struct _libc_fpreg
86 {
87   unsigned short int significand[4];
88   unsigned short int exponent;
89 };
90
91 struct _libc_fpstate
92 {
93   unsigned long int cw;
94   unsigned long int sw;
95   unsigned long int tag;
96   unsigned long int ipoff;
97   unsigned long int cssel;
98   unsigned long int dataoff;
99   unsigned long int datasel;
100   struct _libc_fpreg _st[8];
101   unsigned long int status;
102 };
103
104 /* Structure to describe FPU registers.  */
105 typedef struct _libc_fpstate *fpregset_t;
106
107 /* Context to describe whole processor state.  */
108 typedef struct
109   {
110     gregset_t gregs;
111     /* Due to Linux's history we have to use a pointer here.  The SysV/i386
112        ABI requires a struct with the values.  */
113     fpregset_t fpregs;
114     unsigned long int oldmask;
115     unsigned long int cr2;
116   } mcontext_t;
117
118 /* Userlevel context.  */
119 typedef struct ucontext
120   {
121     unsigned long int uc_flags;
122     struct ucontext *uc_link;
123     stack_t uc_stack;
124     mcontext_t uc_mcontext;
125     __sigset_t uc_sigmask;
126     struct _libc_fpstate __fpregs_mem;
127   } ucontext_t;
128
129 #endif /* sys/ucontext.h */