summaryrefslogtreecommitdiff
path: root/src/sim/simulate.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/sim/simulate.cc')
-rw-r--r--src/sim/simulate.cc14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/sim/simulate.cc b/src/sim/simulate.cc
index 6962fab9f..fb785a91f 100644
--- a/src/sim/simulate.cc
+++ b/src/sim/simulate.cc
@@ -44,6 +44,10 @@
* terminate the loop. Exported to Python via SWIG.
* @return The SimLoopExitEvent that caused the loop to exit.
*/
+
+// record the clock cycle for last exit event
+Tick lastExitTick = 0;
+
SimLoopExitEvent *
simulate(Tick num_cycles)
{
@@ -67,6 +71,16 @@ simulate(Tick num_cycles)
Event *exit_event = mainEventQueue.serviceOne();
if (exit_event != NULL) {
+ /*
+ * if there are multiple exit events in the same cycle, drain the
+ * following exit events since gem5 only allows one * exit event in
+ * a cycle
+ */
+ if (lastExitTick == curTick())
+ continue;
+ else
+ lastExitTick = curTick();
+
// hit some kind of exit event; return to Python
// event must be subclass of SimLoopExitEvent...
SimLoopExitEvent *se_event;