X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fsim%2Ffaults.cc;h=bd05df8343a31aaae5b7225603d6a075f3b71fa2;hb=717d4ae930a64226d909e97fc672dccfa6a19ca2;hp=6149a8335c1dd564d1a70dc8e07c82622464a32b;hpb=0484432a7ca177d52fa98746b16c92805df73189;p=gem5.git diff --git a/src/sim/faults.cc b/src/sim/faults.cc index 6149a8335..bd05df834 100644 --- a/src/sim/faults.cc +++ b/src/sim/faults.cc @@ -31,43 +31,48 @@ #include "arch/isa_traits.hh" #include "base/misc.hh" -#include "cpu/thread_context.hh" #include "cpu/base.hh" +#include "cpu/thread_context.hh" +#include "debug/Fault.hh" +#include "mem/page_table.hh" #include "sim/faults.hh" #include "sim/process.hh" -#include "mem/page_table.hh" #if !FULL_SYSTEM -void FaultBase::invoke(ThreadContext * tc) +void FaultBase::invoke(ThreadContext * tc, StaticInstPtr inst) { - panic("fault (%s) detected @ PC %p", name(), tc->readPC()); + panic("fault (%s) detected @ PC %s", name(), tc->pcState()); } #else -void FaultBase::invoke(ThreadContext * tc) +void FaultBase::invoke(ThreadContext * tc, StaticInstPtr inst) { - DPRINTF(Fault, "Fault %s at PC: %#x\n", name(), tc->readPC()); - tc->getCpuPtr()->recordEvent(csprintf("Fault %s", name())); - + DPRINTF(Fault, "Fault %s at PC: %s\n", name(), tc->pcState()); assert(!tc->misspeculating()); } #endif -void UnimpFault::invoke(ThreadContext * tc) +void UnimpFault::invoke(ThreadContext * tc, StaticInstPtr inst) { panic("Unimpfault: %s\n", panicStr.c_str()); } +void ReExec::invoke(ThreadContext *tc, StaticInstPtr inst) +{ + tc->pcState(tc->pcState()); +} + + #if !FULL_SYSTEM -void GenericPageTableFault::invoke(ThreadContext *tc) +void GenericPageTableFault::invoke(ThreadContext *tc, StaticInstPtr inst) { Process *p = tc->getProcessPtr(); - if (!p->checkAndAllocNextPage(vaddr)) + if (!p->fixupStackFault(vaddr)) panic("Page table fault when accessing virtual address %#x\n", vaddr); } -void GenericAlignmentFault::invoke(ThreadContext *tc) +void GenericAlignmentFault::invoke(ThreadContext *tc, StaticInstPtr inst) { panic("Alignment fault when accessing virtual address %#x\n", vaddr); }