Index: /trunk/include/VBox/vmm.h
===================================================================
--- /trunk/include/VBox/vmm.h	(revision 13713)
+++ /trunk/include/VBox/vmm.h	(revision 13714)
@@ -129,5 +129,5 @@
 VMMR3DECL(const char *) VMMR3GetGCAssertMsg1(PVM pVM);
 VMMR3DECL(const char *) VMMR3GetGCAssertMsg2(PVM pVM);
-VMMR3DECL(int)      VMMR3GetImportGC(PVM pVM, const char *pszSymbol, PRTGCPTR pGCPtrValue);
+VMMR3DECL(int)      VMMR3GetImportRC(PVM pVM, const char *pszSymbol, PRTRCPTR pRCPtrValue);
 VMMR3DECL(int)      VMMR3SelectSwitcher(PVM pVM, VMMSWITCHER enmSwitcher);
 VMMR3DECL(int)      VMMR3DisableSwitcher(PVM pVM);
Index: /trunk/src/VBox/VMM/PDMLdr.cpp
===================================================================
--- /trunk/src/VBox/VMM/PDMLdr.cpp	(revision 13713)
+++ /trunk/src/VBox/VMM/PDMLdr.cpp	(revision 13714)
@@ -340,8 +340,8 @@
                  || !strcmp(pszSymbol, "g_RelLogger"))
         {
-            RTGCPTR GCPtr = 0;
-            rc = VMMR3GetImportGC(pVM, pszSymbol, &GCPtr);
+            RTRCPTR RCPtr = 0;
+            rc = VMMR3GetImportRC(pVM, pszSymbol, &RCPtr);
             if (VBOX_SUCCESS(rc))
-                *pValue = GCPtr;
+                *pValue = RCPtr;
         }
         else if (   !strncmp(pszSymbol, "TM", 2)
Index: /trunk/src/VBox/VMM/VMM.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMM.cpp	(revision 13713)
+++ /trunk/src/VBox/VMM/VMM.cpp	(revision 13714)
@@ -137,4 +137,6 @@
 *******************************************************************************/
 static int                  vmmR3InitCoreCode(PVM pVM);
+static int                  vmmR3InitStacks(PVM pVM);
+static int                  vmmR3InitLoggers(PVM pVM);
 static void                 vmmR3InitRegisterStats(PVM pVM);
 static DECLCALLBACK(int)    vmmR3Save(PVM pVM, PSSMHANDLE pSSM);
@@ -209,74 +211,13 @@
 
     /*
-     * Init core code.
+     * Init various sub-components.
      */
     rc = vmmR3InitCoreCode(pVM);
-    if (VBOX_SUCCESS(rc))
-    {
-        /*
-         * Allocate & init VMM RC stack.
-         * The stack pages are also used by the VMM R0 when VMMR0CallHost is invoked.
-         * (The page protection is modifed during R3 init completion.)
-         */
-        /** @todo SMP: Per vCPU, split up into functions. */
-#ifdef VBOX_STRICT_VMM_STACK
-        rc = MMHyperAlloc(pVM, VMM_STACK_SIZE + PAGE_SIZE + PAGE_SIZE, PAGE_SIZE, MM_TAG_VMM, (void **)&pVM->vmm.s.pbHCStack);
-#else
-        rc = MMHyperAlloc(pVM, VMM_STACK_SIZE, PAGE_SIZE, MM_TAG_VMM, (void **)&pVM->vmm.s.pbEMTStackR3);
-#endif
-        if (VBOX_SUCCESS(rc))
-        {
-            /* Set HC and GC stack pointers to top of stack. */
-            pVM->vmm.s.CallHostR0JmpBuf.pvSavedStack = MMHyperR3ToR0(pVM, pVM->vmm.s.pbEMTStackR3);
-            pVM->vmm.s.pbEMTStackRC = MMHyperR3ToRC(pVM, pVM->vmm.s.pbEMTStackR3);
-            pVM->vmm.s.pbEMTStackBottomRC = pVM->vmm.s.pbEMTStackRC + VMM_STACK_SIZE;
-            AssertRelease(pVM->vmm.s.pbEMTStackRC);
-
-            /* Set hypervisor esp. */
-            CPUMSetHyperESP(pVM, pVM->vmm.s.pbEMTStackBottomRC);
-
-            /*
-             * Allocate GC & R0 Logger instances (they are finalized in the relocator).
-             */
-#ifdef LOG_ENABLED
-            PRTLOGGER pLogger = RTLogDefaultInstance();
-            if (pLogger)
-            {
-                pVM->vmm.s.cbLoggerGC = RT_OFFSETOF(RTLOGGERRC, afGroups[pLogger->cGroups]);
-                rc = MMHyperAlloc(pVM, pVM->vmm.s.cbLoggerGC, 0, MM_TAG_VMM, (void **)&pVM->vmm.s.pLoggerHC);
-                if (VBOX_SUCCESS(rc))
-                {
-                    pVM->vmm.s.pLoggerGC = MMHyperHC2GC(pVM, pVM->vmm.s.pLoggerHC);
-
-# ifdef VBOX_WITH_R0_LOGGING
-                    rc = MMHyperAlloc(pVM, RT_OFFSETOF(VMMR0LOGGER, Logger.afGroups[pLogger->cGroups]),
-                                      0, MM_TAG_VMM, (void **)&pVM->vmm.s.pR0Logger);
-                    if (VBOX_SUCCESS(rc))
-                    {
-                        pVM->vmm.s.pR0Logger->pVM = pVM->pVMR0;
-                        //pVM->vmm.s.pR0Logger->fCreated = false;
-                        pVM->vmm.s.pR0Logger->cbLogger = RT_OFFSETOF(RTLOGGER, afGroups[pLogger->cGroups]);
-                    }
-# endif
-                }
-            }
-#endif /* LOG_ENABLED */
-
-#ifdef VBOX_WITH_RC_RELEASE_LOGGING
-            /*
-             * Allocate RC release logger instances (finalized in the relocator).
-             */
-            if (VBOX_SUCCESS(rc))
-            {
-                PRTLOGGER pRelLogger = RTLogRelDefaultInstance();
-                if (pRelLogger)
-                {
-                    pVM->vmm.s.cbRelLoggerGC = RT_OFFSETOF(RTLOGGERRC, afGroups[pRelLogger->cGroups]);
-                    rc = MMHyperAlloc(pVM, pVM->vmm.s.cbRelLoggerGC, 0, MM_TAG_VMM, (void **)&pVM->vmm.s.pRelLoggerHC);
-                    if (VBOX_SUCCESS(rc))
-                        pVM->vmm.s.pRelLoggerGC = MMHyperHC2GC(pVM, pVM->vmm.s.pRelLoggerHC);
-                }
-            }
-#endif /* VBOX_WITH_RC_RELEASE_LOGGING */
+    if (RT_SUCCESS(rc))
+    {
+        rc = vmmR3InitStacks(pVM);
+        if (RT_SUCCESS(rc))
+        {
+            rc = vmmR3InitLoggers(pVM);
 
 #ifdef VBOX_WITH_NMI
@@ -284,5 +225,5 @@
              * Allocate mapping for the host APIC.
              */
-            if (VBOX_SUCCESS(rc))
+            if (RT_SUCCESS(rc))
             {
                 rc = MMR3HyperReserve(pVM, PAGE_SIZE, "Host APIC", &pVM->vmm.s.GCPtrApicBase);
@@ -290,5 +231,5 @@
             }
 #endif
-            if (VBOX_SUCCESS(rc))
+            if (RT_SUCCESS(rc))
             {
                 rc = RTCritSectInit(&pVM->vmm.s.CritSectVMLock);
@@ -303,5 +244,4 @@
                     return VINF_SUCCESS;
                 }
-                AssertRC(rc);
             }
         }
@@ -351,9 +291,9 @@
      */
     pVM->vmm.s.cbCoreCode = RT_ALIGN_32(cbCoreCode, PAGE_SIZE);
-    pVM->vmm.s.pvHCCoreCodeR3 = SUPContAlloc2(pVM->vmm.s.cbCoreCode >> PAGE_SHIFT, &pVM->vmm.s.pvHCCoreCodeR0, &pVM->vmm.s.HCPhysCoreCode);
+    pVM->vmm.s.pvCoreCodeR3 = SUPContAlloc2(pVM->vmm.s.cbCoreCode >> PAGE_SHIFT, &pVM->vmm.s.pvCoreCodeR0, &pVM->vmm.s.HCPhysCoreCode);
     int rc = VERR_NO_MEMORY;
-    if (pVM->vmm.s.pvHCCoreCodeR3)
-    {
-        rc = PGMR3MapIntermediate(pVM, pVM->vmm.s.pvHCCoreCodeR0, pVM->vmm.s.HCPhysCoreCode, cbCoreCode);
+    if (pVM->vmm.s.pvCoreCodeR3)
+    {
+        rc = PGMR3MapIntermediate(pVM, pVM->vmm.s.pvCoreCodeR0, pVM->vmm.s.HCPhysCoreCode, cbCoreCode);
         if (rc == VERR_PGM_INTERMEDIATE_PAGING_CONFLICT)
         {
@@ -371,14 +311,14 @@
             do
             {
-                paBadTries[i].pvR3 = pVM->vmm.s.pvHCCoreCodeR3;
-                paBadTries[i].pvR0 = pVM->vmm.s.pvHCCoreCodeR0;
+                paBadTries[i].pvR3 = pVM->vmm.s.pvCoreCodeR3;
+                paBadTries[i].pvR0 = pVM->vmm.s.pvCoreCodeR0;
                 paBadTries[i].HCPhys = pVM->vmm.s.HCPhysCoreCode;
                 i++;
-                pVM->vmm.s.pvHCCoreCodeR0 = NIL_RTR0PTR;
+                pVM->vmm.s.pvCoreCodeR0 = NIL_RTR0PTR;
                 pVM->vmm.s.HCPhysCoreCode = NIL_RTHCPHYS;
-                pVM->vmm.s.pvHCCoreCodeR3 = SUPContAlloc2(pVM->vmm.s.cbCoreCode >> PAGE_SHIFT, &pVM->vmm.s.pvHCCoreCodeR0, &pVM->vmm.s.HCPhysCoreCode);
-                if (!pVM->vmm.s.pvHCCoreCodeR3)
+                pVM->vmm.s.pvCoreCodeR3 = SUPContAlloc2(pVM->vmm.s.cbCoreCode >> PAGE_SHIFT, &pVM->vmm.s.pvCoreCodeR0, &pVM->vmm.s.HCPhysCoreCode);
+                if (!pVM->vmm.s.pvCoreCodeR3)
                     break;
-                rc = PGMR3MapIntermediate(pVM, pVM->vmm.s.pvHCCoreCodeR0, pVM->vmm.s.HCPhysCoreCode, cbCoreCode);
+                rc = PGMR3MapIntermediate(pVM, pVM->vmm.s.pvCoreCodeR0, pVM->vmm.s.HCPhysCoreCode, cbCoreCode);
             } while (   rc == VERR_PGM_INTERMEDIATE_PAGING_CONFLICT
                      && i < cTries - 1);
@@ -387,6 +327,6 @@
             if (VBOX_FAILURE(rc))
             {
-                paBadTries[i].pvR3   = pVM->vmm.s.pvHCCoreCodeR3;
-                paBadTries[i].pvR0   = pVM->vmm.s.pvHCCoreCodeR0;
+                paBadTries[i].pvR3   = pVM->vmm.s.pvCoreCodeR3;
+                paBadTries[i].pvR0   = pVM->vmm.s.pvCoreCodeR0;
                 paBadTries[i].HCPhys = pVM->vmm.s.HCPhysCoreCode;
                 paBadTries[i].cb     = pVM->vmm.s.cbCoreCode;
@@ -412,5 +352,5 @@
             PVMMSWITCHERDEF pSwitcher = s_apSwitchers[iSwitcher];
             if (pSwitcher)
-                memcpy((uint8_t *)pVM->vmm.s.pvHCCoreCodeR3 + pVM->vmm.s.aoffSwitchers[iSwitcher],
+                memcpy((uint8_t *)pVM->vmm.s.pvCoreCodeR3 + pVM->vmm.s.aoffSwitchers[iSwitcher],
                        pSwitcher->pvCode, pSwitcher->cbCode);
         }
@@ -420,11 +360,11 @@
          */
         RTGCPTR GCPtr;
-        rc = MMR3HyperMapHCPhys(pVM, pVM->vmm.s.pvHCCoreCodeR3, pVM->vmm.s.HCPhysCoreCode, cbCoreCode, "Core Code", &GCPtr);
+        rc = MMR3HyperMapHCPhys(pVM, pVM->vmm.s.pvCoreCodeR3, pVM->vmm.s.HCPhysCoreCode, cbCoreCode, "Core Code", &GCPtr);
         if (VBOX_SUCCESS(rc))
         {
-            pVM->vmm.s.pvGCCoreCode = GCPtr;
+            pVM->vmm.s.pvCoreCodeRC = GCPtr;
             MMR3HyperReserve(pVM, PAGE_SIZE, "fence", NULL);
             LogRel(("CoreCode: R3=%VHv R0=%VHv GC=%VRv Phys=%VHp cb=%#x\n",
-                    pVM->vmm.s.pvHCCoreCodeR3, pVM->vmm.s.pvHCCoreCodeR0, pVM->vmm.s.pvGCCoreCode, pVM->vmm.s.HCPhysCoreCode, pVM->vmm.s.cbCoreCode));
+                    pVM->vmm.s.pvCoreCodeR3, pVM->vmm.s.pvCoreCodeR0, pVM->vmm.s.pvCoreCodeRC, pVM->vmm.s.HCPhysCoreCode, pVM->vmm.s.cbCoreCode));
 
             /*
@@ -438,6 +378,6 @@
 
         /* shit */
-        AssertMsgFailed(("PGMR3Map(,%VRv, %VGp, %#x, 0) failed with rc=%Vrc\n", pVM->vmm.s.pvGCCoreCode, pVM->vmm.s.HCPhysCoreCode, cbCoreCode, rc));
-        SUPContFree(pVM->vmm.s.pvHCCoreCodeR3, pVM->vmm.s.cbCoreCode >> PAGE_SHIFT);
+        AssertMsgFailed(("PGMR3Map(,%VRv, %VGp, %#x, 0) failed with rc=%Vrc\n", pVM->vmm.s.pvCoreCodeRC, pVM->vmm.s.HCPhysCoreCode, cbCoreCode, rc));
+        SUPContFree(pVM->vmm.s.pvCoreCodeR3, pVM->vmm.s.cbCoreCode >> PAGE_SHIFT);
     }
     else
@@ -446,8 +386,95 @@
                    cbCoreCode);
 
-    pVM->vmm.s.pvHCCoreCodeR3 = NULL;
-    pVM->vmm.s.pvHCCoreCodeR0 = NIL_RTR0PTR;
-    pVM->vmm.s.pvGCCoreCode = 0;
+    pVM->vmm.s.pvCoreCodeR3 = NULL;
+    pVM->vmm.s.pvCoreCodeR0 = NIL_RTR0PTR;
+    pVM->vmm.s.pvCoreCodeRC = 0;
     return rc;
+}
+
+
+/**
+ * Allocate & setup the VMM RC stack(s) (for EMTs).
+ *
+ * The stacks are also used for long jumps in Ring-0.
+ *
+ * @returns VBox status code.
+ * @param   pVM     Pointer to the shared VM structure.
+ *
+ * @remarks The optional guard page gets it protection setup up during R3 init
+ *          completion because of init order issues.
+ */
+static int vmmR3InitStacks(PVM pVM)
+{
+    /** @todo SMP: On stack per vCPU. */
+#ifdef VBOX_STRICT_VMM_STACK
+    int rc = MMHyperAlloc(pVM, VMM_STACK_SIZE + PAGE_SIZE + PAGE_SIZE, PAGE_SIZE, MM_TAG_VMM, (void **)&pVM->vmm.s.pbEMTStackR3);
+#else
+    int rc = MMHyperAlloc(pVM, VMM_STACK_SIZE, PAGE_SIZE, MM_TAG_VMM, (void **)&pVM->vmm.s.pbEMTStackR3);
+#endif
+    if (VBOX_SUCCESS(rc))
+    {
+        pVM->vmm.s.CallHostR0JmpBuf.pvSavedStack = MMHyperR3ToR0(pVM, pVM->vmm.s.pbEMTStackR3);
+        pVM->vmm.s.pbEMTStackRC = MMHyperR3ToRC(pVM, pVM->vmm.s.pbEMTStackR3);
+        pVM->vmm.s.pbEMTStackBottomRC = pVM->vmm.s.pbEMTStackRC + VMM_STACK_SIZE;
+        AssertRelease(pVM->vmm.s.pbEMTStackRC);
+
+        CPUMSetHyperESP(pVM, pVM->vmm.s.pbEMTStackBottomRC);
+    }
+
+    return rc;
+}
+
+
+/**
+ * Initialize the loggers.
+ *
+ * @returns VBox status code.
+ * @param   pVM         Pointer to the shared VM structure.
+ */
+static int vmmR3InitLoggers(PVM pVM)
+{
+    int rc;
+
+    /*
+     * Allocate RC & R0 Logger instances (they are finalized in the relocator).
+     */
+#ifdef LOG_ENABLED
+    PRTLOGGER pLogger = RTLogDefaultInstance();
+    if (pLogger)
+    {
+        pVM->vmm.s.cbRCLogger = RT_OFFSETOF(RTLOGGERRC, afGroups[pLogger->cGroups]);
+        rc = MMHyperAlloc(pVM, pVM->vmm.s.cbRCLogger, 0, MM_TAG_VMM, (void **)&pVM->vmm.s.pRCLoggerR3);
+        if (RT_FAILURE(rc))
+            return rc;
+        pVM->vmm.s.pRCLoggerRC = MMHyperR3ToRC(pVM, pVM->vmm.s.pRCLoggerR3);
+
+# ifdef VBOX_WITH_R0_LOGGING
+        rc = MMHyperAlloc(pVM, RT_OFFSETOF(VMMR0LOGGER, Logger.afGroups[pLogger->cGroups]),
+                          0, MM_TAG_VMM, (void **)&pVM->vmm.s.pR0LoggerR3);
+        if (RT_FAILURE(rc))
+            return rc;
+        pVM->vmm.s.pR0LoggerR3->pVM = pVM->pVMR0;
+        //pVM->vmm.s.pR0LoggerR3->fCreated = false;
+        pVM->vmm.s.pR0LoggerR3->cbLogger = RT_OFFSETOF(RTLOGGER, afGroups[pLogger->cGroups]);
+        pVM->vmm.s.pR0LoggerR0 = MMHyperR3ToR0(pVM, pVM->vmm.s.pR0LoggerR3);
+# endif
+    }
+#endif /* LOG_ENABLED */
+
+#ifdef VBOX_WITH_RC_RELEASE_LOGGING
+    /*
+     * Allocate RC release logger instances (finalized in the relocator).
+     */
+    PRTLOGGER pRelLogger = RTLogRelDefaultInstance();
+    if (pRelLogger)
+    {
+        pVM->vmm.s.cbRCRelLogger = RT_OFFSETOF(RTLOGGERRC, afGroups[pRelLogger->cGroups]);
+        rc = MMHyperAlloc(pVM, pVM->vmm.s.cbRCRelLogger, 0, MM_TAG_VMM, (void **)&pVM->vmm.s.pRCRelLoggerR3);
+        if (RT_FAILURE(rc))
+            return rc;
+        pVM->vmm.s.pRCRelLoggerRC = MMHyperR3ToRC(pVM, pVM->vmm.s.pRCRelLoggerR3);
+    }
+#endif /* VBOX_WITH_RC_RELEASE_LOGGING */
+    return VINF_SUCCESS;
 }
 
@@ -533,11 +560,11 @@
      * Two inaccessible pages at each sides of the stack to catch over/under-flows.
      */
-    memset(pVM->vmm.s.pbHCStack - PAGE_SIZE, 0xcc, PAGE_SIZE);
-    PGMMapSetPage(pVM, MMHyperHC2GC(pVM, pVM->vmm.s.pbHCStack - PAGE_SIZE), PAGE_SIZE, 0);
-    RTMemProtect(pVM->vmm.s.pbHCStack - PAGE_SIZE, PAGE_SIZE, RTMEM_PROT_NONE);
-
-    memset(pVM->vmm.s.pbHCStack + VMM_STACK_SIZE, 0xcc, PAGE_SIZE);
-    PGMMapSetPage(pVM, MMHyperHC2GC(pVM, pVM->vmm.s.pbHCStack + VMM_STACK_SIZE), PAGE_SIZE, 0);
-    RTMemProtect(pVM->vmm.s.pbHCStack + VMM_STACK_SIZE, PAGE_SIZE, RTMEM_PROT_NONE);
+    memset(pVM->vmm.s.pbEMTStackR3 - PAGE_SIZE, 0xcc, PAGE_SIZE);
+    PGMMapSetPage(pVM, MMHyperR3ToRC(pVM, pVM->vmm.s.pbEMTStackR3 - PAGE_SIZE), PAGE_SIZE, 0);
+    RTMemProtect(pVM->vmm.s.pbEMTStackR3 - PAGE_SIZE, PAGE_SIZE, RTMEM_PROT_NONE);
+
+    memset(pVM->vmm.s.pbEMTStackR3 + VMM_STACK_SIZE, 0xcc, PAGE_SIZE);
+    PGMMapSetPage(pVM, MMHyperR3ToRC(pVM, pVM->vmm.s.pbEMTStackR3 + VMM_STACK_SIZE), PAGE_SIZE, 0);
+    RTMemProtect(pVM->vmm.s.pbEMTStackR3 + VMM_STACK_SIZE, PAGE_SIZE, RTMEM_PROT_NONE);
 #endif
 
@@ -582,6 +609,6 @@
      * Initialize the ring-0 logger if we haven't done so yet.
      */
-    if (    pVM->vmm.s.pR0Logger
-        &&  !pVM->vmm.s.pR0Logger->fCreated)
+    if (    pVM->vmm.s.pR0LoggerR3
+        &&  !pVM->vmm.s.pR0LoggerR3->fCreated)
     {
         rc = VMMR3UpdateLoggers(pVM);
@@ -601,7 +628,7 @@
         rc = SUPCallVMMR0Ex(pVM->pVMR0, VMMR0_DO_VMMR0_INIT, VMMGetSvnRev(), NULL);
 #endif
-        if (    pVM->vmm.s.pR0Logger
-            &&  pVM->vmm.s.pR0Logger->Logger.offScratch > 0)
-            RTLogFlushToLogger(&pVM->vmm.s.pR0Logger->Logger, NULL);
+        if (    pVM->vmm.s.pR0LoggerR3
+            &&  pVM->vmm.s.pR0LoggerR3->Logger.offScratch > 0)
+            RTLogFlushToLogger(&pVM->vmm.s.pR0LoggerR3->Logger, NULL);
         if (rc != VINF_VMM_CALL_HOST)
             break;
@@ -654,5 +681,5 @@
         CPUMPushHyper(pVM, 3 * sizeof(RTGCPTR32));      /* trampoline param: stacksize.  */
         CPUMPushHyper(pVM, GCPtrEP);                    /* Call EIP. */
-        CPUMSetHyperEIP(pVM, pVM->vmm.s.pfnGCCallTrampoline);
+        CPUMSetHyperEIP(pVM, pVM->vmm.s.pfnCallTrampolineRC);
 
         for (;;)
@@ -665,5 +692,5 @@
 #endif
 #ifdef LOG_ENABLED
-            PRTLOGGERRC pLogger = pVM->vmm.s.pLoggerHC;
+            PRTLOGGERRC pLogger = pVM->vmm.s.pRCLoggerR3;
             if (    pLogger
                 &&  pLogger->offScratch > 0)
@@ -671,5 +698,5 @@
 #endif
 #ifdef VBOX_WITH_RC_RELEASE_LOGGING
-            PRTLOGGERRC pRelLogger = pVM->vmm.s.pRelLoggerHC;
+            PRTLOGGERRC pRelLogger = pVM->vmm.s.pRCRelLoggerR3;
             if (RT_UNLIKELY(pRelLogger && pRelLogger->offScratch > 0))
                 RTLogFlushGC(RTLogRelDefaultInstance(), pRelLogger);
@@ -714,7 +741,7 @@
         rc = SUPCallVMMR0Ex(pVM->pVMR0, VMMR0_DO_VMMR0_TERM, 0, NULL);
 #endif
-        if (    pVM->vmm.s.pR0Logger
-            &&  pVM->vmm.s.pR0Logger->Logger.offScratch > 0)
-            RTLogFlushToLogger(&pVM->vmm.s.pR0Logger->Logger, NULL);
+        if (    pVM->vmm.s.pR0LoggerR3
+            &&  pVM->vmm.s.pR0LoggerR3->Logger.offScratch > 0)
+            RTLogFlushToLogger(&pVM->vmm.s.pR0LoggerR3->Logger, NULL);
         if (rc != VINF_VMM_CALL_HOST)
             break;
@@ -735,6 +762,6 @@
      * Make the two stack guard pages present again.
      */
-    RTMemProtect(pVM->vmm.s.pbHCStack - PAGE_SIZE,      PAGE_SIZE, RTMEM_PROT_READ | RTMEM_PROT_WRITE);
-    RTMemProtect(pVM->vmm.s.pbHCStack + VMM_STACK_SIZE, PAGE_SIZE, RTMEM_PROT_READ | RTMEM_PROT_WRITE);
+    RTMemProtect(pVM->vmm.s.pbEMTStackR3 - PAGE_SIZE,      PAGE_SIZE, RTMEM_PROT_READ | RTMEM_PROT_WRITE);
+    RTMemProtect(pVM->vmm.s.pbEMTStackR3 + VMM_STACK_SIZE, PAGE_SIZE, RTMEM_PROT_READ | RTMEM_PROT_WRITE);
 #endif
     return rc;
@@ -759,5 +786,5 @@
      * Recalc the GC address.
      */
-    pVM->vmm.s.pvGCCoreCode = MMHyperHC2GC(pVM, pVM->vmm.s.pvHCCoreCodeR3);
+    pVM->vmm.s.pvCoreCodeRC = MMHyperR3ToRC(pVM, pVM->vmm.s.pvCoreCodeR3);
 
     /*
@@ -779,7 +806,7 @@
             pSwitcher->pfnRelocate(pVM,
                                    pSwitcher,
-                                   (uint8_t *)pVM->vmm.s.pvHCCoreCodeR0 + off,
-                                   (uint8_t *)pVM->vmm.s.pvHCCoreCodeR3 + off,
-                                   pVM->vmm.s.pvGCCoreCode + off,
+                                   (uint8_t *)pVM->vmm.s.pvCoreCodeR0 + off,
+                                   (uint8_t *)pVM->vmm.s.pvCoreCodeR3 + off,
+                                   pVM->vmm.s.pvCoreCodeRC + off,
                                    pVM->vmm.s.HCPhysCoreCode + off);
         }
@@ -790,7 +817,7 @@
      */
     PVMMSWITCHERDEF pSwitcher   = s_apSwitchers[pVM->vmm.s.enmSwitcher];
-    RTGCPTR         GCPtr       = pVM->vmm.s.pvGCCoreCode + pVM->vmm.s.aoffSwitchers[pVM->vmm.s.enmSwitcher];
-    pVM->vmm.s.pfnGCGuestToHost         = GCPtr + pSwitcher->offGCGuestToHost;
-    pVM->vmm.s.pfnGCCallTrampoline      = GCPtr + pSwitcher->offGCCallTrampoline;
+    RTGCPTR         GCPtr       = pVM->vmm.s.pvCoreCodeRC + pVM->vmm.s.aoffSwitchers[pVM->vmm.s.enmSwitcher];
+    pVM->vmm.s.pfnGuestToHostRC         = GCPtr + pSwitcher->offGCGuestToHost;
+    pVM->vmm.s.pfnCallTrampolineRC      = GCPtr + pSwitcher->offGCCallTrampoline;
     pVM->pfnVMMGCGuestToHostAsm         = GCPtr + pSwitcher->offGCGuestToHostAsm;
     pVM->pfnVMMGCGuestToHostAsmHyperCtx = GCPtr + pSwitcher->offGCGuestToHostAsmHyperCtx;
@@ -800,8 +827,8 @@
      * Get other GC entry points.
      */
-    int rc = PDMR3LdrGetSymbolRC(pVM, VMMGC_MAIN_MODULE_NAME, "CPUMGCResumeGuest", &pVM->vmm.s.pfnCPUMGCResumeGuest);
+    int rc = PDMR3LdrGetSymbolRC(pVM, VMMGC_MAIN_MODULE_NAME, "CPUMGCResumeGuest", &pVM->vmm.s.pfnCPUMRCResumeGuest);
     AssertReleaseMsgRC(rc, ("CPUMGCResumeGuest not found! rc=%Vra\n", rc));
 
-    rc = PDMR3LdrGetSymbolRC(pVM, VMMGC_MAIN_MODULE_NAME, "CPUMGCResumeGuestV86", &pVM->vmm.s.pfnCPUMGCResumeGuestV86);
+    rc = PDMR3LdrGetSymbolRC(pVM, VMMGC_MAIN_MODULE_NAME, "CPUMGCResumeGuestV86", &pVM->vmm.s.pfnCPUMRCResumeGuestV86);
     AssertReleaseMsgRC(rc, ("CPUMGCResumeGuestV86 not found! rc=%Vra\n", rc));
 
@@ -825,36 +852,36 @@
      */
     int rc = VINF_SUCCESS;
-    RTGCPTR32 GCPtrLoggerFlush = 0;
-
-    if (pVM->vmm.s.pLoggerHC
+    RTRCPTR RCPtrLoggerFlush = 0;
+
+    if (pVM->vmm.s.pRCLoggerR3
 #ifdef VBOX_WITH_RC_RELEASE_LOGGING
-        || pVM->vmm.s.pRelLoggerHC
+        || pVM->vmm.s.pRCRelLoggerR3
 #endif
        )
     {
-        rc = PDMR3LdrGetSymbolRC(pVM, VMMGC_MAIN_MODULE_NAME, "vmmGCLoggerFlush", &GCPtrLoggerFlush);
+        rc = PDMR3LdrGetSymbolRC(pVM, VMMGC_MAIN_MODULE_NAME, "vmmGCLoggerFlush", &RCPtrLoggerFlush);
         AssertReleaseMsgRC(rc, ("vmmGCLoggerFlush not found! rc=%Vra\n", rc));
     }
 
-    if (pVM->vmm.s.pLoggerHC)
-    {
-        RTGCPTR32 GCPtrLoggerWrapper = 0;
-        rc = PDMR3LdrGetSymbolRC(pVM, VMMGC_MAIN_MODULE_NAME, "vmmGCLoggerWrapper", &GCPtrLoggerWrapper);
+    if (pVM->vmm.s.pRCLoggerR3)
+    {
+        RTRCPTR RCPtrLoggerWrapper = 0;
+        rc = PDMR3LdrGetSymbolRC(pVM, VMMGC_MAIN_MODULE_NAME, "vmmGCLoggerWrapper", &RCPtrLoggerWrapper);
         AssertReleaseMsgRC(rc, ("vmmGCLoggerWrapper not found! rc=%Vra\n", rc));
-        pVM->vmm.s.pLoggerGC = MMHyperHC2GC(pVM, pVM->vmm.s.pLoggerHC);
-        rc = RTLogCloneRC(NULL /* default */, pVM->vmm.s.pLoggerHC, pVM->vmm.s.cbLoggerGC,
-                          GCPtrLoggerWrapper,  GCPtrLoggerFlush, RTLOGFLAGS_BUFFERED);
+        pVM->vmm.s.pRCLoggerRC = MMHyperR3ToRC(pVM, pVM->vmm.s.pRCLoggerR3);
+        rc = RTLogCloneRC(NULL /* default */, pVM->vmm.s.pRCLoggerR3, pVM->vmm.s.cbRCLogger,
+                          RCPtrLoggerWrapper,  RCPtrLoggerFlush, RTLOGFLAGS_BUFFERED);
         AssertReleaseMsgRC(rc, ("RTLogCloneGC failed! rc=%Vra\n", rc));
     }
 
 #ifdef VBOX_WITH_RC_RELEASE_LOGGING
-    if (pVM->vmm.s.pRelLoggerHC)
-    {
-        RTGCPTR32 GCPtrLoggerWrapper = 0;
-        rc = PDMR3LdrGetSymbolRC(pVM, VMMGC_MAIN_MODULE_NAME, "vmmGCRelLoggerWrapper", &GCPtrLoggerWrapper);
+    if (pVM->vmm.s.pRCRelLoggerR3)
+    {
+        RTRCPTR RCPtrLoggerWrapper = 0;
+        rc = PDMR3LdrGetSymbolRC(pVM, VMMGC_MAIN_MODULE_NAME, "vmmGCRelLoggerWrapper", &RCPtrLoggerWrapper);
         AssertReleaseMsgRC(rc, ("vmmGCRelLoggerWrapper not found! rc=%Vra\n", rc));
-        pVM->vmm.s.pRelLoggerGC = MMHyperHC2GC(pVM, pVM->vmm.s.pRelLoggerHC);
-        rc = RTLogCloneRC(RTLogRelDefaultInstance(), pVM->vmm.s.pRelLoggerHC, pVM->vmm.s.cbRelLoggerGC,
-                          GCPtrLoggerWrapper,  GCPtrLoggerFlush, RTLOGFLAGS_BUFFERED);
+        pVM->vmm.s.pRCRelLoggerRC = MMHyperR3ToRC(pVM, pVM->vmm.s.pRCRelLoggerR3);
+        rc = RTLogCloneRC(RTLogRelDefaultInstance(), pVM->vmm.s.pRCRelLoggerR3, pVM->vmm.s.cbRCRelLogger,
+                          RCPtrLoggerWrapper,  RCPtrLoggerFlush, RTLOGFLAGS_BUFFERED);
         AssertReleaseMsgRC(rc, ("RTLogCloneGC failed! rc=%Vra\n", rc));
     }
@@ -862,11 +889,11 @@
 
     /*
-     * For the ring-0 EMT logger, we use a per-thread logger
-     * instance in ring-0. Only initialize it once.
-     */
-    PVMMR0LOGGER pR0Logger = pVM->vmm.s.pR0Logger;
-    if (pR0Logger)
-    {
-        if (!pR0Logger->fCreated)
+     * For the ring-0 EMT logger, we use a per-thread logger instance
+     * in ring-0. Only initialize it once.
+     */
+    PVMMR0LOGGER pR0LoggerR3 = pVM->vmm.s.pR0LoggerR3;
+    if (pR0LoggerR3)
+    {
+        if (!pR0LoggerR3->fCreated)
         {
             RTR0PTR pfnLoggerWrapper = NIL_RTR0PTR;
@@ -878,12 +905,12 @@
             AssertReleaseMsgRCReturn(rc, ("VMMLoggerFlush not found! rc=%Vra\n", rc), rc);
 
-            rc = RTLogCreateForR0(&pR0Logger->Logger, pR0Logger->cbLogger,
+            rc = RTLogCreateForR0(&pR0LoggerR3->Logger, pR0LoggerR3->cbLogger,
                                   *(PFNRTLOGGER *)&pfnLoggerWrapper, *(PFNRTLOGFLUSH *)&pfnLoggerFlush,
                                   RTLOGFLAGS_BUFFERED, RTLOGDEST_DUMMY);
             AssertReleaseMsgRCReturn(rc, ("RTLogCloneGC failed! rc=%Vra\n", rc), rc);
-            pR0Logger->fCreated = true;
+            pR0LoggerR3->fCreated = true;
         }
 
-        rc = RTLogCopyGroupsAndFlags(&pR0Logger->Logger, NULL /* default */, pVM->vmm.s.pLoggerHC->fFlags, RTLOGFLAGS_BUFFERED);
+        rc = RTLogCopyGroupsAndFlags(&pR0LoggerR3->Logger, NULL /* default */, pVM->vmm.s.pRCLoggerR3->fFlags, RTLOGFLAGS_BUFFERED);
         AssertRC(rc);
     }
@@ -1659,10 +1686,10 @@
         pVM->vmm.s.enmSwitcher = enmSwitcher;
 
-        RTR0PTR     pbCodeR0 = (RTR0PTR)pVM->vmm.s.pvHCCoreCodeR0 + pVM->vmm.s.aoffSwitchers[enmSwitcher]; /** @todo fix the pvHCCoreCodeR0 type */
-        pVM->vmm.s.pfnR0HostToGuest = pbCodeR0 + pSwitcher->offR0HostToGuest;
-
-        RTGCPTR     GCPtr = pVM->vmm.s.pvGCCoreCode + pVM->vmm.s.aoffSwitchers[enmSwitcher];
-        pVM->vmm.s.pfnGCGuestToHost         = GCPtr + pSwitcher->offGCGuestToHost;
-        pVM->vmm.s.pfnGCCallTrampoline      = GCPtr + pSwitcher->offGCCallTrampoline;
+        RTR0PTR     pbCodeR0 = (RTR0PTR)pVM->vmm.s.pvCoreCodeR0 + pVM->vmm.s.aoffSwitchers[enmSwitcher]; /** @todo fix the pvCoreCodeR0 type */
+        pVM->vmm.s.pfnHostToGuestR0 = pbCodeR0 + pSwitcher->offR0HostToGuest;
+
+        RTGCPTR     GCPtr = pVM->vmm.s.pvCoreCodeRC + pVM->vmm.s.aoffSwitchers[enmSwitcher];
+        pVM->vmm.s.pfnGuestToHostRC         = GCPtr + pSwitcher->offGCGuestToHost;
+        pVM->vmm.s.pfnCallTrampolineRC      = GCPtr + pSwitcher->offGCCallTrampoline;
         pVM->pfnVMMGCGuestToHostAsm         = GCPtr + pSwitcher->offGCGuestToHostAsm;
         pVM->pfnVMMGCGuestToHostAsmHyperCtx = GCPtr + pSwitcher->offGCGuestToHostAsmHyperCtx;
@@ -1694,29 +1721,31 @@
 
 /**
- * Resolve a builtin GC symbol.
- * Called by PDM when loading or relocating GC modules.
+ * Resolve a builtin RC symbol.
+ *
+ * Called by PDM when loading or relocating RC modules.
  *
  * @returns VBox status
- * @param   pVM         VM Handle.
- * @param   pszSymbol   Symbol to resolv
- * @param   pGCPtrValue Where to store the symbol value.
+ * @param   pVM             VM Handle.
+ * @param   pszSymbol       Symbol to resolv
+ * @param   pRCPtrValue     Where to store the symbol value.
+ *
  * @remark  This has to work before VMMR3Relocate() is called.
  */
-VMMR3DECL(int) VMMR3GetImportGC(PVM pVM, const char *pszSymbol, PRTGCPTR pGCPtrValue)
+VMMR3DECL(int) VMMR3GetImportRC(PVM pVM, const char *pszSymbol, PRTRCPTR pRCPtrValue)
 {
     if (!strcmp(pszSymbol, "g_Logger"))
     {
-        if (pVM->vmm.s.pLoggerHC)
-            pVM->vmm.s.pLoggerGC = MMHyperHC2GC(pVM, pVM->vmm.s.pLoggerHC);
-        *pGCPtrValue = pVM->vmm.s.pLoggerGC;
+        if (pVM->vmm.s.pRCLoggerR3)
+            pVM->vmm.s.pRCLoggerRC = MMHyperR3ToRC(pVM, pVM->vmm.s.pRCLoggerR3);
+        *pRCPtrValue = pVM->vmm.s.pRCLoggerRC;
     }
     else if (!strcmp(pszSymbol, "g_RelLogger"))
     {
 #ifdef VBOX_WITH_RC_RELEASE_LOGGING
-        if (pVM->vmm.s.pRelLoggerHC)
-            pVM->vmm.s.pRelLoggerGC = MMHyperHC2GC(pVM, pVM->vmm.s.pRelLoggerHC);
-        *pGCPtrValue = pVM->vmm.s.pRelLoggerGC;
+        if (pVM->vmm.s.pRCRelLoggerR3)
+            pVM->vmm.s.pRCRelLoggerRC = MMHyperR3ToRC(pVM, pVM->vmm.s.pRCRelLoggerR3);
+        *pRCPtrValue = pVM->vmm.s.pRCRelLoggerRC;
 #else
-        *pGCPtrValue = NIL_RTGCPTR;
+        *pRCPtrValue = NIL_RTRCPTR;
 #endif
     }
@@ -1880,6 +1909,6 @@
      */
     CPUMSetHyperEIP(pVM, CPUMGetGuestEFlags(pVM) & X86_EFL_VM
-                    ? pVM->vmm.s.pfnCPUMGCResumeGuestV86
-                    : pVM->vmm.s.pfnCPUMGCResumeGuest);
+                    ? pVM->vmm.s.pfnCPUMRCResumeGuestV86
+                    : pVM->vmm.s.pfnCPUMRCResumeGuest);
     CPUMSetHyperESP(pVM, pVM->vmm.s.pbEMTStackBottomRC);
 
@@ -1897,5 +1926,5 @@
             rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_RAW_RUN);
             if (RT_LIKELY(rc == VINF_SUCCESS))
-                rc = pVM->vmm.s.iLastGCRc;
+                rc = pVM->vmm.s.iLastGZRc;
 #endif
         } while (rc == VINF_EM_RAW_INTERRUPT_HYPER);
@@ -1905,5 +1934,5 @@
          */
 #ifdef LOG_ENABLED
-        PRTLOGGERRC pLogger = pVM->vmm.s.pLoggerHC;
+        PRTLOGGERRC pLogger = pVM->vmm.s.pRCLoggerR3;
         if (    pLogger
             &&  pLogger->offScratch > 0)
@@ -1911,5 +1940,5 @@
 #endif
 #ifdef VBOX_WITH_RC_RELEASE_LOGGING
-        PRTLOGGERRC pRelLogger = pVM->vmm.s.pRelLoggerHC;
+        PRTLOGGERRC pRelLogger = pVM->vmm.s.pRCRelLoggerR3;
         if (RT_UNLIKELY(pRelLogger && pRelLogger->offScratch > 0))
             RTLogFlushGC(RTLogRelDefaultInstance(), pRelLogger);
@@ -1947,5 +1976,5 @@
             rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_HWACC_RUN);
             if (RT_LIKELY(rc == VINF_SUCCESS))
-                rc = pVM->vmm.s.iLastGCRc;
+                rc = pVM->vmm.s.iLastGZRc;
 #endif
         } while (rc == VINF_EM_RAW_INTERRUPT_HYPER);
@@ -1955,8 +1984,8 @@
          * Flush the log
          */
-        PVMMR0LOGGER pR0Logger = pVM->vmm.s.pR0Logger;
-        if (    pR0Logger
-            &&  pR0Logger->Logger.offScratch > 0)
-            RTLogFlushToLogger(&pR0Logger->Logger, NULL);
+        PVMMR0LOGGER pR0LoggerR3 = pVM->vmm.s.pR0LoggerR3;
+        if (    pR0LoggerR3
+            &&  pR0LoggerR3->Logger.offScratch > 0)
+            RTLogFlushToLogger(&pR0LoggerR3->Logger, NULL);
 #endif /* !LOG_ENABLED */
         if (rc != VINF_VMM_CALL_HOST)
@@ -2015,5 +2044,5 @@
     CPUMPushHyper(pVM, cArgs * sizeof(RTGCUINTPTR32));                          /* stack frame size */
     CPUMPushHyper(pVM, GCPtrEntry);                                             /* what to call */
-    CPUMSetHyperEIP(pVM, pVM->vmm.s.pfnGCCallTrampoline);
+    CPUMSetHyperEIP(pVM, pVM->vmm.s.pfnCallTrampolineRC);
 
     /*
@@ -2030,5 +2059,5 @@
             rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_RAW_RUN);
             if (RT_LIKELY(rc == VINF_SUCCESS))
-                rc = pVM->vmm.s.iLastGCRc;
+                rc = pVM->vmm.s.iLastGZRc;
 #endif
         } while (rc == VINF_EM_RAW_INTERRUPT_HYPER);
@@ -2038,5 +2067,5 @@
          */
 #ifdef LOG_ENABLED
-        PRTLOGGERRC pLogger = pVM->vmm.s.pLoggerHC;
+        PRTLOGGERRC pLogger = pVM->vmm.s.pRCLoggerR3;
         if (    pLogger
             &&  pLogger->offScratch > 0)
@@ -2044,5 +2073,5 @@
 #endif
 #ifdef VBOX_WITH_RC_RELEASE_LOGGING
-        PRTLOGGERRC pRelLogger = pVM->vmm.s.pRelLoggerHC;
+        PRTLOGGERRC pRelLogger = pVM->vmm.s.pRCRelLoggerR3;
         if (RT_UNLIKELY(pRelLogger && pRelLogger->offScratch > 0))
             RTLogFlushGC(RTLogRelDefaultInstance(), pRelLogger);
@@ -2063,6 +2092,6 @@
 
 /**
- * Resumes executing hypervisor code when interrupted
- * by a queue flush or a debug event.
+ * Resumes executing hypervisor code when interrupted by a queue flush or a
+ * debug event.
  *
  * @returns VBox status code.
@@ -2086,5 +2115,5 @@
             rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_RAW_RUN);
             if (RT_LIKELY(rc == VINF_SUCCESS))
-                rc = pVM->vmm.s.iLastGCRc;
+                rc = pVM->vmm.s.iLastGZRc;
 #endif
         } while (rc == VINF_EM_RAW_INTERRUPT_HYPER);
@@ -2094,5 +2123,5 @@
          */
 #ifdef LOG_ENABLED
-        PRTLOGGERRC pLogger = pVM->vmm.s.pLoggerHC;
+        PRTLOGGERRC pLogger = pVM->vmm.s.pRCLoggerR3;
         if (    pLogger
             &&  pLogger->offScratch > 0)
@@ -2100,5 +2129,5 @@
 #endif
 #ifdef VBOX_WITH_RC_RELEASE_LOGGING
-        PRTLOGGERRC pRelLogger = pVM->vmm.s.pRelLoggerHC;
+        PRTLOGGERRC pRelLogger = pVM->vmm.s.pRCRelLoggerR3;
         if (RT_UNLIKELY(pRelLogger && pRelLogger->offScratch > 0))
             RTLogFlushGC(RTLogRelDefaultInstance(), pRelLogger);
Index: /trunk/src/VBox/VMM/VMMGC/VMMGC.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMGC/VMMGC.cpp	(revision 13713)
+++ /trunk/src/VBox/VMM/VMMGC/VMMGC.cpp	(revision 13714)
@@ -184,5 +184,5 @@
 VMMRCDECL(void) VMMGCGuestToHost(PVM pVM, int rc)
 {
-    pVM->vmm.s.pfnGCGuestToHost(rc);
+    pVM->vmm.s.pfnGuestToHostRC(rc);
 }
 
@@ -202,5 +202,5 @@
     pVM->vmm.s.u64CallHostArg = uArg;
     pVM->vmm.s.rcCallHost = VERR_INTERNAL_ERROR;
-    pVM->vmm.s.pfnGCGuestToHost(VINF_VMM_CALL_HOST);
+    pVM->vmm.s.pfnGuestToHostRC(VINF_VMM_CALL_HOST);
     return pVM->vmm.s.rcCallHost;
 }
Index: /trunk/src/VBox/VMM/VMMGuruMeditation.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMGuruMeditation.cpp	(revision 13713)
+++ /trunk/src/VBox/VMM/VMMGuruMeditation.cpp	(revision 13714)
@@ -293,8 +293,8 @@
                  */
                 /* core code? */
-                if (uEIP - (RTGCUINTPTR)pVM->vmm.s.pvGCCoreCode < pVM->vmm.s.cbCoreCode)
+                if (uEIP - (RTGCUINTPTR)pVM->vmm.s.pvCoreCodeRC < pVM->vmm.s.cbCoreCode)
                     pHlp->pfnPrintf(pHlp,
                                 "!! EIP is in CoreCode, offset %#x\n",
-                                uEIP - (RTGCUINTPTR)pVM->vmm.s.pvGCCoreCode);
+                                uEIP - (RTGCUINTPTR)pVM->vmm.s.pvCoreCodeRC);
                 else
                 {   /* ask PDM */  /** @todo ask DBGFR3Sym later? */
Index: /trunk/src/VBox/VMM/VMMInternal.h
===================================================================
--- /trunk/src/VBox/VMM/VMMInternal.h	(revision 13713)
+++ /trunk/src/VBox/VMM/VMMInternal.h	(revision 13714)
@@ -165,21 +165,23 @@
     RTINT                       offVM;
 
+    /** @name World Switcher and Related
+     * @{
+     */
     /** Size of the core code. */
     RTUINT                      cbCoreCode;
     /** Physical address of core code. */
     RTHCPHYS                    HCPhysCoreCode;
-/** @todo pvHCCoreCodeR3 -> pvCoreCodeR3, pvHCCoreCodeR0 -> pvCoreCodeR0 */
     /** Pointer to core code ring-3 mapping - contiguous memory.
      * At present this only means the context switcher code. */
-    RTR3PTR                     pvHCCoreCodeR3;
+    RTR3PTR                     pvCoreCodeR3;
     /** Pointer to core code ring-0 mapping - contiguous memory.
      * At present this only means the context switcher code. */
-    RTR0PTR                     pvHCCoreCodeR0;
+    RTR0PTR                     pvCoreCodeR0;
     /** Pointer to core code guest context mapping. */
-    RTGCPTR32                   pvGCCoreCode;
+    RTRCPTR                     pvCoreCodeRC;
 #ifdef VBOX_WITH_NMI
     /** The guest context address of the APIC (host) mapping. */
-    RTGCPTR32                   GCPtrApicBase;
-    RTGCPTR32                   pGCPadding0; /**< Alignment padding */
+    RTRCPTR                     GCPtrApicBase;
+    RTRCPTR                     pGCPadding0; /**< Alignment padding */
 #endif
     /** The current switcher.
@@ -192,19 +194,20 @@
 
     /** Host to guest switcher entry point. */
-    R0PTRTYPE(PFNVMMSWITCHERHC) pfnR0HostToGuest;
+    R0PTRTYPE(PFNVMMSWITCHERHC) pfnHostToGuestR0;
     /** Guest to host switcher entry point. */
-    RCPTRTYPE(PFNVMMSWITCHERRC) pfnGCGuestToHost;
+    RCPTRTYPE(PFNVMMSWITCHERRC) pfnGuestToHostRC;
     /** Call Trampoline. See vmmGCCallTrampoline(). */
-    RTGCPTR32                   pfnGCCallTrampoline;
+    RTRCPTR                     pfnCallTrampolineRC;
 
     /** Resume Guest Execution. See CPUMGCResumeGuest(). */
-    RTGCPTR32                   pfnCPUMGCResumeGuest;
+    RTRCPTR                     pfnCPUMRCResumeGuest;
     /** Resume Guest Execution in V86 mode. See CPUMGCResumeGuestV86(). */
-    RTGCPTR32                   pfnCPUMGCResumeGuestV86;
-    /** The last GC return code. */
-    RTINT                       iLastGCRc;
+    RTRCPTR                     pfnCPUMRCResumeGuestV86;
+    /** The last RC/R0 return code. */
+    RTINT                       iLastGZRc;
 #if HC_ARCH_BITS == 64
     uint32_t                    u32Padding0; /**< Alignment padding. */
 #endif
+    /** @}  */
 
     /** VMM stack, pointer to the top of the stack in R3.
@@ -217,26 +220,31 @@
     RCPTRTYPE(uint8_t *)        pbEMTStackBottomRC;
 
-    /** Pointer to the GC logger instance - GC Ptr.
+    /** @name Logging
+     * @{
+     */
+    /** Size of the allocated logger instance (pRCLoggerRC/pRCLoggerR3). */
+    uint32_t                    cbRCLogger;
+    /** Pointer to the RC logger instance - RC Ptr.
      * This is NULL if logging is disabled. */
-    RCPTRTYPE(PRTLOGGERRC)      pLoggerGC;
-    /** Size of the allocated logger instance (pLoggerGC/pLoggerHC). */
-    RTUINT                      cbLoggerGC;
-    /** Pointer to the GC logger instance - HC Ptr.
+    RCPTRTYPE(PRTLOGGERRC)      pRCLoggerRC;
+    /** Pointer to the GC logger instance - R3 Ptr.
      * This is NULL if logging is disabled. */
-    R3PTRTYPE(PRTLOGGERRC)      pLoggerHC;
-
-    /** Pointer to the R0 logger instance.
+    R3PTRTYPE(PRTLOGGERRC)      pRCLoggerR3;
+#ifdef VBOX_WITH_RC_RELEASE_LOGGING
+    /** Size of the allocated release logger instance (pRCRelLoggerRC/pRCRelLoggerR3).
+     * This may differ from cbRCLogger. */
+    uint32_t                    cbRCRelLogger;
+    /** Pointer to the GC release logger instance - RC Ptr. */
+    RCPTRTYPE(PRTLOGGERRC)      pRCRelLoggerRC;
+    /** Pointer to the GC release logger instance - R3 Ptr. */
+    R3PTRTYPE(PRTLOGGERRC)      pRCRelLoggerR3;
+#endif /* VBOX_WITH_RC_RELEASE_LOGGING */
+    /** Pointer to the R0 logger instance - R3 Ptr.
      * This is NULL if logging is disabled. */
-    R3R0PTRTYPE(PVMMR0LOGGER)   pR0Logger;
-
-#ifdef VBOX_WITH_RC_RELEASE_LOGGING
-    /** Pointer to the GC release logger instance - GC Ptr. */
-    RCPTRTYPE(PRTLOGGERRC)      pRelLoggerGC;
-    /** Size of the allocated release logger instance (pRelLoggerGC/pRelLoggerHC).
-     * This may differ from cbLoggerGC. */
-    RTUINT                      cbRelLoggerGC;
-    /** Pointer to the GC release logger instance - HC Ptr. */
-    R3PTRTYPE(PRTLOGGERRC)      pRelLoggerHC;
-#endif /* VBOX_WITH_RC_RELEASE_LOGGING */
+    R3PTRTYPE(PVMMR0LOGGER)     pR0LoggerR3;
+    /** Pointer to the R0 logger instance - R0 Ptr.
+     * This is NULL if logging is disabled. */
+    R0PTRTYPE(PVMMR0LOGGER)     pR0LoggerR0;
+    /** @} */
 
     /** Global VM critical section. */
Index: /trunk/src/VBox/VMM/VMMR0/VMMR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/VMMR0.cpp	(revision 13713)
+++ /trunk/src/VBox/VMM/VMMR0/VMMR0.cpp	(revision 13714)
@@ -175,5 +175,5 @@
      * Register the EMT R0 logger instance.
      */
-    PVMMR0LOGGER pR0Logger = pVM->vmm.s.pR0Logger;
+    PVMMR0LOGGER pR0Logger = pVM->vmm.s.pR0LoggerR0;
     if (pR0Logger)
     {
@@ -489,5 +489,5 @@
             STAM_COUNTER_INC(&pVM->vmm.s.StatRunRC);
             register int rc;
-            pVM->vmm.s.iLastGCRc = rc = pVM->vmm.s.pfnR0HostToGuest(pVM);
+            pVM->vmm.s.iLastGZRc = rc = pVM->vmm.s.pfnHostToGuestR0(pVM);
 
 #ifdef VBOX_WITH_STATISTICS
@@ -548,5 +548,5 @@
 
             RTCCUINTREG fFlags = ASMIntDisableFlags();
-            int rc = pVM->vmm.s.pfnR0HostToGuest(pVM);
+            int rc = pVM->vmm.s.pfnHostToGuestR0(pVM);
             /** @todo dispatch interrupts? */
             ASMSetFlags(fFlags);
@@ -576,5 +576,5 @@
  *
  * @param   pVM             The VM to operate on.
- *                          The return code is stored in pVM->vmm.s.iLastGCRc.
+ *                          The return code is stored in pVM->vmm.s.iLastGZRc.
  * @param   enmOperation    Which operation to execute.
  * @remarks Assume called with interrupts _enabled_.
@@ -596,6 +596,6 @@
 
                 TMNotifyStartOfExecution(pVM);
-                int rc = pVM->vmm.s.pfnR0HostToGuest(pVM);
-                pVM->vmm.s.iLastGCRc = rc;
+                int rc = pVM->vmm.s.pfnHostToGuestR0(pVM);
+                pVM->vmm.s.iLastGZRc = rc;
                 TMNotifyEndOfExecution(pVM);
 
@@ -614,5 +614,5 @@
             {
                 Assert(!pVM->vmm.s.fSwitcherDisabled);
-                pVM->vmm.s.iLastGCRc = VERR_NOT_SUPPORTED;
+                pVM->vmm.s.iLastGZRc = VERR_NOT_SUPPORTED;
             }
             break;
@@ -650,5 +650,5 @@
                 rc = VINF_EM_RAW_INTERRUPT;
             }
-            pVM->vmm.s.iLastGCRc = rc;
+            pVM->vmm.s.iLastGZRc = rc;
 #ifndef RT_OS_WINDOWS /** @todo check other hosts */
             ASMSetFlags(uFlags);
@@ -666,5 +666,5 @@
          */
         case VMMR0_DO_NOP:
-            pVM->vmm.s.iLastGCRc = VINF_SUCCESS;
+            pVM->vmm.s.iLastGZRc = VINF_SUCCESS;
             break;
 
@@ -674,5 +674,5 @@
         default:
             AssertMsgFailed(("%#x\n", enmOperation));
-            pVM->vmm.s.iLastGCRc = VERR_NOT_SUPPORTED;
+            pVM->vmm.s.iLastGZRc = VERR_NOT_SUPPORTED;
             break;
     }
@@ -819,5 +819,5 @@
 
             RTCCUINTREG fFlags = ASMIntDisableFlags();
-            int rc = pVM->vmm.s.pfnR0HostToGuest(pVM);
+            int rc = pVM->vmm.s.pfnHostToGuestR0(pVM);
             /** @todo dispatch interrupts? */
             ASMSetFlags(fFlags);
Index: /trunk/src/VBox/VMM/VMMTests.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMTests.cpp	(revision 13713)
+++ /trunk/src/VBox/VMM/VMMTests.cpp	(revision 13714)
@@ -69,8 +69,8 @@
     CPUMPushHyper(pVM, 3 * sizeof(RTGCPTR32));  /* stack frame size */
     CPUMPushHyper(pVM, GCPtrEP);                /* what to call */
-    CPUMSetHyperEIP(pVM, pVM->vmm.s.pfnGCCallTrampoline);
+    CPUMSetHyperEIP(pVM, pVM->vmm.s.pfnCallTrampolineRC);
     rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_RAW_RUN);
     if (RT_LIKELY(rc == VINF_SUCCESS))
-        rc = pVM->vmm.s.iLastGCRc;
+        rc = pVM->vmm.s.iLastGZRc;
     return rc;
 }
@@ -106,8 +106,8 @@
     CPUMPushHyper(pVM, 3 * sizeof(RTGCPTR32));  /* stack frame size */
     CPUMPushHyper(pVM, GCPtrEP);                /* what to call */
-    CPUMSetHyperEIP(pVM, pVM->vmm.s.pfnGCCallTrampoline);
+    CPUMSetHyperEIP(pVM, pVM->vmm.s.pfnCallTrampolineRC);
     rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_RAW_RUN);
     if (RT_LIKELY(rc == VINF_SUCCESS))
