1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
|
/* $OpenBSD: frame.h,v 1.3 2004/08/10 20:28:13 deraadt Exp $ */
/*
* Copyright (c) 1998-2003 Opsycon AB (www.opsycon.se)
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*/
#ifndef _MIPS64_FRAME_H_
#define _MIPS64_FRAME_H_
/*
* The layout of this *must* match with regnum.h or bad things
* will happen. libc setjmp/longjmp depends on this as well.
*/
struct trap_frame {
register_t zero;
register_t ast;
register_t v0;
register_t v1;
register_t a0;
register_t a1;
register_t a2;
register_t a3;
register_t t0;
register_t t1;
register_t t2;
register_t t3;
#define a4 t0
#define a5 t1
#define a6 t2
#define a7 t3
register_t t4;
register_t t5;
register_t t6;
register_t t7;
register_t s0;
register_t s1;
register_t s2;
register_t s3;
register_t s4;
register_t s5;
register_t s6;
register_t s7;
register_t t8;
register_t t9;
register_t k0;
register_t k1;
register_t gp;
register_t sp;
register_t s8;
register_t ra;
register_t sr;
register_t mullo;
register_t mulhi;
register_t badvaddr;
register_t cause;
register_t pc;
register_t ic;
register_t cpl;
/* From here and on, only saved user processes. */
f_register_t f0;
f_register_t f1;
f_register_t f2;
f_register_t f3;
f_register_t f4;
f_register_t f5;
f_register_t f6;
f_register_t f7;
f_register_t f8;
f_register_t f9;
f_register_t f10;
f_register_t f11;
f_register_t f12;
f_register_t f13;
f_register_t f14;
f_register_t f15;
f_register_t f16;
f_register_t f17;
f_register_t f18;
f_register_t f19;
f_register_t f20;
f_register_t f21;
f_register_t f22;
f_register_t f23;
f_register_t f24;
f_register_t f25;
f_register_t f26;
f_register_t f27;
f_register_t f28;
f_register_t f29;
f_register_t f30;
f_register_t f31;
register_t fsr;
};
#if 0
struct trap_frame32 {
int32_t zero;
int32_t ast;
int32_t v0;
int32_t v1;
int32_t a0;
int32_t a1;
int32_t a2;
int32_t a3;
int32_t t0;
int32_t t1;
int32_t t2;
int32_t t3;
int32_t t4;
int32_t t5;
int32_t t6;
int32_t t7;
int32_t s0;
int32_t s1;
int32_t s2;
int32_t s3;
int32_t s4;
int32_t s5;
int32_t s6;
int32_t s7;
int32_t t8;
int32_t t9;
int32_t k0;
int32_t k1;
int32_t gp;
int32_t sp;
int32_t s8;
int32_t ra;
int32_t sr;
int32_t mullo;
int32_t mulhi;
int32_t badvaddr;
int32_t cause;
int32_t pc;
int32_t ic;
int32_t cpl;
/* From here and on, only saved user processes. */
f_register_t f0;
f_register_t f1;
f_register_t f2;
f_register_t f3;
f_register_t f4;
f_register_t f5;
f_register_t f6;
f_register_t f7;
f_register_t f8;
f_register_t f9;
f_register_t f10;
f_register_t f11;
f_register_t f12;
f_register_t f13;
f_register_t f14;
f_register_t f15;
f_register_t f16;
f_register_t f17;
f_register_t f18;
f_register_t f19;
f_register_t f20;
f_register_t f21;
f_register_t f22;
f_register_t f23;
f_register_t f24;
f_register_t f25;
f_register_t f26;
f_register_t f27;
f_register_t f28;
f_register_t f29;
f_register_t f30;
f_register_t f31;
register_t fsr;
};
#endif
#endif /* !_MIPS64_FRAME_H_ */
|