mem: Enable CommMonitor to output traces in atomic mode
authorGeoffrey Blake <Geoffrey.Blake@arm.com>
Thu, 19 Mar 2015 08:06:10 +0000 (04:06 -0400)
committerGeoffrey Blake <Geoffrey.Blake@arm.com>
Thu, 19 Mar 2015 08:06:10 +0000 (04:06 -0400)
The CommMonitor by default only allows memory traces to be gathered in
timing mode. This patch allows memory traces to be gathered in atomic
mode if all one needs is a functional trace of memory addresses used
and timing information is of a secondary concern.

src/mem/comm_monitor.cc

index dc4fa4bd4f75b94f515e4f015be1147389f7d7de..a0f8688f29c33a3b8c3efbe34727eae7256aef57 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2013 ARM Limited
+ * Copyright (c) 2012-2013, 2015 ARM Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -176,10 +176,23 @@ CommMonitor::recvFunctionalSnoop(PacketPtr pkt)
 Tick
 CommMonitor::recvAtomic(PacketPtr pkt)
 {
-    // allow stack distance calculations for atomic if enabled
+    // do stack distance calculations if enabled
     if (stackDistCalc)
         stackDistCalc->update(pkt->cmd, pkt->getAddr());
 
+   // if tracing enabled, store the packet information
+   // to the trace stream
+   if (traceStream != NULL) {
+        ProtoMessage::Packet pkt_msg;
+        pkt_msg.set_tick(curTick());
+        pkt_msg.set_cmd(pkt->cmdToIndex());
+        pkt_msg.set_flags(pkt->req->getFlags());
+        pkt_msg.set_addr(pkt->getAddr());
+        pkt_msg.set_size(pkt->getSize());
+
+        traceStream->write(pkt_msg);
+    }
+
     return masterPort.sendAtomic(pkt);
 }