Go to the documentation of this file.
42 #ifndef __ARM_FAULTS_HH__
43 #define __ARM_FAULTS_HH__
197 uint16_t curr_elt_offset, uint16_t curr_elh_offset,
198 uint16_t lower_el64_offset,
199 uint16_t lower_el32_offset,
201 uint8_t thumb_pc_offset, uint8_t arm_pc_elr_offset,
202 uint8_t thumb_pc_elr_offset,
bool hyp_trappable,
203 bool abort_disable,
bool fiq_disable,
253 virtual uint32_t
iss()
const = 0;
336 const char *_mnemonic = NULL,
337 bool _disabled =
false) :
356 uint32_t
iss()
const override;
379 uint32_t
iss()
const override;
397 uint32_t
iss()
const override;
417 uint32_t
iss()
const override;
495 uint8_t _source,
bool _stage2,
529 _source, _stage2, _tranMethod, _debug)
540 uint32_t
iss()
const override;
564 _tranMethod, _debug_type),
577 uint32_t
iss()
const override;
711 uint32_t
iss()
const override;
727 uint32_t
iss()
const override;
794 #endif // __ARM_FAULTS_HH__
const uint8_t thumbPcElrOffset
void annotate(ArmFault::AnnotationIDs id, uint64_t val) override
void setSyndrome(ThreadContext *tc, MiscRegIndex syndrome_reg) override
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
bool routeToMonitor(ThreadContext *tc) const override
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
uint8_t thumbPcElrOffset() override
bool routeToHyp(ThreadContext *tc) const override
const uint16_t lowerEL32Offset
static const MiscRegIndex FsrIndex
AbortFault(Addr _faultAddr, bool _write, TlbEntry::DomainType _domain, uint8_t _source, bool _stage2, ArmFault::TranMethod _tranMethod=ArmFault::UnknownTran, ArmFault::DebugType _debug=ArmFault::NODEBUG)
Addr faultPC
The unaligned value of the PC.
virtual bool abortDisable(ThreadContext *tc)=0
bool il(ThreadContext *tc) const override
Syndrome methods.
uint32_t vectorCatchFlag() const override
bool il(ThreadContext *tc) const override
ExceptionClass overrideEc
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
uint32_t vectorCatchFlag() const override
bool routeToHyp(ThreadContext *tc) const override
@ SynchExtAbtOnTranslTableWalkLL
UndefinedInstruction(ExtMachInst mach_inst, bool _unknown, const char *_mnemonic=NULL, bool _disabled=false)
uint32_t vectorCatchFlag() const override
uint32_t vectorCatchFlag() const override
static const MiscRegIndex HFarIndex
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
ExceptionClass overrideEc
@ SynchronousExternalAbort
bool abortDisable(ThreadContext *tc) override
uint32_t iss() const override
uint32_t vectorCatchFlag() const override
bool routeToHyp(ThreadContext *tc) const override
ArmFault(ExtMachInst mach_inst=0, uint32_t _iss=0)
bool routeToHyp(ThreadContext *tc) const override
virtual uint8_t armPcElrOffset()=0
bool il(ThreadContext *tc) const override
uint8_t getFaultStatusCode(ThreadContext *tc) const
bool routeToMonitor(ThreadContext *tc) const override
PC alignment fault (AArch64 only)
bool routeToMonitor(ThreadContext *tc) const override
@ SynchPtyErrOnMemoryAccess
virtual FaultOffset offset64(ThreadContext *tc)=0
bool routeToHyp(ThreadContext *tc) const override
ArmFault::DebugType debugType
HypervisorTrap(ExtMachInst mach_inst, uint32_t _iss, ExceptionClass _overrideEc=ExceptionClass::INVALID)
static const MiscRegIndex FarIndex
OperatingMode getToMode() const
uint32_t iss() const override
uint32_t vectorCatchFlag() const override
virtual uint8_t thumbPcOffset(bool is_hyp)=0
void invoke(ThreadContext *tc, const StaticInstPtr &inst) override
virtual void setSyndrome(ThreadContext *tc, MiscRegIndex syndrome_reg)
bool getFaultVAddr(Fault fault, Addr &va)
Returns true if the fault passed as a first argument was triggered by a memory access,...
const uint16_t currELTOffset
const uint8_t thumbPcOffset
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
uint8_t thumbPcOffset(bool is_hyp) override
bool routeToHyp(ThreadContext *tc) const override
Addr getVector64(ThreadContext *tc)
bool routeToMonitor(ThreadContext *tc) const override
@ AsynchronousExternalAbort
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
SupervisorCall(ExtMachInst mach_inst, uint32_t _iss, ExceptionClass _overrideEc=ExceptionClass::INVALID)
FSR getFsr(ThreadContext *tc) const override
bool il(ThreadContext *tc) const override
uint32_t iss() const override
OperatingMode nextMode() override
virtual uint32_t iss() const =0
bool abortDisable(ThreadContext *tc) override
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
ArmStaticInst * instrAnnotate(const StaticInstPtr &inst)
static const MiscRegIndex FarIndex
const StaticInstPtr nullStaticInstPtr
Statically allocated null StaticInstPtr.
virtual uint8_t thumbPcElrOffset()=0
bool il(ThreadContext *tc) const override
Syndrome methods.
bool il(ThreadContext *tc) const override
Syndrome methods.
ThreadContext is the external interface to all thread state for anything outside of the CPU.
virtual FaultOffset offset(ThreadContext *tc)=0
std::shared_ptr< FaultBase > Fault
FaultSource
Generic fault source enums used to index into {short/long/aarch64}DescFaultSources[] to get the actua...
MiscRegIndex getSyndromeReg64() const
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
TlbEntry::DomainType domain
DataAbort(Addr _addr, TlbEntry::DomainType _domain, bool _write, uint8_t _source, bool _stage2=false, ArmFault::TranMethod _tranMethod=ArmFault::UnknownTran, ArmFault::DebugType _debug_type=ArmFault::NODEBUG)
uint8_t armPcElrOffset() override
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
uint32_t vectorCatchFlag() const override
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
SecureMonitorTrap(ExtMachInst mach_inst, uint32_t _iss, ExceptionClass _overrideEc=ExceptionClass::INVALID)
bool routeToHyp(ThreadContext *tc) const override
virtual uint32_t vectorCatchFlag() const
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
@ SynchPtyErrOnTranslTableWalkLL
static uint8_t shortDescFaultSources[NumFaultSources]
Encodings of the fault sources when the short-desc.
void update(ThreadContext *tc)
FaultOffset offset64(ThreadContext *tc) override
PCAlignmentFault(Addr fault_pc)
UndefinedInstruction(ExtMachInst mach_inst, uint32_t _iss, ExceptionClass _overrideEc, const char *_mnemonic=NULL)
virtual bool getFaultVAddr(Addr &va) const
bool il(ThreadContext *tc) const override
virtual uint8_t armPcOffset(bool is_hyp)=0
uint32_t iss() const override
bool routeToHyp(ThreadContext *tc) const override
bool abortDisable(ThreadContext *tc) override
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
ExceptionClass overrideEc
const uint8_t armPcOffset
const uint16_t lowerEL64Offset
void annotate(AnnotationIDs id, uint64_t val) override
bool il(ThreadContext *tc) const override
bool il(ThreadContext *tc) const override
virtual OperatingMode nextMode()=0
bool fiqDisable(ThreadContext *tc) override
uint32_t iss() const override
bool isStage2() const override
static const MiscRegIndex HFarIndex
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
PrefetchAbort(Addr _addr, uint8_t _source, bool _stage2=false, ArmFault::TranMethod _tranMethod=ArmFault::UnknownTran, ArmFault::DebugType _debug=ArmFault::NODEBUG)
Software Breakpoint (AArch64 only)
FaultOffset offset(ThreadContext *tc) override
@ AsynchPtyErrOnMemoryAccess
uint32_t iss() const override
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
virtual bool routeToMonitor(ThreadContext *tc) const override
static const MiscRegIndex FsrIndex
virtual FSR getFsr(ThreadContext *tc) const
@ InstructionCacheMaintenance
bool getFaultVAddr(Addr &va) const override
Addr OVAddr
Original virtual address.
bool routeToHyp(ThreadContext *tc) const override
const typedef char * FaultName
MiscRegIndex getFaultAddrReg64() const
HardwareBreakpoint(Addr _vaddr, uint32_t _iss)
Addr getVector(ThreadContext *tc) override
const uint16_t currELHOffset
Addr faultAddr
The virtual address the fault occured at.
static uint8_t aarch64FaultSources[NumFaultSources]
Encodings of the fault sources in AArch64 state.
ExceptionClass overrideEc
Watchpoint(ExtMachInst mach_inst, Addr vaddr, bool _write, bool _cm)
bool routeToHyp(ThreadContext *tc) const override
uint8_t armPcOffset(bool is_hyp) override
bool routeToHyp(ThreadContext *tc) const override
void invoke64(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr)
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
bool routeToHyp(ThreadContext *tc) const override
void annotate(AnnotationIDs id, uint64_t val) override
System error (AArch64 only)
SupervisorTrap(ExtMachInst mach_inst, uint32_t _iss, ExceptionClass _overrideEc=ExceptionClass::INVALID)
virtual Addr getVector(ThreadContext *tc)
FaultName name() const override
uint32_t iss() const override
Stack pointer alignment fault (AArch64 only)
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
SecureMonitorCall(ExtMachInst mach_inst)
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
virtual ExceptionClass ec(ThreadContext *tc) const =0
SoftwareBreakpoint(ExtMachInst mach_inst, uint32_t _iss)
virtual void annotate(AnnotationIDs id, uint64_t val)
virtual bool il(ThreadContext *tc) const =0
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
uint32_t iss() const override
bool routeToMonitor(ThreadContext *tc) const override
VirtualDataAbort(Addr _addr, TlbEntry::DomainType _domain, bool _write, uint8_t _source)
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
const OperatingMode nextMode
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
virtual bool routeToHyp(ThreadContext *tc) const
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
bool vectorCatch(ThreadContext *tc, const StaticInstPtr &inst)
bool routeToHyp(ThreadContext *tc) const override
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
bool routeToHyp(ThreadContext *tc) const override
bool routeToMonitor(ThreadContext *tc) const override
bool routeToHyp(ThreadContext *tc) const override
void invoke(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr) override
bool routeToHyp(ThreadContext *tc) const override
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
void invoke32(ThreadContext *tc, const StaticInstPtr &inst=nullStaticInstPtr)
virtual bool routeToMonitor(ThreadContext *tc) const =0
IllegalInstSetStateFault()
virtual bool isStage2() const
static uint8_t longDescFaultSources[NumFaultSources]
Encodings of the fault sources when the long-desc.
static const MiscRegIndex HFarIndex
uint32_t vectorCatchFlag() const override
bool il(ThreadContext *tc) const override
Syndrome methods.
FaultVals(const FaultName &name_, FaultOffset offset_, uint16_t curr_elt_offset, uint16_t curr_elh_offset, uint16_t lower_el64_offset, uint16_t lower_el32_offset, OperatingMode next_mode, uint8_t arm_pc_offset, uint8_t thumb_pc_offset, uint8_t arm_pc_elr_offset, uint8_t thumb_pc_elr_offset, bool hyp_trappable, bool abort_disable, bool fiq_disable, ExceptionClass ec_)
ExceptionClass overrideEc
bool fiqDisable(ThreadContext *tc) override
SoftwareStepFault(ExtMachInst mach_inst, bool is_ldx, bool stepped)
static const MiscRegIndex FsrIndex
uint32_t iss() const override
bool abortDisable(ThreadContext *tc) override
static const MiscRegIndex FarIndex
ExceptionClass ec(ThreadContext *tc) const override
Syndrome methods.
ArmFault::TranMethod tranMethod
HypervisorCall(ExtMachInst mach_inst, uint32_t _imm)
virtual bool fiqDisable(ThreadContext *tc)=0
Illegal Instruction Set State fault (AArch64 only)
const uint8_t armPcElrOffset
Generated on Sun Jul 30 2023 01:56:46 for gem5 by doxygen 1.8.17