Changeset 72564 in vbox for trunk/src/VBox/VMM/VMMRC
- Timestamp:
- Jun 15, 2018 12:56:01 PM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 123058
- Location:
- trunk/src/VBox/VMM/VMMRC
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMRC/IOMRC.cpp
r69111 r72564 218 218 { 219 219 case OP_IN: 220 EMHistoryUpdateFlagsAndType(pVCpu, EMEXIT_MAKE_FLAGS_AND_TYPE(EMEXIT_F_KIND_EM, EMEXITTYPE_IO_PORT_READ)); 220 221 return iomRCInterpretIN(pVM, pVCpu, pRegFrame, pCpu); 221 222 222 223 case OP_OUT: 224 EMHistoryUpdateFlagsAndType(pVCpu, EMEXIT_MAKE_FLAGS_AND_TYPE(EMEXIT_F_KIND_EM, EMEXITTYPE_IO_PORT_WRITE)); 223 225 return iomRCInterpretOUT(pVM, pVCpu, pRegFrame, pCpu); 224 226 225 227 case OP_INSB: 226 228 case OP_INSWD: 229 EMHistoryUpdateFlagsAndType(pVCpu, EMEXIT_MAKE_FLAGS_AND_TYPE(EMEXIT_F_KIND_EM, EMEXITTYPE_IO_PORT_STR_READ)); 227 230 return iomRCInterpretINS(pVCpu, pCpu); 228 231 229 232 case OP_OUTSB: 230 233 case OP_OUTSWD: 234 EMHistoryUpdateFlagsAndType(pVCpu, EMEXIT_MAKE_FLAGS_AND_TYPE(EMEXIT_F_KIND_EM, EMEXITTYPE_IO_PORT_STR_WRITE)); 231 235 return iomRCInterpretOUTS(pVCpu, pCpu); 232 236 -
trunk/src/VBox/VMM/VMMRC/TRPMRCHandlers.cpp
r72559 r72564 845 845 * Try handle it here, if not return to HC and emulate/interpret it there. 846 846 */ 847 switch (pCpu->pCurInstr->uOpcode) 847 uint16_t const uOpcode = pCpu->pCurInstr->uOpcode; 848 switch (uOpcode) 848 849 { 849 850 case OP_INT3: … … 856 857 case OP_INT: 857 858 { 859 EMHistoryUpdateFlagsAndType(pVCpu, EMEXIT_MAKE_FLAGS_AND_TYPE(EMEXIT_F_KIND_EM, EMEXITTYPE_INT)); 858 860 Assert(pCpu->Param1.fUse & DISUSE_IMMEDIATE8); 859 861 Assert(!(PATMIsPatchGCAddr(pVM, PC))); … … 888 890 889 891 case OP_HLT: 892 EMHistoryUpdateFlagsAndType(pVCpu, EMEXIT_MAKE_FLAGS_AND_TYPE(EMEXIT_F_KIND_EM, EMEXITTYPE_HLT)); 893 890 894 /* If it's in patch code, defer to ring-3. */ 891 895 if (PATMIsPatchGCAddr(pVM, PC)) … … 908 912 if ( !PATMIsPatchGCAddr(pVM, PC) 909 913 && !CSAMIsKnownDangerousInstr(pVM, PC)) 914 { 915 if (uOpcode == OP_MOV_CR) 916 EMHistoryUpdateFlagsAndType(pVCpu, EMEXIT_MAKE_FLAGS_AND_TYPE(EMEXIT_F_KIND_EM, EMEXITTYPE_MOV_CRX)); 917 else 918 EMHistoryUpdateFlagsAndType(pVCpu, EMEXIT_MAKE_FLAGS_AND_TYPE(EMEXIT_F_KIND_EM, EMEXITTYPE_MOV_DRX)); 910 919 break; 920 } 911 921 RT_FALL_THRU(); 912 922 case OP_INVLPG: … … 920 930 case OP_WRMSR: 921 931 { 932 /* Update history. */ 933 switch (uOpcode) 934 { 935 case OP_MOV_CR: 936 EMHistoryUpdateFlagsAndType(pVCpu, EMEXIT_MAKE_FLAGS_AND_TYPE(EMEXIT_F_KIND_EM, EMEXITTYPE_MOV_CRX)); 937 break; 938 case OP_MOV_DR: 939 EMHistoryUpdateFlagsAndType(pVCpu, EMEXIT_MAKE_FLAGS_AND_TYPE(EMEXIT_F_KIND_EM, EMEXITTYPE_MOV_DRX)); 940 break; 941 case OP_INVLPG: 942 EMHistoryUpdateFlagsAndType(pVCpu, EMEXIT_MAKE_FLAGS_AND_TYPE(EMEXIT_F_KIND_EM, EMEXITTYPE_INVLPG)); 943 break; 944 case OP_LLDT: 945 EMHistoryUpdateFlagsAndType(pVCpu, EMEXIT_MAKE_FLAGS_AND_TYPE(EMEXIT_F_KIND_EM, EMEXITTYPE_LLDT)); 946 break; 947 case OP_STI: 948 EMHistoryUpdateFlagsAndType(pVCpu, EMEXIT_MAKE_FLAGS_AND_TYPE(EMEXIT_F_KIND_EM, EMEXITTYPE_STI)); 949 break; 950 case OP_RDPMC: 951 EMHistoryUpdateFlagsAndType(pVCpu, EMEXIT_MAKE_FLAGS_AND_TYPE(EMEXIT_F_KIND_EM, EMEXITTYPE_RDPMC)); 952 break; 953 case OP_CLTS: 954 EMHistoryUpdateFlagsAndType(pVCpu, EMEXIT_MAKE_FLAGS_AND_TYPE(EMEXIT_F_KIND_EM, EMEXITTYPE_CLTS)); 955 break; 956 case OP_WBINVD: 957 EMHistoryUpdateFlagsAndType(pVCpu, EMEXIT_MAKE_FLAGS_AND_TYPE(EMEXIT_F_KIND_EM, EMEXITTYPE_CLTS)); 958 break; 959 case OP_RDMSR: 960 EMHistoryUpdateFlagsAndType(pVCpu, EMEXIT_MAKE_FLAGS_AND_TYPE(EMEXIT_F_KIND_EM, EMEXITTYPE_MSR_READ)); 961 break; 962 case OP_WRMSR: 963 EMHistoryUpdateFlagsAndType(pVCpu, EMEXIT_MAKE_FLAGS_AND_TYPE(EMEXIT_F_KIND_EM, EMEXITTYPE_MSR_WRITE)); 964 break; 965 } 966 922 967 rc = VBOXSTRICTRC_TODO(EMInterpretInstructionDisasState(pVCpu, pCpu, pRegFrame, PC, EMCODETYPE_SUPERVISOR)); 923 968 if (rc == VERR_EM_INTERPRETER) … … 952 997 TRPM_ENTER_DBG_HOOK(0xd); 953 998 954 switch (pCpu->pCurInstr->uOpcode) 999 uint16_t const uOpcode = pCpu->pCurInstr->uOpcode; 1000 switch (uOpcode) 955 1001 { 956 1002 /* … … 967 1013 case OP_INT: 968 1014 { 1015 EMHistoryUpdateFlagsAndType(pVCpu, EMEXIT_MAKE_FLAGS_AND_TYPE(EMEXIT_F_KIND_EM, EMEXITTYPE_INT)); 969 1016 Assert(pCpu->Param1.fUse & DISUSE_IMMEDIATE8); 970 1017 rc = TRPMForwardTrap(pVCpu, pRegFrame, (uint32_t)pCpu->Param1.uValue, pCpu->cbInstr, TRPM_TRAP_NO_ERRORCODE, TRPM_SOFTWARE_INT, 0xd); … … 986 1033 case OP_SYSCALL: 987 1034 case OP_SYSENTER: 1035 if (uOpcode == OP_SYSCALL) 1036 EMHistoryUpdateFlagsAndType(pVCpu, EMEXIT_MAKE_FLAGS_AND_TYPE(EMEXIT_F_KIND_EM, EMEXITTYPE_SYSCALL)); 1037 else 1038 EMHistoryUpdateFlagsAndType(pVCpu, EMEXIT_MAKE_FLAGS_AND_TYPE(EMEXIT_F_KIND_EM, EMEXITTYPE_SYSENTER)); 988 1039 #ifdef PATM_EMULATE_SYSENTER 989 1040 rc = PATMSysCall(pVM, CPUMCTX_FROM_CORE(pRegFrame), pCpu); … … 1127 1178 */ 1128 1179 if (Cpu.pCurInstr->uOpcode == OP_RDTSC) 1180 { 1181 EMHistoryUpdateFlagsAndType(pVCpu, EMEXIT_MAKE_FLAGS_AND_TYPE(EMEXIT_F_KIND_EM, EMEXITTYPE_RDTSC)); 1129 1182 return trpmGCTrap0dHandlerRdTsc(pVM, pVCpu, pRegFrame); 1183 } 1130 1184 1131 1185 /* … … 1135 1189 && (Cpu.pCurInstr->fOpType & DISOPTYPE_PORTIO)) 1136 1190 { 1191 /* IOMRCIOPortHandler updates exit history. */ 1137 1192 VBOXSTRICTRC rcStrict = IOMRCIOPortHandler(pVM, pVCpu, pRegFrame, &Cpu); 1138 1193 TRPM_EXIT_DBG_HOOK(0xd);
Note:
See TracChangeset
for help on using the changeset viewer.