Changeset 273 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Jan 24, 2007 1:54:15 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/EM.cpp
r270 r273 81 81 static int emR3RawForcedActions(PVM pVM, PCPUMCTX pCtx); 82 82 static int emR3RawExecute(PVM pVM, bool *pfFFDone); 83 DECLINLINE(int) emR3RawExecuteInstruction(PVM pVM, const char *pszPrefix );83 DECLINLINE(int) emR3RawExecuteInstruction(PVM pVM, const char *pszPrefix, int gcret = VINF_SUCCESS); 84 84 static int emR3HighPriorityPostForcedActions(PVM pVM, int rc); 85 85 static int emR3ForcedActions(PVM pVM, int rc); … … 950 950 * 951 951 * @param pVM VM handle. 952 * @param gcret GC return code 952 953 * @param pszPrefix Disassembly prefix. If not NULL we'll disassemble the 953 954 * instruction and prefix the log output with this text. 954 955 */ 955 956 #ifdef LOG_ENABLED 956 static int emR3RawExecuteInstructionWorker(PVM pVM, const char *pszPrefix)957 static int emR3RawExecuteInstructionWorker(PVM pVM, int gcret, const char *pszPrefix) 957 958 #else 958 static int emR3RawExecuteInstructionWorker(PVM pVM )959 static int emR3RawExecuteInstructionWorker(PVM pVM, int gcret) 959 960 #endif 960 961 { … … 1015 1016 Log(("PATCH: IF=1 -> emulate last instruction as it can't be interrupted!!\n")); 1016 1017 return emR3RawExecuteInstruction(pVM, "PATCHIR"); 1018 } 1019 else 1020 if (gcret == VINF_PATM_PENDING_IRQ_AFTER_IRET) 1021 { 1022 /* special case: iret, that sets IF, detected a pending irq/event */ 1023 return emR3RawExecuteInstruction(pVM, "PATCHIRET"); 1017 1024 } 1018 1025 return VINF_EM_RESCHEDULE_REM; … … 1102 1109 * @param pszPrefix Disassembly prefix. If not NULL we'll disassemble the 1103 1110 * instruction and prefix the log output with this text. 1111 * @param gcret GC return code 1104 1112 */ 1105 DECLINLINE(int) emR3RawExecuteInstruction(PVM pVM, const char *pszPrefix )1113 DECLINLINE(int) emR3RawExecuteInstruction(PVM pVM, const char *pszPrefix, int gcret) 1106 1114 { 1107 1115 #ifdef LOG_ENABLED 1108 return emR3RawExecuteInstructionWorker(pVM, pszPrefix);1116 return emR3RawExecuteInstructionWorker(pVM, gcret, pszPrefix); 1109 1117 #else 1110 return emR3RawExecuteInstructionWorker(pVM );1118 return emR3RawExecuteInstructionWorker(pVM, gcret); 1111 1119 #endif 1112 1120 } … … 1709 1717 return VINF_SUCCESS; */ 1710 1718 } 1711 else1712 if (gcret == VINF_PATM_PENDING_IRQ_AFTER_IRET)1713 {1714 /* special case: iret, that sets IF, detected a pending irq/event */1715 return emR3RawExecuteInstruction(pVM, "PATCHIRET");1716 }1717 1719 return VINF_EM_RESCHEDULE_REM; 1718 1720 } … … 2063 2065 case VINF_PATM_PATCH_TRAP_PF: 2064 2066 case VINF_PATM_PATCH_INT3: 2065 case VINF_PATM_PENDING_IRQ_AFTER_IRET:2066 2067 rc = emR3PatchTrap(pVM, pCtx, rc); 2067 2068 break; … … 2215 2216 /** @todo skip instruction and go directly to the halt state. (see REM for implementation details) */ 2216 2217 rc = emR3RawPrivileged(pVM); 2218 break; 2219 2220 case VINF_PATM_PENDING_IRQ_AFTER_IRET: 2221 rc = emR3RawExecuteInstruction(pVM, "EMUL: ", VINF_PATM_PENDING_IRQ_AFTER_IRET); 2217 2222 break; 2218 2223
Note:
See TracChangeset
for help on using the changeset viewer.