summaryrefslogtreecommitdiff
path: root/src/sim/serialize.hh
diff options
context:
space:
mode:
authorAndreas Sandberg <andreas.sandberg@arm.com>2015-07-07 09:51:04 +0100
committerAndreas Sandberg <andreas.sandberg@arm.com>2015-07-07 09:51:04 +0100
commit888ec455cba4174863be5ed9148aaf093a061101 (patch)
treeccf37fcf4b72fc5de4dcea4ec730aab7f660e572 /src/sim/serialize.hh
parent76cd4393c08b83fa9006ee7bce1fb62457e053c1 (diff)
downloadgem5-888ec455cba4174863be5ed9148aaf093a061101.tar.xz
sim: Fix broken event unserialization
Events expected to be unserialized using an event-specific unserializeEvent call. This call was never actually used, which meant the events relying on it never got unserialized (or scheduled after unserialization). Instead of relying on a custom call, we now use the normal serialization code again. In order to schedule the event correctly, the parrent object is expected to use the EventQueue::checkpointReschedule() call. This happens automatically for events that are serialized using the AutoSerialize mechanism.
Diffstat (limited to 'src/sim/serialize.hh')
-rw-r--r--src/sim/serialize.hh9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/sim/serialize.hh b/src/sim/serialize.hh
index 644ef4005..a0d4bafe7 100644
--- a/src/sim/serialize.hh
+++ b/src/sim/serialize.hh
@@ -178,6 +178,15 @@ void fromSimObject(T &t, SimObject *s)
#define UNSERIALIZE_CONTAINER(member) \
arrayParamIn(cp, #member, member)
+#define SERIALIZE_EVENT(event) event.serializeSection(cp, #event);
+
+#define UNSERIALIZE_EVENT(event) \
+ do { \
+ event.unserializeSection(cp, #event); \
+ eventQueue()->checkpointReschedule(&event); \
+ } while(0)
+
+
#define SERIALIZE_OBJPTR(objptr) paramOut(cp, #objptr, (objptr)->name())
#define UNSERIALIZE_OBJPTR(objptr) \