summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mem/probes/MemTraceProbe.py2
-rw-r--r--src/mem/probes/mem_trace.cc25
-rw-r--r--src/mem/probes/mem_trace.hh5
3 files changed, 26 insertions, 6 deletions
diff --git a/src/mem/probes/MemTraceProbe.py b/src/mem/probes/MemTraceProbe.py
index c51ec9282..8daf94dbd 100644
--- a/src/mem/probes/MemTraceProbe.py
+++ b/src/mem/probes/MemTraceProbe.py
@@ -52,3 +52,5 @@ class MemTraceProbe(BaseMemProbe):
# packet trace output file, disabled by default
trace_file = Param.String("", "Packet trace output file")
+ # System object to look up the name associated with a master ID
+ system = Param.System(Parent.any, "System the probe belongs to")
diff --git a/src/mem/probes/mem_trace.cc b/src/mem/probes/mem_trace.cc
index 465c10004..6e55c48a1 100644
--- a/src/mem/probes/mem_trace.cc
+++ b/src/mem/probes/mem_trace.cc
@@ -44,10 +44,12 @@
#include "base/output.hh"
#include "params/MemTraceProbe.hh"
#include "proto/packet.pb.h"
+#include "sim/system.hh"
MemTraceProbe::MemTraceProbe(MemTraceProbeParams *p)
: BaseMemProbe(p),
traceStream(nullptr),
+ system(p->system),
withPC(p->with_pc)
{
std::string filename;
@@ -72,18 +74,29 @@ MemTraceProbe::MemTraceProbe(MemTraceProbeParams *p)
traceStream = new ProtoOutputStream(filename);
+ // Register a callback to compensate for the destructor not
+ // being called. The callback forces the stream to flush and
+ // closes the output file.
+ registerExitCallback(
+ new MakeCallback<MemTraceProbe, &MemTraceProbe::closeStreams>(this));
+}
+
+void
+MemTraceProbe::startup()
+{
// Create a protobuf message for the header and write it to
// the stream
ProtoMessage::PacketHeader header_msg;
header_msg.set_obj_id(name());
header_msg.set_tick_freq(SimClock::Frequency);
- traceStream->write(header_msg);
- // Register a callback to compensate for the destructor not
- // being called. The callback forces the stream to flush and
- // closes the output file.
- registerExitCallback(
- new MakeCallback<MemTraceProbe, &MemTraceProbe::closeStreams>(this));
+ for (int i = 0; i < system->maxMasters(); i++) {
+ auto id_string = header_msg.add_id_strings();
+ id_string->set_key(i);
+ id_string->set_value(system->getMasterName(i));
+ }
+
+ traceStream->write(header_msg);
}
void
diff --git a/src/mem/probes/mem_trace.hh b/src/mem/probes/mem_trace.hh
index 158c5aacb..51abebcf3 100644
--- a/src/mem/probes/mem_trace.hh
+++ b/src/mem/probes/mem_trace.hh
@@ -45,6 +45,7 @@
#include "proto/protoio.hh"
struct MemTraceProbeParams;
+class System;
class MemTraceProbe : public BaseMemProbe
{
@@ -60,11 +61,15 @@ class MemTraceProbe : public BaseMemProbe
*/
void closeStreams();
+ void startup() override;
+
protected:
/** Trace output stream */
ProtoOutputStream *traceStream;
+ System *system;
+
private:
/** Include the Program Counter in the memory trace */