Index: /trunk/src/VBox/VMM/VMMAll/TRPMAll.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/TRPMAll.cpp	(revision 42462)
+++ /trunk/src/VBox/VMM/VMMAll/TRPMAll.cpp	(revision 42463)
@@ -375,13 +375,12 @@
 
     switch (iGate) {
-    case 14:
+    case X86_XCPT_PF:
         if (pRegFrame->eip == pVCpu->trpm.s.uActiveCR2)
         {
-            int rc;
             RTGCPTR pCallerGC;
 #  ifdef IN_RC
-            rc = MMGCRamRead(pVM, &pCallerGC, (void *)pRegFrame->esp, sizeof(pCallerGC));
+            int rc = MMGCRamRead(pVM, &pCallerGC, (void *)pRegFrame->esp, sizeof(pCallerGC));
 #  else
-            rc = PGMPhysSimpleReadGCPtr(pVCpu, &pCallerGC, (RTGCPTR)pRegFrame->esp, sizeof(pCallerGC));
+            int rc = PGMPhysSimpleReadGCPtr(pVCpu, &pCallerGC, (RTGCPTR)pRegFrame->esp, sizeof(pCallerGC));
 #  endif
             if (RT_SUCCESS(rc))
@@ -389,10 +388,10 @@
         }
         /* no break */
-    case 8:
-    case 10:
-    case 11:
-    case 12:
-    case 13:
-    case 17:
+    case X86_XCPT_DF:
+    case X86_XCPT_TS:
+    case X86_XCPT_NP:
+    case X86_XCPT_SS:
+    case X86_XCPT_GP:
+    case X86_XCPT_AC:
         Assert(enmError == TRPM_TRAP_HAS_ERRORCODE || enmType == TRPM_SOFTWARE_INT);
         break;
@@ -674,10 +673,8 @@
 
                     /* Make sure the internal guest context structure is up-to-date. */
-                    CPUMSetGuestCR2(pVCpu, pVCpu->trpm.s.uActiveCR2);
+                    if (iGate == X86_XCPT_PF)
+                        CPUMSetGuestCR2(pVCpu, pVCpu->trpm.s.uActiveCR2);
 
 #ifdef IN_RC
-                    /* Note: shouldn't be necessary */
-                    ASMSetCR2(pVCpu->trpm.s.uActiveCR2);
-
                     /* Turn off interrupts for interrupt gates. */
                     if (GuestIdte.Gen.u5Type2 == VBOX_IDTE_TYPE2_INT_32)
