summaryrefslogtreecommitdiff
path: root/src/sim
diff options
context:
space:
mode:
authorAndreas Sandberg <andreas.sandberg@arm.com>2015-09-01 13:41:45 +0100
committerAndreas Sandberg <andreas.sandberg@arm.com>2015-09-01 13:41:45 +0100
commit0572dc3c6eca3acd6fc4e2e34607bd5d0ab67829 (patch)
tree376413ded3aedcffb07c365ab92742b3cd795b93 /src/sim
parent1fa7a4394c3dd8f12256952ce8c6fa46d1092e1a (diff)
downloadgem5-0572dc3c6eca3acd6fc4e2e34607bd5d0ab67829.tar.xz
sim: Remove autoserialize support for exit events
This changeset removes the support for the autoserialize parameter in GlobalSimLoopExitEvent (including exitSimLoop()) and LocalSimLoopExitEvent. Auto-serialization of the LocalSimLoopExitEvent was never used, so this is not expected to affect anything. However, it was sometimes used for GlobalSimLoopExitEvent. Unfortunately, serialization of global events has never been supported, so checkpoints with such events will currently cause simulation panics. The serialize parameter to exitSimLoop() has been left in-place to maintain API compatibility (removing it would affect m5ops). Instead of just dropping it, we now print a warning if the parameter is set and the exit event is scheduled in the future (i.e., not at the current tick).
Diffstat (limited to 'src/sim')
-rw-r--r--src/sim/sim_events.cc30
-rw-r--r--src/sim/sim_events.hh5
2 files changed, 10 insertions, 25 deletions
diff --git a/src/sim/sim_events.cc b/src/sim/sim_events.cc
index 94bd06191..cfd08f7ac 100644
--- a/src/sim/sim_events.cc
+++ b/src/sim/sim_events.cc
@@ -55,9 +55,8 @@ using namespace std;
GlobalSimLoopExitEvent::GlobalSimLoopExitEvent(Tick when,
const std::string &_cause,
- int c, Tick r, bool serialize)
- : GlobalEvent(when, Sim_Exit_Pri,
- IsExitEvent | (serialize ? AutoSerialize : 0)),
+ int c, Tick r)
+ : GlobalEvent(when, Sim_Exit_Pri, IsExitEvent),
cause(_cause), code(c), repeat(r)
{
}
@@ -83,19 +82,16 @@ void
exitSimLoop(const std::string &message, int exit_code, Tick when, Tick repeat,
bool serialize)
{
- new GlobalSimLoopExitEvent(when + simQuantum, message, exit_code, repeat,
- serialize);
-}
+ warn_if(serialize && (when != curTick() || repeat),
+ "exitSimLoop called with a delay and auto serialization. This is "
+ "currently unsupported.");
-LocalSimLoopExitEvent::LocalSimLoopExitEvent()
- : Event(Sim_Exit_Pri, IsExitEvent | AutoSerialize),
- cause(""), code(0), repeat(0)
-{
+ new GlobalSimLoopExitEvent(when + simQuantum, message, exit_code, repeat);
}
LocalSimLoopExitEvent::LocalSimLoopExitEvent(const std::string &_cause, int c,
- Tick r, bool serialize)
- : Event(Sim_Exit_Pri, IsExitEvent | (serialize ? AutoSerialize : 0)),
+ Tick r)
+ : Event(Sim_Exit_Pri, IsExitEvent),
cause(_cause), code(c), repeat(r)
{
}
@@ -119,7 +115,6 @@ LocalSimLoopExitEvent::description() const
void
LocalSimLoopExitEvent::serialize(CheckpointOut &cp) const
{
- paramOut(cp, "type", string("SimLoopExitEvent"));
Event::serialize(cp);
SERIALIZE_SCALAR(cause);
@@ -137,15 +132,6 @@ LocalSimLoopExitEvent::unserialize(CheckpointIn &cp)
UNSERIALIZE_SCALAR(repeat);
}
-Serializable *
-LocalSimLoopExitEvent::createForUnserialize(CheckpointIn &cp,
- const string &section)
-{
- return new LocalSimLoopExitEvent();
-}
-
-REGISTER_SERIALIZEABLE("LocalSimLoopExitEvent", LocalSimLoopExitEvent)
-
//
// constructor: automatically schedules at specified time
//
diff --git a/src/sim/sim_events.hh b/src/sim/sim_events.hh
index 7c2393010..8a384019a 100644
--- a/src/sim/sim_events.hh
+++ b/src/sim/sim_events.hh
@@ -63,7 +63,7 @@ class GlobalSimLoopExitEvent : public GlobalEvent
// non-scheduling version for createForUnserialize()
GlobalSimLoopExitEvent();
GlobalSimLoopExitEvent(Tick when, const std::string &_cause, int c,
- Tick repeat = 0, bool serialize = false);
+ Tick repeat = 0);
const std::string getCause() const { return cause; }
const int getCode() const { return code; }
@@ -83,8 +83,7 @@ class LocalSimLoopExitEvent : public Event
public:
LocalSimLoopExitEvent();
- LocalSimLoopExitEvent(const std::string &_cause, int c, Tick repeat = 0,
- bool serialize = false);
+ LocalSimLoopExitEvent(const std::string &_cause, int c, Tick repeat = 0);
const std::string getCause() const { return cause; }
const int getCode() const { return code; }