SPARC: Get rid of the copy/pasted StackTrace stolen from Alpha.
[gem5.git] / src / arch / arm / faults.hh
index f9d25abdf34618b684740ce7560a77eb8fbc9288..a68e7b2ef94c985235b05216fde6ac07183d6d83 100644 (file)
@@ -108,7 +108,8 @@ class ArmFault : public FaultBase
     };
 
 #if FULL_SYSTEM
-    void invoke(ThreadContext *tc);
+    void invoke(ThreadContext *tc,
+            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
 #endif
     virtual FaultStat& countStat() = 0;
     virtual FaultOffset offset() = 0;
@@ -140,7 +141,8 @@ class Reset : public ArmFaultVals<Reset>
 #if FULL_SYSTEM
 {
   public:
-    void invoke(ThreadContext *tc);
+    void invoke(ThreadContext *tc,
+            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
 };
 #else
 {};
@@ -153,16 +155,20 @@ class UndefinedInstruction : public ArmFaultVals<UndefinedInstruction>
     ExtMachInst machInst;
     bool unknown;
     const char *mnemonic;
+    bool disabled;
 
   public:
     UndefinedInstruction(ExtMachInst _machInst,
                          bool _unknown,
-                         const char *_mnemonic = NULL) :
-        machInst(_machInst), unknown(_unknown), mnemonic(_mnemonic)
+                         const char *_mnemonic = NULL,
+                         bool _disabled = false) :
+        machInst(_machInst), unknown(_unknown),
+        mnemonic(_mnemonic), disabled(_disabled)
     {
     }
 
-    void invoke(ThreadContext *tc);
+    void invoke(ThreadContext *tc,
+            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
 #endif
 };
 
@@ -176,7 +182,8 @@ class SupervisorCall : public ArmFaultVals<SupervisorCall>
     SupervisorCall(ExtMachInst _machInst) : machInst(_machInst)
     {}
 
-    void invoke(ThreadContext *tc);
+    void invoke(ThreadContext *tc,
+            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
 #endif
 };
 
@@ -196,7 +203,8 @@ class AbortFault : public ArmFaultVals<T>
         domain(_domain), status(_status)
     {}
 
-    void invoke(ThreadContext *tc);
+    void invoke(ThreadContext *tc,
+            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
 };
 
 class PrefetchAbort : public AbortFault<PrefetchAbort>
@@ -224,6 +232,15 @@ class DataAbort : public AbortFault<DataAbort>
 class Interrupt : public ArmFaultVals<Interrupt> {};
 class FastInterrupt : public ArmFaultVals<FastInterrupt> {};
 
+// A fault that flushes the pipe, excluding the faulting instructions
+class FlushPipe : public ArmFaultVals<FlushPipe>
+{
+  public:
+    FlushPipe() {}
+    void invoke(ThreadContext *tc,
+            StaticInstPtr inst = StaticInst::nullStaticInstPtr);
+};
+
 static inline Fault genMachineCheckFault()
 {
     return new Reset();