X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fsim%2Fsim_object.hh;h=995431845c3752fe361d23898c745ee9483676ac;hb=0ed3c84c7b05d7d3c9d5f0e3f1c05c20afef93b9;hp=20a35a32b9a229859d4cd920f38a0ebf5f0566b5;hpb=3952e41ab1f1dfaa2f97a6a486528e4ea0bfc5a1;p=gem5.git diff --git a/src/sim/sim_object.hh b/src/sim/sim_object.hh index 20a35a32b..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 @@ -36,14 +37,15 @@ #ifndef __SIM_OBJECT_HH__ #define __SIM_OBJECT_HH__ -#include +#include #include +#include +#include #include -#include #include "params/SimObject.hh" +#include "sim/eventq.hh" #include "sim/serialize.hh" -#include "sim/startup.hh" class BaseCPU; class Event; @@ -53,7 +55,7 @@ class Event; * correspond to physical components and can be specified via the * config file (CPUs, caches, etc.). */ -class SimObject : public Serializable, protected StartupCallback +class SimObject : public EventManager, public Serializable { public: enum State { @@ -86,33 +88,56 @@ class SimObject : public Serializable, protected StartupCallback SimObject(const Params *_params); virtual ~SimObject() {} - protected: - // static: support for old-style constructors (call manually) - static Params *makeParams(const std::string &name); - public: 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 @@ -133,13 +158,10 @@ class SimObject : public Serializable, protected StartupCallback /** * Find the SimObject with the given name and return a pointer to - * it. Priarily used for interactive debugging. Argument is + * it. Primarily used for interactive debugging. Argument is * 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__