summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/sim/faults.cc24
-rw-r--r--src/sim/faults.hh3
2 files changed, 11 insertions, 16 deletions
diff --git a/src/sim/faults.cc b/src/sim/faults.cc
index bd05df834..6403953db 100644
--- a/src/sim/faults.cc
+++ b/src/sim/faults.cc
@@ -38,18 +38,15 @@
#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
diff --git a/src/sim/faults.hh b/src/sim/faults.hh
index 2d91b8d46..0b2d3be10 100644
--- a/src/sim/faults.hh
+++ b/src/sim/faults.hh
@@ -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__