diff options
-rw-r--r-- | dev/disk_image.cc | 2 | ||||
-rw-r--r-- | sim/serialize.cc | 36 | ||||
-rw-r--r-- | sim/serialize.hh | 4 |
3 files changed, 21 insertions, 21 deletions
diff --git a/dev/disk_image.cc b/dev/disk_image.cc index a1a220de1..cbcd16a25 100644 --- a/dev/disk_image.cc +++ b/dev/disk_image.cc @@ -405,7 +405,7 @@ CowDiskImage::write(const uint8_t *data, off_t offset) void CowDiskImage::serialize(ostream &os) { - string cowFilename = CheckpointFile() + "." + name() + ".cow"; + string cowFilename = CheckpointDir() + name() + ".cow"; SERIALIZE_SCALAR(cowFilename); save(cowFilename); } diff --git a/sim/serialize.cc b/sim/serialize.cc index 0eb26c31d..1fce6e7b1 100644 --- a/sim/serialize.cc +++ b/sim/serialize.cc @@ -27,23 +27,24 @@ */ #include <sys/time.h> +#include <sys/types.h> +#include <sys/stat.h> #include <fstream> #include <list> #include <string> #include <vector> +#include "base/inifile.hh" #include "base/misc.hh" #include "base/str.hh" - +#include "base/trace.hh" +#include "sim/config_node.hh" #include "sim/eventq.hh" #include "sim/param.hh" #include "sim/serialize.hh" -#include "base/inifile.hh" #include "sim/sim_events.hh" #include "sim/sim_object.hh" -#include "base/trace.hh" -#include "sim/config_node.hh" using namespace std; @@ -252,8 +253,11 @@ Serializer::serialize() Serializeable::serializer = this; - file = CheckpointFile(); - string cpt_file = file + ".cpt"; + string dir = CheckpointDir(); + if (mkdir(dir.c_str(), 0775) == -1 && errno != EEXIST) + warn("could mkdir %s\n", dir); + + string cpt_file = dir + "m5.cpt"; output = new ofstream(cpt_file.c_str()); time_t t = time(NULL); *output << "// checkpoint generated: " << ctime(&t); @@ -279,13 +283,11 @@ Serializer::serialize() delete output; output = NULL; - file = ""; } class SerializeEvent : public Event { protected: - string file; Tick repeat; public: @@ -314,15 +316,15 @@ SerializeEvent::process() schedule(curTick + repeat); } -string __CheckpointFileBase; +string __CheckpointDirBase; string -CheckpointFile() +CheckpointDir() { - if (__CheckpointFileBase.empty()) - return __CheckpointFileBase; + if (__CheckpointDirBase.empty()) + return __CheckpointDirBase; - return csprintf("%s.%d", __CheckpointFileBase, curTick); + return csprintf("%s/m5.%012d/", __CheckpointDirBase, curTick); } void @@ -344,9 +346,9 @@ class SerializeParamContext : public ParamContext SerializeParamContext serialParams("serialize"); -Param<string> serialize_file(&serialParams, - "file", - "file to write to", "m5"); +Param<string> serialize_dir(&serialParams, + "dir", + "dir to stick checkpoint in", "."); Param<Counter> serialize_cycle(&serialParams, "cycle", @@ -371,7 +373,7 @@ SerializeParamContext::~SerializeParamContext() void SerializeParamContext::checkParams() { - __CheckpointFileBase = serialize_file; + __CheckpointDirBase = serialize_dir; if (serialize_cycle > 0) SetupCheckpoint(serialize_cycle, serialize_period); } diff --git a/sim/serialize.hh b/sim/serialize.hh index 09e91d816..bc40d0ad2 100644 --- a/sim/serialize.hh +++ b/sim/serialize.hh @@ -135,7 +135,6 @@ class Serializer protected: typedef std::list<Serializeable *> serlist_t; serlist_t objects; - std::string file; std::ostream *output; std::ostream &out() const; @@ -149,7 +148,6 @@ class Serializer public: void serialize(); - const std::string &filename() const { return file; } }; // @@ -253,7 +251,7 @@ class Checkpoint // Export checkpoint filename param so other objects can derive // filenames from it (e.g., memory). // -std::string CheckpointFile(); +std::string CheckpointDir(); void SetupCheckpoint(Tick when, Tick period = 0); #endif // __SERIALIZE_HH__ |