faults.hh (5268:5bfc53fe60e7) faults.hh (6378:4a2ff62c3b4f)
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

--- 22 unchanged lines hidden (view full) ---

31 * Jaidev Patwardhan
32 */
33
34#ifndef __MIPS_FAULTS_HH__
35#define __MIPS_FAULTS_HH__
36
37#include "sim/faults.hh"
38
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

--- 22 unchanged lines hidden (view full) ---

31 * Jaidev Patwardhan
32 */
33
34#ifndef __MIPS_FAULTS_HH__
35#define __MIPS_FAULTS_HH__
36
37#include "sim/faults.hh"
38
39// The design of the "name" and "vect" functions is in sim/faults.hh
40
41namespace MipsISA
42{
39namespace MipsISA
40{
41
43typedef const Addr FaultVect;
44
45class MipsFault : public FaultBase
46{
47 protected:
48 virtual bool skipFaultingInstruction() {return false;}
49 virtual bool setRestartAddress() {return true;}
50 public:
51 Addr BadVAddr;
52 Addr EntryHi_Asid;
53 Addr EntryHi_VPN2;
54 Addr EntryHi_VPN2X;
55 Addr Context_BadVPN2;
56#if FULL_SYSTEM
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 EntryHi_Asid;
52 Addr EntryHi_VPN2;
53 Addr EntryHi_VPN2X;
54 Addr Context_BadVPN2;
55#if FULL_SYSTEM
57 void invoke(ThreadContext * tc) {};
58 void setExceptionState(ThreadContext *,uint8_t);
59 void setHandlerPC(Addr,ThreadContext *);
56 void invoke(ThreadContext * tc) {};
57 void setExceptionState(ThreadContext *, uint8_t);
58 void setHandlerPC(Addr, ThreadContext *);
60#endif
61 virtual FaultVect vect() = 0;
62 virtual FaultStat & countStat() = 0;
63};
64
65class MachineCheckFault : public MipsFault
66{
67 private:

--- 43 unchanged lines hidden (view full) ---

111 FaultName name() const {return _name;}
112 FaultVect vect() {return _vect;}
113 FaultStat & countStat() {return _count;}
114#if FULL_SYSTEM
115 void invoke(ThreadContext * tc);
116#endif
117
118};
59#endif
60 virtual FaultVect vect() = 0;
61 virtual FaultStat & countStat() = 0;
62};
63
64class MachineCheckFault : public MipsFault
65{
66 private:

--- 43 unchanged lines hidden (view full) ---

110 FaultName name() const {return _name;}
111 FaultVect vect() {return _vect;}
112 FaultStat & countStat() {return _count;}
113#if FULL_SYSTEM
114 void invoke(ThreadContext * tc);
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
130 void invoke(ThreadContext * tc);
131#endif
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
130 void invoke(ThreadContext * tc);
131#endif
132
133};
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;}

--- 10 unchanged lines hidden (view full) ---

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;}
158 void invoke(ThreadContext * tc);
159};
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;}

--- 10 unchanged lines hidden (view full) ---

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;}
158 void invoke(ThreadContext * tc);
159};
160
160class TLBInvalidIFetchFault : public MipsFault
161{
162 private:
163 Addr vaddr;
164 static FaultName _name;
165 static FaultVect _vect;
166 static FaultStat _count;
167 public:

--- 86 unchanged lines hidden (view full) ---

254 static FaultStat _count;
255 public:
256 FaultName name() const {return _name;}
257 FaultVect vect() {return _vect;}
258 FaultStat & countStat() {return _count;}
259 void invoke(ThreadContext * tc);
260
261};
161class TLBInvalidIFetchFault : public MipsFault
162{
163 private:
164 Addr vaddr;
165 static FaultName _name;
166 static FaultVect _vect;
167 static FaultStat _count;
168 public:

--- 86 unchanged lines hidden (view full) ---

255 static FaultStat _count;
256 public:
257 FaultName name() const {return _name;}
258 FaultVect vect() {return _vect;}
259 FaultStat & countStat() {return _count;}
260 void invoke(ThreadContext * tc);
261
262};
263
262class SystemCallFault : public MipsFault
263{
264 private:
265 static FaultName _name;
266 static FaultVect _vect;
267 static FaultStat _count;
268 public:
269 FaultName name() const {return _name;}

--- 9 unchanged lines hidden (view full) ---

279 static FaultVect _vect;
280 static FaultStat _count;
281 public:
282 FaultName name() const {return _name;}
283 FaultVect vect() {return _vect;}
284 FaultStat & countStat() {return _count;}
285 void invoke(ThreadContext * tc);
286};
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;}

