diff options
-rw-r--r-- | src/mem/probes/MemTraceProbe.py | 2 | ||||
-rw-r--r-- | src/mem/probes/mem_trace.cc | 25 | ||||
-rw-r--r-- | src/mem/probes/mem_trace.hh | 5 |
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 */ |