Add names to memory Port objects for tracing.
authorSteve Reinhardt <stever@eecs.umich.edu>
Fri, 26 May 2006 17:48:35 +0000 (13:48 -0400)
committerSteve Reinhardt <stever@eecs.umich.edu>
Fri, 26 May 2006 17:48:35 +0000 (13:48 -0400)
--HG--
extra : convert_revision : ddf30084e343e8656e4812ab20356292b35507ee

16 files changed:
src/cpu/cpu_exec_context.cc
src/cpu/simple/atomic.cc
src/cpu/simple/atomic.hh
src/cpu/simple/timing.hh
src/dev/io_device.cc
src/mem/bridge.hh
src/mem/bus.cc
src/mem/bus.hh
src/mem/physical.cc
src/mem/physical.hh
src/mem/port.hh
src/mem/translating_port.cc
src/mem/translating_port.hh
src/mem/vport.hh
src/sim/process.cc
src/sim/system.cc

index ec1e945612feff7c69c6517365351349c4efb702..b8aa9a67e076b569f142c941171354f303627778 100644 (file)
@@ -80,12 +80,14 @@ CPUExecContext::CPUExecContext(BaseCPU *_cpu, int _thread_num, System *_sys,
     profilePC = 3;
 
     Port *mem_port;
-    physPort = new FunctionalPort();
+    physPort = new FunctionalPort(csprintf("%s-%d-funcport",
+                                           cpu->name(), thread_num));
     mem_port = system->physmem->getPort("functional");
     mem_port->setPeer(physPort);
     physPort->setPeer(mem_port);
 
-    virtPort = new VirtualPort();
+    virtPort = new VirtualPort(csprintf("%s-%d-vport",
+                                        cpu->name(), thread_num));
     mem_port = system->physmem->getPort("functional");
     mem_port->setPeer(virtPort);
     virtPort->setPeer(mem_port);
@@ -100,7 +102,9 @@ CPUExecContext::CPUExecContext(BaseCPU *_cpu, int _thread_num,
 {
     /* Use this port to for syscall emulation writes to memory. */
     Port *mem_port;
-    port = new TranslatingPort(process->pTable, false);
+    port = new TranslatingPort(csprintf("%s-%d-funcport",
+                                        cpu->name(), thread_num),
+                               process->pTable, false);
     mem_port = memobj->getPort("functional");
     mem_port->setPeer(port);
     port->setPeer(mem_port);
@@ -300,7 +304,7 @@ CPUExecContext::getVirtPort(ExecContext *xc)
     VirtualPort *vp;
     Port *mem_port;
 
-    vp = new VirtualPort(xc);
+    vp = new VirtualPort("xc-vport", xc);
     mem_port = system->physmem->getPort("functional");
     mem_port->setPeer(vp);
     vp->setPeer(mem_port);
index e9422b9c051c5a09afb2083cfd17d9ace37a46e2..04a84c92aa3e18257232af68cac74f7638cf7772 100644 (file)
@@ -117,7 +117,7 @@ AtomicSimpleCPU::CpuPort::recvRetry()
 AtomicSimpleCPU::AtomicSimpleCPU(Params *p)
     : BaseSimpleCPU(p), tickEvent(this),
       width(p->width), simulate_stalls(p->simulate_stalls),
-      icachePort(this), dcachePort(this)
+      icachePort(name() + "-iport", this), dcachePort(name() + "-iport", this)
 {
     _status = Idle;
 
index d0ba085f0cae75c9896457b60ed6a4dd3e23fbcc..ab3a3e8ef02990d690bc055c2e0a04bb20e730fb 100644 (file)
@@ -84,8 +84,8 @@ class AtomicSimpleCPU : public BaseSimpleCPU
 
       public:
 
-        CpuPort(AtomicSimpleCPU *_cpu)
-            : cpu(_cpu)
+        CpuPort(const std::string &_name, AtomicSimpleCPU *_cpu)
+            : Port(_name), cpu(_cpu)
         { }
 
       protected:
index 83be025d95162673e264186187cc267419d270e4..7f38e629a66b542f74afd2aee3601278eebeea73 100644 (file)
@@ -71,8 +71,8 @@ class TimingSimpleCPU : public BaseSimpleCPU
 
       public:
 
-        CpuPort(TimingSimpleCPU *_cpu)
-            : cpu(_cpu)
+        CpuPort(const std::string &_name, TimingSimpleCPU *_cpu)
+            : Port(_name), cpu(_cpu)
         { }
 
       protected:
@@ -93,7 +93,7 @@ class TimingSimpleCPU : public BaseSimpleCPU
       public:
 
         IcachePort(TimingSimpleCPU *_cpu)
-            : CpuPort(_cpu)
+            : CpuPort(_cpu->name() + "-iport", _cpu)
         { }
 
       protected:
@@ -108,7 +108,7 @@ class TimingSimpleCPU : public BaseSimpleCPU
       public:
 
         DcachePort(TimingSimpleCPU *_cpu)
-            : CpuPort(_cpu)
+            : CpuPort(_cpu->name() + "-dport", _cpu)
         { }
 
       protected:
index 5f7770a92a4ef11e92b6f9ba64d5556661bab7fd..28b50f9e87af307734a81182781b7bb43c57d296 100644 (file)
@@ -31,7 +31,7 @@
 
 
 PioPort::PioPort(PioDevice *dev, Platform *p)
-        : device(dev), platform(p)
+    : Port(dev->name() + "-pioport"), device(dev), platform(p)
 { }
 
 
@@ -108,7 +108,7 @@ BasicPioDevice::addressRanges(AddrRangeList &range_list)
 
 
 DmaPort::DmaPort(DmaDevice *dev, Platform *p)
-        : device(dev), platform(p), pendingCount(0)
+    : Port(dev->name() + "-dmaport"), device(dev), platform(p), pendingCount(0)
 { }
 
 bool
index 5f19ded40ad6713702f0428bce77e5214bd8d0d4..2672a6e8cd589b67eea519ade4e22f147940a861 100644 (file)
@@ -95,7 +95,7 @@ class Bridge : public MemObject
 
         /** Constructor for the BusPort.*/
         BridgePort(Bridge *_bridge, Side _side)
-            : bridge(_bridge), side(_side)
+            : Port(""), bridge(_bridge), side(_side)
         { }
 
         int numQueued() { return outbound.size(); }
index e8dfbc2e6495370625a9400d557566a357f0c27d..4139bf643afd727257d99c3e776f33779a426e14 100644 (file)
 #include "mem/bus.hh"
 #include "sim/builder.hh"
 
+Port *
+Bus::getPort(const std::string &if_name)
+{
+    // if_name ignored?  forced to be empty?
+    int id = interfaces.size();
+    BusPort *bp = new BusPort(csprintf("%s-p%d", name(), id), this, id);
+    interfaces.push_back(bp);
+    return bp;
+}
+
 /** Get the ranges of anyone that we are connected to. */
 void
 Bus::init()
index 38573e5148ef8d3382691d7d73849a9403f39133..1d3a7e528a9dd035f0ca16149294181b8a8cb134 100644 (file)
@@ -100,8 +100,8 @@ class Bus : public MemObject
       public:
 
         /** Constructor for the BusPort.*/
-        BusPort(Bus *_bus, int _id)
-            : bus(_bus), id(_id)
+        BusPort(const std::string &_name, Bus *_bus, int _id)
+            : Port(_name), bus(_bus), id(_id)
         { }
 
       protected:
@@ -146,13 +146,7 @@ class Bus : public MemObject
   public:
 
     /** A function used to return the port associated with this bus object. */
-    virtual Port *getPort(const std::string &if_name)
-    {
-        // if_name ignored?  forced to be empty?
-        int id = interfaces.size();
-        interfaces.push_back(new BusPort(this, id));
-        return interfaces.back();
-    }
+    virtual Port *getPort(const std::string &if_name);
 
     virtual void init();
 
index 75179f9e3b156d113a0b2e540fca813356e28687..ae27d762f16936ab1cccb6b9f166c9721015f4a7 100644 (file)
@@ -175,11 +175,11 @@ PhysicalMemory::getPort(const std::string &if_name)
     if (if_name == "") {
         if (port != NULL)
            panic("PhysicalMemory::getPort: additional port requested to memory!");
-        port = new MemoryPort(this);
+        port = new MemoryPort(name() + "-port", this);
         return port;
     } else if (if_name == "functional") {
         /* special port for functional writes at startup. */
-        return new MemoryPort(this);
+        return new MemoryPort(name() + "-funcport", this);
     } else {
         panic("PhysicalMemory::getPort: unknown port %s requested", if_name);
     }
@@ -190,8 +190,9 @@ PhysicalMemory::recvStatusChange(Port::Status status)
 {
 }
 
-PhysicalMemory::MemoryPort::MemoryPort(PhysicalMemory *_memory)
-    : memory(_memory)
+PhysicalMemory::MemoryPort::MemoryPort(const std::string &_name,
+                                       PhysicalMemory *_memory)
+    : Port(_name), memory(_memory)
 { }
 
 void
index 1cf5444abe49c6fdbb47fb5b0e5a8625721d717b..2ced7904545ac3257c94532d38770d762622b980 100644 (file)
@@ -51,7 +51,7 @@ class PhysicalMemory : public MemObject
 
       public:
 
-        MemoryPort(PhysicalMemory *_memory);
+        MemoryPort(const std::string &_name, PhysicalMemory *_memory);
 
       protected:
 
index 1b1920c037c7eb7d2407d42448d3b32d06dabf9c..e8a20235adb2636205421d50b051ae06b54a492f 100644 (file)
@@ -69,9 +69,28 @@ typedef std::list<Range<Addr> >::iterator AddrRangeIter;
  */
 class Port
 {
+  private:
+
+    /** Descriptive name (for DPRINTF output) */
+    const std::string portName;
+
   public:
 
+    /**
+     * Constructor.
+     *
+     * @param _name Port name for DPRINTF output.  Should include name
+     * of memory system object to which the port belongs.
+     */
+    Port(const std::string &_name)
+        : portName(_name)
+    { }
+
+    /** Return port name (for DPRINTF). */
+    const std::string &name() const { return portName; }
+
     virtual ~Port() {};
+
     // mey be better to use subclasses & RTTI?
     /** Holds the ports status.  Keeps track if it is blocked, or has
         calculated a range change. */
@@ -224,6 +243,10 @@ class Port
 class FunctionalPort : public Port
 {
   public:
+    FunctionalPort(const std::string &_name)
+        : Port(_name)
+    {}
+
     virtual bool recvTiming(Packet *pkt) { panic("FuncPort is UniDir"); }
     virtual Tick recvAtomic(Packet *pkt) { panic("FuncPort is UniDir"); }
     virtual void recvFunctional(Packet *pkt) { panic("FuncPort is UniDir"); }
index 5dfeaff3146fc6bdb5b5983185438c1f0f074813..ee4d277b6f49609741c45cd48209274c5fc102e0 100644 (file)
@@ -34,8 +34,9 @@
 
 using namespace TheISA;
 
-TranslatingPort::TranslatingPort(PageTable *p_table, bool alloc)
-    : pTable(p_table), allocating(alloc)
+TranslatingPort::TranslatingPort(const std::string &_name,
+                                 PageTable *p_table, bool alloc)
+    : FunctionalPort(_name), pTable(p_table), allocating(alloc)
 { }
 
 TranslatingPort::~TranslatingPort()
index 7611ac3c7d2ff003cc2896577d01e819ab21bea8..d078158a3ef46a84fbbd18054061a8500f5ac4d7 100644 (file)
@@ -39,14 +39,11 @@ class TranslatingPort : public FunctionalPort
     PageTable *pTable;
     bool allocating;
 
-    TranslatingPort(const TranslatingPort &specmem);
-    const TranslatingPort &operator=(const TranslatingPort &specmem);
-
   public:
-    TranslatingPort(PageTable *p_table, bool alloc = false);
+    TranslatingPort(const std::string &_name,
+                    PageTable *p_table, bool alloc = false);
     virtual ~TranslatingPort();
 
-  public:
     bool tryReadBlob(Addr addr, uint8_t *p, int size);
     bool tryWriteBlob(Addr addr, uint8_t *p, int size);
     bool tryMemsetBlob(Addr addr, uint8_t val, int size);
@@ -56,9 +53,9 @@ class TranslatingPort : public FunctionalPort
     virtual void readBlob(Addr addr, uint8_t *p, int size);
     virtual void writeBlob(Addr addr, uint8_t *p, int size);
     virtual void memsetBlob(Addr addr, uint8_t val, int size);
+
     void writeString(Addr addr, const char *str);
     void readString(std::string &str, Addr addr);
-
 };
 
 #endif
index fbc230ba33ed4f5d71e09ae3fba34cc76ba28c47..0f3b1f09e24081f6d2747848e37075603690f20e 100644 (file)
@@ -53,8 +53,8 @@ class VirtualPort  : public FunctionalPort
     ExecContext *xc;
 
   public:
-    VirtualPort(ExecContext *_xc = NULL)
-        : xc(_xc)
+    VirtualPort(const std::string &_name, ExecContext *_xc = NULL)
+        : FunctionalPort(_name), xc(_xc)
     {}
 
     /** Return true if we have an exec context. This is used to prevent someone
index 1261b84367cdeb6f1b17e1d1dd4bb06080567c29..1da5250938356e959646cdb4b4d2659100bab761 100644 (file)
@@ -154,7 +154,7 @@ Process::startup()
 
     Port *mem_port;
     mem_port = system->physmem->getPort("functional");
-    initVirtMem = new TranslatingPort(pTable, true);
+    initVirtMem = new TranslatingPort("process init port", pTable, true);
     mem_port->setPeer(initVirtMem);
     initVirtMem->setPeer(mem_port);
 }
index ca9d68d77fd9b70b2615673bfae72f1831685d6e..89f39491e552797067c015b4030841c0b4bbdeba 100644 (file)
@@ -25,6 +25,8 @@ System::System(Params *p)
     : SimObject(p->name), physmem(p->physmem), numcpus(0),
 #if FULL_SYSTEM
       init_param(p->init_param),
+      functionalPort(p->name + "-fport"),
+      virtPort(p->name + "-vport"),
 #else
       page_ptr(0),
 #endif