42 #include "config/the_isa.hh" 45 #include "debug/ExecEnable.hh" 46 #include "params/InstPBTrace.hh" 47 #include "proto/inst.pb.h" 70 :
InstTracer(p), buf(nullptr), bufSize(0), curMsg(nullptr)
86 ProtoMessage::InstHeader header_msg;
87 header_msg.set_obj_id(
"gem5 generated instruction trace");
88 header_msg.set_ver(0);
90 header_msg.set_has_mem(
true);
125 if (!Debug::ExecEnable)
150 curMsg =
new ProtoMessage::Inst;
152 if (instSize ==
sizeof(uint32_t)) {
153 curMsg->set_inst(
letoh(*reinterpret_cast<uint32_t *>(
buf.get())));
154 }
else if (instSize) {
156 std::string(reinterpret_cast<const char *>(
buf.get()),
bufSize));
160 curMsg->set_type(static_cast<ProtoMessage::Inst_InstType>(si->
opClass()));
169 curMsg->set_type(static_cast<ProtoMessage::Inst_InstType>(si->
opClass()));
171 ProtoMessage::Inst::MemAccess *mem_msg =
curMsg->add_mem_access();
172 mem_msg->set_addr(a);
173 mem_msg->set_size(s);
174 mem_msg->set_mem_flags(f);
182 InstPBTraceParams::create()
std::string resolve(const std::string &name) const
Returns relative file names prepended with name of this directory.
std::unique_ptr< uint8_t []> buf
A ProtoOutputStream wraps a coded stream, potentially with compression, based on looking at the file ...
void closeStreams()
If there is a pending message still write it out and then close the file.
void write(const google::protobuf::Message &msg)
Write a message to the stream, preprending it with the message size.
InstPBTraceRecord * getInstRecord(Tick when, ThreadContext *tc, const StaticInstPtr si, TheISA::PCState pc, const StaticInstPtr mi=NULL) override
virtual size_t asBytes(void *buf, size_t max_size)
Instruction classes can override this function to return a a representation of themselves as a blob o...
unsigned getFlags() const
This in an instruction tracer that records the flow of instructions through multiple cpus and systems...
Tick Frequency
The simulated frequency of curTick(). (In ticks per second)
ThreadContext is the external interface to all thread state for anything outside of the CPU...
Tick curTick()
The current simulated tick.
static ProtoOutputStream * traceStream
One output stream for the entire simulation.
friend class InstPBTraceRecord
virtual int cpuId() const =0
InstPBTrace(const InstPBTraceParams *p)
uint64_t Tick
Tick count type.
void registerExitCallback(Callback *callback)
Register an exit callback.
StaticInstPtr macroStaticInst
ProtoMessage::Inst * curMsg
This is the message were working on writing.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
OpClass opClass() const
Operation class. Used to select appropriate function unit in issue.
bool isFirstMicroop() const
void traceInst(ThreadContext *tc, StaticInstPtr si, TheISA::PCState pc)
Write an instruction to the trace file.
Helper template class to turn a simple class member function into a callback.
void createTraceFile(std::string filename)
Create the output file and write the header into it.
GenericISA::DelaySlotPCState< MachInst > PCState
#define panic_if(cond,...)
Conditional panic macro that checks the supplied condition and only panics if the condition is true a...
void traceMem(StaticInstPtr si, Addr a, Addr s, unsigned f)
Write a memory request to the trace file as part of the cur instruction.
void dump() override
called by the cpu when the instruction commits.