diff options
Diffstat (limited to 'sim')
-rw-r--r-- | sim/faults.cc | 10 | ||||
-rw-r--r-- | sim/faults.hh | 33 |
2 files changed, 12 insertions, 31 deletions
diff --git a/sim/faults.cc b/sim/faults.cc index 78bfc8092..9b4a0ea7f 100644 --- a/sim/faults.cc +++ b/sim/faults.cc @@ -27,7 +27,11 @@ */ #include "sim/faults.hh" +#include "cpu/exec_context.hh" -FaultName MachineCheckFault::_name = "mchk"; -FaultName AlignmentFault::_name = "unalign"; - +#if !FULL_SYSTEM +void FaultBase::invoke(ExecContext * xc) +{ + fatal("fault (%s) detected @ PC 0x%08p", name(), xc->readPC()); +} +#endif diff --git a/sim/faults.hh b/sim/faults.hh index 9b8c94cda..9e8d224cd 100644 --- a/sim/faults.hh +++ b/sim/faults.hh @@ -53,39 +53,16 @@ class FaultBase : public RefCounted virtual FaultName name() = 0; virtual FaultStat & stat() = 0; #if FULL_SYSTEM - virtual void ev5_trap(ExecContext * xc) = 0; + virtual void invoke(ExecContext * xc) = 0; +#else + virtual void invoke(ExecContext * xc); #endif - template<typename T> - bool isA() {return dynamic_cast<T *>(this);} +// template<typename T> +// bool isA() {return dynamic_cast<T *>(this);} virtual bool isMachineCheckFault() {return false;} virtual bool isAlignmentFault() {return false;} }; FaultBase * const NoFault = 0; -//The ISAs are each responsible for providing a genMachineCheckFault and a -//genAlignmentFault functions, which return faults to use in the case of a -//machine check fault or an alignment fault, respectively. Base classes which -//provide the name() function, and the isMachineCheckFault and isAlignmentFault -//functions are provided below. - -class MachineCheckFault : public virtual FaultBase -{ - private: - static FaultName _name; - public: - FaultName name() {return _name;} - bool isMachineCheckFault() {return true;} -}; - -class AlignmentFault : public virtual FaultBase -{ - private: - static FaultName _name; - public: - FaultName name() {return _name;} - bool isAlignmentFault() {return true;} -}; - - #endif // __FAULTS_HH__ |