Changeset 9300 in vbox
- Timestamp:
- Jun 2, 2008 1:30:12 PM (16 years ago)
- Location:
- trunk
- Files:
-
- 7 edited
-
include/VBox/em.h (modified) (1 diff)
-
src/VBox/VMM/PATM/CSAMInternal.h (modified) (1 diff)
-
src/VBox/VMM/PATM/VMMGC/CSAMGC.cpp (modified) (1 diff)
-
src/VBox/VMM/VMMAll/EMAll.cpp (modified) (11 diffs)
-
src/VBox/VMM/VMMAll/PGMAll.cpp (modified) (1 diff)
-
src/VBox/VMM/VMMGC/TRPMGCHandlers.cpp (modified) (1 diff)
-
src/VBox/VMM/VMMGC/TRPMGCHandlersA.asm (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/em.h
r9212 r9300 477 477 EMGCDECL(int) EMGCTrap(PVM pVM, unsigned uTrap, PCPUMCTXCORE pRegFrame); 478 478 479 EMGCDECL(uint32_t) EMGCEmulateLockCmpXchg(RT GCPTR pu32Param1, uint32_t *pu32Param2, uint32_t u32Param3, size_t cbSize, uint32_t *pEflags);480 EMGCDECL(uint32_t) EMGCEmulateCmpXchg(RT GCPTR pu32Param1, uint32_t *pu32Param2, uint32_t u32Param3, size_t cbSize, uint32_t *pEflags);481 EMGCDECL(uint32_t) EMGCEmulateLockCmpXchg8b(RT GCPTR pu32Param1, uint32_t *pEAX, uint32_t *pEDX, uint32_t uEBX, uint32_t uECX, uint32_t *pEflags);482 EMGCDECL(uint32_t) EMGCEmulateCmpXchg8b(RT GCPTR pu32Param1, uint32_t *pEAX, uint32_t *pEDX, uint32_t uEBX, uint32_t uECX, uint32_t *pEflags);483 EMGCDECL(uint32_t) EMGCEmulateLockXAdd(RT GCPTR pu32Param1, uint32_t *pu32Param2, size_t cbSize, uint32_t *pEflags);484 EMGCDECL(uint32_t) EMGCEmulateXAdd(RT GCPTR pu32Param1, uint32_t *pu32Param2, size_t cbSize, uint32_t *pEflags);479 EMGCDECL(uint32_t) EMGCEmulateLockCmpXchg(RTRCPTR pu32Param1, uint32_t *pu32Param2, uint32_t u32Param3, size_t cbSize, uint32_t *pEflags); 480 EMGCDECL(uint32_t) EMGCEmulateCmpXchg(RTRCPTR pu32Param1, uint32_t *pu32Param2, uint32_t u32Param3, size_t cbSize, uint32_t *pEflags); 481 EMGCDECL(uint32_t) EMGCEmulateLockCmpXchg8b(RTRCPTR pu32Param1, uint32_t *pEAX, uint32_t *pEDX, uint32_t uEBX, uint32_t uECX, uint32_t *pEflags); 482 EMGCDECL(uint32_t) EMGCEmulateCmpXchg8b(RTRCPTR pu32Param1, uint32_t *pEAX, uint32_t *pEDX, uint32_t uEBX, uint32_t uECX, uint32_t *pEflags); 483 EMGCDECL(uint32_t) EMGCEmulateLockXAdd(RTRCPTR pu32Param1, uint32_t *pu32Param2, size_t cbSize, uint32_t *pEflags); 484 EMGCDECL(uint32_t) EMGCEmulateXAdd(RTRCPTR pu32Param1, uint32_t *pu32Param2, size_t cbSize, uint32_t *pEflags); 485 485 486 486 /** @} */ -
trunk/src/VBox/VMM/PATM/CSAMInternal.h
r9255 r9300 174 174 /* To keep track of dirty pages */ 175 175 uint32_t cDirtyPages; 176 RT GCPTR32pvDirtyBasePage[CSAM_MAX_DIRTY_PAGES];177 RT GCPTR32pvDirtyFaultPage[CSAM_MAX_DIRTY_PAGES];176 RTRCPTR pvDirtyBasePage[CSAM_MAX_DIRTY_PAGES]; 177 RTRCPTR pvDirtyFaultPage[CSAM_MAX_DIRTY_PAGES]; 178 178 179 179 /* To keep track of possible code pages */ -
trunk/src/VBox/VMM/PATM/VMMGC/CSAMGC.cpp
r9228 r9300 117 117 118 118 /* Note that pvFault might be a different address in case of aliases. So use pvRange + offset instead!. */ 119 pVM->csam.s.pvDirtyBasePage[pVM->csam.s.cDirtyPages] = (RT GCPTR32)((RTGCUINTPTR)pvRange + offRange);120 pVM->csam.s.pvDirtyFaultPage[pVM->csam.s.cDirtyPages] = (RT GCPTR32)((RTGCUINTPTR)pvRange + offRange);119 pVM->csam.s.pvDirtyBasePage[pVM->csam.s.cDirtyPages] = (RTRCPTR)((RTGCUINTPTR)pvRange + offRange); 120 pVM->csam.s.pvDirtyFaultPage[pVM->csam.s.cDirtyPages] = (RTRCPTR)((RTGCUINTPTR)pvRange + offRange); 121 121 if (++pVM->csam.s.cDirtyPages == CSAM_MAX_DIRTY_PAGES) 122 122 return VINF_CSAM_PENDING_ACTION; -
trunk/src/VBox/VMM/VMMAll/EMAll.cpp
r9289 r9300 202 202 { 203 203 RTGCPTR pbCode; 204 205 LogFlow(("EMInterpretInstruction %VRv fault %VGv\n", pRegFrame->eip, pvFault)); 204 206 int rc = SELMValidateAndConvertCSAddr(pVM, pRegFrame->eflags, pRegFrame->ss, pRegFrame->cs, &pRegFrame->csHid, (RTGCPTR)pRegFrame->eip, &pbCode); 205 207 if (VBOX_SUCCESS(rc)) … … 1272 1274 if (TRPMGetErrorCode(pVM) & X86_TRAP_PF_RW) 1273 1275 { 1274 RT GCPTR pParam1;1276 RTRCPTR pParam1; 1275 1277 uint32_t valpar, eflags; 1276 1278 #ifdef VBOX_STRICT … … 1282 1284 { 1283 1285 case PARMTYPE_ADDRESS: 1284 pParam1 = (RT GCPTR)param1.val.val32;1285 pParam1 = emConvertToFlatAddr(pVM, pRegFrame, pCpu, &pCpu->param1,pParam1);1286 pParam1 = (RTRCPTR)param1.val.val32; 1287 pParam1 = (RTRCPTR)emConvertToFlatAddr(pVM, pRegFrame, pCpu, &pCpu->param1, (RTGCPTR)(RTRCUINTPTR)pParam1); 1286 1288 1287 1289 /* Safety check (in theory it could cross a page boundary and fault there though) */ 1288 AssertMsgReturn(pParam1 == pvFault, ("eip=%VGv pParam1=%VGv pvFault=%VGv\n", pRegFrame->eip, pParam1, pvFault), VERR_EM_INTERPRETER);1290 AssertMsgReturn(pParam1 == (RTRCPTR)pvFault, ("eip=%VRv pParam1=%VRv pvFault=%VGv\n", pRegFrame->eip, pParam1, pvFault), VERR_EM_INTERPRETER); 1289 1291 break; 1290 1292 … … 1303 1305 } 1304 1306 1305 LogFlow(("%s %V Gv=%08x eax=%08x %08x\n", pszInstr, pParam1, valpar1, pRegFrame->eax, valpar));1307 LogFlow(("%s %VRv=%08x eax=%08x %08x\n", pszInstr, pParam1, valpar1, pRegFrame->eax, valpar)); 1306 1308 1307 1309 MMGCRamRegisterTrapHandler(pVM); … … 1318 1320 } 1319 1321 1320 LogFlow(("%s %V Gv=%08x eax=%08x %08x ZF=%d\n", pszInstr, pParam1, valpar1, pRegFrame->eax, valpar, !!(eflags & X86_EFL_ZF)));1322 LogFlow(("%s %VRv=%08x eax=%08x %08x ZF=%d\n", pszInstr, pParam1, valpar1, pRegFrame->eax, valpar, !!(eflags & X86_EFL_ZF))); 1321 1323 1322 1324 /* Update guest's eflags and finish. */ … … 1356 1358 if (TRPMGetErrorCode(pVM) & X86_TRAP_PF_RW) 1357 1359 { 1358 RT GCPTR pParam1;1360 RTRCPTR pParam1; 1359 1361 uint32_t eflags; 1360 1362 … … 1363 1365 { 1364 1366 case PARMTYPE_ADDRESS: 1365 pParam1 = (RT GCPTR)param1.val.val32;1366 pParam1 = emConvertToFlatAddr(pVM, pRegFrame, pCpu, &pCpu->param1,pParam1);1367 pParam1 = (RTRCPTR)param1.val.val32; 1368 pParam1 = (RTRCPTR)emConvertToFlatAddr(pVM, pRegFrame, pCpu, &pCpu->param1, (RTGCPTR)(RTRCUINTPTR)pParam1); 1367 1369 1368 1370 /* Safety check (in theory it could cross a page boundary and fault there though) */ 1369 AssertMsgReturn(pParam1 == pvFault, ("eip=%VGv pParam1=%VGv pvFault=%VGv\n", pRegFrame->eip, pParam1, pvFault), VERR_EM_INTERPRETER);1371 AssertMsgReturn(pParam1 == (RTRCPTR)pvFault, ("eip=%VRv pParam1=%VRv pvFault=%VGv\n", pRegFrame->eip, pParam1, pvFault), VERR_EM_INTERPRETER); 1370 1372 break; 1371 1373 … … 1374 1376 } 1375 1377 1376 LogFlow(("%s %V Gv=%08x eax=%08x\n", pszInstr, pParam1, pRegFrame->eax));1378 LogFlow(("%s %VRv=%08x eax=%08x\n", pszInstr, pParam1, pRegFrame->eax)); 1377 1379 1378 1380 MMGCRamRegisterTrapHandler(pVM); … … 1427 1429 if (TRPMGetErrorCode(pVM) & X86_TRAP_PF_RW) 1428 1430 { 1429 RT GCPTR pParam1;1431 RTRCPTR pParam1; 1430 1432 uint32_t eflags; 1431 1433 #ifdef VBOX_STRICT … … 1437 1439 { 1438 1440 case PARMTYPE_ADDRESS: 1439 pParam1 = (RT GCPTR)param1.val.val32;1440 pParam1 = emConvertToFlatAddr(pVM, pRegFrame, pCpu, &pCpu->param1,pParam1);1441 pParam1 = (RTRCPTR)param1.val.val32; 1442 pParam1 = (RTRCPTR)emConvertToFlatAddr(pVM, pRegFrame, pCpu, &pCpu->param1, (RTGCPTR)(RTRCUINTPTR)pParam1); 1441 1443 1442 1444 /* Safety check (in theory it could cross a page boundary and fault there though) */ 1443 AssertMsgReturn(pParam1 == pvFault, ("eip=%VGv pParam1=%VGv pvFault=%VGv\n", pRegFrame->eip, pParam1, pvFault), VERR_EM_INTERPRETER);1445 AssertMsgReturn(pParam1 == (RTRCPTR)pvFault, ("eip=%VRv pParam1=%VRv pvFault=%VGv\n", pRegFrame->eip, pParam1, pvFault), VERR_EM_INTERPRETER); 1444 1446 break; 1445 1447 … … 1448 1450 } 1449 1451 1450 LogFlow(("XAdd %V Gv=%08x reg=%08x\n", pParam1, *pParamReg2));1452 LogFlow(("XAdd %VRv=%08x reg=%08x\n", pParam1, *pParamReg2)); 1451 1453 1452 1454 MMGCRamRegisterTrapHandler(pVM); -
trunk/src/VBox/VMM/VMMAll/PGMAll.cpp
r9282 r9300 299 299 PGMDECL(int) PGMTrap0eHandler(PVM pVM, RTGCUINT uErr, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault) 300 300 { 301 LogFlow(("PGMTrap0eHandler: uErr=%#x pvFault=%VGv eip=% VGv\n", (uint32_t)uErr, pvFault, pRegFrame->eip));301 LogFlow(("PGMTrap0eHandler: uErr=%#x pvFault=%VGv eip=%RX32\n", (uint32_t)uErr, pvFault, pRegFrame->eip)); 302 302 STAM_PROFILE_START(&pVM->pgm.s.StatGCTrap0e, a); 303 303 STAM_STATS({ pVM->pgm.s.CTXSUFF(pStatTrap0eAttribution) = NULL; } ); -
trunk/src/VBox/VMM/VMMGC/TRPMGCHandlers.cpp
r9295 r9300 773 773 static int trpmGCTrap0dHandler(PVM pVM, PTRPM pTrpm, PCPUMCTXCORE pRegFrame) 774 774 { 775 LogFlow(("trpmGCTrap0dHandler: cs:eip=%RTsel:%VRv uErr=% RX32\n", pRegFrame->ss, pRegFrame->eip, pTrpm->uActiveErrorCode));775 LogFlow(("trpmGCTrap0dHandler: cs:eip=%RTsel:%VRv uErr=%VGv\n", pRegFrame->ss, pRegFrame->eip, pTrpm->uActiveErrorCode)); 776 776 777 777 /* -
trunk/src/VBox/VMM/VMMGC/TRPMGCHandlersA.asm
r8155 r9300 339 339 mov dword [eax + TRPM.uActiveCR2], edx 340 340 341 %if GC_ARCH_BITS == 64 342 ; zero out the high dword 343 mov dword [eax + TRPM.uActiveErrorCode + 4], 0 344 mov dword [eax + TRPM.uActiveCR2 + 4], 0 345 %endif 346 341 347 ; 342 348 ; Check if we're in Hypervisor when this happend. … … 808 814 mov [eax + TRPM.uActiveErrorCode], edx 809 815 mov [eax + TRPM.uActiveCR2], edx 816 %if GC_ARCH_BITS == 64 817 ; zero out the high dword 818 mov dword [eax + TRPM.uActiveErrorCode + 4], 0 819 mov dword [eax + TRPM.uActiveCR2 + 4], 0 820 %endif 810 821 811 822 ;
Note:
See TracChangeset
for help on using the changeset viewer.

