lift system-independent binning stuff out of Tru64System into System.
authorLisa Hsu <hsul@eecs.umich.edu>
Mon, 17 May 2004 19:08:24 +0000 (15:08 -0400)
committerLisa Hsu <hsul@eecs.umich.edu>
Mon, 17 May 2004 19:08:24 +0000 (15:08 -0400)
kern/tru64/tru64_system.cc:
    make binned_fns a parameter for System in addition to Tru64System.  Do all the fnEvents setting at the System level, since that is system-independent.
kern/tru64/tru64_system.hh:
    deal with FnEvents in the System, and move some fns over to System.
sim/system.cc:
sim/system.hh:
    lift binning stuff into System out of Tru64System

--HG--
extra : convert_revision : 591dee6f2013f5c43037726c529a00682b5cf82e

kern/tru64/tru64_system.cc
kern/tru64/tru64_system.hh
sim/system.cc
sim/system.hh

index 7e68dc5a1055656341018d66177b0170dae3e13f..0717bcbbe7f945008f9e7585d7d9d575120253a4 100644 (file)
@@ -49,7 +49,7 @@ Tru64System::Tru64System(const string _name, const uint64_t _init_param,
                          const string &kernel_path, const string &console_path,
                          const string &palcode, const string &boot_osflags,
                          const bool _bin, const vector<string> &binned_fns)
-    : System(_name, _init_param, _memCtrl, _physmem, _bin),
+    : System(_name, _init_param, _memCtrl, _physmem, _bin, binned_fns),
       bin(_bin), binned_fns(binned_fns)
 {
     kernelSymtab = new SymbolTable;
@@ -163,33 +163,14 @@ Tru64System::Tru64System(const string _name, const uint64_t _init_param,
     // BINNING STUFF
     if (bin == true) {
         int end = binned_fns.size();
-        assert(!(end & 1));
-
-        Statistics::MainBin *Bin;
         Addr address = 0;
 
-        fnEvents.resize(end>>1);
-
         for (int i = 0; i < end; i +=2) {
-            Bin = new Statistics::MainBin(binned_fns[i]);
-            fnBins.insert(make_pair(binned_fns[i], Bin));
-
-            fnEvents[(i>>1)] = new FnEvent(&pcEventQueue, binned_fns[i], this);
             if (kernelSymtab->findAddress(binned_fns[i], address))
                 fnEvents[(i>>1)]->schedule(address);
             else
                 panic("could not find kernel symbol %s\n", binned_fns[i]);
-
-            if (binned_fns[i+1] == "null")
-                populateMap(binned_fns[i], "");
-            else
-                populateMap(binned_fns[i], binned_fns[i+1]);
         }
-
-        fnCalls
-            .name(name() + ":fnCalls")
-            .desc("all fn calls being tracked")
-            ;
     }
     //
 }
@@ -213,14 +194,6 @@ Tru64System::~Tru64System()
     delete debugPrintfEvent;
     delete debugPrintfrEvent;
     delete dumpMbufEvent;
-
-    if (bin == true) {
-        int end = fnEvents.size();
-        for (int i = 0; i < end; ++i) {
-            delete fnEvents[i];
-        }
-        fnEvents.clear();
-    }
 }
 
 int
@@ -261,45 +234,6 @@ Tru64System::breakpoint()
     return remoteGDB[0]->trap(ALPHA_KENTRY_INT);
 }
 
