diff --git a/src/sim/mem_pool.cc b/src/sim/mem_pool.cc index 20b6eda67c..d58399d060 100644 --- a/src/sim/mem_pool.cc +++ b/src/sim/mem_pool.cc @@ -169,6 +169,7 @@ MemPools::freeMemSize(int pool_id) const void MemPools::serialize(CheckpointOut &cp) const { + ScopedCheckpointSection sec(cp, "mempools"); int num_pools = pools.size(); SERIALIZE_SCALAR(num_pools); @@ -179,6 +180,10 @@ MemPools::serialize(CheckpointOut &cp) const void MemPools::unserialize(CheckpointIn &cp) { + // Delete previous mem_pools + pools.clear(); + + ScopedCheckpointSection sec(cp, "mempools"); int num_pools = 0; UNSERIALIZE_SCALAR(num_pools); diff --git a/src/sim/process.cc b/src/sim/process.cc index 3a631a58aa..97130bd9d3 100644 --- a/src/sim/process.cc +++ b/src/sim/process.cc @@ -388,6 +388,7 @@ Process::unserialize(CheckpointIn &cp) memState->unserialize(cp); pTable->unserialize(cp); fds->unserialize(cp); + /** * Checkpoints for pipes, device drivers or sockets currently * do not work. Need to come back and fix them at a later date. diff --git a/src/sim/se_workload.cc b/src/sim/se_workload.cc index d3c857048b..4d2bd54421 100644 --- a/src/sim/se_workload.cc +++ b/src/sim/se_workload.cc @@ -53,6 +53,18 @@ SEWorkload::setSystem(System *sys) memPools.populate(memories); } +void +SEWorkload::serialize(CheckpointOut &cp) const +{ + memPools.serialize(cp); +} + +void +SEWorkload::unserialize(CheckpointIn &cp) +{ + memPools.unserialize(cp); +} + void SEWorkload::syscall(ThreadContext *tc) { diff --git a/src/sim/se_workload.hh b/src/sim/se_workload.hh index 5bc597f067..e212ad6137 100644 --- a/src/sim/se_workload.hh +++ b/src/sim/se_workload.hh @@ -81,6 +81,9 @@ class SEWorkload : public Workload panic("No workload symbol table for syscall emulation mode."); } + void serialize(CheckpointOut &cp) const override; + void unserialize(CheckpointIn &cp) override; + void syscall(ThreadContext *tc) override; // For now, assume the only type of events are system calls.