diff options
Diffstat (limited to 'src/mem')
-rw-r--r-- | src/mem/probes/MemTraceProbe.py | 3 | ||||
-rw-r--r-- | src/mem/probes/mem_trace.cc | 5 | ||||
-rw-r--r-- | src/mem/probes/mem_trace.hh | 5 |
3 files changed, 12 insertions, 1 deletions
diff --git a/src/mem/probes/MemTraceProbe.py b/src/mem/probes/MemTraceProbe.py index 971765eb4..c51ec9282 100644 --- a/src/mem/probes/MemTraceProbe.py +++ b/src/mem/probes/MemTraceProbe.py @@ -46,6 +46,9 @@ class MemTraceProbe(BaseMemProbe): # Boolean to compress the trace or not. trace_compress = Param.Bool(True, "Enable trace compression") + # For requests with a valid PC, include the PC in the trace + with_pc = Param.Bool(False, "Include PC info in the trace") + # packet trace output file, disabled by default trace_file = Param.String("", "Packet trace output file") diff --git a/src/mem/probes/mem_trace.cc b/src/mem/probes/mem_trace.cc index 121c6de48..97b97daae 100644 --- a/src/mem/probes/mem_trace.cc +++ b/src/mem/probes/mem_trace.cc @@ -47,7 +47,8 @@ MemTraceProbe::MemTraceProbe(MemTraceProbeParams *p) : BaseMemProbe(p), - traceStream(nullptr) + traceStream(nullptr), + withPC(p->with_pc) { std::string filename; if (p->trace_file != "") { @@ -102,6 +103,8 @@ MemTraceProbe::handleRequest(const ProbePoints::PacketInfo &pkt_info) pkt_msg.set_flags(pkt_info.flags); pkt_msg.set_addr(pkt_info.addr); pkt_msg.set_size(pkt_info.size); + if (withPC && pkt_info.pc != 0) + pkt_msg.set_pc(pkt_info.pc); traceStream->write(pkt_msg); } diff --git a/src/mem/probes/mem_trace.hh b/src/mem/probes/mem_trace.hh index d34235eef..158c5aacb 100644 --- a/src/mem/probes/mem_trace.hh +++ b/src/mem/probes/mem_trace.hh @@ -64,6 +64,11 @@ class MemTraceProbe : public BaseMemProbe /** Trace output stream */ ProtoOutputStream *traceStream; + + private: + + /** Include the Program Counter in the memory trace */ + const bool withPC; }; #endif //__MEM_PROBES_MEM_TRACE_HH__ |