LSQ Unit: After deleting part of a split request, set it to NULL so that it
[gem5.git] / src / sim / sim_object.hh
index b70f1d5d3f282528e73f4cf78b289ceb55910690..2bea97301d62a2b14b3fa005a76e7dfc09218294 100644 (file)
 #ifndef __SIM_OBJECT_HH__
 #define __SIM_OBJECT_HH__
 
-#include <map>
+#include <iostream>
 #include <list>
+#include <map>
+#include <string>
 #include <vector>
-#include <iostream>
 
 #include "params/SimObject.hh"
+#include "sim/eventq.hh"
 #include "sim/serialize.hh"
-#include "sim/startup.hh"
 
 class BaseCPU;
 class Event;
@@ -53,7 +54,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,10 +87,6 @@ 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; }
@@ -104,6 +101,11 @@ class SimObject : public Serializable, protected StartupCallback
     virtual void regFormulas();
     virtual void resetStats();
 
+    // final initialization before simulation
+    // all state is unserialized so 
+    virtual void startup();
+    static void startupAll();
+
     // static: call reg_stats on all SimObjects
     static void regAllStats();
 
@@ -131,8 +133,12 @@ class SimObject : public Serializable, protected StartupCallback
     static void debugObjectBreak(const std::string &objs);
 #endif
 
-  public:
-    void recordEvent(const std::string &stat);
+    /**
+     * Find the SimObject with the given name and return a pointer to
+     * 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);
 };
 
 #endif // __SIM_OBJECT_HH__