X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fsim%2Fsim_object.hh;h=995431845c3752fe361d23898c745ee9483676ac;hb=0ed3c84c7b05d7d3c9d5f0e3f1c05c20afef93b9;hp=d6d08f2550bdf1cc8d93645f8b1cd528c675e4d8;hpb=d080581db1f9ee4e1e6d07d2b01c13c67908a391;p=gem5.git diff --git a/src/sim/sim_object.hh b/src/sim/sim_object.hh index d6d08f255..995431845 100644 --- a/src/sim/sim_object.hh +++ b/src/sim/sim_object.hh @@ -1,5 +1,6 @@ /* * Copyright (c) 2001-2005 The Regents of The University of Michigan + * Copyright (c) 2010 Advanced Micro Devices, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -45,7 +46,6 @@ #include "params/SimObject.hh" #include "sim/eventq.hh" #include "sim/serialize.hh" -#include "sim/startup.hh" class BaseCPU; class Event; @@ -55,8 +55,7 @@ class Event; * correspond to physical components and can be specified via the * config file (CPUs, caches, etc.). */ -class SimObject - : public EventManager, public Serializable, protected StartupCallback +class SimObject : public EventManager, public Serializable { public: enum State { @@ -93,25 +92,52 @@ class SimObject virtual const std::string name() const { return params()->name; } - // initialization pass of all objects. - // Gets invoked after construction, before unserialize. + // The following SimObject initialization methods are called from + // the instantiate() method in src/python/m5/simulate.py. See + // that function for details on how/when these methods are + // invoked. + + /** + * init() is called after all C++ SimObjects have been created and + * all ports are connected. Initializations that are independent + * of unserialization but rely on a fully instantiated and + * connected SimObject graph should be done here. + */ virtual void init(); - static void initAll(); + + /** + * loadState() is called on each SimObject when restoring from a + * checkpoint. The default implementation simply calls + * unserialize() if there is a corresponding section in the + * checkpoint. However, objects can override loadState() to get + * other behaviors, e.g., doing other programmed initializations + * after unserialize(), or complaining if no checkpoint section is + * found. + */ + virtual void loadState(Checkpoint *cp); + + /** + * initState() is called on each SimObject when *not* restoring + * from a checkpoint. This provides a hook for state + * initializations that are only required for a "cold start". + */ + virtual void initState(); // register statistics for this object virtual void regStats(); virtual void regFormulas(); virtual void resetStats(); - // static: call reg_stats on all SimObjects - static void regAllStats(); - - // static: call resetStats on all SimObjects - static void resetAllStats(); + /** + * startup() is the final initialization call before simulation. + * All state is initialized (including unserialized state, if any, + * such as the curTick() value), so this is the appropriate place to + * schedule initial event(s) for objects that need them. + */ + virtual void startup(); // static: call nameOut() & serialize() on all SimObjects static void serializeAll(std::ostream &); - static void unserializeAll(Checkpoint *cp); // Methods to drain objects in order to take checkpoints // Or switch from timing -> atomic memory model @@ -136,9 +162,6 @@ class SimObject * char* rather than std::string to make it callable from gdb. */ static SimObject *find(const char *name); - - public: - void recordEvent(const std::string &stat); }; #endif // __SIM_OBJECT_HH__