From 3f0118876f109d0fb94f06687e8d695835a03636 Mon Sep 17 00:00:00 2001 From: Alexandru Dutu Date: Tue, 4 Oct 2016 13:06:05 -0400 Subject: [PATCH] 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. --- src/arch/x86/pseudo_inst.cc | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/arch/x86/pseudo_inst.cc b/src/arch/x86/pseudo_inst.cc index bd3b5ac7c..f243df73a 100644 --- a/src/arch/x86/pseudo_inst.cc +++ b/src/arch/x86/pseudo_inst.cc @@ -29,8 +29,10 @@ */ #include "arch/x86/pseudo_inst.hh" +#include "arch/x86/system.hh" #include "debug/PseudoInst.hh" #include "sim/process.hh" +#include "sim/system.hh" using namespace X86ISA; @@ -62,8 +64,23 @@ m5PageFault(ThreadContext *tc) Process *p = tc->getProcessPtr(); 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]); + } } } // namespace X86ISA -- 2.30.2