faults.hh (6379:75d4aaf7dd54) faults.hh (7678:f19b6a3a8cec)
1/*
2 * Copyright (c) 2003-2005 The Regents of The University of Michigan
3 * Copyright (c) 2007 MIPS Technologies, Inc.
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met: redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer;
10 * redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution;
13 * neither the name of the copyright holders nor the names of its
14 * contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 *
29 * Authors: Gabe Black
30 * Korey Sewell
31 * Jaidev Patwardhan
32 */
33
34#ifndef __MIPS_FAULTS_HH__
35#define __MIPS_FAULTS_HH__
36
37#include "sim/faults.hh"
38
39namespace MipsISA
40{
41
42typedef const Addr FaultVect;
43
44class MipsFault : public FaultBase
45{
46 protected:
47 virtual bool skipFaultingInstruction() {return false;}
48 virtual bool setRestartAddress() {return true;}
49 public:
50 Addr badVAddr;
51 Addr entryHiAsid;
52 Addr entryHiVPN2;
53 Addr entryHiVPN2X;
54 Addr contextBadVPN2;
55#if FULL_SYSTEM
1/*
2 * Copyright (c) 2003-2005 The Regents of The University of Michigan
3 * Copyright (c) 2007 MIPS Technologies, Inc.
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met: redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer;
10 * redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution;
13 * neither the name of the copyright holders nor the names of its
14 * contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 *
29 * Authors: Gabe Black
30 * Korey Sewell
31 * Jaidev Patwardhan
32 */
33
34#ifndef __MIPS_FAULTS_HH__
35#define __MIPS_FAULTS_HH__
36
37#include "sim/faults.hh"
38
39namespace MipsISA
40{
41
42typedef const Addr FaultVect;
43
44class MipsFault : public FaultBase
45{
46 protected:
47 virtual bool skipFaultingInstruction() {return false;}
48 virtual bool setRestartAddress() {return true;}
49 public:
50 Addr badVAddr;
51 Addr entryHiAsid;
52 Addr entryHiVPN2;
53 Addr entryHiVPN2X;
54 Addr contextBadVPN2;
55#if FULL_SYSTEM
56 void invoke(ThreadContext * tc) {};
56 void invoke(ThreadContext * tc,
57 StaticInst::StaticInstPtr inst = StaticInst::nullStaticInstPtr)
58 {}
57 void setExceptionState(ThreadContext *, uint8_t);
58 void setHandlerPC(Addr, ThreadContext *);
59#endif
60 virtual FaultVect vect() = 0;
61 virtual FaultStat & countStat() = 0;
62};
63
64class MachineCheckFault : public MipsFault
65{
66 private:
67 static FaultName _name;
68 static FaultVect _vect;
69 static FaultStat _count;
70 public:
71 FaultName name() const {return _name;}
72 FaultVect vect() {return _vect;}
73 FaultStat & countStat() {return _count;}
74 bool isMachineCheckFault() {return true;}
75};
76
77class NonMaskableInterrupt : public MipsFault
78{
79 private:
80 static FaultName _name;
81 static FaultVect _vect;
82 static FaultStat _count;
83 public:
84 FaultName name() const {return _name;}
85 FaultVect vect() {return _vect;}
86 FaultStat & countStat() {return _count;}
87 bool isNonMaskableInterrupt() {return true;}
88};
89
90class AlignmentFault : public MipsFault
91{
92 private:
93 static FaultName _name;
94 static FaultVect _vect;
95 static FaultStat _count;
96 public:
97 FaultName name() const {return _name;}
98 FaultVect vect() {return _vect;}
99 FaultStat & countStat() {return _count;}
100 bool isAlignmentFault() {return true;}
101};
102
103class AddressErrorFault : public MipsFault
104{
105 private:
106 static FaultName _name;
107 static FaultVect _vect;
108 static FaultStat _count;
109 public:
110 FaultName name() const {return _name;}
111 FaultVect vect() {return _vect;}
112 FaultStat & countStat() {return _count;}
113#if FULL_SYSTEM
59 void setExceptionState(ThreadContext *, uint8_t);
60 void setHandlerPC(Addr, ThreadContext *);
61#endif
62 virtual FaultVect vect() = 0;
63 virtual FaultStat & countStat() = 0;
64};
65
66class MachineCheckFault : public MipsFault
67{
68 private:
69 static FaultName _name;
70 static FaultVect _vect;
71 static FaultStat _count;
72 public:
73 FaultName name() const {return _name;}
74 FaultVect vect() {return _vect;}
75 FaultStat & countStat() {return _count;}
76 bool isMachineCheckFault() {return true;}
77};
78
79class NonMaskableInterrupt : public MipsFault
80{
81 private:
82 static FaultName _name;
83 static FaultVect _vect;
84 static FaultStat _count;
85 public:
86 FaultName name() const {return _name;}
87 FaultVect vect() {return _vect;}
88 FaultStat & countStat() {return _count;}
89 bool isNonMaskableInterrupt() {return true;}
90};
91
92class AlignmentFault : public MipsFault
93{
94 private:
95 static FaultName _name;
96 static FaultVect _vect;
97 static FaultStat _count;
98 public:
99 FaultName name() const {return _name;}
100 FaultVect vect() {return _vect;}
101 FaultStat & countStat() {return _count;}
102 bool isAlignmentFault() {return true;}
103};
104
105class AddressErrorFault : public MipsFault
106{
107 private:
108 static FaultName _name;
109 static FaultVect _vect;
110 static FaultStat _count;
111 public:
112 FaultName name() const {return _name;}
113 FaultVect vect() {return _vect;}
114 FaultStat & countStat() {return _count;}
115#if FULL_SYSTEM
114 void invoke(ThreadContext * tc);
116 void invoke(ThreadContext * tc,
117 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
115#endif
116
117};
118
119class StoreAddressErrorFault : public MipsFault
120{
121 private:
122 static FaultName _name;
123 static FaultVect _vect;
124 static FaultStat _count;
125 public:
126 FaultName name() const {return _name;}
127 FaultVect vect() {return _vect;}
128 FaultStat & countStat() {return _count;}
129#if FULL_SYSTEM
118#endif
119
120};
121
122class StoreAddressErrorFault : public MipsFault
123{
124 private:
125 static FaultName _name;
126 static FaultVect _vect;
127 static FaultStat _count;
128 public:
129 FaultName name() const {return _name;}
130 FaultVect vect() {return _vect;}
131 FaultStat & countStat() {return _count;}
132#if FULL_SYSTEM
130 void invoke(ThreadContext * tc);
133 void invoke(ThreadContext * tc,
134 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
131#endif
132};
133
134class UnimplementedOpcodeFault : public MipsFault
135{
136 private:
137 static FaultName _name;
138 static FaultVect _vect;
139 static FaultStat _count;
140 public:
141 FaultName name() const {return _name;}
142 FaultVect vect() {return _vect;}
143 FaultStat & countStat() {return _count;}
144};
145
146
147class TLBRefillIFetchFault : public MipsFault
148{
149 private:
150 Addr vaddr;
151 static FaultName _name;
152 static FaultVect _vect;
153 static FaultStat _count;
154 public:
155 FaultName name() const {return _name;}
156 FaultVect vect() {return _vect;}
157 FaultStat & countStat() {return _count;}
135#endif
136};
137
138class UnimplementedOpcodeFault : public MipsFault
139{
140 private:
141 static FaultName _name;
142 static FaultVect _vect;
143 static FaultStat _count;
144 public:
145 FaultName name() const {return _name;}
146 FaultVect vect() {return _vect;}
147 FaultStat & countStat() {return _count;}
148};
149
150
151class TLBRefillIFetchFault : public MipsFault
152{
153 private:
154 Addr vaddr;
155 static FaultName _name;
156 static FaultVect _vect;
157 static FaultStat _count;
158 public:
159 FaultName name() const {return _name;}
160 FaultVect vect() {return _vect;}
161 FaultStat & countStat() {return _count;}
158 void invoke(ThreadContext * tc);
162 void invoke(ThreadContext * tc,
163 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
159};
160
161class TLBInvalidIFetchFault : public MipsFault
162{
163 private:
164 Addr vaddr;
165 static FaultName _name;
166 static FaultVect _vect;
167 static FaultStat _count;
168 public:
169 FaultName name() const {return _name;}
170 FaultVect vect() {return _vect;}
171 FaultStat & countStat() {return _count;}
164};
165
166class TLBInvalidIFetchFault : public MipsFault
167{
168 private:
169 Addr vaddr;
170 static FaultName _name;
171 static FaultVect _vect;
172 static FaultStat _count;
173 public:
174 FaultName name() const {return _name;}
175 FaultVect vect() {return _vect;}
176 FaultStat & countStat() {return _count;}
172 void invoke(ThreadContext * tc);
177 void invoke(ThreadContext * tc,
178 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
173};
174
175class NDtbMissFault : public MipsFault
176{
177 private:
178 static FaultName _name;
179 static FaultVect _vect;
180 static FaultStat _count;
181 public:
182 FaultName name() const {return _name;}
183 FaultVect vect() {return _vect;}
184 FaultStat & countStat() {return _count;}
185};
186
187class PDtbMissFault : public MipsFault
188{
189 private:
190 static FaultName _name;
191 static FaultVect _vect;
192 static FaultStat _count;
193 public:
194 FaultName name() const {return _name;}
195 FaultVect vect() {return _vect;}
196 FaultStat & countStat() {return _count;}
197};
198
199class DtbPageFault : public MipsFault
200{
201 private:
202 static FaultName _name;
203 static FaultVect _vect;
204 static FaultStat _count;
205 public:
206 FaultName name() const {return _name;}
207 FaultVect vect() {return _vect;}
208 FaultStat & countStat() {return _count;}
209};
210
211class DtbAcvFault : public MipsFault
212{
213 private:
214 static FaultName _name;
215 static FaultVect _vect;
216 static FaultStat _count;
217 public:
218 FaultName name() const {return _name;}
219 FaultVect vect() {return _vect;}
220 FaultStat & countStat() {return _count;}
221};
222
223class CacheErrorFault : public MipsFault
224{
225 private:
226 Addr vaddr;
227 static FaultName _name;
228 static FaultVect _vect;
229 static FaultStat _count;
230 public:
231 FaultName name() const {return _name;}
232 FaultVect vect() {return _vect;}
233 FaultStat & countStat() {return _count;}
179};
180
181class NDtbMissFault : public MipsFault
182{
183 private:
184 static FaultName _name;
185 static FaultVect _vect;
186 static FaultStat _count;
187 public:
188 FaultName name() const {return _name;}
189 FaultVect vect() {return _vect;}
190 FaultStat & countStat() {return _count;}
191};
192
193class PDtbMissFault : public MipsFault
194{
195 private:
196 static FaultName _name;
197 static FaultVect _vect;
198 static FaultStat _count;
199 public:
200 FaultName name() const {return _name;}
201 FaultVect vect() {return _vect;}
202 FaultStat & countStat() {return _count;}
203};
204
205class DtbPageFault : public MipsFault
206{
207 private:
208 static FaultName _name;
209 static FaultVect _vect;
210 static FaultStat _count;
211 public:
212 FaultName name() const {return _name;}
213 FaultVect vect() {return _vect;}
214 FaultStat & countStat() {return _count;}
215};
216
217class DtbAcvFault : public MipsFault
218{
219 private:
220 static FaultName _name;
221 static FaultVect _vect;
222 static FaultStat _count;
223 public:
224 FaultName name() const {return _name;}
225 FaultVect vect() {return _vect;}
226 FaultStat & countStat() {return _count;}
227};
228
229class CacheErrorFault : public MipsFault
230{
231 private:
232 Addr vaddr;
233 static FaultName _name;
234 static FaultVect _vect;
235 static FaultStat _count;
236 public:
237 FaultName name() const {return _name;}
238 FaultVect vect() {return _vect;}
239 FaultStat & countStat() {return _count;}
234 void invoke(ThreadContext * tc);
240 void invoke(ThreadContext * tc,
241 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
235};
236
237
238
239
240static inline Fault genMachineCheckFault()
241{
242 return new MachineCheckFault;
243}
244
245static inline Fault genAlignmentFault()
246{
247 return new AlignmentFault;
248}
249
250class ResetFault : public MipsFault
251{
252 private:
253 static FaultName _name;
254 static FaultVect _vect;
255 static FaultStat _count;
256 public:
257 FaultName name() const {return _name;}
258 FaultVect vect() {return _vect;}
259 FaultStat & countStat() {return _count;}
242};
243
244
245
246
247static inline Fault genMachineCheckFault()
248{
249 return new MachineCheckFault;
250}
251
252static inline Fault genAlignmentFault()
253{
254 return new AlignmentFault;
255}
256
257class ResetFault : public MipsFault
258{
259 private:
260 static FaultName _name;
261 static FaultVect _vect;
262 static FaultStat _count;
263 public:
264 FaultName name() const {return _name;}
265 FaultVect vect() {return _vect;}
266 FaultStat & countStat() {return _count;}
260 void invoke(ThreadContext * tc);
267 void invoke(ThreadContext * tc,
268 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
261
262};
263
264class SystemCallFault : public MipsFault
265{
266 private:
267 static FaultName _name;
268 static FaultVect _vect;
269 static FaultStat _count;
270 public:
271 FaultName name() const {return _name;}
272 FaultVect vect() {return _vect;}
273 FaultStat & countStat() {return _count;}
269
270};
271
272class SystemCallFault : public MipsFault
273{
274 private:
275 static FaultName _name;
276 static FaultVect _vect;
277 static FaultStat _count;
278 public:
279 FaultName name() const {return _name;}
280 FaultVect vect() {return _vect;}
281 FaultStat & countStat() {return _count;}
274 void invoke(ThreadContext * tc);
282 void invoke(ThreadContext * tc,
283 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
275};
276
277class SoftResetFault : public MipsFault
278{
279 private:
280 static FaultName _name;
281 static FaultVect _vect;
282 static FaultStat _count;
283 public:
284 FaultName name() const {return _name;}
285 FaultVect vect() {return _vect;}
286 FaultStat & countStat() {return _count;}
284};
285
286class SoftResetFault : public MipsFault
287{
288 private:
289 static FaultName _name;
290 static FaultVect _vect;
291 static FaultStat _count;
292 public:
293 FaultName name() const {return _name;}
294 FaultVect vect() {return _vect;}
295 FaultStat & countStat() {return _count;}
287 void invoke(ThreadContext * tc);
296 void invoke(ThreadContext * tc,
297 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
288};
289
290class DebugSingleStep : public MipsFault
291{
292 private:
293 static FaultName _name;
294 static FaultVect _vect;
295 static FaultStat _count;
296 public:
297 FaultName name() const {return _name;}
298 FaultVect vect() {return _vect;}
299 FaultStat & countStat() {return _count;}
298};
299
300class DebugSingleStep : public MipsFault
301{
302 private:
303 static FaultName _name;
304 static FaultVect _vect;
305 static FaultStat _count;
306 public:
307 FaultName name() const {return _name;}
308 FaultVect vect() {return _vect;}
309 FaultStat & countStat() {return _count;}
300 void invoke(ThreadContext * tc);
310 void invoke(ThreadContext * tc,
311 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
301};
302
303class DebugInterrupt : public MipsFault
304{
305 private:
306 static FaultName _name;
307 static FaultVect _vect;
308 static FaultStat _count;
309 public:
310 FaultName name() const {return _name;}
311 FaultVect vect() {return _vect;}
312 FaultStat & countStat() {return _count;}
312};
313
314class DebugInterrupt : public MipsFault
315{
316 private:
317 static FaultName _name;
318 static FaultVect _vect;
319 static FaultStat _count;
320 public:
321 FaultName name() const {return _name;}
322 FaultVect vect() {return _vect;}
323 FaultStat & countStat() {return _count;}
313 void invoke(ThreadContext * tc);
324 void invoke(ThreadContext * tc,
325 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
314};
315
316class CoprocessorUnusableFault : public MipsFault
317{
318 private:
319 static FaultName _name;
320 static FaultVect _vect;
321 static FaultStat _count;
322 int coProcID;
323 public:
324 FaultName name() const {return _name;}
325 FaultVect vect() {return _vect;}
326 FaultStat & countStat() {return _count;}
326};
327
328class CoprocessorUnusableFault : public MipsFault
329{
330 private:
331 static FaultName _name;
332 static FaultVect _vect;
333 static FaultStat _count;
334 int coProcID;
335 public:
336 FaultName name() const {return _name;}
337 FaultVect vect() {return _vect;}
338 FaultStat & countStat() {return _count;}
327 void invoke(ThreadContext * tc);
339 void invoke(ThreadContext * tc,
340 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
328 CoprocessorUnusableFault(int _procid){ coProcID = _procid;}
329};
330
331class ReservedInstructionFault : public MipsFault
332{
333 private:
334 static FaultName _name;
335 static FaultVect _vect;
336 static FaultStat _count;
337 public:
338 FaultName name() const {return _name;}
339 FaultVect vect() {return _vect;}
340 FaultStat & countStat() {return _count;}
341 CoprocessorUnusableFault(int _procid){ coProcID = _procid;}
342};
343
344class ReservedInstructionFault : public MipsFault
345{
346 private:
347 static FaultName _name;
348 static FaultVect _vect;
349 static FaultStat _count;
350 public:
351 FaultName name() const {return _name;}
352 FaultVect vect() {return _vect;}
353 FaultStat & countStat() {return _count;}
341 void invoke(ThreadContext * tc);
354 void invoke(ThreadContext * tc,
355 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
342};
343
344class ThreadFault : public MipsFault
345{
346 private:
347 static FaultName _name;
348 static FaultVect _vect;
349 static FaultStat _count;
350 public:
351 FaultName name() const {return _name;}
352 FaultVect vect() {return _vect;}
353 FaultStat & countStat() {return _count;}
356};
357
358class ThreadFault : public MipsFault
359{
360 private:
361 static FaultName _name;
362 static FaultVect _vect;
363 static FaultStat _count;
364 public:
365 FaultName name() const {return _name;}
366 FaultVect vect() {return _vect;}
367 FaultStat & countStat() {return _count;}
354 void invoke(ThreadContext * tc);
368 void invoke(ThreadContext * tc,
369 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
355};
356
357class ArithmeticFault : public MipsFault
358{
359 protected:
360 bool skipFaultingInstruction() {return true;}
361 private:
362 static FaultName _name;
363 static FaultVect _vect;
364 static FaultStat _count;
365 public:
366 FaultName name() const {return _name;}
367 FaultVect vect() {return _vect;}
368 FaultStat & countStat() {return _count;}
369#if FULL_SYSTEM
370};
371
372class ArithmeticFault : public MipsFault
373{
374 protected:
375 bool skipFaultingInstruction() {return true;}
376 private:
377 static FaultName _name;
378 static FaultVect _vect;
379 static FaultStat _count;
380 public:
381 FaultName name() const {return _name;}
382 FaultVect vect() {return _vect;}
383 FaultStat & countStat() {return _count;}
384#if FULL_SYSTEM
370 void invoke(ThreadContext * tc);
385 void invoke(ThreadContext * tc,
386 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
371#endif
372};
373
374class InterruptFault : public MipsFault
375{
376 protected:
377 bool setRestartAddress() {return false;}
378 private:
379 static FaultName _name;
380 static FaultVect _vect;
381 static FaultStat _count;
382 public:
383 FaultName name() const {return _name;}
384 FaultVect vect() {return _vect;}
385 FaultStat & countStat() {return _count;}
386
387#if FULL_SYSTEM
387#endif
388};
389
390class InterruptFault : public MipsFault
391{
392 protected:
393 bool setRestartAddress() {return false;}
394 private:
395 static FaultName _name;
396 static FaultVect _vect;
397 static FaultStat _count;
398 public:
399 FaultName name() const {return _name;}
400 FaultVect vect() {return _vect;}
401 FaultStat & countStat() {return _count;}
402
403#if FULL_SYSTEM
388 void invoke(ThreadContext * tc);
404 void invoke(ThreadContext * tc,
405 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
389#endif
390};
391
392class TrapFault : public MipsFault
393{
394 private:
395 static FaultName _name;
396 static FaultVect _vect;
397 static FaultStat _count;
398 public:
399 FaultName name() const {return _name;}
400 FaultVect vect() {return _vect;}
401 FaultStat & countStat() {return _count;}
402#if FULL_SYSTEM
406#endif
407};
408
409class TrapFault : public MipsFault
410{
411 private:
412 static FaultName _name;
413 static FaultVect _vect;
414 static FaultStat _count;
415 public:
416 FaultName name() const {return _name;}
417 FaultVect vect() {return _vect;}
418 FaultStat & countStat() {return _count;}
419#if FULL_SYSTEM
403 void invoke(ThreadContext * tc);
420 void invoke(ThreadContext * tc,
421 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
404#endif
405};
406
407class BreakpointFault : public MipsFault
408{
409 private:
410 static FaultName _name;
411 static FaultVect _vect;
412 static FaultStat _count;
413 public:
414 FaultName name() const {return _name;}
415 FaultVect vect() {return _vect;}
416 FaultStat & countStat() {return _count;}
417#if FULL_SYSTEM
422#endif
423};
424
425class BreakpointFault : public MipsFault
426{
427 private:
428 static FaultName _name;
429 static FaultVect _vect;
430 static FaultStat _count;
431 public:
432 FaultName name() const {return _name;}
433 FaultVect vect() {return _vect;}
434 FaultStat & countStat() {return _count;}
435#if FULL_SYSTEM
418 void invoke(ThreadContext * tc);
436 void invoke(ThreadContext * tc,
437 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
419#endif
420};
421
422class ItbRefillFault : public MipsFault
423{
424 private:
425 static FaultName _name;
426 static FaultVect _vect;
427 static FaultStat _count;
428 public:
429 FaultName name() const {return _name;}
430 FaultVect vect() {return _vect;}
431 FaultStat & countStat() {return _count;}
432#if FULL_SYSTEM
438#endif
439};
440
441class ItbRefillFault : public MipsFault
442{
443 private:
444 static FaultName _name;
445 static FaultVect _vect;
446 static FaultStat _count;
447 public:
448 FaultName name() const {return _name;}
449 FaultVect vect() {return _vect;}
450 FaultStat & countStat() {return _count;}
451#if FULL_SYSTEM
433 void invoke(ThreadContext * tc);
452 void invoke(ThreadContext * tc,
453 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
434#endif
435};
436
437class DtbRefillFault : public MipsFault
438{
439 private:
440 static FaultName _name;
441 static FaultVect _vect;
442 static FaultStat _count;
443 public:
444 FaultName name() const {return _name;}
445 FaultVect vect() {return _vect;}
446 FaultStat & countStat() {return _count;}
447#if FULL_SYSTEM
454#endif
455};
456
457class DtbRefillFault : public MipsFault
458{
459 private:
460 static FaultName _name;
461 static FaultVect _vect;
462 static FaultStat _count;
463 public:
464 FaultName name() const {return _name;}
465 FaultVect vect() {return _vect;}
466 FaultStat & countStat() {return _count;}
467#if FULL_SYSTEM
448 void invoke(ThreadContext * tc);
468 void invoke(ThreadContext * tc,
469 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
449#endif
450};
451
452class ItbPageFault : public MipsFault
453{
454 private:
455 static FaultName _name;
456 static FaultVect _vect;
457 static FaultStat _count;
458 public:
459 FaultName name() const {return _name;}
460 FaultVect vect() {return _vect;}
461 FaultStat & countStat() {return _count;}
462#if FULL_SYSTEM
470#endif
471};
472
473class ItbPageFault : public MipsFault
474{
475 private:
476 static FaultName _name;
477 static FaultVect _vect;
478 static FaultStat _count;
479 public:
480 FaultName name() const {return _name;}
481 FaultVect vect() {return _vect;}
482 FaultStat & countStat() {return _count;}
483#if FULL_SYSTEM
463 void invoke(ThreadContext * tc);
484 void invoke(ThreadContext * tc,
485 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
464#endif
465};
466
467class ItbInvalidFault : public MipsFault
468{
469 private:
470 static FaultName _name;
471 static FaultVect _vect;
472 static FaultStat _count;
473 public:
474 FaultName name() const {return _name;}
475 FaultVect vect() {return _vect;}
476 FaultStat & countStat() {return _count;}
477#if FULL_SYSTEM
486#endif
487};
488
489class ItbInvalidFault : public MipsFault
490{
491 private:
492 static FaultName _name;
493 static FaultVect _vect;
494 static FaultStat _count;
495 public:
496 FaultName name() const {return _name;}
497 FaultVect vect() {return _vect;}
498 FaultStat & countStat() {return _count;}
499#if FULL_SYSTEM
478 void invoke(ThreadContext * tc);
500 void invoke(ThreadContext * tc,
501 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
479#endif
480};
481
482class TLBModifiedFault : public MipsFault
483{
484 private:
485 static FaultName _name;
486 static FaultVect _vect;
487 static FaultStat _count;
488 public:
489 FaultName name() const {return _name;}
490 FaultVect vect() {return _vect;}
491 FaultStat & countStat() {return _count;}
492#if FULL_SYSTEM
502#endif
503};
504
505class TLBModifiedFault : public MipsFault
506{
507 private:
508 static FaultName _name;
509 static FaultVect _vect;
510 static FaultStat _count;
511 public:
512 FaultName name() const {return _name;}
513 FaultVect vect() {return _vect;}
514 FaultStat & countStat() {return _count;}
515#if FULL_SYSTEM
493 void invoke(ThreadContext * tc);
516 void invoke(ThreadContext * tc,
517 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
494#endif
495};
496
497class DtbInvalidFault : public MipsFault
498{
499 private:
500 static FaultName _name;
501 static FaultVect _vect;
502 static FaultStat _count;
503 public:
504 FaultName name() const {return _name;}
505 FaultVect vect() {return _vect;}
506 FaultStat & countStat() {return _count;}
507#if FULL_SYSTEM
518#endif
519};
520
521class DtbInvalidFault : public MipsFault
522{
523 private:
524 static FaultName _name;
525 static FaultVect _vect;
526 static FaultStat _count;
527 public:
528 FaultName name() const {return _name;}
529 FaultVect vect() {return _vect;}
530 FaultStat & countStat() {return _count;}
531#if FULL_SYSTEM
508 void invoke(ThreadContext * tc);
532 void invoke(ThreadContext * tc,
533 StaticInst::StaticInstPtr inst = nullStaticInstPtr);
509#endif
510};
511
512class FloatEnableFault : public MipsFault
513{
514 private:
515 static FaultName _name;
516 static FaultVect _vect;
517 static FaultStat _count;
518 public:
519 FaultName name() const {return _name;}
520 FaultVect vect() {return _vect;}
521 FaultStat & countStat() {return _count;}
522};
523
524class ItbMissFault : public MipsFault
525{
526 private:
527 static FaultName _name;
528 static FaultVect _vect;
529 static FaultStat _count;
530 public:
531 FaultName name() const {return _name;}
532 FaultVect vect() {return _vect;}
533 FaultStat & countStat() {return _count;}
534};
535
536class ItbAcvFault : public MipsFault
537{
538 private:
539 static FaultName _name;
540 static FaultVect _vect;
541 static FaultStat _count;
542 public:
543 FaultName name() const {return _name;}
544 FaultVect vect() {return _vect;}
545 FaultStat & countStat() {return _count;}
546};
547
548class IntegerOverflowFault : public MipsFault
549{
550 private:
551 static FaultName _name;
552 static FaultVect _vect;
553 static FaultStat _count;
554 public:
555 FaultName name() const {return _name;}
556 FaultVect vect() {return _vect;}
557 FaultStat & countStat() {return _count;}
558};
559
560class DspStateDisabledFault : public MipsFault
561{
562 private:
563 static FaultName _name;
564 static FaultVect _vect;
565 static FaultStat _count;
566 public:
567 FaultName name() const {return _name;}
568 FaultVect vect() {return _vect;}
569 FaultStat & countStat() {return _count;}
534#endif
535};
536
537class FloatEnableFault : public MipsFault
538{
539 private:
540 static FaultName _name;
541 static FaultVect _vect;
542 static FaultStat _count;
543 public:
544 FaultName name() const {return _name;}
545 FaultVect vect() {return _vect;}
546 FaultStat & countStat() {return _count;}
547};
548
549class ItbMissFault : public MipsFault
550{
551 private:
552 static FaultName _name;
553 static FaultVect _vect;
554 static FaultStat _count;
555 public:
556 FaultName name() const {return _name;}
557 FaultVect vect() {return _vect;}
558 FaultStat & countStat() {return _count;}
559};
560
561class ItbAcvFault : public MipsFault
562{
563 private:
564 static FaultName _name;
565 static FaultVect _vect;
566 static FaultStat _count;
567 public:
568 FaultName name() const {return _name;}
569 FaultVect vect() {return _vect;}
570 FaultStat & countStat() {return _count;}
571};
572
573class IntegerOverflowFault : public MipsFault
574{
575 private:
576 static FaultName _name;
577 static FaultVect _vect;
578 static FaultStat _count;
579 public:
580 FaultName name() const {return _name;}
581 FaultVect vect() {return _vect;}
582 FaultStat & countStat() {return _count;}
583};
584
585class DspStateDisabledFault : public MipsFault
586{
587 private:
588 static FaultName _name;
589 static FaultVect _vect;
590 static FaultStat _count;
591 public:
592 FaultName name() const {return _name;}
593 FaultVect vect() {return _vect;}
594 FaultStat & countStat() {return _count;}
570 void invoke(ThreadContext * tc);
595 void invoke(ThreadContext * tc,
596 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
571};
572
573} // MipsISA namespace
574
575#endif // __MIPS_FAULTS_HH__
597};
598
599} // MipsISA namespace
600
601#endif // __MIPS_FAULTS_HH__