45 #ifndef __ARCH_ARM_TRACERS_TARMAC_RECORD_HH__ 46 #define __ARCH_ARM_TRACERS_TARMAC_RECORD_HH__ 50 #include "config/the_isa.hh" 99 virtual void print(std::ostream& outs,
101 const std::string &prefix =
"")
const override;
134 virtual void print(std::ostream& outs,
136 const std::string &prefix =
"")
const override;
174 uint8_t _size,
Addr _addr, uint64_t _data);
176 virtual void print(std::ostream& outs,
178 const std::string &prefix =
"")
const override;
191 virtual void dump()
override;
193 using InstPtr = std::unique_ptr<TraceInstEntry>;
194 using MemPtr = std::unique_ptr<TraceMemEntry>;
195 using RegPtr = std::unique_ptr<TraceRegEntry>;
212 template<
typename RegEntry>
217 single_reg.update(tarmCtx);
222 template<
typename RegEntry>
227 auto it = std::remove_if(
228 queue.begin(), queue.end(),
232 if (it != queue.end()) {
234 queue.erase(it, queue.end());
243 auto cpsr_it = std::find_if(
244 queue.begin(), queue.end(), is_cpsr
248 if (cpsr_it == queue.end()) {
251 m5::make_unique<RegEntry>(
252 genRegister<RegEntry>(tarmCtx, reg))
259 template<
typename Queue>
261 template<
typename Queue,
typename... Args>
271 #endif // __ARCH_ARM_TRACERS_TARMAC_RECORD_HH__
TarmacTracer & tracer
Reference to tracer.
TraceInstEntry(const TarmacContext &tarmCtx, bool predicate)
std::string regName
Register name to be printed.
ISetState
ARM instruction set state.
Tarmac Tracer: this tracer generates a new Tarmac Record for every instruction being executed in gem5...
bool predicate
is the predicate for execution this inst true or false (not execed)?
std::string opModeToStr(OperatingMode opMode)
Returns the string representation of the ARM Operating Mode (CPSR.M[3:0] field) according to the Tarm...
std::unique_ptr< TraceRegEntry > RegPtr
This object type is encapsulating the informations needed by a Tarmac record to generate it's own ent...
RegClass
Enumerate the classes of registers.
bool loadAccess
True if memory access is a load.
TarmacTracerRecord(Tick _when, ThreadContext *_thread, const StaticInstPtr _staticInst, ArmISA::PCState _pc, TarmacTracer &_tracer, const StaticInstPtr _macroStaticInst=NULL)
bool secureMode
True if instruction is executed in secure mode.
static uint64_t instCount
Number of instructions being traced.
uint8_t instSize
Instruction size: 16 for 16-bit Thumb Instruction 32 otherwise (ARM and BigThumb) ...
virtual void addMemEntry(std::vector< MemPtr > &queue, const TarmacContext &ptr)
Generates an Entry for every triggered memory access.
void flushQueues(Queue &queue)
Flush queues to the trace output.
ThreadContext is the external interface to all thread state for anything outside of the CPU...
A high-level queue interface, to be used by both the MSHR queue and the write buffer.
RegClass regClass
Register class.
RegIndex regRel
Register arch number.
virtual void updateVec(const TarmacContext &tarmCtx, RegIndex regRelIdx)
virtual void print(std::ostream &outs, int verbosity=0, const std::string &prefix="") const override
std::unique_ptr< TraceMemEntry > MemPtr
uint64_t Tick
Tick count type.
bool regValid(Addr daddr)
virtual void addRegEntry(std::vector< RegPtr > &queue, const TarmacContext &ptr)
Generate an Entry for every register being written.
RegEntry genRegister(const TarmacContext &tarmCtx, const RegId ®)
Generate and update a register entry.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Abstract base class for objects which support being printed to a stream for debugging.
TarmacTracer Record: Record generated by the TarmacTracer for every executed instruction.
std::unique_ptr< TraceInstEntry > InstPtr
void mergeCCEntry(std::vector< RegPtr > &queue, const TarmacContext &tarmCtx)
TARMAC register trace record.
TARMAC memory access trace record (stores only).
std::string iSetStateToStr(TarmacBaseRecord::ISetState isetstate)
Returns the string representation of the instruction set being currently run according to the Tarmac ...
GenericISA::SimplePCState< MachInst > PCState
Register ID: describe an architectural register with its class and index.
virtual void updatePred(const TarmacContext &tarmCtx, RegIndex regRelIdx)
virtual void dump() override
virtual void addInstEntry(std::vector< InstPtr > &queue, const TarmacContext &ptr)
Generates an Entry for the executed instruction.