sim: Fix checkpoint restore for Ticked
authorAndrew Bardsley <Andrew.Bardsley@arm.com>
Wed, 3 Sep 2014 11:42:25 +0000 (07:42 -0400)
committerAndrew Bardsley <Andrew.Bardsley@arm.com>
Wed, 3 Sep 2014 11:42:25 +0000 (07:42 -0400)
This patch makes restoring the 'lastStopped' value for Ticked-containing
objects (including MinorCPU) optional so that Ticked-containing objects
can be restored from non-Ticked-containing objects (such as AtomicSimpleCPU).

src/sim/ticked_object.cc

index 22a1493885604768d924933105b50d0d64624bb5..ef6ee1c20aa5acb36767ff54d311ae25f6a4240f 100644 (file)
@@ -82,9 +82,15 @@ Ticked::serialize(std::ostream &os)
 void
 Ticked::unserialize(Checkpoint *cp, const std::string &section)
 {
-    uint64_t lastStoppedUint;
+    uint64_t lastStoppedUint = 0;
 
-    paramIn(cp, section, "lastStopped", lastStoppedUint);
+    /* lastStopped is optional on checkpoint restore as this object may be
+     *  being restored from one which has a common base (and so possibly
+     *  many common checkpointed values) but where Ticked is used in the
+     *  checkpointed object but not this one.
+     *  An example would be a CPU model using Ticked restores from a
+     *  simple CPU without without Ticked */
+    optParamIn(cp, section, "lastStopped", lastStoppedUint);
 
     lastStopped = Cycles(lastStoppedUint);
 }