-void
-Tru64System::populateMap(std::string callee, std::string caller)
-{
-    multimap<const string, string>::const_iterator i;
-    i = callerMap.insert(make_pair(callee, caller));
-    assert(i != callerMap.end() && "should not fail populating callerMap");
-}
-
-bool
-Tru64System::findCaller(std::string callee, std::string caller) const
-{
-    typedef multimap<const std::string, std::string>::const_iterator iter;
-    pair<iter, iter> range;
-
-    range = callerMap.equal_range(callee);
-    for (iter i = range.first; i != range.second; ++i) {
-        if ((*i).second == caller)
-            return true;
-    }
-    return false;
-}
-
-void
-Tru64System::dumpState(ExecContext *xc) const
-{
-    if (xc->swCtx) {
-        stack<fnCall *> copy(xc->swCtx->callStack);
-        if (copy.empty())
-            return;
-        DPRINTF(TCPIP, "xc->swCtx, size: %d:\n", copy.size());
-        fnCall *top;
-        DPRINTF(TCPIP, "||     call : %d\n",xc->swCtx->calls);
-        for (top = copy.top(); !copy.empty(); copy.pop() ) {
-            top = copy.top();
-            DPRINTF(TCPIP, "||  %13s : %s \n", top->name, top->myBin->name());
-        }
-    }
-}
-
 BEGIN_DECLARE_SIM_OBJECT_PARAMS(Tru64System)
 
     Param<bool> bin;
index 34569664d8ab1b8d1475d09f5de88134f4a88b13..144febbf9379c724707d826dc0b54bac9f68372f 100644 (file)
@@ -67,8 +67,6 @@ class Tru64System : public System
     DebugPrintfEvent *debugPrintfrEvent;
     DumpMbufEvent *dumpMbufEvent;
 
-    std::vector<FnEvent *> fnEvents;
-
   private:
 
     Addr kernelStart;
@@ -104,17 +102,6 @@ class Tru64System : public System
 
     static void Printf(AlphaArguments args);
     static void DumpMbuf(AlphaArguments args);
-
-
-    // Lisa's binning stuff
-  private:
-    std::multimap<const std::string, std::string> callerMap;
-    void populateMap(std::string caller, std::string callee);
-
-  public:
-    bool findCaller(std::string callee, std::string caller) const;
-    void dumpState(ExecContext *xc) const;
-    //
 };
 
 #endif // __TRU64_SYSTEM_HH__
index 43f43baecbb9a100e585a0f9bb9e2f8387e6f850..791a092accbd2eabb2a1d50513a441e2de65c975 100644 (file)
@@ -30,6 +30,7 @@
 #include "targetarch/vtophys.hh"
 #include "sim/param.hh"
 #include "sim/system.hh"
+#include "base/trace.hh"
 
 using namespace std;
 
@@ -41,12 +42,15 @@ System::System(const std::string _name,
                const uint64_t _init_param,
                MemoryController *_memCtrl,
                PhysicalMemory *_physmem,
-               const bool _bin)
+               const bool _bin,
+               const std::vector<string> &binned_fns)
+
     : SimObject(_name),
       init_param(_init_param),
       memCtrl(_memCtrl),
       physmem(_physmem),
-      bin(_bin)
+      bin(_bin),
+      binned_fns(binned_fns)
 {
     // add self to global system list
     systemList.push_back(this);
@@ -54,6 +58,31 @@ System::System(const std::string _name,
         Kernel = new Statistics::MainBin("non TCPIP Kernel stats");
         Kernel->activate();
         User = new Statistics::MainBin("User stats");
+
+        int end = binned_fns.size();
+        assert(!(end & 1));
+
+        Statistics::MainBin *Bin;
+
+        fnEvents.resize(end>>1);
+
+        for (int i = 0; i < end; i +=2) {
+            Bin = new Statistics::MainBin(binned_fns[i]);
+            fnBins.insert(make_pair(binned_fns[i], Bin));
+
+            fnEvents[(i>>1)] = new FnEvent(&pcEventQueue, binned_fns[i], this);
+
+            if (binned_fns[i+1] == "null")
+                populateMap(binned_fns[i], "");
+            else
+                populateMap(binned_fns[i], binned_fns[i+1]);
+        }
+
+        fnCalls
+            .name(name() + ":fnCalls")
+            .desc("all fn calls being tracked")
+            ;
+
     } else
         Kernel = NULL;
 }
