(ucontext): Rename field uc_links to
[kopensolaris-gnu/glibc.git] / sysdeps / mips / sys / ucontext.h
1 /* Copyright (C) 1998, 1999 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 /* System V/mips ABI compliant context switching support.  */
20
21 #ifndef _SYS_UCONTEXT_H
22 #define _SYS_UCONTEXT_H 1
23
24 #include <features.h>
25 #include <signal.h>
26
27 /* Type for general register.  */
28 typedef unsigned int greg_t;
29
30 /* Number of general registers.  */
31 #define NGREG   36
32
33 /* Container for all general registers.  */
34 typedef greg_t gregset_t[NGREG];
35
36 /* Number of each register is the `gregset_t' array.  */
37 enum
38 {
39   CTX_R0 = 0,
40 #define CTX_R0  CTX_R0
41   CTX_AT = 1,
42 #define CTX_AT  CTX_AT
43   CTX_V0 = 2,
44 #define CTX_V0  CTX_V0
45   CTX_V1 = 3,
46 #define CTX_V1  CTX_V1
47   CTX_A0 = 4,
48 #define CTX_A0  CTX_A0
49   CTX_A1 = 5,
50 #define CTX_A1  CTX_A1
51   CTX_A2 = 6,
52 #define CTX_A2  CTX_A2
53   CTX_A3 = 7,
54 #define CTX_A3  CTX_A3
55   CTX_T0 = 8,
56 #define CTX_T0  CTX_T0
57   CTX_T1 = 9,
58 #define CTX_T1  CTX_T1
59   CTX_T2 = 10,
60 #define CTX_T2  CTX_T2
61   CTX_T3 = 11,
62 #define CTX_T3  CTX_T3
63   CTX_T4 = 12,
64 #define CTX_T4  CTX_T4
65   CTX_T5 = 13,
66 #define CTX_T5  CTX_T5
67   CTX_T6 = 14,
68 #define CTX_T6  CTX_T6
69   CTX_T7 = 15,
70 #define CTX_T7  CTX_T7
71   CTX_S0 = 16,
72 #define CTX_S0  CTX_S0
73   CTX_S1 = 17,
74 #define CTX_S1  CTX_S1
75   CTX_S2 = 18,
76 #define CTX_S2  CTX_S2
77   CTX_S3 = 19,
78 #define CTX_S3  CTX_S3
79   CTX_S4 = 20,
80 #define CTX_S4  CTX_S4
81   CTX_S5 = 21,
82 #define CTX_S5  CTX_S5
83   CTX_S6 = 22,
84 #define CTX_S6  CTX_S6
85   CTX_S7 = 23,
86 #define CTX_S7  CTX_S7
87   CTX_T8 = 24,
88 #define CTX_T8  CTX_T8
89   CTX_T9 = 25,
90 #define CTX_T9  CTX_T9
91   CTX_K0 = 26,
92 #define CTX_K0  CTX_K0
93   CTX_K1 = 27,
94 #define CTX_K1  CTX_K1
95   CTX_GP = 28,
96 #define CTX_GP  CTX_GP
97   CTX_SP = 29,
98 #define CTX_SP  CTX_SP
99   CTX_S8 = 30,
100 #define CTX_S8  CTX_S8
101   CTX_RA = 31,
102 #define CTX_RA  CTX_RA
103   CTX_MDLO = 32,
104 #define CTX_MDLO        CTX_MDLO
105   CTX_MDHI = 33,
106 #define CTX_MDHI        CTX_MDHI
107   CTX_CAUSE = 34,
108 #define CTX_CAUSE       CTX_CAUSE
109   CTX_EPC = 35,
110 #define CTX_EPC CTX_EPC
111 };
112
113 /* Structure to describe FPU registers.  */
114 typedef struct fpregset
115 {
116   union
117   {
118     double fp_dregs[16];
119     float fp_fregs[32];
120     unsigned int fp_regs[32];
121   } fp_r;
122   unsigned int fp_csr;
123   unsigned int fp_pad;
124 } fpregset_t;
125
126 /* Context to describe whole processor state.  */
127 typedef struct
128 {
129   gregset_t gpregs;
130   fpregset_t fpregs;
131 } mcontext_t;
132
133 /* Userlevel context.  */
134 typedef struct ucontext
135 {
136   unsigned long int uc_flags;
137   struct ucontext *uc_link;
138   __sigset_t uc_sigmask;
139   stack_t uc_stack;
140   mcontext_t uc_mcontext;
141   long int uc_filler[48];
142 } ucontext_t;
143
144 #endif /* sys/ucontext.h */