43#ifndef __ARCH_ARM_TRACERS_TARMAC_RECORD_HH__
44#define __ARCH_ARM_TRACERS_TARMAC_RECORD_HH__
102 virtual void print(std::ostream& outs,
104 const std::string &prefix =
"")
const override;
140 virtual void print(std::ostream& outs,
142 const std::string &prefix =
"")
const override;
167 uint8_t _size,
Addr _addr, uint64_t _data);
169 virtual void print(std::ostream& outs,
171 const std::string &prefix =
"")
const override;
184 virtual void dump()
override;
186 using InstPtr = std::unique_ptr<TraceInstEntry>;
187 using MemPtr = std::unique_ptr<TraceMemEntry>;
188 using RegPtr = std::unique_ptr<TraceRegEntry>;
205 template<
typename RegEntry>
210 single_reg.update(tarmCtx);
215 template<
typename RegEntry>
220 auto it = std::remove_if(
221 queue.begin(), queue.end(),
223 return (reg->regId.classValue() == CCRegClass);
227 if (it != queue.end()) {
229 queue.erase(it, queue.end());
238 auto cpsr_it = std::find_if(
239 queue.begin(), queue.end(), is_cpsr
243 if (cpsr_it == queue.end()) {
246 std::make_unique<RegEntry>(
254 template<
typename Queue>
256 template<
typename Queue,
typename... Args>
Abstract base class for objects which support being printed to a stream for debugging.
A high-level queue interface, to be used by both the MSHR queue and the write buffer.
Register ID: describe an architectural register with its class and index.
ThreadContext is the external interface to all thread state for anything outside of the CPU.
bool predicate
is the predicate for execution this inst true or false (not execed)?
ISetState
ARM instruction set state.
This object type is encapsulating the informations needed by a Tarmac record to generate it's own ent...
TarmacTracer Record: Record generated by the TarmacTracer for every executed instruction.
std::unique_ptr< TraceRegEntry > RegPtr
virtual void addInstEntry(std::vector< InstPtr > &queue, const TarmacContext &ptr)
Generates an Entry for the executed instruction.
void mergeCCEntry(std::vector< RegPtr > &queue, const TarmacContext &tarmCtx)
RegEntry genRegister(const TarmacContext &tarmCtx, const RegId ®)
Generate and update a register entry.
std::unique_ptr< TraceMemEntry > MemPtr
virtual void addRegEntry(std::vector< RegPtr > &queue, const TarmacContext &ptr)
Generate an Entry for every register being written.
virtual void dump() override
TarmacTracerRecord(Tick _when, ThreadContext *_thread, const StaticInstPtr _staticInst, const PCStateBase &_pc, TarmacTracer &_tracer, const StaticInstPtr _macroStaticInst=NULL)
void flushQueues(Queue &queue)
Flush queues to the trace output.
virtual void addMemEntry(std::vector< MemPtr > &queue, const TarmacContext &ptr)
Generates an Entry for every triggered memory access.
TarmacTracer & tracer
Reference to tracer.
std::unique_ptr< TraceInstEntry > InstPtr
Tarmac Tracer: this tracer generates a new Tarmac Record for every instruction being executed in gem5...
constexpr RegClass miscRegClass
std::string iSetStateToStr(TarmacBaseRecord::ISetState isetstate)
Returns the string representation of the instruction set being currently run according to the Tarmac ...
std::string opModeToStr(OperatingMode opMode)
Returns the string representation of the ARM Operating Mode (CPSR.M[3:0] field) according to the Tarm...
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
uint64_t Tick
Tick count type.
@ MiscRegClass
Control (misc) register.
TARMAC instruction trace record.
TARMAC memory access trace record (stores only).
TARMAC register trace record.
bool secureMode
True if instruction is executed in secure mode.
virtual void print(std::ostream &outs, int verbosity=0, const std::string &prefix="") const override
std::string disassemble
Instruction disassembly.
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)
TraceInstEntry(const TarmacContext &tarmCtx, bool predicate)
TraceMemEntry(const TarmacContext &tarmCtx, uint8_t _size, Addr _addr, uint64_t _data)
virtual void print(std::ostream &outs, int verbosity=0, const std::string &prefix="") const override
bool loadAccess
True if memory access is a load.
void update(const TarmacContext &tarmCtx)
This updates the register entry using the update table.
bool regValid
True if register entry is valid.
virtual void updateCC(const TarmacContext &tarmCtx)
virtual void updatePred(const TarmacContext &tarmCtx)
virtual void updateFloat(const TarmacContext &tarmCtx)
virtual void print(std::ostream &outs, int verbosity=0, const std::string &prefix="") const override
virtual void updateMisc(const TarmacContext &tarmCtx)
Register update functions.
virtual void updateVec(const TarmacContext &tarmCtx)
TraceRegEntry(const TarmacContext &tarmCtx, const RegId ®)
std::string regName
Register name to be printed.
virtual void updateInt(const TarmacContext &tarmCtx)