@@ -61,6 +90,13 @@ System::System(const std::string _name,
 
 System::~System()
 {
+    if (bin == true) {
+        int end = fnEvents.size();
+        for (int i = 0; i < end; ++i) {
+            delete fnEvents[i];
+        }
+        fnEvents.clear();
+    }
 }
 
 
@@ -103,6 +139,45 @@ printSystems()
     System::printSystems();
 }
 
+void
+System::populateMap(std::string callee, std::string caller)
+{
+    multimap<const string, string>::const_iterator i;
+    i = callerMap.insert(make_pair(callee, caller));
+    assert(i != callerMap.end() && "should not fail populating callerMap");
+}
+
+bool
+System::findCaller(std::string callee, std::string caller) const
+{
+    typedef multimap<const std::string, std::string>::const_iterator iter;
+    pair<iter, iter> range;
+
+    range = callerMap.equal_range(callee);
+    for (iter i = range.first; i != range.second; ++i) {
+        if ((*i).second == caller)
+            return true;
+    }
+    return false;
+}
+
+void
+System::dumpState(ExecContext *xc) const
+{
+    if (xc->swCtx) {
+        stack<fnCall *> copy(xc->swCtx->callStack);
+        if (copy.empty())
+            return;
+        DPRINTF(TCPIP, "xc->swCtx, size: %d:\n", copy.size());
+        fnCall *top;
+        DPRINTF(TCPIP, "||     call : %d\n",xc->swCtx->calls);
+        for (top = copy.top(); !copy.empty(); copy.pop() ) {
+            top = copy.top();
+            DPRINTF(TCPIP, "||  %13s : %s \n", top->name, top->myBin->name());
+        }
+    }
+}
+
 Statistics::MainBin *
 System::getBin(const std::string &name)
 {
index 050d1dd112d0d8a8a6f37ada946ed4a64b87da25..564579fe481a2fa65f7facce14d6bf78dfda3823 100644 (file)
@@ -35,6 +35,7 @@
 #include "base/loader/symtab.hh"
 #include "base/statistics.hh"
 #include "cpu/pc_event.hh"
+#include "kern/system_events.hh"
 #include "sim/sim_object.hh"
 #include "sim/sw_context.hh"
 
@@ -48,17 +49,20 @@ class ExecContext;
 class System : public SimObject
 {
     // lisa's binning stuff
-  protected:
+  private:
     std::map<const std::string, Statistics::MainBin *> fnBins;
     std::map<const Addr, SWContext *> swCtxMap;
 
+  protected:
+    std::vector<FnEvent *> fnEvents;
+
   public:
     Statistics::Scalar<> fnCalls;
     Statistics::MainBin *Kernel;
     Statistics::MainBin *User;
 
     Statistics::MainBin * getBin(const std::string &name);
-    virtual bool findCaller(std::string, std::string) const = 0;
+    bool findCaller(std::string, std::string) const;
 
     SWContext *findContext(Addr pcb);
     bool addContext(Addr pcb, SWContext *ctx) {
@@ -68,18 +72,23 @@ class System : public SimObject
         swCtxMap.erase(pcb);
         return;
     }
-
-    virtual void dumpState(ExecContext *xc) const = 0;
+    void dumpState(ExecContext *xc) const;
 
     virtual void serialize(std::ostream &os);
     virtual void unserialize(Checkpoint *cp, const std::string &section);
-    //
+
+
+  private:
+    std::multimap<const std::string, std::string> callerMap;
+    void populateMap(std::string caller, std::string callee);
+//
 
   public:
     const uint64_t init_param;
     MemoryController *memCtrl;
     PhysicalMemory *physmem;
     bool bin;
+    std::vector<string> binned_fns;
 
     PCEventQueue pcEventQueue;
 
@@ -90,7 +99,8 @@ class System : public SimObject
 
   public:
     System(const std::string _name, const uint64_t _init_param,
-           MemoryController *, PhysicalMemory *, const bool);
+           MemoryController *, PhysicalMemory *, const bool,
+           const std::vector<string> &binned_fns);
     ~System();
 
     virtual Addr getKernelStart() const = 0;