-        rc = pVM->vmm.s.iLastGCRc;
+        rc = pVM->vmm.s.iLastGZRc;
     bool fDump = false;
     if (rc != rcExpect)
@@ -340,6 +340,6 @@
         CPUMPushHyper(pVM, 3 * sizeof(RTGCPTR32));  /* stack frame size */
         CPUMPushHyper(pVM, GCPtrEP);                /* what to call */
-        CPUMSetHyperEIP(pVM, pVM->vmm.s.pfnGCCallTrampoline);
-        Log(("trampoline=%x\n", pVM->vmm.s.pfnGCCallTrampoline));
+        CPUMSetHyperEIP(pVM, pVM->vmm.s.pfnCallTrampolineRC);
+        Log(("trampoline=%x\n", pVM->vmm.s.pfnCallTrampolineRC));
 
         /*
@@ -354,5 +354,5 @@
             rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_RAW_RUN);
             if (RT_LIKELY(rc == VINF_SUCCESS))
-                rc = pVM->vmm.s.iLastGCRc;
+                rc = pVM->vmm.s.iLastGZRc;
             if (VBOX_FAILURE(rc))
             {
@@ -402,10 +402,10 @@
             CPUMPushHyper(pVM, 3 * sizeof(RTGCPTR32));    /* stack frame size */
             CPUMPushHyper(pVM, GCPtrEP);                /* what to call */
