Changeset 73460 in vbox for trunk/src/VBox/Debugger
- Timestamp:
- Aug 2, 2018 9:06:59 PM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 124087
- Location:
- trunk/src/VBox/Debugger
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Debugger/DBGCEmulateCodeView.cpp
r73449 r73460 2853 2853 * Display verbose frame info. 2854 2854 */ 2855 const char *pszRetType ;2855 const char *pszRetType = "invalid"; 2856 2856 switch (pFrame->enmReturnType) 2857 2857 { 2858 case DBGFRETURNTYPE_NEAR16: pszRetType = "retn/16"; break; 2859 case DBGFRETURNTYPE_NEAR32: pszRetType = "retn/32"; break; 2860 case DBGFRETURNTYPE_NEAR64: pszRetType = "retn/64"; break; 2861 case DBGFRETURNTYPE_FAR16: pszRetType = "retf/16"; break; 2862 case DBGFRETURNTYPE_FAR32: pszRetType = "retf/32"; break; 2863 case DBGFRETURNTYPE_FAR64: pszRetType = "retf/64"; break; 2864 case DBGFRETURNTYPE_IRET16: pszRetType = "iret-16"; break; 2865 case DBGFRETURNTYPE_IRET32: pszRetType = "iret/32s"; break; 2866 case DBGFRETURNTYPE_IRET32_PRIV: pszRetType = "iret/32p"; break; 2867 case DBGFRETURNTYPE_IRET32_V86: pszRetType = "iret/v86"; break; 2868 case DBGFRETURNTYPE_IRET64: pszRetType = "iret/64"; break; 2869 default: pszRetType = "invalid"; break; 2858 case RTDBGRETURNTYPE_NEAR16: pszRetType = "retn/16"; break; 2859 case RTDBGRETURNTYPE_NEAR32: pszRetType = "retn/32"; break; 2860 case RTDBGRETURNTYPE_NEAR64: pszRetType = "retn/64"; break; 2861 case RTDBGRETURNTYPE_FAR16: pszRetType = "retf/16"; break; 2862 case RTDBGRETURNTYPE_FAR32: pszRetType = "retf/32"; break; 2863 case RTDBGRETURNTYPE_FAR64: pszRetType = "retf/64"; break; 2864 case RTDBGRETURNTYPE_IRET16: pszRetType = "iret-16"; break; 2865 case RTDBGRETURNTYPE_IRET32: pszRetType = "iret/32s"; break; 2866 case RTDBGRETURNTYPE_IRET32_PRIV: pszRetType = "iret/32p"; break; 2867 case RTDBGRETURNTYPE_IRET32_V86: pszRetType = "iret/v86"; break; 2868 case RTDBGRETURNTYPE_IRET64: pszRetType = "iret/64"; break; 2869 2870 case RTDBGRETURNTYPE_END: 2871 case RTDBGRETURNTYPE_INVALID: 2872 case RTDBGRETURNTYPE_32BIT_HACK: 2873 break; 2870 2874 } 2871 2875 size_t cchLine = DBGCCmdHlpPrintfLen(pCmdHlp, " %s", pszRetType); … … 2878 2882 if (pFrame->fFlags & DBGFSTACKFRAME_FLAGS_MAX_DEPTH) 2879 2883 cchLine += DBGCCmdHlpPrintfLen(pCmdHlp, " max-depth"); 2884 if (pFrame->fFlags & DBGFSTACKFRAME_FLAGS_TRAP_FRAME) 2885 cchLine += DBGCCmdHlpPrintfLen(pCmdHlp, " trap-frame"); 2880 2886 2881 2887 if (pFrame->cSureRegs > 0) -
trunk/src/VBox/Debugger/DBGPlugInDarwin.cpp
r69500 r73460 129 129 *********************************************************************************************************************************/ 130 130 static DECLCALLBACK(int) dbgDiggerDarwinInit(PUVM pUVM, void *pvData); 131 131 132 132 133 … … 304 305 305 306 /** 307 * @copydoc DBGFOSREG::pfnStackUnwindAssist 308 */ 309 static DECLCALLBACK(int) dbgDiggerDarwinStackUnwindAssist(PUVM pUVM, void *pvData, VMCPUID idCpu, PDBGFSTACKFRAME pFrame, 310 PRTDBGUNWINDSTATE pState, PCCPUMCTX pInitialCtx, RTDBGAS hAs, 311 uint64_t *puScratch) 312 { 313 RT_NOREF(pUVM, pvData, idCpu, pFrame, pState, pInitialCtx, hAs, puScratch); 314 return VINF_SUCCESS; 315 } 316 317 318 /** 306 319 * @copydoc DBGFOSREG::pfnQueryInterface 307 320 */ … … 972 985 const DBGFOSREG g_DBGDiggerDarwin = 973 986 { 974 /* .u32Magic = */ DBGFOSREG_MAGIC, 975 /* .fFlags = */ 0, 976 /* .cbData = */ sizeof(DBGDIGGERDARWIN), 977 /* .szName = */ "Darwin", 978 /* .pfnConstruct = */ dbgDiggerDarwinConstruct, 979 /* .pfnDestruct = */ dbgDiggerDarwinDestruct, 980 /* .pfnProbe = */ dbgDiggerDarwinProbe, 981 /* .pfnInit = */ dbgDiggerDarwinInit, 982 /* .pfnRefresh = */ dbgDiggerDarwinRefresh, 983 /* .pfnTerm = */ dbgDiggerDarwinTerm, 984 /* .pfnQueryVersion = */ dbgDiggerDarwinQueryVersion, 985 /* .pfnQueryInterface = */ dbgDiggerDarwinQueryInterface, 986 /* .u32EndMagic = */ DBGFOSREG_MAGIC 987 /* .u32Magic = */ DBGFOSREG_MAGIC, 988 /* .fFlags = */ 0, 989 /* .cbData = */ sizeof(DBGDIGGERDARWIN), 990 /* .szName = */ "Darwin", 991 /* .pfnConstruct = */ dbgDiggerDarwinConstruct, 992 /* .pfnDestruct = */ dbgDiggerDarwinDestruct, 993 /* .pfnProbe = */ dbgDiggerDarwinProbe, 994 /* .pfnInit = */ dbgDiggerDarwinInit, 995 /* .pfnRefresh = */ dbgDiggerDarwinRefresh, 996 /* .pfnTerm = */ dbgDiggerDarwinTerm, 997 /* .pfnQueryVersion = */ dbgDiggerDarwinQueryVersion, 998 /* .pfnQueryInterface = */ dbgDiggerDarwinQueryInterface, 999 /* .pfnStackUnwindAssist = */ dbgDiggerDarwinStackUnwindAssist, 1000 /* .u32EndMagic = */ DBGFOSREG_MAGIC 987 1001 }; 988 1002 -
trunk/src/VBox/Debugger/DBGPlugInFreeBsd.cpp
r69500 r73460 585 585 586 586 /** 587 * @copydoc DBGFOSREG::pfnStackUnwindAssist 588 */ 589 static DECLCALLBACK(int) dbgDiggerFreeBsdStackUnwindAssist(PUVM pUVM, void *pvData, VMCPUID idCpu, PDBGFSTACKFRAME pFrame, 590 PRTDBGUNWINDSTATE pState, PCCPUMCTX pInitialCtx, RTDBGAS hAs, 591 uint64_t *puScratch) 592 { 593 RT_NOREF(pUVM, pvData, idCpu, pFrame, pState, pInitialCtx, hAs, puScratch); 594 return VINF_SUCCESS; 595 } 596 597 598 /** 587 599 * @copydoc DBGFOSREG::pfnQueryInterface 588 600 */ … … 799 811 const DBGFOSREG g_DBGDiggerFreeBsd = 800 812 { 801 /* .u32Magic = */ DBGFOSREG_MAGIC, 802 /* .fFlags = */ 0, 803 /* .cbData = */ sizeof(DBGDIGGERFBSD), 804 /* .szName = */ "FreeBSD", 805 /* .pfnConstruct = */ dbgDiggerFreeBsdConstruct, 806 /* .pfnDestruct = */ dbgDiggerFreeBsdDestruct, 807 /* .pfnProbe = */ dbgDiggerFreeBsdProbe, 808 /* .pfnInit = */ dbgDiggerFreeBsdInit, 809 /* .pfnRefresh = */ dbgDiggerFreeBsdRefresh, 810 /* .pfnTerm = */ dbgDiggerFreeBsdTerm, 811 /* .pfnQueryVersion = */ dbgDiggerFreeBsdQueryVersion, 812 /* .pfnQueryInterface = */ dbgDiggerFreeBsdQueryInterface, 813 /* .u32EndMagic = */ DBGFOSREG_MAGIC 813 /* .u32Magic = */ DBGFOSREG_MAGIC, 814 /* .fFlags = */ 0, 815 /* .cbData = */ sizeof(DBGDIGGERFBSD), 816 /* .szName = */ "FreeBSD", 817 /* .pfnConstruct = */ dbgDiggerFreeBsdConstruct, 818 /* .pfnDestruct = */ dbgDiggerFreeBsdDestruct, 819 /* .pfnProbe = */ dbgDiggerFreeBsdProbe, 820 /* .pfnInit = */ dbgDiggerFreeBsdInit, 821 /* .pfnRefresh = */ dbgDiggerFreeBsdRefresh, 822 /* .pfnTerm = */ dbgDiggerFreeBsdTerm, 823 /* .pfnQueryVersion = */ dbgDiggerFreeBsdQueryVersion, 824 /* .pfnQueryInterface = */ dbgDiggerFreeBsdQueryInterface, 825 /* .pfnStackUnwindAssist = */ dbgDiggerFreeBsdStackUnwindAssist, 826 /* .u32EndMagic = */ DBGFOSREG_MAGIC 814 827 }; 815 828 -
trunk/src/VBox/Debugger/DBGPlugInLinux.cpp
r73097 r73460 1082 1082 { 1083 1083 RTStrSpaceDestroy(&pThis->hCfgDb, dbgDiggerLinuxCfgDbDestroyWorker, NULL); 1084 } 1085 1086 1087 /** 1088 * @copydoc DBGFOSREG::pfnStackUnwindAssist 1089 */ 1090 static DECLCALLBACK(int) dbgDiggerLinuxStackUnwindAssist(PUVM pUVM, void *pvData, VMCPUID idCpu, PDBGFSTACKFRAME pFrame, 1091 PRTDBGUNWINDSTATE pState, PCCPUMCTX pInitialCtx, RTDBGAS hAs, 1092 uint64_t *puScratch) 1093 { 1094 RT_NOREF(pUVM, pvData, idCpu, pFrame, pState, pInitialCtx, hAs, puScratch); 1095 return VINF_SUCCESS; 1084 1096 } 1085 1097 … … 2598 2610 const DBGFOSREG g_DBGDiggerLinux = 2599 2611 { 2600 /* .u32Magic = */ DBGFOSREG_MAGIC, 2601 /* .fFlags = */ 0, 2602 /* .cbData = */ sizeof(DBGDIGGERLINUX), 2603 /* .szName = */ "Linux", 2604 /* .pfnConstruct = */ dbgDiggerLinuxConstruct, 2605 /* .pfnDestruct = */ dbgDiggerLinuxDestruct, 2606 /* .pfnProbe = */ dbgDiggerLinuxProbe, 2607 /* .pfnInit = */ dbgDiggerLinuxInit, 2608 /* .pfnRefresh = */ dbgDiggerLinuxRefresh, 2609 /* .pfnTerm = */ dbgDiggerLinuxTerm, 2610 /* .pfnQueryVersion = */ dbgDiggerLinuxQueryVersion, 2611 /* .pfnQueryInterface = */ dbgDiggerLinuxQueryInterface, 2612 /* .u32EndMagic = */ DBGFOSREG_MAGIC 2612 /* .u32Magic = */ DBGFOSREG_MAGIC, 2613 /* .fFlags = */ 0, 2614 /* .cbData = */ sizeof(DBGDIGGERLINUX), 2615 /* .szName = */ "Linux", 2616 /* .pfnConstruct = */ dbgDiggerLinuxConstruct, 2617 /* .pfnDestruct = */ dbgDiggerLinuxDestruct, 2618 /* .pfnProbe = */ dbgDiggerLinuxProbe, 2619 /* .pfnInit = */ dbgDiggerLinuxInit, 2620 /* .pfnRefresh = */ dbgDiggerLinuxRefresh, 2621 /* .pfnTerm = */ dbgDiggerLinuxTerm, 2622 /* .pfnQueryVersion = */ dbgDiggerLinuxQueryVersion, 2623 /* .pfnQueryInterface = */ dbgDiggerLinuxQueryInterface, 2624 /* .pfnStackUnwindAssist = */ dbgDiggerLinuxStackUnwindAssist, 2625 /* .u32EndMagic = */ DBGFOSREG_MAGIC 2613 2626 }; 2614 2627 -
trunk/src/VBox/Debugger/DBGPlugInOS2.cpp
r69500 r73460 116 116 117 117 /** 118 * @copydoc DBGFOSREG::pfnStackUnwindAssist 119 */ 120 static DECLCALLBACK(int) dbgDiggerOS2StackUnwindAssist(PUVM pUVM, void *pvData, VMCPUID idCpu, PDBGFSTACKFRAME pFrame, 121 PRTDBGUNWINDSTATE pState, PCCPUMCTX pInitialCtx, RTDBGAS hAs, 122 uint64_t *puScratch) 123 { 124 RT_NOREF(pUVM, pvData, idCpu, pFrame, pState, pInitialCtx, hAs, puScratch); 125 return VINF_SUCCESS; 126 } 127 128 129 /** 118 130 * @copydoc DBGFOSREG::pfnQueryInterface 119 131 */ … … 343 355 const DBGFOSREG g_DBGDiggerOS2 = 344 356 { 345 /* .u32Magic = */ DBGFOSREG_MAGIC, 346 /* .fFlags = */ 0, 347 /* .cbData = */ sizeof(DBGDIGGEROS2), 348 /* .szName = */ "OS/2", 349 /* .pfnConstruct = */ dbgDiggerOS2Construct, 350 /* .pfnDestruct = */ dbgDiggerOS2Destruct, 351 /* .pfnProbe = */ dbgDiggerOS2Probe, 352 /* .pfnInit = */ dbgDiggerOS2Init, 353 /* .pfnRefresh = */ dbgDiggerOS2Refresh, 354 /* .pfnTerm = */ dbgDiggerOS2Term, 355 /* .pfnQueryVersion = */ dbgDiggerOS2QueryVersion, 356 /* .pfnQueryInterface = */ dbgDiggerOS2QueryInterface, 357 /* .u32EndMagic = */ DBGFOSREG_MAGIC 357 /* .u32Magic = */ DBGFOSREG_MAGIC, 358 /* .fFlags = */ 0, 359 /* .cbData = */ sizeof(DBGDIGGEROS2), 360 /* .szName = */ "OS/2", 361 /* .pfnConstruct = */ dbgDiggerOS2Construct, 362 /* .pfnDestruct = */ dbgDiggerOS2Destruct, 363 /* .pfnProbe = */ dbgDiggerOS2Probe, 364 /* .pfnInit = */ dbgDiggerOS2Init, 365 /* .pfnRefresh = */ dbgDiggerOS2Refresh, 366 /* .pfnTerm = */ dbgDiggerOS2Term, 367 /* .pfnQueryVersion = */ dbgDiggerOS2QueryVersion, 368 /* .pfnQueryInterface = */ dbgDiggerOS2QueryInterface, 369 /* .pfnStackUnwindAssist = */ dbgDiggerOS2StackUnwindAssist, 370 /* .u32EndMagic = */ DBGFOSREG_MAGIC 358 371 }; -
trunk/src/VBox/Debugger/DBGPlugInSolaris.cpp
r69500 r73460 352 352 static DECLCALLBACK(int) dbgDiggerSolarisInit(PUVM pUVM, void *pvData); 353 353 354 355 356 /** 357 * @copydoc DBGFOSREG::pfnStackUnwindAssist 358 */ 359 static DECLCALLBACK(int) dbgDiggerSolarisStackUnwindAssist(PUVM pUVM, void *pvData, VMCPUID idCpu, PDBGFSTACKFRAME pFrame, 360 PRTDBGUNWINDSTATE pState, PCCPUMCTX pInitialCtx, RTDBGAS hAs, 361 uint64_t *puScratch) 362 { 363 RT_NOREF(pUVM, pvData, idCpu, pFrame, pState, pInitialCtx, hAs, puScratch); 364 return VINF_SUCCESS; 365 } 354 366 355 367 … … 1111 1123 const DBGFOSREG g_DBGDiggerSolaris = 1112 1124 { 1113 /* .u32Magic = */ DBGFOSREG_MAGIC, 1114 /* .fFlags = */ 0, 1115 /* .cbData = */ sizeof(DBGDIGGERSOLARIS), 1116 /* .szName = */ "Solaris", 1117 /* .pfnConstruct = */ dbgDiggerSolarisConstruct, 1118 /* .pfnDestruct = */ dbgDiggerSolarisDestruct, 1119 /* .pfnProbe = */ dbgDiggerSolarisProbe, 1120 /* .pfnInit = */ dbgDiggerSolarisInit, 1121 /* .pfnRefresh = */ dbgDiggerSolarisRefresh, 1122 /* .pfnTerm = */ dbgDiggerSolarisTerm, 1123 /* .pfnQueryVersion = */ dbgDiggerSolarisQueryVersion, 1124 /* .pfnQueryInterface = */ dbgDiggerSolarisQueryInterface, 1125 /* .u32EndMagic = */ DBGFOSREG_MAGIC 1125 /* .u32Magic = */ DBGFOSREG_MAGIC, 1126 /* .fFlags = */ 0, 1127 /* .cbData = */ sizeof(DBGDIGGERSOLARIS), 1128 /* .szName = */ "Solaris", 1129 /* .pfnConstruct = */ dbgDiggerSolarisConstruct, 1130 /* .pfnDestruct = */ dbgDiggerSolarisDestruct, 1131 /* .pfnProbe = */ dbgDiggerSolarisProbe, 1132 /* .pfnInit = */ dbgDiggerSolarisInit, 1133 /* .pfnRefresh = */ dbgDiggerSolarisRefresh, 1134 /* .pfnTerm = */ dbgDiggerSolarisTerm, 1135 /* .pfnQueryVersion = */ dbgDiggerSolarisQueryVersion, 1136 /* .pfnQueryInterface = */ dbgDiggerSolarisQueryInterface, 1137 /* .pfnStackUnwindAssist = */ dbgDiggerSolarisStackUnwindAssist, 1138 /* .u32EndMagic = */ DBGFOSREG_MAGIC 1126 1139 }; 1127 1140 -
trunk/src/VBox/Debugger/DBGPlugInWinNt.cpp
r73419 r73460 23 23 #include "DBGPlugIns.h" 24 24 #include <VBox/vmm/dbgf.h> 25 #include <VBox/vmm/cpumctx.h> 26 #include <VBox/vmm/mm.h> 25 27 #include <VBox/err.h> 26 28 #include <VBox/param.h> … … 31 33 #include <iprt/formats/pecoff.h> 32 34 #include <iprt/formats/mz.h> 35 #include <iprt/nt/nt-structures.h> 33 36 34 37 … … 262 265 #define WINNT32_VALID_ADDRESS(Addr) ((Addr) > UINT32_C(0x80000000) && (Addr) < UINT32_C(0xfffff000)) 263 266 /** Validates a 64-bit Windows NT kernel address */ 264 267 #define WINNT64_VALID_ADDRESS(Addr) ((Addr) > UINT64_C(0xffff800000000000) && (Addr) < UINT64_C(0xfffffffffffff000)) 265 268 /** Validates a kernel address. */ 266 269 #define WINNT_VALID_ADDRESS(pThis, Addr) ((pThis)->f32Bit ? WINNT32_VALID_ADDRESS(Addr) : WINNT64_VALID_ADDRESS(Addr)) … … 347 350 else 348 351 Log(("DigWinNt: %s: DBGFR3ModInMem failed: %Rrc\n", pszName, rc)); 352 } 353 354 355 /** 356 * @copydoc DBGFOSREG::pfnStackUnwindAssist 357 */ 358 static DECLCALLBACK(int) dbgDiggerWinNtStackUnwindAssist(PUVM pUVM, void *pvData, VMCPUID idCpu, PDBGFSTACKFRAME pFrame, 359 PRTDBGUNWINDSTATE pState, PCCPUMCTX pInitialCtx, RTDBGAS hAs, 360 uint64_t *puScratch) 361 { 362 Assert(pInitialCtx); 363 364 /* 365 * We want to locate trap frames here. The trap frame structure contains 366 * the 64-bit IRET frame, so given unwind information it's easy to identify 367 * using the return type and frame address. 368 */ 369 if (pFrame->fFlags & DBGFSTACKFRAME_FLAGS_64BIT) 370 { 371 /* 372 * Is this a trap frame? If so, try read the trap frame. 373 */ 374 if ( pFrame->enmReturnType == RTDBGRETURNTYPE_IRET64 375 && !(pFrame->AddrFrame.FlatPtr & 0x7) 376 && WINNT64_VALID_ADDRESS(pFrame->AddrFrame.FlatPtr) ) 377 { 378 KTRAP_FRAME_AMD64 TrapFrame; 379 RT_ZERO(TrapFrame); 380 uint64_t const uTrapFrameAddr = pFrame->AddrFrame.FlatPtr 381 - RT_UOFFSETOF(KTRAP_FRAME_AMD64, ErrCdOrXcptFrameOrS); 382 int rc = pState->pfnReadStack(pState, uTrapFrameAddr, sizeof(TrapFrame), &TrapFrame); 383 if (RT_SUCCESS(rc)) 384 { 385 /* Valid? Not too much else we can check here (EFlags isn't 386 reliable in manually construct frames). */ 387 if (TrapFrame.ExceptionActive <= 2) 388 { 389 pFrame->fFlags |= DBGFSTACKFRAME_FLAGS_TRAP_FRAME; 390 391 /* 392 * Add sure 'register' information from the frame to the frame. 393 * 394 * To avoid code duplication, we do this in two steps in a loop. 395 * The first iteration only figures out how many registers we're 396 * going to save and allocates room for them. The second iteration 397 * does the actual adding. 398 */ 399 uint32_t cRegs = pFrame->cSureRegs; 400 PDBGFREGVALEX paSureRegs = NULL; 401 #define ADD_REG_NAMED(a_Type, a_ValMemb, a_Value, a_pszName) do { \ 402 if (paSureRegs) \ 403 { \ 404 paSureRegs[iReg].pszName = a_pszName;\ 405 paSureRegs[iReg].enmReg = DBGFREG_END; \ 406 paSureRegs[iReg].enmType = a_Type; \ 407 paSureRegs[iReg].Value.a_ValMemb = (a_Value); \ 408 } \ 409 iReg++; \ 410 } while (0) 411 #define MAYBE_ADD_GREG(a_Value, a_enmReg, a_idxReg) do { \ 412 if (!(pState->u.x86.Loaded.s.fRegs & RT_BIT(a_idxReg))) \ 413 { \ 414 if (paSureRegs) \ 415 { \ 416 pState->u.x86.Loaded.s.fRegs |= RT_BIT(a_idxReg); \ 417 pState->u.x86.auRegs[a_idxReg] = (a_Value); \ 418 paSureRegs[iReg].Value.u64 = (a_Value); \ 419 paSureRegs[iReg].enmReg = a_enmReg; \ 420 paSureRegs[iReg].enmType = DBGFREGVALTYPE_U64; \ 421 paSureRegs[iReg].pszName = NULL; \ 422 } \ 423 iReg++; \ 424 } \ 425 } while (0) 426 for (unsigned iLoop = 0; iLoop < 2; iLoop++) 427 { 428 uint32_t iReg = pFrame->cSureRegs; 429 ADD_REG_NAMED(DBGFREGVALTYPE_U64, u64, uTrapFrameAddr, "TrapFrame"); 430 ADD_REG_NAMED(DBGFREGVALTYPE_U8, u8, TrapFrame.ExceptionActive, "ExceptionActive"); 431 if (TrapFrame.ExceptionActive == 0) 432 { 433 ADD_REG_NAMED(DBGFREGVALTYPE_U8, u8, TrapFrame.PreviousIrql, "PrevIrql"); 434 ADD_REG_NAMED(DBGFREGVALTYPE_U8, u8, (uint8_t)TrapFrame.ErrCdOrXcptFrameOrS, "IntNo"); 435 } 436 else if ( TrapFrame.ExceptionActive == 1 437 && TrapFrame.FaultIndicator == ((TrapFrame.ErrCdOrXcptFrameOrS >> 1) & 0x9)) 438 ADD_REG_NAMED(DBGFREGVALTYPE_U64, u64, TrapFrame.FaultAddrOrCtxRecOrTS, "cr2-probably"); 439 if (TrapFrame.SegCs & X86_SEL_RPL) 440 ADD_REG_NAMED(DBGFREGVALTYPE_U8, u8, 1, "UserMode"); 441 else 442 ADD_REG_NAMED(DBGFREGVALTYPE_U8, u8, 1, "KernelMode"); 443 if (TrapFrame.ExceptionActive <= 1) 444 { 445 MAYBE_ADD_GREG(TrapFrame.Rax, DBGFREG_RAX, X86_GREG_xAX); 446 MAYBE_ADD_GREG(TrapFrame.Rcx, DBGFREG_RCX, X86_GREG_xCX); 447 MAYBE_ADD_GREG(TrapFrame.Rdx, DBGFREG_RDX, X86_GREG_xDX); 448 MAYBE_ADD_GREG(TrapFrame.R8, DBGFREG_R8, X86_GREG_x8); 449 MAYBE_ADD_GREG(TrapFrame.R9, DBGFREG_R9, X86_GREG_x9); 450 MAYBE_ADD_GREG(TrapFrame.R10, DBGFREG_R10, X86_GREG_x10); 451 MAYBE_ADD_GREG(TrapFrame.R11, DBGFREG_R11, X86_GREG_x11); 452 } 453 else if (TrapFrame.ExceptionActive == 2) 454 { 455 MAYBE_ADD_GREG(TrapFrame.Rbx, DBGFREG_RBX, X86_GREG_xBX); 456 MAYBE_ADD_GREG(TrapFrame.Rsi, DBGFREG_RSI, X86_GREG_xSI); 457 MAYBE_ADD_GREG(TrapFrame.Rdi, DBGFREG_RDI, X86_GREG_xDI); 458 } 459 MAYBE_ADD_GREG(TrapFrame.Rbp, DBGFREG_RBP, X86_GREG_xBP); 460 461 /* Done? */ 462 if (iLoop > 0) 463 { 464 Assert(cRegs == iReg); 465 break; 466 } 467 468 /* Resize the array, zeroing the extension. */ 469 if (pFrame->cSureRegs) 470 paSureRegs = (PDBGFREGVALEX)MMR3HeapRealloc(pFrame->paSureRegs, iReg * sizeof(paSureRegs[0])); 471 else 472 paSureRegs = (PDBGFREGVALEX)MMR3HeapAllocU(pUVM, MM_TAG_DBGF_STACK, iReg * sizeof(paSureRegs[0])); 473 AssertReturn(paSureRegs, VERR_NO_MEMORY); 474 475 pFrame->paSureRegs = paSureRegs; 476 RT_BZERO(&paSureRegs[pFrame->cSureRegs], (iReg - pFrame->cSureRegs) * sizeof(paSureRegs[0])); 477 cRegs = iReg; 478 } 479 #undef ADD_REG_NAMED 480 #undef MAYBE_ADD_GREG 481 482 /* Commit the register update. */ 483 pFrame->cSureRegs = cRegs; 484 } 485 } 486 } 487 } 488 489 RT_NOREF(pUVM, pvData, idCpu, hAs, puScratch); 490 return VINF_SUCCESS; 349 491 } 350 492 … … 882 1024 const DBGFOSREG g_DBGDiggerWinNt = 883 1025 { 884 /* .u32Magic = */ DBGFOSREG_MAGIC, 885 /* .fFlags = */ 0, 886 /* .cbData = */ sizeof(DBGDIGGERWINNT), 887 /* .szName = */ "WinNT", 888 /* .pfnConstruct = */ dbgDiggerWinNtConstruct, 889 /* .pfnDestruct = */ dbgDiggerWinNtDestruct, 890 /* .pfnProbe = */ dbgDiggerWinNtProbe, 891 /* .pfnInit = */ dbgDiggerWinNtInit, 892 /* .pfnRefresh = */ dbgDiggerWinNtRefresh, 893 /* .pfnTerm = */ dbgDiggerWinNtTerm, 894 /* .pfnQueryVersion = */ dbgDiggerWinNtQueryVersion, 895 /* .pfnQueryInterface = */ dbgDiggerWinNtQueryInterface, 896 /* .u32EndMagic = */ DBGFOSREG_MAGIC 1026 /* .u32Magic = */ DBGFOSREG_MAGIC, 1027 /* .fFlags = */ 0, 1028 /* .cbData = */ sizeof(DBGDIGGERWINNT), 1029 /* .szName = */ "WinNT", 1030 /* .pfnConstruct = */ dbgDiggerWinNtConstruct, 1031 /* .pfnDestruct = */ dbgDiggerWinNtDestruct, 1032 /* .pfnProbe = */ dbgDiggerWinNtProbe, 1033 /* .pfnInit = */ dbgDiggerWinNtInit, 1034 /* .pfnRefresh = */ dbgDiggerWinNtRefresh, 1035 /* .pfnTerm = */ dbgDiggerWinNtTerm, 1036 /* .pfnQueryVersion = */ dbgDiggerWinNtQueryVersion, 1037 /* .pfnQueryInterface = */ dbgDiggerWinNtQueryInterface, 1038 /* .pfnStackUnwindAssist = */ dbgDiggerWinNtStackUnwindAssist, 1039 /* .u32EndMagic = */ DBGFOSREG_MAGIC 897 1040 }; 898 1041
Note:
See TracChangeset
for help on using the changeset viewer.