mem: Ensure trace captures packet fields before forwarding
authorAndreas Hansson <andreas.hansson@armm.com>
Tue, 19 Feb 2013 10:56:05 +0000 (05:56 -0500)
committerAndreas Hansson <andreas.hansson@armm.com>
Tue, 19 Feb 2013 10:56:05 +0000 (05:56 -0500)
This patch fixes a bug in the CommMonitor caused by the packet being
modified before it is captured in the trace. By recording the fields
before passing the packet on, and then putting these values in the
trace we ensure that even if the packet is modified the trace captures
what the CommMonitor saw.

src/mem/comm_monitor.cc

index 88e549cbb7ad773f5fce8b429bb84a7709fc35ae..51e95b36b67eb983a57c31a43beade6152f2ed49 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012 ARM Limited
+ * Copyright (c) 2012-2013 ARM Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -162,6 +162,7 @@ CommMonitor::recvTimingReq(PacketPtr pkt)
     // or even deleted when sendTiming() is called.
     bool isRead = pkt->isRead();
     bool isWrite = pkt->isWrite();
+    int cmd = pkt->cmdToIndex();
     unsigned size = pkt->getSize();
     Addr addr = pkt->getAddr();
     bool needsResponse = pkt->needsResponse();
@@ -193,9 +194,9 @@ CommMonitor::recvTimingReq(PacketPtr pkt)
         // trace.
         Message::Packet pkt_msg;
         pkt_msg.set_tick(curTick());
-        pkt_msg.set_cmd(pkt->cmdToIndex());
-        pkt_msg.set_addr(pkt->getAddr());
-        pkt_msg.set_size(pkt->getSize());
+        pkt_msg.set_cmd(cmd);
+        pkt_msg.set_addr(addr);
+        pkt_msg.set_size(size);
 
         traceStream->write(pkt_msg);
     }