diff --git a/mem/bus.cc b/mem/bus.cc index 0cadc2045..8e8bc2203 100644 --- a/mem/bus.cc +++ b/mem/bus.cc @@ -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; diff --git a/mem/bus.hh b/mem/bus.hh index eff42c55a..fad44aba5 100644 --- a/mem/bus.hh +++ b/mem/bus.hh @@ -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 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) {} }; diff --git a/mem/physical.cc b/mem/physical.cc index 4087f3e32..603f8f63e 100644 --- a/mem/physical.cc +++ b/mem/physical.cc @@ -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;