42 #ifndef __ARM_FAULTS_HH__ 43 #define __ARM_FAULTS_HH__ 184 const uint16_t& currELTOffset_,
const uint16_t& currELHOffset_,
185 const uint16_t& lowerEL64Offset_,
186 const uint16_t& lowerEL32Offset_,
188 const uint8_t& thumbPcOffset_,
const uint8_t& armPcElrOffset_,
189 const uint8_t& thumbPcElrOffset_,
const bool& hypTrappable_,
190 const bool& abortDisable_,
const bool& fiqDisable_,
192 : name(name_), offset(offset_), currELTOffset(currELTOffset_),
193 currELHOffset(currELHOffset_), lowerEL64Offset(lowerEL64Offset_),
194 lowerEL32Offset(lowerEL32Offset_), nextMode(nextMode_),
195 armPcOffset(armPcOffset_), thumbPcOffset(thumbPcOffset_),
196 armPcElrOffset(armPcElrOffset_), thumbPcElrOffset(thumbPcElrOffset_),
197 hypTrappable(hypTrappable_), abortDisable(abortDisable_),
198 fiqDisable(fiqDisable_), ec(ec_) {}
202 machInst(_machInst), issRaw(_iss), from64(false), to64(false),
204 faultUpdated(false), hypRouted(false), span(false) {}
234 virtual uint32_t
iss()
const = 0;
298 const char *_mnemonic = NULL,
299 bool _disabled =
false) :
301 unknown(_unknown), disabled(_disabled),
307 unknown(false), disabled(true), overrideEc(_overrideEc),
315 uint32_t
iss()
const override;
326 overrideEc(_overrideEc)
333 uint32_t
iss()
const override;
346 uint32_t
iss()
const override;
359 overrideEc(_overrideEc)
363 uint32_t
iss()
const override;
377 overrideEc(_overrideEc)
401 overrideEc(_overrideEc)
434 uint8_t _source,
bool _stage2,
436 faultAddr(_faultAddr), OVAddr(0), write(_write),
437 domain(_domain), source(_source), srcEncoded(0),
438 stage2(_stage2), s1ptw(false), tranMethod(_tranMethod)
449 uint32_t
iss()
const override;
453 bool isMMUFault()
const;
466 _source, _stage2, _tranMethod)
495 isv(false), sas (0), sse(0), srt(0), cm(0), sf(false), ar(false)
502 uint32_t
iss()
const override;
650 #endif // __ARM_FAULTS_HH__ ExceptionClass overrideEc
bool abortDisable(ThreadContext *tc) override
HypervisorTrap(ExtMachInst _machInst, uint32_t _iss, ExceptionClass _overrideEc=EC_INVALID)
static uint8_t aarch64FaultSources[NumFaultSources]
Encodings of the fault sources in AArch64 state.
Illegal Instruction Set State fault (AArch64 only)
ExceptionClass overrideEc
MiscRegIndex getFaultAddrReg64() const
Stack pointer alignment fault (AArch64 only)
const uint16_t currELTOffset
DataAbort(Addr _addr, TlbEntry::DomainType _domain, bool _write, uint8_t _source, bool _stage2=false, ArmFault::TranMethod _tranMethod=ArmFault::UnknownTran)
System error (AArch64 only)
PCAlignmentFault(Addr _faultPC)
FaultName name() const override
ExceptionClass ec(ThreadContext *tc) const override
const OperatingMode nextMode
uint8_t armPcOffset(bool isHyp) override
virtual FSR getFsr(ThreadContext *tc) const
const uint16_t currELHOffset
uint8_t thumbPcElrOffset() override
ThreadContext is the external interface to all thread state for anything outside of the CPU...
This is a simple scalar statistic, like a counter.
uint8_t armPcElrOffset() override
PrefetchAbort(Addr _addr, uint8_t _source, bool _stage2=false, ArmFault::TranMethod _tranMethod=ArmFault::UnknownTran)
VirtualDataAbort(Addr _addr, TlbEntry::DomainType _domain, bool _write, uint8_t _source)
virtual bool routeToHyp(ThreadContext *tc) const
AbortFault(Addr _faultAddr, bool _write, TlbEntry::DomainType _domain, uint8_t _source, bool _stage2, ArmFault::TranMethod _tranMethod=ArmFault::UnknownTran)
virtual FaultOffset offset64(ThreadContext *tc)=0
Addr faultAddr
The virtual address the fault occured at.
static uint8_t shortDescFaultSources[NumFaultSources]
Encodings of the fault sources when the short-desc.
virtual bool getFaultVAddr(Addr &va) const
ExceptionClass overrideEc
SupervisorTrap(ExtMachInst _machInst, uint32_t _iss, ExceptionClass _overrideEc=EC_INVALID)
bool isStage2() const override
SecureMonitorCall(ExtMachInst _machInst)
TlbEntry::DomainType domain
PC alignment fault (AArch64 only)
UndefinedInstruction(ExtMachInst _machInst, bool _unknown, const char *_mnemonic=NULL, bool _disabled=false)
static uint8_t longDescFaultSources[NumFaultSources]
Encodings of the fault sources when the long-desc.
const uint8_t thumbPcElrOffset
ArmFault::TranMethod tranMethod
System error (AArch64 only)
UndefinedInstruction(ExtMachInst _machInst, uint32_t _iss, ExceptionClass _overrideEc, const char *_mnemonic=NULL)
ExceptionClass overrideEc
const uint16_t lowerEL32Offset
virtual void annotate(AnnotationIDs id, uint64_t val)
ArmStaticInst * instrAnnotate(const StaticInstPtr &inst)
virtual bool routeToMonitor(ThreadContext *tc) const override
const uint16_t lowerEL64Offset
uint32_t iss() const override
FaultStat & countStat() override
const uint8_t armPcElrOffset
virtual FaultStat & countStat()=0
virtual bool routeToMonitor(ThreadContext *tc) const =0
SecureMonitorTrap(ExtMachInst _machInst, uint32_t _iss, ExceptionClass _overrideEc=EC_INVALID)
Addr OVAddr
Original virtual address.
Addr getVector64(ThreadContext *tc)
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
MiscRegIndex getSyndromeReg64() const
void invoke64(ThreadContext *tc, const StaticInstPtr &inst=StaticInst::nullStaticInstPtr)
const uint8_t thumbPcOffset
SupervisorCall(ExtMachInst _machInst, uint32_t _iss, ExceptionClass _overrideEc=EC_INVALID)
virtual bool isStage2() const
virtual uint32_t iss() const =0
uint8_t thumbPcOffset(bool isHyp) override
virtual Addr getVector(ThreadContext *tc)
FaultVals(const FaultName &name_, const FaultOffset &offset_, const uint16_t &currELTOffset_, const uint16_t &currELHOffset_, const uint16_t &lowerEL64Offset_, const uint16_t &lowerEL32Offset_, const OperatingMode &nextMode_, const uint8_t &armPcOffset_, const uint8_t &thumbPcOffset_, const uint8_t &armPcElrOffset_, const uint8_t &thumbPcElrOffset_, const bool &hypTrappable_, const bool &abortDisable_, const bool &fiqDisable_, const ExceptionClass &ec_)
void invoke(ThreadContext *tc, const StaticInstPtr &inst=StaticInst::nullStaticInstPtr) override
bool fiqDisable(ThreadContext *tc) override
const uint8_t armPcOffset
FaultSource
Generic fault source enums used to index into {short/long/aarch64}DescFaultSources[] to get the actua...
void update(ThreadContext *tc)
OperatingMode nextMode() override
virtual void setSyndrome(ThreadContext *tc, MiscRegIndex syndrome_reg)
static StaticInstPtr nullStaticInstPtr
Pointer to a statically allocated "null" instruction object.
Addr faultPC
The unaligned value of the PC.
std::shared_ptr< FaultBase > Fault
ExceptionClass overrideEc
ArmFault(ExtMachInst _machInst=0, uint32_t _iss=0)