a bit of bad code trampling on memory
authorAli Saidi <saidi@eecs.umich.edu>
Fri, 7 Apr 2006 20:26:22 +0000 (16:26 -0400)
committerAli Saidi <saidi@eecs.umich.edu>
Fri, 7 Apr 2006 20:26:22 +0000 (16:26 -0400)
--HG--
extra : convert_revision : c0252dce6d7fc4c35ecd9f87ac4555e704de91b7

mem/bus.cc
mem/bus.hh
mem/physical.cc

index 0cadc204581ac2bde089540af5a24eb62ebc669a..8e8bc220368298c63241687da4bf137b961a6c5d 100644 (file)
@@ -85,8 +85,10 @@ Bus::recvFunctional(Packet &pkt, int id)
 void
 Bus::recvStatusChange(Port::Status status, int id)
 {
-    assert(status == Port:: RangeChange &&
+    assert(status == Port::RangeChange &&
            "The other statuses need to be implemented.");
+
+    assert(id < interfaces.size() && id >= 0);
     Port *port = interfaces[id];
     AddrRangeList ranges;
     AddrRangeList snoops;
index eff42c55a4472723eb9ca4454eaca7fe74d6af39..fad44aba5f710d90258ae75becc964b17cdfc416 100644 (file)
@@ -127,12 +127,9 @@ class Bus : public MemObject
 
     };
 
-    /** A count of the number of interfaces connected to this bus. */
-    int num_interfaces;
-
     /** An array of pointers to the peer port interfaces
         connected to this bus.*/
-    Port *interfaces[];
+    std::vector<Port*> interfaces;
 
   public:
 
@@ -140,12 +137,12 @@ class Bus : public MemObject
     virtual Port *getPort(const std::string &if_name)
     {
         // if_name ignored?  forced to be empty?
-        int id = num_interfaces++;
-        interfaces[id] = new BusPort(this, id);
-        return interfaces[id];
+        int id = interfaces.size();
+        interfaces.push_back(new BusPort(this, id));
+        return interfaces.back();
     }
     Bus(const std::string &n)
-        : MemObject(n), num_interfaces(0) {}
+        : MemObject(n)  {}
 
 };
 
index 4087f3e329a4e9ecc67f63116f2b8b1d2e34a127..603f8f63eccccfe926e5056c38a7b5fe64ec72bf 100644 (file)
@@ -70,7 +70,7 @@ PhysicalMemory::MemResponseEvent::description()
 }
 
 PhysicalMemory::PhysicalMemory(const string &n)
-    : MemObject(n), base_addr(0), pmem_addr(NULL)
+    : MemObject(n), base_addr(0), pmem_addr(NULL), port(NULL)
 {
     // Hardcoded to 128 MB for now.
     pmem_size = 1 << 27;