-            CPUMSetHyperEIP(pVM, pVM->vmm.s.pfnGCCallTrampoline);
+            CPUMSetHyperEIP(pVM, pVM->vmm.s.pfnCallTrampolineRC);
 
             uint64_t TickThisStart = ASMReadTSC();
             rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_RAW_RUN);
             if (RT_LIKELY(rc == VINF_SUCCESS))
-                rc = pVM->vmm.s.iLastGCRc;
+                rc = pVM->vmm.s.iLastGZRc;
             uint64_t TickThisElapsed = ASMReadTSC() - TickThisStart;
             if (VBOX_FAILURE(rc))
@@ -529,5 +529,5 @@
             CPUMPushHyper(pVM, 3 * sizeof(RTGCPTR32));    /* stack frame size */
             CPUMPushHyper(pVM, GCPtrEP);                /* what to call */
-            CPUMSetHyperEIP(pVM, pVM->vmm.s.pfnGCCallTrampoline);
+            CPUMSetHyperEIP(pVM, pVM->vmm.s.pfnCallTrampolineRC);
 
             CPUMQueryHyperCtxPtr(pVM, &pHyperCtx);
Index: /trunk/src/VBox/VMM/testcase/tstVMStructGC.cpp
===================================================================
--- /trunk/src/VBox/VMM/testcase/tstVMStructGC.cpp	(revision 13713)
+++ /trunk/src/VBox/VMM/testcase/tstVMStructGC.cpp	(revision 13714)
@@ -826,22 +826,24 @@
     GEN_CHECK_OFF(VMM, cbCoreCode);
     GEN_CHECK_OFF(VMM, HCPhysCoreCode);
