Changeset 5343 in vbox
- Timestamp:
- Oct 17, 2007 7:32:32 AM (17 years ago)
- svn:sync-xref-src-repo-rev:
- 25381
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/EMAll.cpp
r4953 r5343 1113 1113 /* Safety check (in theory it could cross a page boundary and fault there though) */ 1114 1114 AssertMsgReturn(pParam1 == pvFault, ("eip=%VGv pParam1=%VGv pvFault=%VGv\n", pRegFrame->eip, pParam1, pvFault), VERR_EM_INTERPRETER); 1115 1116 #ifdef VBOX_STRICT1117 rc = emRamRead(pVM, &valpar1, pParam1, param1.size);1118 if (VBOX_FAILURE(rc))1119 return VERR_EM_INTERPRETER;1120 #endif1121 1115 break; 1122 1116 … … 1135 1129 } 1136 1130 1137 #ifdef VBOX_STRICT1138 1131 LogFlow(("CmpXchg %VGv=%08x eax=%08x %08x\n", pParam1, valpar1, pRegFrame->eax, valpar)); 1139 #endif 1132 1133 MMGCRamRegisterTrapHandler(pVM); 1140 1134 if (pCpu->prefix & PREFIX_LOCK) 1141 eflags = EMGCEmulateLockCmpXchg(pParam1, &pRegFrame->eax, valpar, pCpu->param2.size);1135 rc = EMGCEmulateLockCmpXchg(pParam1, &pRegFrame->eax, valpar, pCpu->param2.size, &eflags); 1142 1136 else 1143 eflags = EMGCEmulateCmpXchg(pParam1, &pRegFrame->eax, valpar, pCpu->param2.size); 1144 1145 #ifdef VBOX_STRICT 1146 rc = emRamRead(pVM, &valpar1, pParam1, param1.size); 1137 rc = EMGCEmulateCmpXchg(pParam1, &pRegFrame->eax, valpar, pCpu->param2.size, &eflags); 1138 MMGCRamDeregisterTrapHandler(pVM); 1139 1140 if (VBOX_FAILURE(rc)) 1141 { 1142 Log(("CmpXchg %VGv=%08x eax=%08x %08x -> emulation failed due to page fault!\n", pParam1, valpar1, pRegFrame->eax, valpar)); 1143 return VERR_EM_INTERPRETER; 1144 } 1145 1147 1146 LogFlow(("CmpXchg %VGv=%08x eax=%08x %08x ZF=%d\n", pParam1, valpar1, pRegFrame->eax, valpar, !!(eflags & X86_EFL_ZF))); 1148 #endif 1147 1149 1148 /* Update guest's eflags and finish. */ 1150 1149 pRegFrame->eflags.u32 = (pRegFrame->eflags.u32 & ~(X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_ZF | X86_EFL_SF | X86_EFL_OF))
Note:
See TracChangeset
for help on using the changeset viewer.