--- 9 unchanged lines hidden (view full) ---

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;}
287 void invoke(ThreadContext * tc);
288};
289
287class DebugSingleStep : public MipsFault
288{
289 private:
290 static FaultName _name;
291 static FaultVect _vect;
292 static FaultStat _count;
293 public:
294 FaultName name() const {return _name;}
295 FaultVect vect() {return _vect;}
296 FaultStat & countStat() {return _count;}
297 void invoke(ThreadContext * tc);
298};
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;}
300 void invoke(ThreadContext * tc);
301};
302
299class DebugInterrupt : public MipsFault
300{
301 private:
302 static FaultName _name;
303 static FaultVect _vect;
304 static FaultStat _count;
305 public:
306 FaultName name() const {return _name;}

--- 38 unchanged lines hidden (view full) ---

345 static FaultStat _count;
346 public:
347 FaultName name() const {return _name;}
348 FaultVect vect() {return _vect;}
349 FaultStat & countStat() {return _count;}
350 void invoke(ThreadContext * tc);
351};
352
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;}

--- 38 unchanged lines hidden (view full) ---

349 static FaultStat _count;
350 public:
351 FaultName name() const {return _name;}
352 FaultVect vect() {return _vect;}
353 FaultStat & countStat() {return _count;}
354 void invoke(ThreadContext * tc);
355};
356
353
354class ArithmeticFault : public MipsFault
355{
356 protected:
357 bool skipFaultingInstruction() {return true;}
358 private:
359 static FaultName _name;
360 static FaultVect _vect;
361 static FaultStat _count;

--- 17 unchanged lines hidden (view full) ---

379 public:
380 FaultName name() const {return _name;}
381 FaultVect vect() {return _vect;}
382 FaultStat & countStat() {return _count;}
383
384#if FULL_SYSTEM
385 void invoke(ThreadContext * tc);
386#endif
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;

--- 17 unchanged lines hidden (view full) ---

382 public:
383 FaultName name() const {return _name;}
384 FaultVect vect() {return _vect;}
385 FaultStat & countStat() {return _count;}
386
387#if FULL_SYSTEM
388 void invoke(ThreadContext * tc);
389#endif
387
388 //void invoke(ThreadContext * tc);
389};
390
391class TrapFault : public MipsFault
392{
393 private:
394 static FaultName _name;
395 static FaultVect _vect;
396 static FaultStat _count;

--- 30 unchanged lines hidden (view full) ---

427 public:
428 FaultName name() const {return _name;}
429 FaultVect vect() {return _vect;}
430 FaultStat & countStat() {return _count;}
431#if FULL_SYSTEM
432 void invoke(ThreadContext * tc);
433#endif
434};
390};
391
392class TrapFault : public MipsFault
393{
394 private:
395 static FaultName _name;
396 static FaultVect _vect;
397 static FaultStat _count;

--- 30 unchanged lines hidden (view full) ---

428 public:
429 FaultName name() const {return _name;}
430 FaultVect vect() {return _vect;}
431 FaultStat & countStat() {return _count;}
432#if FULL_SYSTEM
433 void invoke(ThreadContext * tc);
434#endif
435};
436
435class DtbRefillFault : public MipsFault
436{
437 private:
438 static FaultName _name;
439 static FaultVect _vect;
440 static FaultStat _count;
441 public:
442 FaultName name() const {return _name;}

--- 27 unchanged lines hidden (view full) ---

470 static FaultStat _count;
471 public:
472 FaultName name() const {return _name;}
473 FaultVect vect() {return _vect;}
474 FaultStat & countStat() {return _count;}
475#if FULL_SYSTEM
476 void invoke(ThreadContext * tc);
477#endif
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;}

--- 27 unchanged lines hidden (view full) ---

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
478 void invoke(ThreadContext * tc);
479#endif
478
479};
480};
481
480class TLBModifiedFault : public MipsFault
481{
482 private:
483 static FaultName _name;
484 static FaultVect _vect;
485 static FaultStat _count;
486 public:
487 FaultName name() const {return _name;}
488 FaultVect vect() {return _vect;}
489 FaultStat & countStat() {return _count;}
490#if FULL_SYSTEM
491 void invoke(ThreadContext * tc);
492#endif
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
493 void invoke(ThreadContext * tc);
494#endif
493
494};
495
496class DtbInvalidFault : public MipsFault
497{
498 private:
499 static FaultName _name;
500 static FaultVect _vect;
501 static FaultStat _count;
502 public:
503 FaultName name() const {return _name;}
504 FaultVect vect() {return _vect;}
505 FaultStat & countStat() {return _count;}
506#if FULL_SYSTEM
507 void invoke(ThreadContext * tc);
508#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
508 void invoke(ThreadContext * tc);
509#endif
509
510};
511
512class FloatEnableFault : public MipsFault
513{
514 private:
515 static FaultName _name;
516 static FaultVect _vect;
517 static FaultStat _count;

--- 58 unchanged lines hidden ---
510};
511
512class FloatEnableFault : public MipsFault
513{
514 private:
515 static FaultName _name;
516 static FaultVect _vect;
517 static FaultStat _count;

--- 58 unchanged lines hidden ---