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:
Steve Reinhardt 2003-10-29 00:41:24 -08:00
parent a0f3ee7e17
commit 1511370d09
15 changed files with 36 additions and 47 deletions

View file

@ -241,7 +241,7 @@ AlphaTlb::serialize(ostream &os)
} }
void void
AlphaTlb::unserialize(IniFile &db, const string &section) AlphaTlb::unserialize(const IniFile *db, const string &section)
{ {
UNSERIALIZE_MEMBER(size); UNSERIALIZE_MEMBER(size);
UNSERIALIZE_MEMBER(nlu); UNSERIALIZE_MEMBER(nlu);

View file

@ -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 &section); virtual void unserialize(const IniFile *db, const std::string &section);
}; };

View file

@ -225,7 +225,7 @@ class AlphaISA
static void serializeSpecialRegs(const Serializeable::Proxy &proxy, static void serializeSpecialRegs(const Serializeable::Proxy &proxy,
const RegFile &regs); const RegFile &regs);
static void unserializeSpecialRegs(IniFile &db, static void unserializeSpecialRegs(const IniFile *db,
const std::string &category, const std::string &category,
ConfigNode *node, ConfigNode *node,
RegFile &regs); RegFile &regs);

View file

@ -106,7 +106,7 @@ ExecContext::serialize(ostream &os)
void void
ExecContext::unserialize(IniFile &db, const std::string &section) ExecContext::unserialize(const IniFile *db, const std::string &section)
{ {
UNSERIALIZE_ARRAY(regs.intRegFile, NumIntRegs); UNSERIALIZE_ARRAY(regs.intRegFile, NumIntRegs);
UNSERIALIZE_ARRAY(regs.floatRegFile.q, NumFloatRegs); UNSERIALIZE_ARRAY(regs.floatRegFile.q, NumFloatRegs);

View file

@ -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 &section); void unserialize(const IniFile *db, const std::string &section);
#ifdef FULL_SYSTEM #ifdef FULL_SYSTEM
bool validInstAddr(Addr addr) { return true; } bool validInstAddr(Addr addr) { return true; }

View file

@ -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

View file

@ -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 &section); virtual void unserialize(const IniFile *db, const std::string &section);
template <class T> template <class T>
Fault read(Addr addr, T& data, unsigned flags); Fault read(Addr addr, T& data, unsigned flags);

View file

@ -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 &section); void unserialize(const IniFile *db, const std::string &section);
#endif #endif
}; };

View file

@ -188,7 +188,7 @@ AlphaAccess::serialize(ostream &os)
} }
void void
AlphaAccess::unserialize(IniFile &db, const std::string &section) AlphaAccess::unserialize(const IniFile *db, const std::string &section)
{ {
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 &section) AlphaConsole::unserialize(const IniFile *db, const std::string &section)
{ {
alphaAccess->unserialize(db, section); alphaAccess->unserialize(db, section);
} }

View file

@ -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 &section); virtual void unserialize(const IniFile *db, const std::string &section);
}; };
#endif // __ALPHA_CONSOLE_HH__ #endif // __ALPHA_CONSOLE_HH__

View file

@ -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 &section) SimConsole::unserialize(const IniFile *db, const std::string &section)
{ {
panic("Unimplemented");
} }

View file

@ -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 &section); virtual void unserialize(const IniFile *db, const std::string &section);
}; };
class ConsoleListener : public SimObject class ConsoleListener : public SimObject

View file

@ -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

View file

@ -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 &section, paramIn(const IniFile *db, const std::string &section,
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 &section, arrayParamIn(const IniFile *db, const std::string &section,
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);
} }
@ -163,13 +163,13 @@ arrayParamIn(IniFile &db, const std::string &section,
template void \ template void \
paramOut(ostream &os, const std::string &name, const type &param); \ paramOut(ostream &os, const std::string &name, const type &param); \
template void \ template void \
paramIn(IniFile &db, const std::string &section, \ paramIn(const IniFile *db, const std::string &section, \
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 &section, \ arrayParamIn(const IniFile *db, const std::string &section, \
const std::string &name, type *param, int size); const std::string &name, type *param, int size);

View file

@ -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 &section, void paramIn(const IniFile *db, const std::string &section,
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 &section, void arrayParamIn(const IniFile *db, const std::string &section,
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 &section) {} virtual void unserialize(const IniFile *db, const std::string &section) {}
}; };
class Serializer class Serializer