stats: update stats for mmap() change.
[gem5.git] / src / arch / arm / faults.hh
index a5720f115ec42cf69649ba70fadcbf350b31e26c..02d2e81f506f27f8e05ecb1ad8be78d0934707db 100644 (file)
@@ -58,7 +58,7 @@
 
 namespace ArmISA
 {
-typedef const Addr FaultOffset;
+typedef Addr FaultOffset;
 
 class ArmFault : public FaultBase
 {
@@ -172,7 +172,8 @@ class ArmFault : public FaultBase
     };
 
     ArmFault(ExtMachInst _machInst = 0, uint32_t _iss = 0) :
-        machInst(_machInst), issRaw(_iss), from64(false), to64(false) {}
+        machInst(_machInst), issRaw(_iss), from64(false), to64(false),
+        fromEL(EL0), toEL(EL0), fromMode(MODE_UNDEFINED) {}
 
     // Returns the actual syndrome register to use based on the target
     // exception level
@@ -181,10 +182,10 @@ class ArmFault : public FaultBase
     // exception level
     MiscRegIndex getFaultAddrReg64() const;
 
-    void invoke(ThreadContext *tc,
-            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
-    void invoke64(ThreadContext *tc,
-            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
+    void invoke(ThreadContext *tc, const StaticInstPtr &inst =
+                StaticInst::nullStaticInstPtr);
+    void invoke64(ThreadContext *tc, const StaticInstPtr &inst =
+                  StaticInst::nullStaticInstPtr);
     virtual void annotate(AnnotationIDs id, uint64_t val) {}
     virtual FaultStat& countStat() = 0;
     virtual FaultOffset offset(ThreadContext *tc) = 0;
@@ -249,17 +250,17 @@ class ArmFaultVals : public ArmFault
 class Reset : public ArmFaultVals<Reset>
 {
   public:
-    void invoke(ThreadContext *tc,
-            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
+    void invoke(ThreadContext *tc, const StaticInstPtr &inst =
+                StaticInst::nullStaticInstPtr);
 };
 
 class UndefinedInstruction : public ArmFaultVals<UndefinedInstruction>
 {
   protected:
     bool unknown;
-    const char *mnemonic;
     bool disabled;
     ExceptionClass overrideEc;
+    const char *mnemonic;
 
   public:
     UndefinedInstruction(ExtMachInst _machInst,
@@ -267,16 +268,18 @@ class UndefinedInstruction : public ArmFaultVals<UndefinedInstruction>
                          const char *_mnemonic = NULL,
                          bool _disabled = false) :
         ArmFaultVals<UndefinedInstruction>(_machInst),
-        unknown(_unknown), mnemonic(_mnemonic), disabled(_disabled),
-        overrideEc(EC_INVALID)
+        unknown(_unknown), disabled(_disabled),
+        overrideEc(EC_INVALID), mnemonic(_mnemonic)
     {}
-    UndefinedInstruction(ExtMachInst _machInst, uint32_t _iss, ExceptionClass _overrideEc) :
+    UndefinedInstruction(ExtMachInst _machInst, uint32_t _iss,
+            ExceptionClass _overrideEc, const char *_mnemonic = NULL) :
         ArmFaultVals<UndefinedInstruction>(_machInst, _iss),
-        overrideEc(_overrideEc)
+        unknown(false), disabled(true), overrideEc(_overrideEc),
+        mnemonic(_mnemonic)
     {}
 
-    void invoke(ThreadContext *tc,
-            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
+    void invoke(ThreadContext *tc, const StaticInstPtr &inst =
+                StaticInst::nullStaticInstPtr);
     bool routeToHyp(ThreadContext *tc) const;
     ExceptionClass ec(ThreadContext *tc) const;
     uint32_t iss() const;
@@ -293,8 +296,8 @@ class SupervisorCall : public ArmFaultVals<SupervisorCall>
         overrideEc(_overrideEc)
     {}
 
-    void invoke(ThreadContext *tc,
-            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
+    void invoke(ThreadContext *tc, const StaticInstPtr &inst =
+                StaticInst::nullStaticInstPtr);
     bool routeToHyp(ThreadContext *tc) const;
     ExceptionClass ec(ThreadContext *tc) const;
     uint32_t iss() const;
@@ -307,8 +310,8 @@ class SecureMonitorCall : public ArmFaultVals<SecureMonitorCall>
         ArmFaultVals<SecureMonitorCall>(_machInst)
     {}
 
-    void invoke(ThreadContext *tc,
-            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
+    void invoke(ThreadContext *tc, const StaticInstPtr &inst =
+                StaticInst::nullStaticInstPtr);
     ExceptionClass ec(ThreadContext *tc) const;
     uint32_t iss() const;
 };
@@ -393,14 +396,16 @@ class AbortFault : public ArmFaultVals<T>
     ArmFault::TranMethod tranMethod;
 
   public:
-    AbortFault(Addr _faultAddr, bool _write, TlbEntry::DomainType _domain, uint8_t _source,
-               bool _stage2, ArmFault::TranMethod _tranMethod = ArmFault::UnknownTran) :
-        faultAddr(_faultAddr), write(_write), domain(_domain), source(_source),
+    AbortFault(Addr _faultAddr, bool _write, TlbEntry::DomainType _domain,
+               uint8_t _source, bool _stage2,
+               ArmFault::TranMethod _tranMethod = ArmFault::UnknownTran) :
+        faultAddr(_faultAddr), OVAddr(0), write(_write),
+        domain(_domain), source(_source), srcEncoded(0),
         stage2(_stage2), s1ptw(false), tranMethod(_tranMethod)
     {}
 
-    void invoke(ThreadContext *tc,
-            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
+    void invoke(ThreadContext *tc, const StaticInstPtr &inst =
+                StaticInst::nullStaticInstPtr);
 
     FSR getFsr(ThreadContext *tc);
     bool abortDisable(ThreadContext *tc);
@@ -471,7 +476,7 @@ class VirtualDataAbort : public AbortFault<VirtualDataAbort>
         AbortFault<VirtualDataAbort>(_addr, _write, _domain, _source, false)
     {}
 
-    void invoke(ThreadContext *tc, StaticInstPtr inst);
+    void invoke(ThreadContext *tc, const StaticInstPtr &inst);
 };
 
 class Interrupt : public ArmFaultVals<Interrupt>
@@ -512,8 +517,8 @@ class PCAlignmentFault : public ArmFaultVals<PCAlignmentFault>
   public:
     PCAlignmentFault(Addr _faultPC) : faultPC(_faultPC)
     {}
-    void invoke(ThreadContext *tc,
-            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
+    void invoke(ThreadContext *tc, const StaticInstPtr &inst =
+                StaticInst::nullStaticInstPtr);
 };
 
 /// Stack pointer alignment fault (AArch64 only)
@@ -528,8 +533,8 @@ class SystemError : public ArmFaultVals<SystemError>
 {
   public:
     SystemError();
-    void invoke(ThreadContext *tc,
-            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
+    void invoke(ThreadContext *tc, const StaticInstPtr &inst =
+                StaticInst::nullStaticInstPtr);
     bool routeToMonitor(ThreadContext *tc) const;
     bool routeToHyp(ThreadContext *tc) const;
 };
@@ -539,8 +544,8 @@ class FlushPipe : public ArmFaultVals<FlushPipe>
 {
   public:
     FlushPipe() {}
-    void invoke(ThreadContext *tc,
-            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
+    void invoke(ThreadContext *tc, const StaticInstPtr &inst =
+                StaticInst::nullStaticInstPtr);
 };
 
 // A fault that flushes the pipe, excluding the faulting instructions
@@ -548,8 +553,8 @@ class ArmSev : public ArmFaultVals<ArmSev>
 {
   public:
     ArmSev () {}
-    void invoke(ThreadContext *tc,
-            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
+    void invoke(ThreadContext *tc, const StaticInstPtr &inst =
+                StaticInst::nullStaticInstPtr);
 };
 
 /// Illegal Instruction Set State fault (AArch64 only)