Changeset 73348 in vbox
- Timestamp:
- Jul 25, 2018 9:25:45 AM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 123962
- Location:
- trunk
- Files:
-
- 1 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/dbgf.h
r73150 r73348 500 500 struct DBGFEVENTGENERIC 501 501 { 502 /** Argument. */ 503 uint64_t uArg; 502 /** Number of arguments. */ 503 uint8_t cArgs; 504 /** Alignmnet padding. */ 505 uint8_t uPadding[7]; 506 /** Arguments. */ 507 uint64_t auArgs[6]; 504 508 } Generic; 505 509 506 510 /** Padding for ensuring that the structure is 8 byte aligned. */ 507 uint64_t au64Padding[ 4];511 uint64_t au64Padding[7]; 508 512 } u; 509 513 } DBGFEVENT; … … 532 536 VMMR3_INT_DECL(void) DBGFR3PowerOff(PVM pVM); 533 537 VMMR3_INT_DECL(void) DBGFR3Relocate(PVM pVM, RTGCINTPTR offDelta); 538 534 539 VMMR3_INT_DECL(int) DBGFR3VMMForcedAction(PVM pVM, PVMCPU pVCpu); 535 540 VMMR3_INT_DECL(VBOXSTRICTRC) DBGFR3EventHandlePending(PVM pVM, PVMCPU pVCpu); … … 541 546 VMMR3_INT_DECL(int) DBGFR3EventAssertion(PVM pVM, DBGFEVENTTYPE enmEvent, const char *pszMsg1, const char *pszMsg2); 542 547 VMMR3_INT_DECL(int) DBGFR3EventBreakpoint(PVM pVM, DBGFEVENTTYPE enmEvent); 548 543 549 VMMR3_INT_DECL(int) DBGFR3PrgStep(PVMCPU pVCpu); 544 550 … … 885 891 VMM_INT_DECL(bool) DBGFIsStepping(PVMCPU pVCpu); 886 892 VMM_INT_DECL(VBOXSTRICTRC) DBGFBpCheckIo(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, RTIOPORT uIoPort, uint8_t cbValue); 887 VMM_INT_DECL(VBOXSTRICTRC) DBGFEventGenericWithArg (PVM pVM, PVMCPU pVCpu, DBGFEVENTTYPE enmEvent, uint64_t uEventArg,888 DBGFEVENTCTX enmCtx);893 VMM_INT_DECL(VBOXSTRICTRC) DBGFEventGenericWithArgs(PVM pVM, PVMCPU pVCpu, DBGFEVENTTYPE enmEvent, DBGFEVENTCTX enmCtx, 894 unsigned cArgs, ...); 889 895 890 896 … … 2707 2713 /** @} */ 2708 2714 2715 2716 /** @defgroup grp_dbgf_misc Misc DBGF interfaces. 2717 * @{ */ 2718 VMMR3DECL(int) DBGFR3FormatBugCheck(PUVM pUVM, char *pszDetails, size_t cbDetails, 2719 uint64_t uP0, uint64_t uP1, uint64_t uP2, uint64_t uP3, uint64_t uP4); 2720 /** @} */ 2709 2721 #endif /* IN_RING3 */ 2710 2722 -
trunk/src/VBox/Debugger/DBGCEmulateCodeView.cpp
r73097 r73348 624 624 { DBGFEVENT_MEMORY_UNASSIGNED, "mmio_unassigned", NULL, kDbgcSxEventKind_Plain, kDbgcEvtState_Disabled, 0, NULL }, 625 625 { DBGFEVENT_MEMORY_ROM_WRITE, "rom_write", NULL, kDbgcSxEventKind_Plain, kDbgcEvtState_Disabled, 0, NULL }, 626 { DBGFEVENT_BSOD_MSR, "bsod_msr", NULL, kDbgcSxEventKind_Plain, kDbgcEvtState_Disabled, 0,NULL },627 { DBGFEVENT_BSOD_EFI, "bsod_efi", NULL, kDbgcSxEventKind_Plain, kDbgcEvtState_Disabled, 0,NULL },626 { DBGFEVENT_BSOD_MSR, "bsod_msr", NULL, kDbgcSxEventKind_Plain, kDbgcEvtState_Disabled, DBGCSXEVT_F_BUGCHECK, NULL }, 627 { DBGFEVENT_BSOD_EFI, "bsod_efi", NULL, kDbgcSxEventKind_Plain, kDbgcEvtState_Disabled, DBGCSXEVT_F_BUGCHECK, NULL }, 628 628 }; 629 629 /** Number of entries in g_aDbgcSxEvents. */ -
trunk/src/VBox/Debugger/DBGCInternal.h
r73097 r73348 424 424 * @{ */ 425 425 #define DBGCSXEVT_F_TAKE_ARG RT_BIT_32(0) 426 /** Windows bugcheck, should take 5 arguments. */ 427 #define DBGCSXEVT_F_BUGCHECK RT_BIT_32(1) 426 428 /** @} */ 427 429 -
trunk/src/VBox/Debugger/DBGConsole.cpp
r72268 r73348 815 815 { 816 816 Assert(pEvtDesc->pszDesc); 817 Assert(pEvent->u.Generic.cArgs == 1); 817 818 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event: %s no %#llx! (%s)\n", 818 pEvtDesc->pszDesc, pEvent->u.Generic.uArg, pEvtDesc->pszName); 819 pEvtDesc->pszDesc, pEvent->u.Generic.auArgs[0], pEvtDesc->pszName); 820 } 821 else if (pEvtDesc->fFlags & DBGCSXEVT_F_BUGCHECK) 822 { 823 Assert(pEvent->u.Generic.cArgs >= 5); 824 char szDetails[512]; 825 DBGFR3FormatBugCheck(pDbgc->pUVM, szDetails, sizeof(szDetails), pEvent->u.Generic.auArgs[0], 826 pEvent->u.Generic.auArgs[1], pEvent->u.Generic.auArgs[2], 827 pEvent->u.Generic.auArgs[3], pEvent->u.Generic.auArgs[4]); 828 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event: %s %s%s!\n%s", pEvtDesc->pszName, 829 pEvtDesc->pszDesc ? "- " : "", pEvtDesc->pszDesc ? pEvtDesc->pszDesc : "", 830 szDetails); 819 831 } 820 832 else if ( (pEvtDesc->fFlags & DBGCSXEVT_F_TAKE_ARG) 821 || pEvent->u.Generic.uArg != 0) 833 || pEvent->u.Generic.cArgs > 1 834 || ( pEvent->u.Generic.cArgs == 1 835 && pEvent->u.Generic.auArgs[0] != 0)) 822 836 { 823 837 if (pEvtDesc->pszDesc) 824 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event: %s - %s! arg=%#llx\n",825 pEvtDesc->pszName, pEvtDesc->pszDesc , pEvent->u.Generic.uArg);838 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event: %s - %s!", 839 pEvtDesc->pszName, pEvtDesc->pszDesc); 826 840 else 827 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event: %s! arg=%#llx\n", 828 pEvtDesc->pszName, pEvent->u.Generic.uArg); 841 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event: %s!", pEvtDesc->pszName); 842 if (pEvent->u.Generic.cArgs <= 1) 843 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, " arg=%u%#llx\n", pEvent->u.Generic.auArgs[0]); 844 else 845 { 846 for (uint32_t i = 0; i < pEvent->u.Generic.cArgs; i++) 847 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, " args[%u]=%#llx", i, pEvent->u.Generic.auArgs[i]); 848 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\n"); 849 } 829 850 } 830 851 else -
trunk/src/VBox/Debugger/testcase/tstDBGCStubs.cpp
r73150 r73348 545 545 } 546 546 547 VMMR3DECL(int) DBGFR3FormatBugCheck(PUVM pUVM, char *pszDetails, size_t cbDetails, 548 uint64_t uP0, uint64_t uP1, uint64_t uP2, uint64_t uP3, uint64_t uP4) 549 { 550 pszDetails[0] = '\0'; 551 return VERR_INTERNAL_ERROR; 552 } 553 547 554 #include <VBox/vmm/cfgm.h> 548 555 VMMR3DECL(int) CFGMR3ValidateConfig(PCFGMNODE pNode, const char *pszNode, -
trunk/src/VBox/VMM/Makefile.kmk
r73271 r73348 93 93 VMMR3/DBGFAddrSpace.cpp \ 94 94 VMMR3/DBGFBp.cpp \ 95 VMMR3/DBGFR3BugCheck.cpp \ 95 96 VMMR3/DBGFCoreWrite.cpp \ 96 97 VMMR3/DBGFCpu.cpp \ -
trunk/src/VBox/VMM/VMMAll/DBGFAll.cpp
r69111 r73348 27 27 #include <iprt/assert.h> 28 28 #include <iprt/asm.h> 29 #include <iprt/stdarg.h> 29 30 30 31 … … 313 314 * @retval VINF_EM_DBG_EVENT if the event was raised and the caller should 314 315 * return ASAP to the debugger (via EM). We set VMCPU_FF_DBGF so, it 315 * is okay not to pass this along in some situations 316 * is okay not to pass this along in some situations. 316 317 * @retval VINF_SUCCESS if the event was disabled or ignored. 317 318 * … … 319 320 * @param pVCpu The cross context virtual CPU structure. 320 321 * @param enmEvent The generic event being raised. 322 * @param enmCtx The context in which this event is being raised. 323 * @param cArgs Number of arguments (0 - 6). 321 324 * @param uEventArg The argument of that event. 322 * @param enmCtx The context in which this event is being raised.323 325 * 324 326 * @thread EMT(pVCpu) 325 327 */ 326 VMM_INT_DECL(VBOXSTRICTRC) DBGFEventGenericWithArg(PVM pVM, PVMCPU pVCpu, DBGFEVENTTYPE enmEvent, uint64_t uEventArg, 327 DBGFEVENTCTX enmCtx) 328 { 328 VMM_INT_DECL(VBOXSTRICTRC) DBGFEventGenericWithArgs(PVM pVM, PVMCPU pVCpu, DBGFEVENTTYPE enmEvent, DBGFEVENTCTX enmCtx, 329 unsigned cArgs, ...) 330 { 331 Assert(cArgs < RT_ELEMENTS(pVCpu->dbgf.s.aEvents[0].Event.u.Generic.auArgs)); 332 329 333 /* 330 334 * Is it enabled. 331 335 */ 332 if (dbgfEventIsGenericWithArgEnabled(pVM, enmEvent, uEventArg)) 336 va_list va; 337 va_start(va, cArgs); 338 uint64_t uEventArg0 = cArgs ? va_arg(va, uint64_t) : 0; 339 if (dbgfEventIsGenericWithArgEnabled(pVM, enmEvent, uEventArg0)) 333 340 { 334 341 /* … … 346 353 { 347 354 pVCpu->dbgf.s.aEvents[i].enmState = DBGFEVENTSTATE_RESTORABLE; 355 va_end(va); 348 356 return VINF_SUCCESS; 349 357 } … … 381 389 pVCpu->dbgf.s.aEvents[i].Event.enmType = enmEvent; 382 390 pVCpu->dbgf.s.aEvents[i].Event.enmCtx = enmCtx; 383 pVCpu->dbgf.s.aEvents[i].Event.u.Generic.uArg = uEventArg; 391 pVCpu->dbgf.s.aEvents[i].Event.u.Generic.cArgs = cArgs; 392 pVCpu->dbgf.s.aEvents[i].Event.u.Generic.auArgs[0] = uEventArg0; 393 if (cArgs > 1) 394 { 395 AssertStmt(cArgs < RT_ELEMENTS(pVCpu->dbgf.s.aEvents[i].Event.u.Generic.auArgs), 396 cArgs = RT_ELEMENTS(pVCpu->dbgf.s.aEvents[i].Event.u.Generic.auArgs)); 397 for (unsigned iArg = 1; iArg < cArgs; iArg++) 398 pVCpu->dbgf.s.aEvents[i].Event.u.Generic.auArgs[iArg] = va_arg(va, uint64_t); 399 } 384 400 pVCpu->dbgf.s.cEvents = i + 1; 385 401 386 402 VMCPU_FF_SET(pVCpu, VMCPU_FF_DBGF); 403 va_end(va); 387 404 return VINF_EM_DBG_EVENT; 388 405 } 389 406 407 va_end(va); 390 408 return VINF_SUCCESS; 391 409 } -
trunk/src/VBox/VMM/VMMAll/GIMAllHv.cpp
r72469 r73348 934 934 LogRel(("GIM: HyperV: Guest indicates a fatal condition! P0=%#RX64 P1=%#RX64 P2=%#RX64 P3=%#RX64 P4=%#RX64\n", 935 935 pHv->uCrashP0Msr, pHv->uCrashP1Msr, pHv->uCrashP2Msr, pHv->uCrashP3Msr, pHv->uCrashP4Msr)); 936 char szDetails[512]; 937 DBGFR3FormatBugCheck(pVM->pUVM, szDetails, sizeof(szDetails), pHv->uCrashP0Msr, pHv->uCrashP1Msr, 938 pHv->uCrashP2Msr, pHv->uCrashP3Msr, pHv->uCrashP4Msr); 939 LogRel(("%s", szDetails)); 936 940 937 941 if (DBGF_IS_EVENT_ENABLED(pVM, DBGFEVENT_BSOD_MSR)) 938 DBGFEventGenericWithArg(pVM, pVCpu, DBGFEVENT_BSOD_MSR, pHv->uCrashP0Msr, DBGFEVENTCTX_OTHER); 942 DBGFEventGenericWithArgs(pVM, pVCpu, DBGFEVENT_BSOD_MSR, DBGFEVENTCTX_OTHER, 5 /*cArgs*/, pHv->uCrashP0Msr, 943 pHv->uCrashP1Msr, pHv->uCrashP2Msr, pHv->uCrashP3Msr, pHv->uCrashP4Msr); 939 944 /* (Do not try pass VINF_EM_DBG_EVENT, doesn't work from here!) */ 940 945 } -
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r73311 r73348 9556 9556 && DBGF_IS_EVENT_ENABLED(pVM, enmEvent1)) 9557 9557 { 9558 VBOXSTRICTRC rcStrict = DBGFEventGenericWithArg (pVM, pVCpu, enmEvent1, uEventArg, DBGFEVENTCTX_HM);9558 VBOXSTRICTRC rcStrict = DBGFEventGenericWithArgs(pVM, pVCpu, enmEvent1, DBGFEVENTCTX_HM, 1, uEventArg); 9559 9559 if (rcStrict != VINF_SUCCESS) 9560 9560 return rcStrict; … … 9563 9563 && DBGF_IS_EVENT_ENABLED(pVM, enmEvent2)) 9564 9564 { 9565 VBOXSTRICTRC rcStrict = DBGFEventGenericWithArg (pVM, pVCpu, enmEvent2, uEventArg, DBGFEVENTCTX_HM);9565 VBOXSTRICTRC rcStrict = DBGFEventGenericWithArgs(pVM, pVCpu, enmEvent2, DBGFEVENTCTX_HM, 1, uEventArg); 9566 9566 if (rcStrict != VINF_SUCCESS) 9567 9567 return rcStrict;
Note:
See TracChangeset
for help on using the changeset viewer.