-    GEN_CHECK_OFF(VMM, pvHCCoreCodeR3);
-    GEN_CHECK_OFF(VMM, pvHCCoreCodeR0);
-    GEN_CHECK_OFF(VMM, pvGCCoreCode);
+    GEN_CHECK_OFF(VMM, pvCoreCodeR3);
+    GEN_CHECK_OFF(VMM, pvCoreCodeR0);
+    GEN_CHECK_OFF(VMM, pvCoreCodeRC);
     GEN_CHECK_OFF(VMM, enmSwitcher);
     GEN_CHECK_OFF(VMM, aoffSwitchers);
     GEN_CHECK_OFF(VMM, aoffSwitchers[1]);
-    GEN_CHECK_OFF(VMM, pfnR0HostToGuest);
-    GEN_CHECK_OFF(VMM, pfnGCGuestToHost);
-    GEN_CHECK_OFF(VMM, pfnGCCallTrampoline);
-    GEN_CHECK_OFF(VMM, pfnCPUMGCResumeGuest);
-    GEN_CHECK_OFF(VMM, pfnCPUMGCResumeGuestV86);
-    GEN_CHECK_OFF(VMM, iLastGCRc);
+    GEN_CHECK_OFF(VMM, pfnHostToGuestR0);
+    GEN_CHECK_OFF(VMM, pfnGuestToHostRC);
+    GEN_CHECK_OFF(VMM, pfnCallTrampolineRC);
+    GEN_CHECK_OFF(VMM, pfnCPUMRCResumeGuest);
+    GEN_CHECK_OFF(VMM, pfnCPUMRCResumeGuestV86);
+    GEN_CHECK_OFF(VMM, iLastGZRc);
     GEN_CHECK_OFF(VMM, pbEMTStackR3);
     GEN_CHECK_OFF(VMM, pbEMTStackRC);
     GEN_CHECK_OFF(VMM, pbEMTStackBottomRC);
-    GEN_CHECK_OFF(VMM, pLoggerGC);
-    GEN_CHECK_OFF(VMM, pLoggerHC);
-    GEN_CHECK_OFF(VMM, cbLoggerGC);
+    GEN_CHECK_OFF(VMM, pRCLoggerRC);
+    GEN_CHECK_OFF(VMM, pRCLoggerR3);
+    GEN_CHECK_OFF(VMM, pR0LoggerR0);
+    GEN_CHECK_OFF(VMM, pR0LoggerR3);
+    GEN_CHECK_OFF(VMM, cbRCLogger);
     GEN_CHECK_OFF(VMM, CritSectVMLock);
     GEN_CHECK_OFF(VMM, pYieldTimer);
