Changeset 13717 in vbox
- Timestamp:
- Oct 31, 2008 2:31:23 PM (16 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
-
include/iprt/log.h (modified) (1 diff)
-
src/VBox/Runtime/common/log/log.cpp (modified) (8 diffs)
-
src/VBox/VMM/VMM.cpp (modified) (36 diffs)
-
src/VBox/VMM/VMMSwitcher/VMMSwitcher.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/iprt/log.h
r13580 r13717 1358 1358 * 1359 1359 * @param pLogger The logger instance to be cloned. 1360 * @param pLoggerGC Where to create the GC logger instance. 1361 * @param cbLoggerGC Amount of memory allocated to for the GC logger instance clone. 1362 * @param pfnLoggerGCPtr Pointer to logger wrapper function for this instance (GC Ptr). 1363 * @param pfnFlushGCPtr Pointer to flush function (GC Ptr). 1360 * @param pLoggerRC Where to create the RC logger instance. 1361 * @param cbLoggerRC Amount of memory allocated to for the RC logger 1362 * instance clone. 1363 * @param pfnLoggerRCPtr Pointer to logger wrapper function for this 1364 * instance (RC Ptr). 1365 * @param pfnFlushRCPtr Pointer to flush function (RC Ptr). 1364 1366 * @param fFlags Logger instance flags, a combination of the RTLOGFLAGS_* values. 1365 1367 */ 1366 RTDECL(int) RTLogCloneRC(PRTLOGGER pLogger, PRTLOGGERRC pLogger GC, size_t cbLoggerGC,1367 RTRCPTR pfnLogger GCPtr, RTRCPTR pfnFlushGCPtr, RTUINT fFlags);1368 1369 /** 1370 * Flushes a GC logger instance to a HClogger.1368 RTDECL(int) RTLogCloneRC(PRTLOGGER pLogger, PRTLOGGERRC pLoggerRC, size_t cbLoggerRC, 1369 RTRCPTR pfnLoggerRCPtr, RTRCPTR pfnFlushRCPtr, RTUINT fFlags); 1370 1371 /** 1372 * Flushes a RC logger instance to a R3 logger. 1371 1373 * 1372 1374 * @returns iprt status code. 1373 * @param pLogger The HC logger instance to flush pLoggerGC to.1374 * If NULLthe default logger is used.1375 * @param pLogger GC The GC logger instance to flush.1376 */ 1377 RTDECL(void) RTLogFlush GC(PRTLOGGER pLogger, PRTLOGGERRC pLoggerGC);1375 * @param pLogger The R3 logger instance to flush pLoggerRC to. If NULL 1376 * the default logger is used. 1377 * @param pLoggerRC The RC logger instance to flush. 1378 */ 1379 RTDECL(void) RTLogFlushRC(PRTLOGGER pLogger, PRTLOGGERRC pLoggerRC); 1378 1380 1379 1381 /** -
trunk/src/VBox/Runtime/common/log/log.cpp
r13255 r13717 631 631 * 632 632 * @param pLogger The logger instance to be cloned. 633 * @param pLoggerGC Where to create the GC logger instance. 634 * @param cbLoggerGC Amount of memory allocated to for the GC logger instance clone. 635 * @param pfnLoggerGCPtr Pointer to logger wrapper function for this instance (GC Ptr). 636 * @param pfnFlushGCPtr Pointer to flush function (GC Ptr). 633 * @param pLoggerRC Where to create the RC logger instance. 634 * @param cbLoggerRC Amount of memory allocated to for the RC logger 635 * instance clone. 636 * @param pfnLoggerRCPtr Pointer to logger wrapper function for this 637 * instance (RC Ptr). 638 * @param pfnFlushRCPtr Pointer to flush function (RC Ptr). 637 639 * @param fFlags Logger instance flags, a combination of the RTLOGFLAGS_* values. 638 640 */ 639 RTDECL(int) RTLogCloneRC(PRTLOGGER pLogger, PRTLOGGERRC pLogger GC, size_t cbLoggerGC,640 RTRCPTR pfnLogger GCPtr, RTRCPTR pfnFlushGCPtr, RTUINT fFlags)641 RTDECL(int) RTLogCloneRC(PRTLOGGER pLogger, PRTLOGGERRC pLoggerRC, size_t cbLoggerRC, 642 RTRCPTR pfnLoggerRCPtr, RTRCPTR pfnFlushRCPtr, RTUINT fFlags) 641 643 { 642 644 /* 643 645 * Validate input. 644 646 */ 645 if ( !pLogger GC646 || !pfnFlush GCPtr647 || !pfnLogger GCPtr)647 if ( !pLoggerRC 648 || !pfnFlushRCPtr 649 || !pfnLoggerRCPtr) 648 650 { 649 651 AssertMsgFailed(("Invalid parameters!\n")); 650 652 return VERR_INVALID_PARAMETER; 651 653 } 652 if (cbLogger GC < sizeof(*pLoggerGC))653 { 654 AssertMsgFailed(("%d min=%d\n", cbLogger GC, sizeof(*pLoggerGC)));654 if (cbLoggerRC < sizeof(*pLoggerRC)) 655 { 656 AssertMsgFailed(("%d min=%d\n", cbLoggerRC, sizeof(*pLoggerRC))); 655 657 return VERR_INVALID_PARAMETER; 656 658 } … … 659 661 * Initialize GC instance. 660 662 */ 661 pLogger GC->offScratch = 0;662 pLogger GC->fPendingPrefix = false;663 pLogger GC->pfnLogger = pfnLoggerGCPtr;664 pLogger GC->pfnFlush = pfnFlushGCPtr;665 pLogger GC->u32Magic = RTLOGGERRC_MAGIC;666 pLogger GC->fFlags = fFlags | RTLOGFLAGS_DISABLED;667 pLogger GC->cGroups = 1;668 pLogger GC->afGroups[0] = 0;663 pLoggerRC->offScratch = 0; 664 pLoggerRC->fPendingPrefix = false; 665 pLoggerRC->pfnLogger = pfnLoggerRCPtr; 666 pLoggerRC->pfnFlush = pfnFlushRCPtr; 667 pLoggerRC->u32Magic = RTLOGGERRC_MAGIC; 668 pLoggerRC->fFlags = fFlags | RTLOGFLAGS_DISABLED; 669 pLoggerRC->cGroups = 1; 670 pLoggerRC->afGroups[0] = 0; 669 671 670 672 /* … … 681 683 * Check if there's enough space for the groups. 682 684 */ 683 if (cbLogger GC < (size_t)RT_OFFSETOF(RTLOGGERRC, afGroups[pLogger->cGroups]))684 { 685 AssertMsgFailed(("%d req=%d cGroups=%d\n", cbLogger GC, RT_OFFSETOF(RTLOGGERRC, afGroups[pLogger->cGroups]), pLogger->cGroups));685 if (cbLoggerRC < (size_t)RT_OFFSETOF(RTLOGGERRC, afGroups[pLogger->cGroups])) 686 { 687 AssertMsgFailed(("%d req=%d cGroups=%d\n", cbLoggerRC, RT_OFFSETOF(RTLOGGERRC, afGroups[pLogger->cGroups]), pLogger->cGroups)); 686 688 return VERR_INVALID_PARAMETER; 687 689 } 688 memcpy(&pLogger GC->afGroups[0], &pLogger->afGroups[0], pLogger->cGroups * sizeof(pLoggerGC->afGroups[0]));689 pLogger GC->cGroups = pLogger->cGroups;690 memcpy(&pLoggerRC->afGroups[0], &pLogger->afGroups[0], pLogger->cGroups * sizeof(pLoggerRC->afGroups[0])); 691 pLoggerRC->cGroups = pLogger->cGroups; 690 692 691 693 /* 692 694 * Copy bits from the HC instance. 693 695 */ 694 pLogger GC->fPendingPrefix = pLogger->fPendingPrefix;695 pLogger GC->fFlags |= pLogger->fFlags;696 pLoggerRC->fPendingPrefix = pLogger->fPendingPrefix; 697 pLoggerRC->fFlags |= pLogger->fFlags; 696 698 697 699 /* … … 700 702 if ( pLogger->fDestFlags 701 703 && !((pLogger->fFlags | fFlags) & RTLOGFLAGS_DISABLED)) 702 pLogger GC->fFlags &= ~RTLOGFLAGS_DISABLED;704 pLoggerRC->fFlags &= ~RTLOGFLAGS_DISABLED; 703 705 704 706 return VINF_SUCCESS; … … 707 709 708 710 /** 709 * Flushes a GC logger instance to a HClogger.711 * Flushes a RC logger instance to a R3 logger. 710 712 * 711 713 * 712 714 * @returns iprt status code. 713 * @param pLogger The HC logger instance to flush pLoggerGC to.714 * If NULLthe default logger is used.715 * @param pLogger GC The GC logger instance to flush.716 */ 717 RTDECL(void) RTLogFlush GC(PRTLOGGER pLogger, PRTLOGGERRC pLoggerGC)715 * @param pLogger The R3 logger instance to flush pLoggerRC to. If NULL 716 * the default logger is used. 717 * @param pLoggerRC The RC logger instance to flush. 718 */ 719 RTDECL(void) RTLogFlushRC(PRTLOGGER pLogger, PRTLOGGERRC pLoggerRC) 718 720 { 719 721 /* … … 725 727 if (!pLogger) 726 728 { 727 pLogger GC->offScratch = 0;729 pLoggerRC->offScratch = 0; 728 730 return; 729 731 } … … 734 736 */ 735 737 if ( pLogger->offScratch 736 || pLogger GC->offScratch)738 || pLoggerRC->offScratch) 737 739 { 738 740 /* … … 747 749 * flush the HC instance. 748 750 */ 749 if (pLogger GC->offScratch)750 { 751 rtLogOutput(pLogger, pLogger GC->achScratch, pLoggerGC->offScratch);751 if (pLoggerRC->offScratch) 752 { 753 rtLogOutput(pLogger, pLoggerRC->achScratch, pLoggerRC->offScratch); 752 754 rtLogOutput(pLogger, NULL, 0); 753 pLogger GC->offScratch = 0;755 pLoggerRC->offScratch = 0; 754 756 } 755 757 -
trunk/src/VBox/VMM/VMM.cpp
r13714 r13717 586 586 #ifdef VBOX_WITH_NMI 587 587 /* 588 * Map the host APIC into GC - This may be host osspecific!588 * Map the host APIC into GC - This is AMD/Intel + Host OS specific! 589 589 */ 590 590 if (VBOX_SUCCESS(rc)) … … 657 657 VMMR3DECL(int) VMMR3InitRC(PVM pVM) 658 658 { 659 /* In VMX mode, there's no need to init GC. */659 /* In VMX mode, there's no need to init RC. */ 660 660 if (pVM->vmm.s.fSwitcherDisabled) 661 661 return VINF_SUCCESS; … … 678 678 CPUMPushHyper(pVM, VMMGetSvnRev()); /* Param 2: Version argument. */ 679 679 CPUMPushHyper(pVM, VMMGC_DO_VMMGC_INIT); /* Param 1: Operation. */ 680 CPUMPushHyper(pVM, pVM->pVM GC); /* Param 0: pVM */680 CPUMPushHyper(pVM, pVM->pVMRC); /* Param 0: pVM */ 681 681 CPUMPushHyper(pVM, 3 * sizeof(RTGCPTR32)); /* trampoline param: stacksize. */ 682 682 CPUMPushHyper(pVM, GCPtrEP); /* Call EIP. */ … … 695 695 if ( pLogger 696 696 && pLogger->offScratch > 0) 697 RTLogFlush GC(NULL, pLogger);697 RTLogFlushRC(NULL, pLogger); 698 698 #endif 699 699 #ifdef VBOX_WITH_RC_RELEASE_LOGGING 700 700 PRTLOGGERRC pRelLogger = pVM->vmm.s.pRCRelLoggerR3; 701 701 if (RT_UNLIKELY(pRelLogger && pRelLogger->offScratch > 0)) 702 RTLogFlush GC(RTLogRelDefaultInstance(), pRelLogger);702 RTLogFlushRC(RTLogRelDefaultInstance(), pRelLogger); 703 703 #endif 704 704 if (rc != VINF_VMM_CALL_HOST) … … 784 784 785 785 /* 786 * Recalc the GC address.786 * Recalc the RC address. 787 787 */ 788 788 pVM->vmm.s.pvCoreCodeRC = MMHyperR3ToRC(pVM, pVM->vmm.s.pvCoreCodeR3); … … 806 806 pSwitcher->pfnRelocate(pVM, 807 807 pSwitcher, 808 (uint8_t *)pVM->vmm.s.pvCoreCodeR0 + off,808 pVM->vmm.s.pvCoreCodeR0 + off, 809 809 (uint8_t *)pVM->vmm.s.pvCoreCodeR3 + off, 810 810 pVM->vmm.s.pvCoreCodeRC + off, … … 814 814 815 815 /* 816 * Recalc the GC address for the current switcher.816 * Recalc the RC address for the current switcher. 817 817 */ 818 818 PVMMSWITCHERDEF pSwitcher = s_apSwitchers[pVM->vmm.s.enmSwitcher]; 819 RT GCPTR GCPtr = pVM->vmm.s.pvCoreCodeRC + pVM->vmm.s.aoffSwitchers[pVM->vmm.s.enmSwitcher];820 pVM->vmm.s.pfnGuestToHostRC = GCPtr + pSwitcher->offGCGuestToHost;821 pVM->vmm.s.pfnCallTrampolineRC = GCPtr + pSwitcher->offGCCallTrampoline;822 pVM->pfnVMMGCGuestToHostAsm = GCPtr + pSwitcher->offGCGuestToHostAsm;823 pVM->pfnVMMGCGuestToHostAsmHyperCtx = GCPtr + pSwitcher->offGCGuestToHostAsmHyperCtx;824 pVM->pfnVMMGCGuestToHostAsmGuestCtx = GCPtr + pSwitcher->offGCGuestToHostAsmGuestCtx;825 826 /* 827 * Get other GC entry points.819 RTRCPTR RCPtr = pVM->vmm.s.pvCoreCodeRC + pVM->vmm.s.aoffSwitchers[pVM->vmm.s.enmSwitcher]; 820 pVM->vmm.s.pfnGuestToHostRC = RCPtr + pSwitcher->offGCGuestToHost; 821 pVM->vmm.s.pfnCallTrampolineRC = RCPtr + pSwitcher->offGCCallTrampoline; 822 pVM->pfnVMMGCGuestToHostAsm = RCPtr + pSwitcher->offGCGuestToHostAsm; 823 pVM->pfnVMMGCGuestToHostAsmHyperCtx = RCPtr + pSwitcher->offGCGuestToHostAsmHyperCtx; 824 pVM->pfnVMMGCGuestToHostAsmGuestCtx = RCPtr + pSwitcher->offGCGuestToHostAsmGuestCtx; 825 826 /* 827 * Get other RC entry points. 828 828 */ 829 829 int rc = PDMR3LdrGetSymbolRC(pVM, VMMGC_MAIN_MODULE_NAME, "CPUMGCResumeGuest", &pVM->vmm.s.pfnCPUMRCResumeGuest); … … 841 841 842 842 /** 843 * Updates the settings for the GC and R0 loggers.843 * Updates the settings for the RC and R0 loggers. 844 844 * 845 845 * @returns VBox status code. … … 849 849 { 850 850 /* 851 * Simply clone the logger instance (for GC).851 * Simply clone the logger instance (for RC). 852 852 */ 853 853 int rc = VINF_SUCCESS; … … 869 869 rc = PDMR3LdrGetSymbolRC(pVM, VMMGC_MAIN_MODULE_NAME, "vmmGCLoggerWrapper", &RCPtrLoggerWrapper); 870 870 AssertReleaseMsgRC(rc, ("vmmGCLoggerWrapper not found! rc=%Vra\n", rc)); 871 871 872 pVM->vmm.s.pRCLoggerRC = MMHyperR3ToRC(pVM, pVM->vmm.s.pRCLoggerR3); 872 873 rc = RTLogCloneRC(NULL /* default */, pVM->vmm.s.pRCLoggerR3, pVM->vmm.s.cbRCLogger, 873 874 RCPtrLoggerWrapper, RCPtrLoggerFlush, RTLOGFLAGS_BUFFERED); 874 AssertReleaseMsgRC(rc, ("RTLogClone GC failed! rc=%Vra\n", rc));875 AssertReleaseMsgRC(rc, ("RTLogCloneRC failed! rc=%Vra\n", rc)); 875 876 } 876 877 … … 881 882 rc = PDMR3LdrGetSymbolRC(pVM, VMMGC_MAIN_MODULE_NAME, "vmmGCRelLoggerWrapper", &RCPtrLoggerWrapper); 882 883 AssertReleaseMsgRC(rc, ("vmmGCRelLoggerWrapper not found! rc=%Vra\n", rc)); 884 883 885 pVM->vmm.s.pRCRelLoggerRC = MMHyperR3ToRC(pVM, pVM->vmm.s.pRCRelLoggerR3); 884 886 rc = RTLogCloneRC(RTLogRelDefaultInstance(), pVM->vmm.s.pRCRelLoggerR3, pVM->vmm.s.cbRCRelLogger, 885 887 RCPtrLoggerWrapper, RCPtrLoggerFlush, RTLOGFLAGS_BUFFERED); 886 AssertReleaseMsgRC(rc, ("RTLogClone GC failed! rc=%Vra\n", rc));888 AssertReleaseMsgRC(rc, ("RTLogCloneRC failed! rc=%Vra\n", rc)); 887 889 } 888 890 #endif /* VBOX_WITH_RC_RELEASE_LOGGING */ … … 908 910 *(PFNRTLOGGER *)&pfnLoggerWrapper, *(PFNRTLOGFLUSH *)&pfnLoggerFlush, 909 911 RTLOGFLAGS_BUFFERED, RTLOGDEST_DUMMY); 910 AssertReleaseMsgRCReturn(rc, ("RTLogC loneGCfailed! rc=%Vra\n", rc), rc);912 AssertReleaseMsgRCReturn(rc, ("RTLogCreateForR0 failed! rc=%Vra\n", rc), rc); 911 913 pR0LoggerR3->fCreated = true; 912 914 } … … 926 928 * @param pSwitcher The switcher definition. 927 929 * @param pu8CodeR3 Pointer to the core code block for the switcher, ring-3 mapping. 928 * @param pu8CodeR0Pointer to the core code block for the switcher, ring-0 mapping.930 * @param R0PtrCode Pointer to the core code block for the switcher, ring-0 mapping. 929 931 * @param GCPtrCode The guest context address corresponding to pu8Code. 930 932 * @param u32IDCode The identity mapped (ID) address corresponding to pu8Code. … … 935 937 * @param SelCS64 The 64-bit mode hypervisor CS selector. 936 938 */ 937 static void vmmR3SwitcherGenericRelocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IDCode,939 static void vmmR3SwitcherGenericRelocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, RTR0PTR R0PtrCode, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IDCode, 938 940 RTSEL SelCS, RTSEL SelDS, RTSEL SelTSS, RTGCPTR GCPtrGDT, RTSEL SelCS64) 939 941 { … … 993 995 uint32_t offTrg = *u.pu32++; 994 996 Assert(offTrg - pSwitcher->offIDCode0 < pSwitcher->cbIDCode0 || offTrg - pSwitcher->offIDCode1 < pSwitcher->cbIDCode1); 995 *uSrc.pu32 = (uint32_t)((u32IDCode + offTrg) - ( (uintptr_t)pu8CodeR0+ offSrc + 4));997 *uSrc.pu32 = (uint32_t)((u32IDCode + offTrg) - (R0PtrCode + offSrc + 4)); 996 998 break; 997 999 } … … 1005 1007 uint32_t offTrg = *u.pu32++; 1006 1008 Assert(offTrg - pSwitcher->offHCCode0 < pSwitcher->cbHCCode0 || offTrg - pSwitcher->offHCCode1 < pSwitcher->cbHCCode1); 1007 *uSrc.pu32 = (uint32_t)(( (uintptr_t)pu8CodeR0+ offTrg) - (GCPtrCode + offSrc + 4));1009 *uSrc.pu32 = (uint32_t)((R0PtrCode + offTrg) - (GCPtrCode + offSrc + 4)); 1008 1010 break; 1009 1011 } … … 1029 1031 uint32_t offTrg = *u.pu32++; 1030 1032 Assert(offTrg - pSwitcher->offHCCode0 < pSwitcher->cbHCCode0 || offTrg - pSwitcher->offHCCode1 < pSwitcher->cbHCCode1); 1031 *uSrc.pu32 = (uint32_t)(( (uintptr_t)pu8CodeR0+ offTrg) - (u32IDCode + offSrc + 4));1033 *uSrc.pu32 = (uint32_t)((R0PtrCode + offTrg) - (u32IDCode + offSrc + 4)); 1032 1034 break; 1033 1035 } … … 1270 1272 Assert(offSrc < pSwitcher->cbCode); 1271 1273 Assert(offTrg - pSwitcher->offHCCode0 < pSwitcher->cbHCCode0 || offTrg - pSwitcher->offHCCode1 < pSwitcher->cbHCCode1); 1272 *uSrc.pu32 = (uintptr_t)pu8CodeR0+ offTrg;1274 *uSrc.pu32 = R0PtrCode + offTrg; 1273 1275 break; 1274 1276 } … … 1283 1285 Assert(offSrc < pSwitcher->cbCode); 1284 1286 Assert(offTrg - pSwitcher->offHCCode0 < pSwitcher->cbHCCode0 || offTrg - pSwitcher->offHCCode1 < pSwitcher->cbHCCode1); 1285 *uSrc.pu64 = (uintptr_t)pu8CodeR0+ offTrg;1287 *uSrc.pu64 = R0PtrCode + offTrg; 1286 1288 break; 1287 1289 } … … 1376 1378 { 1377 1379 RTLogPrintf("*** Disassembly of switcher %d '%s' %#x bytes ***\n" 1378 " pu8CodeR0= %p\n"1380 " R0PtrCode = %p\n" 1379 1381 " pu8CodeR3 = %p\n" 1380 1382 " GCPtrCode = %VGv\n" … … 1392 1394 " SelTSS = %04x\n", 1393 1395 pSwitcher->enmType, pSwitcher->pszDesc, pSwitcher->cbCode, 1394 pu8CodeR0, pu8CodeR3, GCPtrCode, u32IDCode, VM_GUEST_ADDR(pVM, pVM),1396 R0PtrCode, pu8CodeR3, GCPtrCode, u32IDCode, VM_GUEST_ADDR(pVM, pVM), 1395 1397 VM_GUEST_ADDR(pVM, &pVM->cpum), pVM, &pVM->cpum, 1396 1398 GCPtrGDT, … … 1411 1413 { 1412 1414 pszDesc = "HCCode0"; 1413 uBase = (RTUINTPTR)pu8CodeR0;1415 uBase = R0PtrCode; 1414 1416 offCode = pSwitcher->offHCCode0; 1415 1417 cbCode = pSwitcher->cbHCCode0; … … 1418 1420 { 1419 1421 pszDesc = "HCCode1"; 1420 uBase = (RTUINTPTR)pu8CodeR0;1422 uBase = R0PtrCode; 1421 1423 offCode = pSwitcher->offHCCode1; 1422 1424 cbCode = pSwitcher->cbHCCode1; … … 1498 1500 * Relocator for the 32-Bit to 32-Bit world switcher. 1499 1501 */ 1500 DECLCALLBACK(void) vmmR3Switcher32BitTo32Bit_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IDCode)1501 { 1502 vmmR3SwitcherGenericRelocate(pVM, pSwitcher, pu8CodeR0, pu8CodeR3, GCPtrCode, u32IDCode,1502 DECLCALLBACK(void) vmmR3Switcher32BitTo32Bit_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, RTR0PTR R0PtrCode, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IDCode) 1503 { 1504 vmmR3SwitcherGenericRelocate(pVM, pSwitcher, R0PtrCode, pu8CodeR3, GCPtrCode, u32IDCode, 1503 1505 SELMGetHyperCS(pVM), SELMGetHyperDS(pVM), SELMGetHyperTSS(pVM), SELMGetHyperGDT(pVM), 0); 1504 1506 } … … 1508 1510 * Relocator for the 32-Bit to PAE world switcher. 1509 1511 */ 1510 DECLCALLBACK(void) vmmR3Switcher32BitToPAE_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IDCode)1511 { 1512 vmmR3SwitcherGenericRelocate(pVM, pSwitcher, pu8CodeR0, pu8CodeR3, GCPtrCode, u32IDCode,1512 DECLCALLBACK(void) vmmR3Switcher32BitToPAE_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, RTR0PTR R0PtrCode, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IDCode) 1513 { 1514 vmmR3SwitcherGenericRelocate(pVM, pSwitcher, R0PtrCode, pu8CodeR3, GCPtrCode, u32IDCode, 1513 1515 SELMGetHyperCS(pVM), SELMGetHyperDS(pVM), SELMGetHyperTSS(pVM), SELMGetHyperGDT(pVM), 0); 1514 1516 } … … 1518 1520 * Relocator for the PAE to 32-Bit world switcher. 1519 1521 */ 1520 DECLCALLBACK(void) vmmR3SwitcherPAETo32Bit_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IDCode)1521 { 1522 vmmR3SwitcherGenericRelocate(pVM, pSwitcher, pu8CodeR0, pu8CodeR3, GCPtrCode, u32IDCode,1522 DECLCALLBACK(void) vmmR3SwitcherPAETo32Bit_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, RTR0PTR R0PtrCode, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IDCode) 1523 { 1524 vmmR3SwitcherGenericRelocate(pVM, pSwitcher, R0PtrCode, pu8CodeR3, GCPtrCode, u32IDCode, 1523 1525 SELMGetHyperCS(pVM), SELMGetHyperDS(pVM), SELMGetHyperTSS(pVM), SELMGetHyperGDT(pVM), 0); 1524 1526 } … … 1528 1530 * Relocator for the PAE to PAE world switcher. 1529 1531 */ 1530 DECLCALLBACK(void) vmmR3SwitcherPAEToPAE_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IDCode)1531 { 1532 vmmR3SwitcherGenericRelocate(pVM, pSwitcher, pu8CodeR0, pu8CodeR3, GCPtrCode, u32IDCode,1532 DECLCALLBACK(void) vmmR3SwitcherPAEToPAE_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, RTR0PTR R0PtrCode, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IDCode) 1533 { 1534 vmmR3SwitcherGenericRelocate(pVM, pSwitcher, R0PtrCode, pu8CodeR3, GCPtrCode, u32IDCode, 1533 1535 SELMGetHyperCS(pVM), SELMGetHyperDS(pVM), SELMGetHyperTSS(pVM), SELMGetHyperGDT(pVM), 0); 1534 1536 } … … 1538 1540 * Relocator for the AMD64 to PAE world switcher. 1539 1541 */ 1540 DECLCALLBACK(void) vmmR3SwitcherAMD64ToPAE_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IDCode)1541 { 1542 vmmR3SwitcherGenericRelocate(pVM, pSwitcher, pu8CodeR0, pu8CodeR3, GCPtrCode, u32IDCode,1542 DECLCALLBACK(void) vmmR3SwitcherAMD64ToPAE_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, RTR0PTR R0PtrCode, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IDCode) 1543 { 1544 vmmR3SwitcherGenericRelocate(pVM, pSwitcher, R0PtrCode, pu8CodeR3, GCPtrCode, u32IDCode, 1543 1545 SELMGetHyperCS(pVM), SELMGetHyperDS(pVM), SELMGetHyperTSS(pVM), SELMGetHyperGDT(pVM), SELMGetHyperCS64(pVM)); 1544 1546 } … … 1851 1853 * @returns VBox status code 1852 1854 * @param pVM The VM to operate on. 1855 * 1856 * @remarks The global VMM lock isn't really used for anything any longer. 1853 1857 */ 1854 1858 VMMR3DECL(int) VMMR3Lock(PVM pVM) … … 1863 1867 * @returns VBox status code 1864 1868 * @param pVM The VM to operate on. 1869 * 1870 * @remarks The global VMM lock isn't really used for anything any longer. 1865 1871 */ 1866 1872 VMMR3DECL(int) VMMR3Unlock(PVM pVM) … … 1876 1882 * @returns NIL_RTTHREAD if no owner. 1877 1883 * @param pVM The VM to operate on. 1884 * 1885 * @remarks The global VMM lock isn't really used for anything any longer. 1878 1886 */ 1879 1887 VMMR3DECL(RTNATIVETHREAD) VMMR3LockGetOwner(PVM pVM) … … 1889 1897 * @returns false if not owner. 1890 1898 * @param pVM The VM to operate on. 1899 * 1900 * @remarks The global VMM lock isn't really used for anything any longer. 1891 1901 */ 1892 1902 VMMR3DECL(bool) VMMR3LockIsOwner(PVM pVM) … … 1897 1907 1898 1908 /** 1899 * Executes guest code .1909 * Executes guest code in the raw-mode context. 1900 1910 * 1901 1911 * @param pVM VM handle. … … 1937 1947 if ( pLogger 1938 1948 && pLogger->offScratch > 0) 1939 RTLogFlush GC(NULL, pLogger);1949 RTLogFlushRC(NULL, pLogger); 1940 1950 #endif 1941 1951 #ifdef VBOX_WITH_RC_RELEASE_LOGGING 1942 1952 PRTLOGGERRC pRelLogger = pVM->vmm.s.pRCRelLoggerR3; 1943 1953 if (RT_UNLIKELY(pRelLogger && pRelLogger->offScratch > 0)) 1944 RTLogFlush GC(RTLogRelDefaultInstance(), pRelLogger);1954 RTLogFlushRC(RTLogRelDefaultInstance(), pRelLogger); 1945 1955 #endif 1946 1956 if (rc != VINF_VMM_CALL_HOST) … … 2070 2080 if ( pLogger 2071 2081 && pLogger->offScratch > 0) 2072 RTLogFlush GC(NULL, pLogger);2082 RTLogFlushRC(NULL, pLogger); 2073 2083 #endif 2074 2084 #ifdef VBOX_WITH_RC_RELEASE_LOGGING 2075 2085 PRTLOGGERRC pRelLogger = pVM->vmm.s.pRCRelLoggerR3; 2076 2086 if (RT_UNLIKELY(pRelLogger && pRelLogger->offScratch > 0)) 2077 RTLogFlush GC(RTLogRelDefaultInstance(), pRelLogger);2087 RTLogFlushRC(RTLogRelDefaultInstance(), pRelLogger); 2078 2088 #endif 2079 2089 if (rc == VERR_TRPM_PANIC || rc == VERR_TRPM_DONT_PANIC) … … 2126 2136 if ( pLogger 2127 2137 && pLogger->offScratch > 0) 2128 RTLogFlush GC(NULL, pLogger);2138 RTLogFlushRC(NULL, pLogger); 2129 2139 #endif 2130 2140 #ifdef VBOX_WITH_RC_RELEASE_LOGGING 2131 2141 PRTLOGGERRC pRelLogger = pVM->vmm.s.pRCRelLoggerR3; 2132 2142 if (RT_UNLIKELY(pRelLogger && pRelLogger->offScratch > 0)) 2133 RTLogFlush GC(RTLogRelDefaultInstance(), pRelLogger);2143 RTLogFlushRC(RTLogRelDefaultInstance(), pRelLogger); 2134 2144 #endif 2135 2145 if (rc == VERR_TRPM_PANIC || rc == VERR_TRPM_DONT_PANIC) -
trunk/src/VBox/VMM/VMMSwitcher/VMMSwitcher.h
r8155 r13717 75 75 * @param pVM VM handle. 76 76 * @param pSwitcher Pointer to the switcher structure. 77 * @param pu8CodeR0Pointer to the first code byte in the ring-0 mapping.77 * @param R0PtrCode Pointer to the first code byte in the ring-0 mapping. 78 78 * @param pu8CodeR3 Pointer to the first code byte in the ring-3 mapping. 79 79 * @param GCPtrCode The GC address of the first code byte. 80 80 * @param u32IDCode The address of the identity mapped code (first byte). 81 81 */ 82 typedef DECLCALLBACK(void) FNVMMSWITCHERRELOCATE(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3,82 typedef DECLCALLBACK(void) FNVMMSWITCHERRELOCATE(PVM pVM, PVMMSWITCHERDEF pSwitcher, RTR0PTR R0PtrCode, uint8_t *pu8CodeR3, 83 83 RTGCPTR GCPtrCode, uint32_t u32IDCode); 84 84 /** Pointer to a FNVMMSWITCHERRELOCATE(). */ … … 141 141 extern VMMSWITCHERDEF vmmR3SwitcherAMD64ToAMD64_Def; 142 142 143 extern DECLCALLBACK(void) vmmR3Switcher32BitTo32Bit_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode);144 extern DECLCALLBACK(void) vmmR3Switcher32BitToPAE_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode);145 extern DECLCALLBACK(void) vmmR3Switcher32BitToAMD64_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode);146 extern DECLCALLBACK(void) vmmR3SwitcherPAETo32Bit_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode);147 extern DECLCALLBACK(void) vmmR3SwitcherPAEToPAE_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode);148 extern DECLCALLBACK(void) vmmR3SwitcherPAEToAMD64_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode);149 extern DECLCALLBACK(void) vmmR3SwitcherAMD64ToPAE_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode);150 extern DECLCALLBACK(void) vmmR3SwitcherAMD64ToAMD64_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode);143 extern DECLCALLBACK(void) vmmR3Switcher32BitTo32Bit_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, RTR0PTR R0PtrCode, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode); 144 extern DECLCALLBACK(void) vmmR3Switcher32BitToPAE_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, RTR0PTR R0PtrCode, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode); 145 extern DECLCALLBACK(void) vmmR3Switcher32BitToAMD64_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, RTR0PTR R0PtrCode, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode); 146 extern DECLCALLBACK(void) vmmR3SwitcherPAETo32Bit_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, RTR0PTR R0PtrCode, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode); 147 extern DECLCALLBACK(void) vmmR3SwitcherPAEToPAE_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, RTR0PTR R0PtrCode, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode); 148 extern DECLCALLBACK(void) vmmR3SwitcherPAEToAMD64_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, RTR0PTR R0PtrCode, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode); 149 extern DECLCALLBACK(void) vmmR3SwitcherAMD64ToPAE_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, RTR0PTR R0PtrCode, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode); 150 extern DECLCALLBACK(void) vmmR3SwitcherAMD64ToAMD64_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, RTR0PTR R0PtrCode, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode); 151 151 __END_DECLS 152 152
Note:
See TracChangeset
for help on using the changeset viewer.

