diff options
author | vboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f> | 2018-08-03 12:11:07 +0000 |
---|---|---|
committer | vboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f> | 2018-08-03 12:11:07 +0000 |
commit | 003c379826dee0885a6a3e93ceb3766f631803e2 (patch) | |
tree | 8e956f413c4f7fa8f926ed0376732c2e84c2219a /src/VBox/VMM/VMMR3/VMMGuruMeditation.cpp | |
parent | ca14accfe9c62e389f391d5c01ad4a1ddec5e8c9 (diff) | |
download | VirtualBox-svn-003c379826dee0885a6a3e93ceb3766f631803e2.tar.gz |
VMM,DBGF: Improved unwinding of ring-0 assertion stacks, making the new unwind info stuff deal correctly with ring-0 pointers and such. bugref:3897
git-svn-id: https://www.virtualbox.org/svn/vbox/trunk@73471 cfe28804-0f27-0410-a406-dd0f0b0b656f
Diffstat (limited to 'src/VBox/VMM/VMMR3/VMMGuruMeditation.cpp')
-rw-r--r-- | src/VBox/VMM/VMMR3/VMMGuruMeditation.cpp | 25 |
1 files changed, 5 insertions, 20 deletions
diff --git a/src/VBox/VMM/VMMR3/VMMGuruMeditation.cpp b/src/VBox/VMM/VMMR3/VMMGuruMeditation.cpp index c3022c5f4fc..c63c4f002b6 100644 --- a/src/VBox/VMM/VMMR3/VMMGuruMeditation.cpp +++ b/src/VBox/VMM/VMMR3/VMMGuruMeditation.cpp @@ -451,27 +451,12 @@ VMMR3DECL(void) VMMR3FatalDump(PVM pVM, PVMCPU pVCpu, int rcErr) #endif /* Callstack. */ - DBGFADDRESS pc; - pc.fFlags = DBGFADDRESS_FLAGS_RING0 | DBGFADDRESS_FLAGS_VALID; -#if HC_ARCH_BITS == 64 - pc.FlatPtr = pc.off = pVCpu->vmm.s.CallRing3JmpBufR0.rip; -#else - pc.FlatPtr = pc.off = pVCpu->vmm.s.CallRing3JmpBufR0.eip; -#endif - pc.Sel = DBGF_SEL_FLAT; - - DBGFADDRESS ebp; - ebp.fFlags = DBGFADDRESS_FLAGS_RING0 | DBGFADDRESS_FLAGS_VALID; - ebp.FlatPtr = ebp.off = pVCpu->vmm.s.CallRing3JmpBufR0.SavedEbp; - ebp.Sel = DBGF_SEL_FLAT; - - DBGFADDRESS esp; - esp.fFlags = DBGFADDRESS_FLAGS_RING0 | DBGFADDRESS_FLAGS_VALID; - esp.Sel = DBGF_SEL_FLAT; - esp.FlatPtr = esp.off = pVCpu->vmm.s.CallRing3JmpBufR0.SavedEsp; - + DBGFADDRESS AddrPc, AddrBp, AddrSp; PCDBGFSTACKFRAME pFirstFrame; - rc2 = DBGFR3StackWalkBeginEx(pVM->pUVM, pVCpu->idCpu, DBGFCODETYPE_RING0, &ebp, &esp, &pc, + rc2 = DBGFR3StackWalkBeginEx(pVM->pUVM, pVCpu->idCpu, DBGFCODETYPE_RING0, + DBGFR3AddrFromHostR0(&AddrBp, pVCpu->vmm.s.CallRing3JmpBufR0.SavedEbp), + DBGFR3AddrFromHostR0(&AddrSp, pVCpu->vmm.s.CallRing3JmpBufR0.SpResume), + DBGFR3AddrFromHostR0(&AddrPc, pVCpu->vmm.s.CallRing3JmpBufR0.SavedEipForUnwind), RTDBGRETURNTYPE_INVALID, &pFirstFrame); if (RT_SUCCESS(rc2)) { |