summaryrefslogtreecommitdiff
path: root/src/VBox/VMM/VMMR3/VMMGuruMeditation.cpp
diff options
context:
space:
mode:
authorvboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f>2018-08-03 12:11:07 +0000
committervboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f>2018-08-03 12:11:07 +0000
commit003c379826dee0885a6a3e93ceb3766f631803e2 (patch)
tree8e956f413c4f7fa8f926ed0376732c2e84c2219a /src/VBox/VMM/VMMR3/VMMGuruMeditation.cpp
parentca14accfe9c62e389f391d5c01ad4a1ddec5e8c9 (diff)
downloadVirtualBox-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.cpp25
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))
{