Changeset 60185 in vbox for trunk/src/VBox
- Timestamp:
- Mar 24, 2016 5:39:40 PM (9 years ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r59986 r60185 763 763 764 764 /** 765 * Calculates the CPU mode. 766 * 767 * This is mainly for updating IEMCPU::enmCpuMode. 768 * 769 * @returns CPU mode. 770 * @param pCtx The register context for the CPU. 771 */ 772 DECLINLINE(IEMMODE) iemCalcCpuMode(PCPUMCTX pCtx) 773 { 774 if (CPUMIsGuestIn64BitCodeEx(pCtx)) 775 return IEMMODE_64BIT; 776 if (pCtx->cs.Attr.n.u1DefBig) /** @todo check if this is correct... */ 777 return IEMMODE_32BIT; 778 return IEMMODE_16BIT; 779 } 780 781 782 /** 765 783 * Initializes the execution state. 766 784 * 767 785 * @param pIemCpu The per CPU IEM state. 768 786 * @param fBypassHandlers Whether to bypass access handlers. 787 * 788 * @remarks Callers of this must call iemUninitExec() to undo potentially fatal 789 * side-effects in strict builds. 769 790 */ 770 791 DECLINLINE(void) iemInitExec(PIEMCPU pIemCpu, bool fBypassHandlers) … … 791 812 #endif 792 813 pIemCpu->uCpl = CPUMGetGuestCPL(pVCpu); 793 IEMMODE enmMode = CPUMIsGuestIn64BitCodeEx(pCtx) 794 ? IEMMODE_64BIT 795 : pCtx->cs.Attr.n.u1DefBig /** @todo check if this is correct... */ 796 ? IEMMODE_32BIT 797 : IEMMODE_16BIT; 798 pIemCpu->enmCpuMode = enmMode; 814 pIemCpu->enmCpuMode = iemCalcCpuMode(pCtx); 799 815 #ifdef VBOX_STRICT 800 816 pIemCpu->enmDefAddrMode = (IEMMODE)0xc0fe; … … 823 839 CPUMRawLeave(pVCpu, VINF_SUCCESS); 824 840 #endif 841 842 #ifdef IEM_VERIFICATION_MODE_FULL 843 pIemCpu->fNoRemSavedByExec = pIemCpu->fNoRem; 844 pIemCpu->fNoRem = true; 845 #endif 846 } 847 848 849 /** 850 * Counterpart to #iemInitExec that undoes evil strict-build stuff. 851 * 852 * @param pIemCpu The per CPU IEM state. 853 */ 854 DECLINLINE(void) iemUninitExec(PIEMCPU pIemCpu) 855 { 856 #ifdef IEM_VERIFICATION_MODE_FULL 857 pIemCpu->fNoRem = pIemCpu->fNoRemSavedByExec; 858 #endif 859 #ifdef VBOX_STRICT 860 pIemCpu->cbOpcode = 0; 861 #else 862 NOREF(pIemCpu); 863 #endif 825 864 } 826 865 … … 859 898 pIemCpu->uCpl = pIemCpu->uInjectCpl; 860 899 #endif 861 IEMMODE enmMode = CPUMIsGuestIn64BitCodeEx(pCtx) 862 ? IEMMODE_64BIT 863 : pCtx->cs.Attr.n.u1DefBig /** @todo check if this is correct... */ 864 ? IEMMODE_32BIT 865 : IEMMODE_16BIT; 900 IEMMODE enmMode = iemCalcCpuMode(pCtx); 866 901 pIemCpu->enmCpuMode = enmMode; 867 902 pIemCpu->enmDefAddrMode = enmMode; /** @todo check if this is correct... */ … … 1008 1043 { 1009 1044 uint8_t cbNew = cbOldOpcodes - (uint8_t)offPrevOpcodes; 1045 Assert(cbNew <= RT_ELEMENTS(pIemCpu->abOpcode)); 1010 1046 memmove(&pIemCpu->abOpcode[0], &pIemCpu->abOpcode[offPrevOpcodes], cbNew); 1011 1047 pIemCpu->cbOpcode = cbNew; … … 2101 2137 VBOXSTRICTRC rcStrict; 2102 2138 Assert(uCpl < 4); 2103 *puEsp = 0; /* make gcc happy */2104 *pSelSS = 0; /* make gcc happy */2105 2139 2106 2140 switch (pCtx->tr.Attr.n.u4Type) … … 2119 2153 } 2120 2154 2155 /** @todo check actual access pattern here. */ 2121 2156 uint32_t u32Tmp = 0; /* gcc maybe... */ 2122 2157 rcStrict = iemMemFetchSysU32(pIemCpu, &u32Tmp, UINT8_MAX, pCtx->tr.u64Base + off); … … 2143 2178 } 2144 2179 2180 /** @todo check actual access pattern here. */ 2145 2181 uint64_t u64Tmp; 2146 2182 rcStrict = iemMemFetchSysU64(pIemCpu, &u64Tmp, UINT8_MAX, pCtx->tr.u64Base + off); … … 2155 2191 2156 2192 default: 2157 AssertFailedReturn(VERR_IEM_IPE_4); 2158 } 2193 AssertFailed(); 2194 rcStrict = VERR_IEM_IPE_4; 2195 break; 2196 } 2197 2198 *puEsp = 0; /* make gcc happy */ 2199 *pSelSS = 0; /* make gcc happy */ 2159 2200 return rcStrict; 2160 2201 } … … 3566 3607 * - 16-bit TSS, 32-bit handler 3567 3608 * - 32-bit TSS, 16-bit handler */ 3568 pCtx->rsp = uNewEsp - cbStackFrame; 3609 if (!pCtx->ss.Attr.n.u1DefBig) 3610 pCtx->sp = (uint16_t)(uNewEsp - cbStackFrame); 3611 else 3612 pCtx->rsp = uNewEsp - cbStackFrame; 3569 3613 pIemCpu->uCpl = uNewCpl; 3570 3614 … … 6419 6463 DECLINLINE(int) iemMapLookup(PIEMCPU pIemCpu, void *pvMem, uint32_t fAccess) 6420 6464 { 6465 Assert(pIemCpu->cActiveMappings < RT_ELEMENTS(pIemCpu->aMemMappings)); 6421 6466 fAccess &= IEM_ACCESS_WHAT_MASK | IEM_ACCESS_TYPE_MASK; 6422 6467 if ( pIemCpu->aMemMappings[0].pv == pvMem … … 6973 7018 Assert(cbMem <= 64 || cbMem == 512 || cbMem == 108 || cbMem == 104 || cbMem == 94); /* 512 is the max! */ 6974 7019 Assert(~(fAccess & ~(IEM_ACCESS_TYPE_MASK | IEM_ACCESS_WHAT_MASK))); 7020 Assert(pIemCpu->cActiveMappings < RT_ELEMENTS(pIemCpu->aMemMappings)); 6975 7021 6976 7022 unsigned iMemMap = pIemCpu->iNextMapping; … … 7070 7116 if (fAccess != IEM_ACCESS_INVALID) 7071 7117 { 7118 AssertMsg(!(fAccess & ~IEM_ACCESS_VALID_MASK) && fAccess != 0, ("%#x\n", fAccess)); 7072 7119 pIemCpu->aMemMappings[iMemMap].fAccess = IEM_ACCESS_INVALID; 7073 7120 if (!(fAccess & IEM_ACCESS_BOUNCE_BUFFERED)) … … 9993 10040 pEvtRec->enmEvent = IEMVERIFYEVENT_IOPORT_READ; 9994 10041 pEvtRec->u.IOPortRead.Port = Port; 9995 pEvtRec->u.IOPortRead.cbValue = (uint 32_t)cbValue;10042 pEvtRec->u.IOPortRead.cbValue = (uint8_t)cbValue; 9996 10043 pEvtRec->pNext = *pIemCpu->ppOtherEvtRecNext; 9997 10044 *pIemCpu->ppOtherEvtRecNext = pEvtRec; … … 10012 10059 pEvtRec->enmEvent = IEMVERIFYEVENT_IOPORT_WRITE; 10013 10060 pEvtRec->u.IOPortWrite.Port = Port; 10014 pEvtRec->u.IOPortWrite.cbValue = (uint 32_t)cbValue;10061 pEvtRec->u.IOPortWrite.cbValue = (uint8_t)cbValue; 10015 10062 pEvtRec->u.IOPortWrite.u32Value = u32Value; 10016 10063 pEvtRec->pNext = *pIemCpu->ppOtherEvtRecNext; … … 10021 10068 VMM_INT_DECL(void) IEMNotifyIOPortReadString(PVM pVM, RTIOPORT Port, void *pvDst, RTGCUINTREG cTransfers, size_t cbValue) 10022 10069 { 10023 AssertFailed(); 10070 PVMCPU pVCpu = VMMGetCpu(pVM); 10071 if (!pVCpu) 10072 return; 10073 PIEMCPU pIemCpu = &pVCpu->iem.s; 10074 PIEMVERIFYEVTREC pEvtRec = iemVerifyAllocRecord(pIemCpu); 10075 if (!pEvtRec) 10076 return; 10077 pEvtRec->enmEvent = IEMVERIFYEVENT_IOPORT_STR_READ; 10078 pEvtRec->u.IOPortStrRead.Port = Port; 10079 pEvtRec->u.IOPortStrRead.cbValue = (uint8_t)cbValue; 10080 pEvtRec->u.IOPortStrRead.cTransfers = cTransfers; 10081 pEvtRec->pNext = *pIemCpu->ppOtherEvtRecNext; 10082 *pIemCpu->ppOtherEvtRecNext = pEvtRec; 10024 10083 } 10025 10084 … … 10027 10086 VMM_INT_DECL(void) IEMNotifyIOPortWriteString(PVM pVM, RTIOPORT Port, void const *pvSrc, RTGCUINTREG cTransfers, size_t cbValue) 10028 10087 { 10029 AssertFailed(); 10088 PVMCPU pVCpu = VMMGetCpu(pVM); 10089 if (!pVCpu) 10090 return; 10091 PIEMCPU pIemCpu = &pVCpu->iem.s; 10092 PIEMVERIFYEVTREC pEvtRec = iemVerifyAllocRecord(pIemCpu); 10093 if (!pEvtRec) 10094 return; 10095 pEvtRec->enmEvent = IEMVERIFYEVENT_IOPORT_STR_WRITE; 10096 pEvtRec->u.IOPortStrWrite.Port = Port; 10097 pEvtRec->u.IOPortStrWrite.cbValue = (uint8_t)cbValue; 10098 pEvtRec->u.IOPortStrWrite.cTransfers = cTransfers; 10099 pEvtRec->pNext = *pIemCpu->ppOtherEvtRecNext; 10100 *pIemCpu->ppOtherEvtRecNext = pEvtRec; 10030 10101 } 10031 10102 … … 10047 10118 pEvtRec->enmEvent = IEMVERIFYEVENT_IOPORT_READ; 10048 10119 pEvtRec->u.IOPortRead.Port = Port; 10049 pEvtRec->u.IOPortRead.cbValue = (uint 32_t)cbValue;10120 pEvtRec->u.IOPortRead.cbValue = (uint8_t)cbValue; 10050 10121 pEvtRec->pNext = *pIemCpu->ppIemEvtRecNext; 10051 10122 *pIemCpu->ppIemEvtRecNext = pEvtRec; … … 10073 10144 pEvtRec->enmEvent = IEMVERIFYEVENT_IOPORT_WRITE; 10074 10145 pEvtRec->u.IOPortWrite.Port = Port; 10075 pEvtRec->u.IOPortWrite.cbValue = (uint 32_t)cbValue;10146 pEvtRec->u.IOPortWrite.cbValue = (uint8_t)cbValue; 10076 10147 pEvtRec->u.IOPortWrite.u32Value = u32Value; 10077 10148 pEvtRec->pNext = *pIemCpu->ppIemEvtRecNext; … … 10153 10224 pEvtRec->u.IOPortWrite.cbValue, 10154 10225 pEvtRec->u.IOPortWrite.u32Value); 10226 break; 10227 case IEMVERIFYEVENT_IOPORT_STR_READ: 10228 RTAssertMsg2Add("I/O PORT STRING READ from %#6x, %d bytes, %#x times\n", 10229 pEvtRec->u.IOPortStrWrite.Port, 10230 pEvtRec->u.IOPortStrWrite.cbValue, 10231 pEvtRec->u.IOPortStrWrite.cTransfers); 10232 break; 10233 case IEMVERIFYEVENT_IOPORT_STR_WRITE: 10234 RTAssertMsg2Add("I/O PORT STRING WRITE to %#6x, %d bytes, %#x times\n", 10235 pEvtRec->u.IOPortStrWrite.Port, 10236 pEvtRec->u.IOPortStrWrite.cbValue, 10237 pEvtRec->u.IOPortStrWrite.cTransfers); 10155 10238 break; 10156 10239 case IEMVERIFYEVENT_RAM_READ: … … 10583 10666 { 10584 10667 case IEMVERIFYEVENT_IOPORT_READ: 10585 fEquals = pIemRec->u.IOPortRead.Port == pOtherRec->u.IOPortRead.Port10586 && pIemRec->u.IOPortRead.cbValue == pOtherRec->u.IOPortRead.cbValue;10668 fEquals = pIemRec->u.IOPortRead.Port == pOtherRec->u.IOPortRead.Port 10669 && pIemRec->u.IOPortRead.cbValue == pOtherRec->u.IOPortRead.cbValue; 10587 10670 break; 10588 10671 case IEMVERIFYEVENT_IOPORT_WRITE: 10589 fEquals = pIemRec->u.IOPortWrite.Port == pOtherRec->u.IOPortWrite.Port 10590 && pIemRec->u.IOPortWrite.cbValue == pOtherRec->u.IOPortWrite.cbValue 10591 && pIemRec->u.IOPortWrite.u32Value == pOtherRec->u.IOPortWrite.u32Value; 10672 fEquals = pIemRec->u.IOPortWrite.Port == pOtherRec->u.IOPortWrite.Port 10673 && pIemRec->u.IOPortWrite.cbValue == pOtherRec->u.IOPortWrite.cbValue 10674 && pIemRec->u.IOPortWrite.u32Value == pOtherRec->u.IOPortWrite.u32Value; 10675 break; 10676 case IEMVERIFYEVENT_IOPORT_STR_READ: 10677 fEquals = pIemRec->u.IOPortStrRead.Port == pOtherRec->u.IOPortStrRead.Port 10678 && pIemRec->u.IOPortStrRead.cbValue == pOtherRec->u.IOPortStrRead.cbValue 10679 && pIemRec->u.IOPortStrRead.cTransfers == pOtherRec->u.IOPortStrRead.cTransfers; 10680 break; 10681 case IEMVERIFYEVENT_IOPORT_STR_WRITE: 10682 fEquals = pIemRec->u.IOPortStrWrite.Port == pOtherRec->u.IOPortStrWrite.Port 10683 && pIemRec->u.IOPortStrWrite.cbValue == pOtherRec->u.IOPortStrWrite.cbValue 10684 && pIemRec->u.IOPortStrWrite.cTransfers == pOtherRec->u.IOPortStrWrite.cTransfers; 10592 10685 break; 10593 10686 case IEMVERIFYEVENT_RAM_READ: 10594 fEquals = pIemRec->u.RamRead.GCPhys == pOtherRec->u.RamRead.GCPhys10595 && pIemRec->u.RamRead.cb == pOtherRec->u.RamRead.cb;10687 fEquals = pIemRec->u.RamRead.GCPhys == pOtherRec->u.RamRead.GCPhys 10688 && pIemRec->u.RamRead.cb == pOtherRec->u.RamRead.cb; 10596 10689 break; 10597 10690 case IEMVERIFYEVENT_RAM_WRITE: 10598 fEquals = pIemRec->u.RamWrite.GCPhys == pOtherRec->u.RamWrite.GCPhys10599 && pIemRec->u.RamWrite.cb == pOtherRec->u.RamWrite.cb10691 fEquals = pIemRec->u.RamWrite.GCPhys == pOtherRec->u.RamWrite.GCPhys 10692 && pIemRec->u.RamWrite.cb == pOtherRec->u.RamWrite.cb 10600 10693 && !memcmp(pIemRec->u.RamWrite.ab, pOtherRec->u.RamWrite.ab, pIemRec->u.RamWrite.cb); 10601 10694 break; … … 11345 11438 } 11346 11439 11440 iemUninitExec(pIemCpu); 11347 11441 return iemExecStatusCodeFiddling(pIemCpu, rcStrict); 11348 11442 } … … 11462 11556 } 11463 11557 11558 iemUninitExec(pIemCpu); 11464 11559 return iemExecStatusCodeFiddling(pIemCpu, rcStrict); 11465 11560 } … … 11487 11582 iemInitExec(pIemCpu, false /*fBypassHandlers*/); 11488 11583 VBOXSTRICTRC rcStrict = IEM_CIMPL_CALL_2(iemCImpl_mov_Cd_Rd, iCrReg, iGReg); 11584 iemUninitExec(pIemCpu); 11489 11585 return iemExecStatusCodeFiddling(pIemCpu, rcStrict); 11490 11586 } … … 11511 11607 iemInitExec(pIemCpu, false /*fBypassHandlers*/); 11512 11608 VBOXSTRICTRC rcStrict = IEM_CIMPL_CALL_2(iemCImpl_mov_Rd_Cd, iGReg, iCrReg); 11609 iemUninitExec(pIemCpu); 11513 11610 return iemExecStatusCodeFiddling(pIemCpu, rcStrict); 11514 11611 } … … 11531 11628 iemInitExec(pIemCpu, false /*fBypassHandlers*/); 11532 11629 VBOXSTRICTRC rcStrict = IEM_CIMPL_CALL_0(iemCImpl_clts); 11630 iemUninitExec(pIemCpu); 11533 11631 return iemExecStatusCodeFiddling(pIemCpu, rcStrict); 11534 11632 } … … 11552 11650 iemInitExec(pIemCpu, false /*fBypassHandlers*/); 11553 11651 VBOXSTRICTRC rcStrict = IEM_CIMPL_CALL_1(iemCImpl_lmsw, uValue); 11652 iemUninitExec(pIemCpu); 11554 11653 return iemExecStatusCodeFiddling(pIemCpu, rcStrict); 11555 11654 } … … 11574 11673 iemInitExec(pIemCpu, false /*fBypassHandlers*/); 11575 11674 VBOXSTRICTRC rcStrict = IEM_CIMPL_CALL_0(iemCImpl_xsetbv); 11675 iemUninitExec(pIemCpu); 11576 11676 return iemExecStatusCodeFiddling(pIemCpu, rcStrict); 11577 11677 } -
trunk/src/VBox/VMM/VMMAll/IEMAllCImpl.cpp.h
r60118 r60185 1176 1176 pCtx->cs.u32Limit = cbLimit; 1177 1177 pCtx->cs.u64Base = u64Base; 1178 pIemCpu->enmCpuMode = iemCalcCpuMode(pCtx); 1178 1179 } 1179 1180 else … … 1506 1507 pCtx->cs.u32Limit = cbLimit; 1507 1508 pCtx->cs.u64Base = u64Base; 1509 pIemCpu->enmCpuMode = iemCalcCpuMode(pCtx); 1508 1510 } 1509 1511 else … … 1597 1599 pCtx->cs.u32Limit = cbLimit; 1598 1600 pCtx->cs.u64Base = u64Base; 1601 pIemCpu->enmCpuMode = iemCalcCpuMode(pCtx); 1599 1602 } 1600 1603 } … … 1815 1818 pCtx->cs.u32Limit = cbLimit; 1816 1819 pCtx->cs.u64Base = u64Base; 1820 pIemCpu->enmCpuMode = iemCalcCpuMode(pCtx); 1817 1821 pCtx->eflags.Bits.u1RF = 0; 1818 1822 /** @todo check if the hidden bits are loaded correctly for 64-bit … … 2033 2037 pCtx->cs.u32Limit = cbLimit; 2034 2038 pCtx->cs.u64Base = u64Base; 2039 pIemCpu->enmCpuMode = iemCalcCpuMode(pCtx); 2035 2040 pCtx->eflags.Bits.u1RF = 0; 2036 2041 /** @todo check if the hidden bits are loaded correctly for 64-bit … … 2281 2286 uint32_t cbLimitCs = X86DESC_LIMIT_G(&DescCs.Legacy); 2282 2287 2283 if (pIemCpu->enmCpuMode == IEMMODE_64BIT) 2288 /** @todo Testcase: Is this correct? */ 2289 if ( DescCs.Legacy.Gen.u1Long 2290 && IEM_IS_LONG_MODE(pIemCpu) ) 2284 2291 { 2285 2292 if (!IEM_IS_CANONICAL(uNewRip)) … … 2340 2347 pCtx->cs.u32Limit = cbLimitCs; 2341 2348 pCtx->cs.u64Base = u64Base; 2349 pIemCpu->enmCpuMode = iemCalcCpuMode(pCtx); 2342 2350 pCtx->rsp = uNewOuterRsp; 2343 2351 pCtx->ss.Sel = uNewOuterSs; … … 2375 2383 uint32_t cbLimitCs = X86DESC_LIMIT_G(&DescCs.Legacy); 2376 2384 2377 if (pIemCpu->enmCpuMode == IEMMODE_64BIT) 2385 /** @todo Testcase: Is this correct? */ 2386 if ( DescCs.Legacy.Gen.u1Long 2387 && IEM_IS_LONG_MODE(pIemCpu) ) 2378 2388 { 2379 2389 if (!IEM_IS_CANONICAL(uNewRip)) … … 2426 2436 /** @todo check if the hidden bits are loaded correctly for 64-bit 2427 2437 * mode. */ 2438 pIemCpu->enmCpuMode = iemCalcCpuMode(pCtx); 2428 2439 if (cbPop) 2429 2440 iemRegAddToRsp(pIemCpu, pCtx, cbPop); … … 3234 3245 pCtx->cs.u32Limit = cbLimitCS; 3235 3246 pCtx->cs.u64Base = X86DESC_BASE(&DescCS.Legacy); 3247 pIemCpu->enmCpuMode = iemCalcCpuMode(pCtx); 3236 3248 if (!pCtx->ss.Attr.n.u1DefBig) 3237 3249 pCtx->sp = (uint16_t)uNewESP; … … 3304 3316 pCtx->cs.u32Limit = cbLimitCS; 3305 3317 pCtx->cs.u64Base = X86DESC_BASE(&DescCS.Legacy); 3318 pIemCpu->enmCpuMode = iemCalcCpuMode(pCtx); 3306 3319 pCtx->rsp = uNewRsp; 3307 3320 /* Done! */ … … 3565 3578 pCtx->cs.u32Limit = cbLimitCS; 3566 3579 pCtx->cs.u64Base = X86DESC_BASE(&DescCS.Legacy); 3580 pIemCpu->enmCpuMode = iemCalcCpuMode(pCtx); 3567 3581 if (pCtx->cs.Attr.n.u1Long || pCtx->cs.Attr.n.u1DefBig) 3568 3582 pCtx->rsp = uNewRsp; -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h
r58994 r60185 12206 12206 FNIEMOP_DEF(iemOp_int_3) 12207 12207 { 12208 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12208 12209 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_int, X86_XCPT_BP, true /*fIsBpInstr*/); 12209 12210 } … … 12214 12215 { 12215 12216 uint8_t u8Int; IEM_OPCODE_GET_NEXT_U8(&u8Int); 12217 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 12216 12218 return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_int, u8Int, false /*fIsBpInstr*/); 12217 12219 } -
trunk/src/VBox/VMM/VMMAll/TMAllCpu.cpp
r58126 r60185 26 26 #include <VBox/vmm/vm.h> 27 27 #include <VBox/vmm/gim.h> 28 #include <VBox/vmm/dbgf.h> 28 29 #include <VBox/sup.h> 29 30 … … 238 239 VMM_INT_DECL(bool) TMCpuTickCanUseRealTSC(PVM pVM, PVMCPU pVCpu, uint64_t *poffRealTsc, bool *pfParavirtTsc) 239 240 { 240 Assert(pVCpu->tm.s.fTSCTicking );241 Assert(pVCpu->tm.s.fTSCTicking || DBGFIsStepping(pVCpu)); 241 242 242 243 *pfParavirtTsc = pVM->tm.s.fParavirtTscEnabled; … … 350 351 bool *pfOffsettedTsc, bool *pfParavirtTsc) 351 352 { 352 Assert(pVCpu->tm.s.fTSCTicking );353 Assert(pVCpu->tm.s.fTSCTicking || DBGFIsStepping(pVCpu)); 353 354 354 355 *pfParavirtTsc = pVM->tm.s.fParavirtTscEnabled; -
trunk/src/VBox/VMM/include/IEMInternal.h
r58127 r60185 175 175 IEMVERIFYEVENT_IOPORT_READ, 176 176 IEMVERIFYEVENT_IOPORT_WRITE, 177 IEMVERIFYEVENT_IOPORT_STR_READ, 178 IEMVERIFYEVENT_IOPORT_STR_WRITE, 177 179 IEMVERIFYEVENT_RAM_WRITE, 178 180 IEMVERIFYEVENT_RAM_READ … … 198 200 { 199 201 RTIOPORT Port; 200 uint 32_tcbValue;202 uint8_t cbValue; 201 203 } IOPortRead; 202 204 … … 205 207 { 206 208 RTIOPORT Port; 207 uint 32_tcbValue;209 uint8_t cbValue; 208 210 uint32_t u32Value; 209 211 } IOPortWrite; 212 213 /** IEMVERIFYEVENT_IOPORT_STR_READ */ 214 struct 215 { 216 RTIOPORT Port; 217 uint8_t cbValue; 218 RTGCUINTREG cTransfers; 219 } IOPortStrRead; 220 221 /** IEMVERIFYEVENT_IOPORT_STR_WRITE */ 222 struct 223 { 224 RTIOPORT Port; 225 uint8_t cbValue; 226 RTGCUINTREG cTransfers; 227 } IOPortStrWrite; 210 228 211 229 /** IEMVERIFYEVENT_RAM_READ */ … … 303 321 * This is used to skip past really slow bits. */ 304 322 bool fNoRem; 323 /** Saved fNoRem flag used by #iemInitExec and #iemUninitExec. */ 324 bool fNoRemSavedByExec; 305 325 /** Indicates that RAX and RDX differences should be ignored since RDTSC 306 326 * and RDTSCP are timing sensitive. */ … … 488 508 /** Used in aMemMappings to indicate that the entry is bounce buffered. */ 489 509 #define IEM_ACCESS_BOUNCE_BUFFERED UINT32_C(0x00000200) 510 /** Valid bit mask. */ 511 #define IEM_ACCESS_VALID_MASK UINT32_C(0x000003ff) 490 512 /** Read+write data alias. */ 491 513 #define IEM_ACCESS_DATA_RW (IEM_ACCESS_TYPE_READ | IEM_ACCESS_TYPE_WRITE | IEM_ACCESS_WHAT_DATA)
Note:
See TracChangeset
for help on using the changeset viewer.