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:
parent
526b1b7ec8
commit
3f0118876f
1 changed files with 19 additions and 2 deletions
|
@ -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]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue