summaryrefslogtreecommitdiff
path: root/sim/faults.hh
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2006-02-24 01:51:45 -0500
committerGabe Black <gblack@eecs.umich.edu>2006-02-24 01:51:45 -0500
commit08637efadc40a1003d68bba91dedb007fe10798c (patch)
tree49405fe5d18c7e120d926b4b95f4aeeda3ef9097 /sim/faults.hh
parenta5f8392d343d0799d6c7f687ab3d342709717510 (diff)
downloadgem5-08637efadc40a1003d68bba91dedb007fe10798c.tar.xz
Changed Fault from a FaultBase * to a RefCountingPtr, added "new"s where appropriate, and took away the constant examples of each fault which where for comparing to a fault to determine its type.
arch/alpha/alpha_memory.cc: arch/alpha/isa/decoder.isa: Added news where faults are created. arch/alpha/ev5.cc: Changed places where a fault was compared to a fault type to use isA rather than == arch/alpha/faults.cc: arch/alpha/faults.hh: Changed Fault to be a RefCountingPtr arch/alpha/isa/fp.isa: Added a new where a FloatEnableFault was created. arch/alpha/isa/unimp.isa: arch/alpha/isa/unknown.isa: Added a new where an UnimplementedFault is created. base/refcnt.hh: Added include of stddef.h for the NULL macro cpu/base_dyn_inst.cc: Added a new where an UnimplementedOpcodeFault is created. cpu/o3/alpha_cpu_impl.hh: Changed places where a fault was compared to a fault type to use isA rather than ==. Also changed fault->name to fault->name() cpu/o3/regfile.hh: Added new where UnimplementedOpcodeFaults are created. cpu/simple/cpu.cc: Changed places where a fault was compared to a fault type to use isA rather than ==. Also added a new where an Interrupt fault is created. dev/alpha_console.cc: Added news where MachineCheckFaults are created. dev/pcidev.hh: Added news where MachineCheckFaults are generated. dev/sinic.cc: Changed places where a fault was compared to a fault type to use isA rather than ==. Added news where MachineCheckFaults are created. Fixed a problem where m5.fast had unused variables. kern/kernel_stats.cc: Commented out where _faults is initialized. This statistic will probably be moved elsewhere in the future. kern/kernel_stats.hh: Commented out the declaration of _fault. when fault() is called, the fault increments its own stat. sim/faults.cc: sim/faults.hh: Changed Fault from a FaultBase * to a RefCountingPtr. --HG-- extra : convert_revision : b40ccfc42482d5a115e111dd897fa378d23c6c7d
Diffstat (limited to 'sim/faults.hh')
-rw-r--r--sim/faults.hh59
1 files changed, 40 insertions, 19 deletions
diff --git a/sim/faults.hh b/sim/faults.hh
index dbec399af..ea2e21a7d 100644
--- a/sim/faults.hh
+++ b/sim/faults.hh
@@ -29,34 +29,55 @@
#ifndef __FAULTS_HH__
#define __FAULTS_HH__
+#include "base/refcnt.hh"
+#include "sim/stats.hh"
+
class FaultBase;
-typedef FaultBase * Fault;
+typedef RefCountingPtr<FaultBase> Fault;
+
+typedef const char * FaultName;
+typedef Stats::Scalar<> FaultStat;
+
+// Each class has it's name statically define in _name,
+// and has a virtual function to access it's name.
+// The function is necessary because otherwise, all objects
+// which are being accessed cast as a FaultBase * (namely
+// all faults returned using the Fault type) will use the
+// generic FaultBase name.
-class FaultBase
+class FaultBase : public RefCounted
{
-public:
- FaultBase(char * newName, int newId = 0) : name(newName), id(newId) {;}
- const char * name;
- int id;
+ public:
+ virtual FaultName name()
+ {
+ return "none";
+ }
+ virtual FaultStat & stat() = 0;
+ template<typename T>
+ bool isA() {return dynamic_cast<T *>(this);}
};
-extern class NoFaultType : public FaultBase
-{
-public:
- NoFaultType(char * newName) : FaultBase(newName) {;}
-} * const NoFault;
+static FaultBase * const NoFault __attribute__ ((unused)) = 0;
-extern class MachineCheckFaultType : public FaultBase
+class MachineCheckFault : public FaultBase
{
-public:
- MachineCheckFaultType(char * newName) : FaultBase(newName) {;}
-} * const MachineCheckFault;
+ private:
+ static FaultName _name;
+ static FaultStat _stat;
+ public:
+ FaultName name() {return _name;}
+ FaultStat & stat() {return _stat;}
+};
-extern class AlignmentFaultType : public FaultBase
+class AlignmentFault : public FaultBase
{
-public:
- AlignmentFaultType(char * newName) : FaultBase(newName) {;}
-} * const AlignmentFault;
+ private:
+ static FaultName _name;
+ static FaultStat _stat;
+ public:
+ FaultName name() {return _name;}
+ FaultStat & stat() {return _stat;}
+};
#endif // __FAULTS_HH__