Changeset 45708 in vbox for trunk/src/VBox
- Timestamp:
- Apr 24, 2013 2:51:55 PM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 85254
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR3/SELM.cpp
r45705 r45708 915 915 } 916 916 917 # ifdef VBOX_WITH_SAFE_STR917 # ifdef VBOX_WITH_SAFE_STR 918 918 /* Use the guest's TR selector to plug the str virtualization hole. */ 919 919 if (CPUMGetGuestTR(pVCpu, NULL) != 0) … … 922 922 aHyperSel[SELM_HYPER_SEL_TSS] = CPUMGetGuestTR(pVCpu, NULL); 923 923 } 924 # endif924 # endif 925 925 926 926 /* … … 961 961 VMR3Relocate(pVM, 0); 962 962 } 963 else 964 #ifdef VBOX_WITH_SAFE_STR 965 if ( cbEffLimit >= SELM_HYPER_DEFAULT_BASE 966 || CPUMGetGuestTR(pVCpu, NULL) != 0) /* Our shadow TR entry was overwritten when we synced the guest's GDT. */ 967 #else 968 if (cbEffLimit >= SELM_HYPER_DEFAULT_BASE) 969 #endif 963 # ifdef VBOX_WITH_SAFE_STR 964 else if ( cbEffLimit >= SELM_HYPER_DEFAULT_BASE 965 || CPUMGetGuestTR(pVCpu, NULL) != 0) /* Our shadow TR entry was overwritten when we synced the guest's GDT. */ 966 # else 967 else if (cbEffLimit >= SELM_HYPER_DEFAULT_BASE) 968 # endif 970 969 /* We overwrote all entries above, so we have to save them again. */ 971 970 selmR3SetupHyperGDTSelectors(pVM); … … 989 988 Log(("SELMR3UpdateFromCPUM: Guest's GDT is changed to pGdt=%016RX64 cbGdt=%08X\n", GDTR.pGdt, GDTR.cbGdt)); 990 989 991 # ifdef SELM_TRACK_GUEST_GDT_CHANGES990 # ifdef SELM_TRACK_GUEST_GDT_CHANGES 992 991 /* 993 992 * [Re]Register write virtual handler for guest's GDT. … … 1003 1002 0, selmR3GuestGDTWriteHandler, "selmRCGuestGDTWriteHandler", 0, 1004 1003 "Guest GDT write access handler"); 1005 # ifdef VBOX_WITH_RAW_RING11004 # ifdef VBOX_WITH_RAW_RING1 1006 1005 /** @todo !HACK ALERT! 1007 1006 * Some guest OSes (QNX) share code and the GDT on the same page; … … 1021 1020 "Guest GDT write access handler"); 1022 1021 } 1023 # endif1022 # endif 1024 1023 if (RT_FAILURE(rc)) 1025 1024 return rc; 1026 # endif /* SELM_TRACK_GUEST_GDT_CHANGES */1025 # endif /* SELM_TRACK_GUEST_GDT_CHANGES */ 1027 1026 1028 1027 /* Update saved Guest GDTR. */ … … 1136 1135 pVM->selm.s.GCPtrGuestLdt, pVM->selm.s.cbLdtLimit, GCPtrLdt, cbLdt, pVM->selm.s.GuestGdtr.pGdt, pVM->selm.s.GuestGdtr.cbGdt)); 1137 1136 1138 # ifdef SELM_TRACK_GUEST_LDT_CHANGES1137 # ifdef SELM_TRACK_GUEST_LDT_CHANGES 1139 1138 /* 1140 1139 * [Re]Register write virtual handler for guest's GDT. … … 1146 1145 AssertRC(rc); 1147 1146 } 1148 # ifdef DEBUG1147 # ifdef LOG_ENABLED 1149 1148 if (pDesc->Gen.u1Present) 1150 1149 Log(("LDT selector marked not present!!\n")); 1151 # endif1150 # endif 1152 1151 rc = PGMR3HandlerVirtualRegister(pVM, PGMVIRTHANDLERTYPE_WRITE, GCPtrLdt, GCPtrLdt + cbLdt /* already inclusive */, 1153 1152 0, selmR3GuestLDTWriteHandler, "selmRCGuestLDTWriteHandler", 0, "Guest LDT write access handler"); … … 1166 1165 return rc; 1167 1166 } 1168 # else1167 # else 1169 1168 pVM->selm.s.GCPtrGuestLdt = GCPtrLdt; 1170 # endif1169 # endif 1171 1170 pVM->selm.s.cbLdtLimit = cbLdt; 1172 1171 }
Note:
See TracChangeset
for help on using the changeset viewer.