kvm: Adding details to kvm page fault in x86

Adding details, e.g. rip, rsp etc. to the kvm pagefault exit when in SE mode.
This commit is contained in:
Alexandru Dutu 2016-10-04 13:06:05 -04:00
parent 526b1b7ec8
commit 3f0118876f

View file

@ -29,8 +29,10 @@
*/ */
#include "arch/x86/pseudo_inst.hh" #include "arch/x86/pseudo_inst.hh"
#include "arch/x86/system.hh"
#include "debug/PseudoInst.hh" #include "debug/PseudoInst.hh"
#include "sim/process.hh" #include "sim/process.hh"
#include "sim/system.hh"
using namespace X86ISA; using namespace X86ISA;
@ -62,7 +64,22 @@ m5PageFault(ThreadContext *tc)
Process *p = tc->getProcessPtr(); Process *p = tc->getProcessPtr();
if (!p->fixupStackFault(tc->readMiscReg(MISCREG_CR2))) { if (!p->fixupStackFault(tc->readMiscReg(MISCREG_CR2))) {
panic("Page fault at %#x ", tc->readMiscReg(MISCREG_CR2)); SETranslatingPortProxy proxy = tc->getMemProxy();
// at this point we should have 6 values on the interrupt stack
int size = 6;
uint64_t is[size];
// reading the interrupt handler stack
proxy.readBlob(ISTVirtAddr + PageBytes - size*sizeof(uint64_t),
(uint8_t *)&is, sizeof(is));
panic("Page fault at addr %#x\n\tInterrupt handler stack:\n"
"\tss: %#x\n"
"\trsp: %#x\n"
"\trflags: %#x\n"
"\tcs: %#x\n"
"\trip: %#x\n"
"\terr_code: %#x\n",
tc->readMiscReg(MISCREG_CR2),
is[5], is[4], is[3], is[2], is[1], is[0]);
} }
} }