Faults: Make the generic faults more consistent between SE and FS.
authorGabe Black <gblack@eecs.umich.edu>
Tue, 27 Sep 2011 07:16:33 +0000 (00:16 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Tue, 27 Sep 2011 07:16:33 +0000 (00:16 -0700)
All of the classes will now be available in both modes, and only
GenericPageTableFault will continue to check the mode for conditional
compilation. It uses a process object to handle the fault in SE mode, and
for now those aren't available in FS mode.

src/sim/faults.cc
src/sim/faults.hh

index bd05df8343a31aaae5b7225603d6a075f3b71fa2..6403953dbc48d36d2e36ea46cace256d3a28c24c 100644 (file)
 #include "sim/faults.hh"
 #include "sim/process.hh"
 
-#if !FULL_SYSTEM
 void FaultBase::invoke(ThreadContext * tc, StaticInstPtr inst)
 {
-    panic("fault (%s) detected @ PC %s", name(), tc->pcState());
+    if (FULL_SYSTEM) {
+        DPRINTF(Fault, "Fault %s at PC: %s\n", name(), tc->pcState());
+        assert(!tc->misspeculating());
+    } else {
+        panic("fault (%s) detected @ PC %s", name(), tc->pcState());
+    }
 }
-#else
-void FaultBase::invoke(ThreadContext * tc, StaticInstPtr inst)
-{
-    DPRINTF(Fault, "Fault %s at PC: %s\n", name(), tc->pcState());
-    assert(!tc->misspeculating());
-}
-#endif
 
 void UnimpFault::invoke(ThreadContext * tc, StaticInstPtr inst)
 {
@@ -61,13 +58,15 @@ void ReExec::invoke(ThreadContext *tc, StaticInstPtr inst)
     tc->pcState(tc->pcState());
 }
 
-
-#if !FULL_SYSTEM
 void GenericPageTableFault::invoke(ThreadContext *tc, StaticInstPtr inst)
 {
+    bool handled = false;
+#if !FULL_SYSTEM
     Process *p = tc->getProcessPtr();
 
-    if (!p->fixupStackFault(vaddr))
+    handled = p->fixupStackFault(vaddr);
+#endif
+    if (!handled)
         panic("Page table fault when accessing virtual address %#x\n", vaddr);
 
 }
@@ -76,4 +75,3 @@ void GenericAlignmentFault::invoke(ThreadContext *tc, StaticInstPtr inst)
 {
     panic("Alignment fault when accessing virtual address %#x\n", vaddr);
 }
-#endif
index 2d91b8d46cbc63f692528cb9a3e2021353eff74f..0b2d3be108c5bea229093dc07ed3f97da7b310ba 100644 (file)
@@ -82,8 +82,6 @@ class ReExec : public FaultBase
             StaticInstPtr inst = StaticInst::nullStaticInstPtr);
 };
 
-
-#if !FULL_SYSTEM
 class GenericPageTableFault : public FaultBase
 {
   private:
@@ -105,6 +103,5 @@ class GenericAlignmentFault : public FaultBase
     void invoke(ThreadContext * tc,
             StaticInstPtr inst = StaticInst::nullStaticInstPtr);
 };
-#endif
 
 #endif // __FAULTS_HH__