More progress on checkpointing... we can now write out a checkpoint and read it back in,
though most objects don't actually serialize any data. arch/alpha/alpha_memory.cc: arch/alpha/alpha_memory.hh: arch/alpha/isa_traits.hh: cpu/exec_context.cc: cpu/exec_context.hh: cpu/simple_cpu/simple_cpu.hh: dev/alpha_access.h: dev/alpha_console.cc: dev/alpha_console.hh: dev/console.cc: dev/console.hh: Change unserialize param from IniFile& to const IniFile*. cpu/simple_cpu/simple_cpu.cc: Change unserialize param from IniFile& to const IniFile*. Make unserialize call ExecContext::unserialize. sim/eventq.cc: Rename MainEventQueue (no spaces) for easier parsing in checkpoints. Disable event serialization for now, so we can focus on the easy stuff. sim/serialize.cc: Change paramIn and arrayParamIn param from IniFile& to const IniFile*. sim/serialize.hh: Change unserialize, paramIn, and arrayParamIn params from IniFile& to const IniFile*. --HG-- extra : convert_revision : 6e8853ed375eddec0e140c95a01dd51bd225f7b9
This commit is contained in:
parent
a0f3ee7e17
commit
1511370d09
15 changed files with 36 additions and 47 deletions
|
@ -241,7 +241,7 @@ AlphaTlb::serialize(ostream &os)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
AlphaTlb::unserialize(IniFile &db, const string §ion)
|
AlphaTlb::unserialize(const IniFile *db, const string §ion)
|
||||||
{
|
{
|
||||||
UNSERIALIZE_MEMBER(size);
|
UNSERIALIZE_MEMBER(size);
|
||||||
UNSERIALIZE_MEMBER(nlu);
|
UNSERIALIZE_MEMBER(nlu);
|
||||||
|
|
|
@ -74,7 +74,7 @@ class AlphaTlb : public SimObject
|
||||||
|
|
||||||
// Checkpointing
|
// Checkpointing
|
||||||
virtual void serialize(std::ostream &os);
|
virtual void serialize(std::ostream &os);
|
||||||
virtual void unserialize(IniFile &db, const std::string §ion);
|
virtual void unserialize(const IniFile *db, const std::string §ion);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -225,7 +225,7 @@ class AlphaISA
|
||||||
static void serializeSpecialRegs(const Serializeable::Proxy &proxy,
|
static void serializeSpecialRegs(const Serializeable::Proxy &proxy,
|
||||||
const RegFile ®s);
|
const RegFile ®s);
|
||||||
|
|
||||||
static void unserializeSpecialRegs(IniFile &db,
|
static void unserializeSpecialRegs(const IniFile *db,
|
||||||
const std::string &category,
|
const std::string &category,
|
||||||
ConfigNode *node,
|
ConfigNode *node,
|
||||||
RegFile ®s);
|
RegFile ®s);
|
||||||
|
|
|
@ -106,7 +106,7 @@ ExecContext::serialize(ostream &os)
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ExecContext::unserialize(IniFile &db, const std::string §ion)
|
ExecContext::unserialize(const IniFile *db, const std::string §ion)
|
||||||
{
|
{
|
||||||
UNSERIALIZE_ARRAY(regs.intRegFile, NumIntRegs);
|
UNSERIALIZE_ARRAY(regs.intRegFile, NumIntRegs);
|
||||||
UNSERIALIZE_ARRAY(regs.floatRegFile.q, NumFloatRegs);
|
UNSERIALIZE_ARRAY(regs.floatRegFile.q, NumFloatRegs);
|
||||||
|
|
|
@ -142,7 +142,7 @@ class ExecContext
|
||||||
void regStats(const std::string &name);
|
void regStats(const std::string &name);
|
||||||
|
|
||||||
void serialize(std::ostream &os);
|
void serialize(std::ostream &os);
|
||||||
void unserialize(IniFile &db, const std::string §ion);
|
void unserialize(const IniFile *db, const std::string §ion);
|
||||||
|
|
||||||
#ifdef FULL_SYSTEM
|
#ifdef FULL_SYSTEM
|
||||||
bool validInstAddr(Addr addr) { return true; }
|
bool validInstAddr(Addr addr) { return true; }
|
||||||
|
|
|
@ -246,22 +246,9 @@ SimpleCPU::serialize(ostream &os)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SimpleCPU::unserialize(IniFile &db, const string &category)
|
SimpleCPU::unserialize(const IniFile *db, const string &category)
|
||||||
{
|
{
|
||||||
string data;
|
xc->unserialize(db, category);
|
||||||
|
|
||||||
for (int i = 0; i < NumIntRegs; i++) {
|
|
||||||
stringstream buf;
|
|
||||||
ccprintf(buf, "R%02d", i);
|
|
||||||
db.findDefault(category, buf.str(), data);
|
|
||||||
to_number(data,xc->regs.intRegFile[i]);
|
|
||||||
}
|
|
||||||
for (int i = 0; i < NumFloatRegs; i++) {
|
|
||||||
stringstream buf;
|
|
||||||
ccprintf(buf, "F%02d", i);
|
|
||||||
db.findDefault(category, buf.str(), data);
|
|
||||||
to_number(data.c_str(), xc->regs.floatRegFile.q[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read in Special registers
|
// Read in Special registers
|
||||||
|
|
||||||
|
|
|
@ -260,7 +260,7 @@ class SimpleCPU : public BaseCPU
|
||||||
void processCacheCompletion();
|
void processCacheCompletion();
|
||||||
|
|
||||||
virtual void serialize(std::ostream &os);
|
virtual void serialize(std::ostream &os);
|
||||||
virtual void unserialize(IniFile &db, const std::string §ion);
|
virtual void unserialize(const IniFile *db, const std::string §ion);
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
Fault read(Addr addr, T& data, unsigned flags);
|
Fault read(Addr addr, T& data, unsigned flags);
|
||||||
|
|
|
@ -82,7 +82,7 @@ struct AlphaAccess
|
||||||
|
|
||||||
#ifndef CONSOLE
|
#ifndef CONSOLE
|
||||||
void serialize(std::ostream &os);
|
void serialize(std::ostream &os);
|
||||||
void unserialize(IniFile &db, const std::string §ion);
|
void unserialize(const IniFile *db, const std::string §ion);
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -188,7 +188,7 @@ AlphaAccess::serialize(ostream &os)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
AlphaAccess::unserialize(IniFile &db, const std::string §ion)
|
AlphaAccess::unserialize(const IniFile *db, const std::string §ion)
|
||||||
{
|
{
|
||||||
UNSERIALIZE_MEMBER(last_offset);
|
UNSERIALIZE_MEMBER(last_offset);
|
||||||
UNSERIALIZE_MEMBER(version);
|
UNSERIALIZE_MEMBER(version);
|
||||||
|
@ -216,7 +216,7 @@ AlphaConsole::serialize(ostream &os)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
AlphaConsole::unserialize(IniFile &db, const std::string §ion)
|
AlphaConsole::unserialize(const IniFile *db, const std::string §ion)
|
||||||
{
|
{
|
||||||
alphaAccess->unserialize(db, section);
|
alphaAccess->unserialize(db, section);
|
||||||
}
|
}
|
||||||
|
|
|
@ -101,7 +101,7 @@ class AlphaConsole : public MmapDevice
|
||||||
* standard serialization routines for checkpointing
|
* standard serialization routines for checkpointing
|
||||||
*/
|
*/
|
||||||
virtual void serialize(std::ostream &os);
|
virtual void serialize(std::ostream &os);
|
||||||
virtual void unserialize(IniFile &db, const std::string §ion);
|
virtual void unserialize(const IniFile *db, const std::string §ion);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // __ALPHA_CONSOLE_HH__
|
#endif // __ALPHA_CONSOLE_HH__
|
||||||
|
|
|
@ -316,13 +316,11 @@ SimConsole::setInt(int bits)
|
||||||
void
|
void
|
||||||
SimConsole::serialize(ostream &os)
|
SimConsole::serialize(ostream &os)
|
||||||
{
|
{
|
||||||
panic("Unimplemented");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SimConsole::unserialize(IniFile &db, const std::string §ion)
|
SimConsole::unserialize(const IniFile *db, const std::string §ion)
|
||||||
{
|
{
|
||||||
panic("Unimplemented");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -129,7 +129,7 @@ class SimConsole : public SimObject
|
||||||
void setInt(int bits);
|
void setInt(int bits);
|
||||||
|
|
||||||
virtual void serialize(std::ostream &os);
|
virtual void serialize(std::ostream &os);
|
||||||
virtual void unserialize(IniFile &db, const std::string §ion);
|
virtual void unserialize(const IniFile *db, const std::string §ion);
|
||||||
};
|
};
|
||||||
|
|
||||||
class ConsoleListener : public SimObject
|
class ConsoleListener : public SimObject
|
||||||
|
|
|
@ -50,7 +50,7 @@ const string Event::defaultName("event");
|
||||||
// Events on this queue are processed at the *beginning* of each
|
// Events on this queue are processed at the *beginning* of each
|
||||||
// cycle, before the pipeline simulation is performed.
|
// cycle, before the pipeline simulation is performed.
|
||||||
//
|
//
|
||||||
EventQueue mainEventQueue("Main Event Queue");
|
EventQueue mainEventQueue("MainEventQueue");
|
||||||
|
|
||||||
void
|
void
|
||||||
EventQueue::insert(Event *event)
|
EventQueue::insert(Event *event)
|
||||||
|
@ -121,6 +121,7 @@ EventQueue::serviceOne()
|
||||||
void
|
void
|
||||||
EventQueue::nameChildren()
|
EventQueue::nameChildren()
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
int j = 0;
|
int j = 0;
|
||||||
|
|
||||||
Event *event = head;
|
Event *event = head;
|
||||||
|
@ -131,11 +132,13 @@ EventQueue::nameChildren()
|
||||||
|
|
||||||
event = event->next;
|
event = event->next;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
EventQueue::serialize(ostream &os)
|
EventQueue::serialize(ostream &os)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
string objects = "";
|
string objects = "";
|
||||||
|
|
||||||
Event *event = head;
|
Event *event = head;
|
||||||
|
@ -148,6 +151,7 @@ EventQueue::serialize(ostream &os)
|
||||||
}
|
}
|
||||||
nameOut(os, "Serialized");
|
nameOut(os, "Serialized");
|
||||||
SERIALIZE_MEMBER(objects);
|
SERIALIZE_MEMBER(objects);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -88,11 +88,11 @@ paramOut(ostream &os, const std::string &name, const T& param)
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
void
|
void
|
||||||
paramIn(IniFile &db, const std::string §ion,
|
paramIn(const IniFile *db, const std::string §ion,
|
||||||
const std::string &name, T& param)
|
const std::string &name, T& param)
|
||||||
{
|
{
|
||||||
std::string str;
|
std::string str;
|
||||||
if (!db.find(section, name, str) || !parseParam(str, param)) {
|
if (!db->find(section, name, str) || !parseParam(str, param)) {
|
||||||
fatal("Can't unserialize '%s:%s'\n", section, name);
|
fatal("Can't unserialize '%s:%s'\n", section, name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -116,11 +116,11 @@ arrayParamOut(ostream &os, const std::string &name,
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
void
|
void
|
||||||
arrayParamIn(IniFile &db, const std::string §ion,
|
arrayParamIn(const IniFile *db, const std::string §ion,
|
||||||
const std::string &name, T *param, int size)
|
const std::string &name, T *param, int size)
|
||||||
{
|
{
|
||||||
std::string str;
|
std::string str;
|
||||||
if (!db.find(section, name, str)) {
|
if (!db->find(section, name, str)) {
|
||||||
fatal("Can't unserialize '%s:%s'\n", section, name);
|
fatal("Can't unserialize '%s:%s'\n", section, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,17 +159,17 @@ arrayParamIn(IniFile &db, const std::string §ion,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define INSTANTIATE_PARAM_TEMPLATES(type) \
|
#define INSTANTIATE_PARAM_TEMPLATES(type) \
|
||||||
template void \
|
template void \
|
||||||
paramOut(ostream &os, const std::string &name, const type ¶m); \
|
paramOut(ostream &os, const std::string &name, const type ¶m); \
|
||||||
template void \
|
template void \
|
||||||
paramIn(IniFile &db, const std::string §ion, \
|
paramIn(const IniFile *db, const std::string §ion, \
|
||||||
const std::string &name, type & param); \
|
const std::string &name, type & param); \
|
||||||
template void \
|
template void \
|
||||||
arrayParamOut(ostream &os, const std::string &name, \
|
arrayParamOut(ostream &os, const std::string &name, \
|
||||||
const type *param, int size); \
|
const type *param, int size); \
|
||||||
template void \
|
template void \
|
||||||
arrayParamIn(IniFile &db, const std::string §ion, \
|
arrayParamIn(const IniFile *db, const std::string §ion, \
|
||||||
const std::string &name, type *param, int size);
|
const std::string &name, type *param, int size);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ template <class T>
|
||||||
void paramOut(std::ostream &os, const std::string &name, const T& param);
|
void paramOut(std::ostream &os, const std::string &name, const T& param);
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
void paramIn(IniFile &db, const std::string §ion,
|
void paramIn(const IniFile *db, const std::string §ion,
|
||||||
const std::string &name, T& param);
|
const std::string &name, T& param);
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
|
@ -55,7 +55,7 @@ void arrayParamOut(std::ostream &os, const std::string &name,
|
||||||
const T *param, int size);
|
const T *param, int size);
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
void arrayParamIn(IniFile &db, const std::string §ion,
|
void arrayParamIn(const IniFile *db, const std::string §ion,
|
||||||
const std::string &name, T *param, int size);
|
const std::string &name, T *param, int size);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -103,7 +103,7 @@ class Serializeable
|
||||||
|
|
||||||
virtual void nameChildren() {}
|
virtual void nameChildren() {}
|
||||||
virtual void serialize(std::ostream& os) {}
|
virtual void serialize(std::ostream& os) {}
|
||||||
virtual void unserialize(IniFile &db, const std::string §ion) {}
|
virtual void unserialize(const IniFile *db, const std::string §ion) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class Serializer
|
class Serializer
|
||||||
|
|
Loading…
Reference in a new issue