diff options
author | Andreas Sandberg <andreas.sandberg@arm.com> | 2015-07-07 09:51:04 +0100 |
---|---|---|
committer | Andreas Sandberg <andreas.sandberg@arm.com> | 2015-07-07 09:51:04 +0100 |
commit | 888ec455cba4174863be5ed9148aaf093a061101 (patch) | |
tree | ccf37fcf4b72fc5de4dcea4ec730aab7f660e572 /src/sim/serialize.hh | |
parent | 76cd4393c08b83fa9006ee7bce1fb62457e053c1 (diff) | |
download | gem5-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.hh | 9 |
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) \ |