diff --git a/src/mem/probes/MemTraceProbe.py b/src/mem/probes/MemTraceProbe.py index c51ec92824..8daf94dbd5 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 465c10004f..6e55c48a11 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,13 +74,6 @@ MemTraceProbe::MemTraceProbe(MemTraceProbeParams *p) traceStream = new ProtoOutputStream(filename); - // 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. @@ -86,6 +81,24 @@ MemTraceProbe::MemTraceProbe(MemTraceProbeParams *p) new MakeCallback(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); + + 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 MemTraceProbe::closeStreams() { diff --git a/src/mem/probes/mem_trace.hh b/src/mem/probes/mem_trace.hh index 158c5aacb6..51abebcf34 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 */