Faults: Make the generic faults more consistent between SE and FS.

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.
This commit is contained in:
Gabe Black 2011-09-27 00:16:33 -07:00
parent 997cbe1c09
commit ea79850f90
2 changed files with 11 additions and 16 deletions

View file

@ -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

View 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__