]>
Commit | Line | Data |
---|---|---|
688903eb | 1 | /* Copyright (C) 1998-2018 Free Software Foundation, Inc. |
3f764c1f UD |
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 | |
3214b89b AJ |
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. | |
3f764c1f UD |
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 | |
3214b89b | 12 | Lesser General Public License for more details. |
3f764c1f | 13 | |
3214b89b | 14 | You should have received a copy of the GNU Lesser General Public |
ab84e3ff PE |
15 | License along with the GNU C Library. If not, see |
16 | <http://www.gnu.org/licenses/>. */ | |
3f764c1f UD |
17 | |
18 | /* System V/mips ABI compliant context switching support. */ | |
19 | ||
20 | #ifndef _SYS_UCONTEXT_H | |
21 | #define _SYS_UCONTEXT_H 1 | |
22 | ||
23 | #include <features.h> | |
3f764c1f | 24 | |
4fa9b3bf | 25 | #include <bits/types.h> |
cfed8ece | 26 | #include <bits/types/sigset_t.h> |
0bcec532 | 27 | #include <bits/types/stack_t.h> |
c66b29f9 ZW |
28 | |
29 | #include <sgidefs.h> | |
30 | ||
31 | ||
3f764c1f | 32 | /* Type for general register. */ |
b8ddf7a1 | 33 | #if _MIPS_SIM == _ABIO32 |
ca2b264c AO |
34 | typedef __uint32_t greg_t; |
35 | #else | |
36 | typedef __uint64_t greg_t; | |
37 | #endif | |
3f764c1f UD |
38 | |
39 | /* Number of general registers. */ | |
139904b7 JM |
40 | #define __NGREG 36 |
41 | #ifdef __USE_MISC | |
42 | # define NGREG __NGREG | |
43 | #endif | |
3f764c1f UD |
44 | |
45 | /* Container for all general registers. */ | |
139904b7 | 46 | typedef greg_t gregset_t[__NGREG]; |
3f764c1f | 47 | |
5df4854e | 48 | #ifdef __USE_MISC |
3f764c1f UD |
49 | /* Number of each register is the `gregset_t' array. */ |
50 | enum | |
51 | { | |
52 | CTX_R0 = 0, | |
5df4854e | 53 | # define CTX_R0 CTX_R0 |
3f764c1f | 54 | CTX_AT = 1, |
5df4854e | 55 | # define CTX_AT CTX_AT |
3f764c1f | 56 | CTX_V0 = 2, |
5df4854e | 57 | # define CTX_V0 CTX_V0 |
3f764c1f | 58 | CTX_V1 = 3, |
5df4854e | 59 | # define CTX_V1 CTX_V1 |
3f764c1f | 60 | CTX_A0 = 4, |
5df4854e | 61 | # define CTX_A0 CTX_A0 |
3f764c1f | 62 | CTX_A1 = 5, |
5df4854e | 63 | # define CTX_A1 CTX_A1 |
3f764c1f | 64 | CTX_A2 = 6, |
5df4854e | 65 | # define CTX_A2 CTX_A2 |
3f764c1f | 66 | CTX_A3 = 7, |
5df4854e | 67 | # define CTX_A3 CTX_A3 |
3f764c1f | 68 | CTX_T0 = 8, |
5df4854e | 69 | # define CTX_T0 CTX_T0 |
3f764c1f | 70 | CTX_T1 = 9, |
5df4854e | 71 | # define CTX_T1 CTX_T1 |
3f764c1f | 72 | CTX_T2 = 10, |
5df4854e | 73 | # define CTX_T2 CTX_T2 |
3f764c1f | 74 | CTX_T3 = 11, |
5df4854e | 75 | # define CTX_T3 CTX_T3 |
3f764c1f | 76 | CTX_T4 = 12, |
5df4854e | 77 | # define CTX_T4 CTX_T4 |
3f764c1f | 78 | CTX_T5 = 13, |
5df4854e | 79 | # define CTX_T5 CTX_T5 |
3f764c1f | 80 | CTX_T6 = 14, |
5df4854e | 81 | # define CTX_T6 CTX_T6 |
3f764c1f | 82 | CTX_T7 = 15, |
5df4854e | 83 | # define CTX_T7 CTX_T7 |
3f764c1f | 84 | CTX_S0 = 16, |
5df4854e | 85 | # define CTX_S0 CTX_S0 |
3f764c1f | 86 | CTX_S1 = 17, |
5df4854e | 87 | # define CTX_S1 CTX_S1 |
3f764c1f | 88 | CTX_S2 = 18, |
5df4854e | 89 | # define CTX_S2 CTX_S2 |
3f764c1f | 90 | CTX_S3 = 19, |
5df4854e | 91 | # define CTX_S3 CTX_S3 |
3f764c1f | 92 | CTX_S4 = 20, |
5df4854e | 93 | # define CTX_S4 CTX_S4 |
3f764c1f | 94 | CTX_S5 = 21, |
5df4854e | 95 | # define CTX_S5 CTX_S5 |
3f764c1f | 96 | CTX_S6 = 22, |
5df4854e | 97 | # define CTX_S6 CTX_S6 |
3f764c1f | 98 | CTX_S7 = 23, |
5df4854e | 99 | # define CTX_S7 CTX_S7 |
3f764c1f | 100 | CTX_T8 = 24, |
5df4854e | 101 | # define CTX_T8 CTX_T8 |
3f764c1f | 102 | CTX_T9 = 25, |
5df4854e | 103 | # define CTX_T9 CTX_T9 |
3f764c1f | 104 | CTX_K0 = 26, |
5df4854e | 105 | # define CTX_K0 CTX_K0 |
3f764c1f | 106 | CTX_K1 = 27, |
5df4854e | 107 | # define CTX_K1 CTX_K1 |
3f764c1f | 108 | CTX_GP = 28, |
5df4854e | 109 | # define CTX_GP CTX_GP |
3f764c1f | 110 | CTX_SP = 29, |
5df4854e | 111 | # define CTX_SP CTX_SP |
3f764c1f | 112 | CTX_S8 = 30, |
5df4854e | 113 | # define CTX_S8 CTX_S8 |
3f764c1f | 114 | CTX_RA = 31, |
5df4854e | 115 | # define CTX_RA CTX_RA |
3f764c1f | 116 | CTX_MDLO = 32, |
5df4854e | 117 | # define CTX_MDLO CTX_MDLO |
3f764c1f | 118 | CTX_MDHI = 33, |
5df4854e | 119 | # define CTX_MDHI CTX_MDHI |
3f764c1f | 120 | CTX_CAUSE = 34, |
5df4854e | 121 | # define CTX_CAUSE CTX_CAUSE |
3f764c1f | 122 | CTX_EPC = 35, |
5df4854e | 123 | # define CTX_EPC CTX_EPC |
3f764c1f | 124 | }; |
5df4854e | 125 | #endif |
3f764c1f | 126 | |
139904b7 JM |
127 | #ifdef __USE_MISC |
128 | # define __ctx(fld) fld | |
129 | #else | |
130 | # define __ctx(fld) __ ## fld | |
131 | #endif | |
132 | ||
3f764c1f UD |
133 | /* Structure to describe FPU registers. */ |
134 | typedef struct fpregset | |
135 | { | |
136 | union | |
137 | { | |
b8ddf7a1 | 138 | #if _MIPS_SIM == _ABIO32 |
139904b7 JM |
139 | double __ctx(fp_dregs)[16]; |
140 | float __ctx(fp_fregs)[32]; | |
141 | unsigned int __ctx(fp_regs)[32]; | |
ca2b264c | 142 | #else |
139904b7 JM |
143 | double __ctx(fp_dregs)[32]; |
144 | /* float __ctx(fp_fregs)[32]; */ | |
145 | __uint64_t __ctx(fp_regs)[32]; | |
ca2b264c | 146 | #endif |
139904b7 JM |
147 | } __ctx(fp_r); |
148 | unsigned int __ctx(fp_csr); | |
149 | unsigned int __ctx(fp_pad); | |
3f764c1f UD |
150 | } fpregset_t; |
151 | ||
152 | /* Context to describe whole processor state. */ | |
153 | typedef struct | |
154 | { | |
139904b7 JM |
155 | gregset_t __ctx(gpregs); |
156 | fpregset_t __ctx(fpregs); | |
3f764c1f UD |
157 | } mcontext_t; |
158 | ||
159 | /* Userlevel context. */ | |
25128773 | 160 | typedef struct ucontext_t |
3f764c1f | 161 | { |
b8ddf7a1 | 162 | #if _MIPS_SIM == _ABIO32 |
3d452dab | 163 | unsigned long int __ctx(uc_flags); |
ca2b264c | 164 | #else |
3d452dab | 165 | __uint64_t __ctx(uc_flags); |
ca2b264c | 166 | #endif |
25128773 | 167 | struct ucontext_t *uc_link; |
cfed8ece | 168 | sigset_t uc_sigmask; |
3f764c1f UD |
169 | stack_t uc_stack; |
170 | mcontext_t uc_mcontext; | |
3d452dab | 171 | int __glibc_reserved1[48]; |
3f764c1f UD |
172 | } ucontext_t; |
173 | ||
3d452dab JM |
174 | #undef __ctx |
175 | ||
3f764c1f | 176 | #endif /* sys/ucontext.h */ |