gem5  v20.1.0.0
Classes | Public Types | Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | List of all members
ArmISA::ArmFault Class Referenceabstract

#include <faults.hh>

Inheritance diagram for ArmISA::ArmFault:
FaultBase ArmISA::ArmFaultVals< ArmSev > ArmISA::ArmFaultVals< DataAbort > ArmISA::ArmFaultVals< FastInterrupt > ArmISA::ArmFaultVals< HardwareBreakpoint > ArmISA::ArmFaultVals< HypervisorCall > ArmISA::ArmFaultVals< HypervisorTrap > ArmISA::ArmFaultVals< IllegalInstSetStateFault > ArmISA::ArmFaultVals< Interrupt > ArmISA::ArmFaultVals< PCAlignmentFault > ArmISA::ArmFaultVals< PrefetchAbort > ArmISA::ArmFaultVals< Reset > ArmISA::ArmFaultVals< SecureMonitorCall > ArmISA::ArmFaultVals< SecureMonitorTrap > ArmISA::ArmFaultVals< SoftwareBreakpoint > ArmISA::ArmFaultVals< SoftwareStepFault > ArmISA::ArmFaultVals< SPAlignmentFault > ArmISA::ArmFaultVals< SupervisorCall > ArmISA::ArmFaultVals< SupervisorTrap > ArmISA::ArmFaultVals< SystemError > ArmISA::ArmFaultVals< UndefinedInstruction > ArmISA::ArmFaultVals< VirtualDataAbort > ArmISA::ArmFaultVals< VirtualFastInterrupt > ArmISA::ArmFaultVals< VirtualInterrupt > ArmISA::ArmFaultVals< Watchpoint > ArmISA::ArmFaultVals< T >

Classes

struct  FaultVals
 

Public Types

enum  FaultSource {
  AlignmentFault = 0, InstructionCacheMaintenance, SynchExtAbtOnTranslTableWalkLL, SynchPtyErrOnTranslTableWalkLL = SynchExtAbtOnTranslTableWalkLL + 4,
  TranslationLL = SynchPtyErrOnTranslTableWalkLL + 4, AccessFlagLL = TranslationLL + 4, DomainLL = AccessFlagLL + 4, PermissionLL = DomainLL + 4,
  DebugEvent = PermissionLL + 4, SynchronousExternalAbort, TLBConflictAbort, SynchPtyErrOnMemoryAccess,
  AsynchronousExternalAbort, AsynchPtyErrOnMemoryAccess, AddressSizeLL, PrefetchTLBMiss = AddressSizeLL + 4,
  PrefetchUncacheable, NumFaultSources, FaultSourceInvalid = 0xff
}
 Generic fault source enums used to index into {short/long/aarch64}DescFaultSources[] to get the actual encodings based on the current register width state and the translation table format in use. More...
 
enum  AnnotationIDs {
  S1PTW, OVA, SAS, SSE,
  SRT, CM, OFA, SF,
  AR
}
 
enum  TranMethod { LpaeTran, VmsaTran, UnknownTran }
 
enum  DebugType {
  NODEBUG = 0, BRKPOINT, VECTORCATCH, WPOINT_CM,
  WPOINT_NOCM
}
 

Public Member Functions

 ArmFault (ExtMachInst _machInst=0, uint32_t _iss=0)
 
MiscRegIndex getSyndromeReg64 () const
 
MiscRegIndex getFaultAddrReg64 () const
 
void invoke (ThreadContext *tc, const StaticInstPtr &inst=StaticInst::nullStaticInstPtr) override
 
void invoke64 (ThreadContext *tc, const StaticInstPtr &inst=StaticInst::nullStaticInstPtr)
 
void update (ThreadContext *tc)
 
bool isResetSPSR ()
 
bool vectorCatch (ThreadContext *tc, const StaticInstPtr &inst)
 
ArmStaticInstinstrAnnotate (const StaticInstPtr &inst)
 
virtual void annotate (AnnotationIDs id, uint64_t val)
 
virtual FaultStatcountStat ()=0
 
virtual FaultOffset offset (ThreadContext *tc)=0
 
virtual FaultOffset offset64 (ThreadContext *tc)=0
 
virtual OperatingMode nextMode ()=0
 
virtual bool routeToMonitor (ThreadContext *tc) const =0
 
virtual bool routeToHyp (ThreadContext *tc) const
 
virtual uint8_t armPcOffset (bool isHyp)=0
 
virtual uint8_t thumbPcOffset (bool isHyp)=0
 
virtual uint8_t armPcElrOffset ()=0
 
virtual uint8_t thumbPcElrOffset ()=0
 
virtual bool abortDisable (ThreadContext *tc)=0
 
virtual bool fiqDisable (ThreadContext *tc)=0
 
virtual ExceptionClass ec (ThreadContext *tc) const =0
 
virtual uint32_t vectorCatchFlag () const
 
virtual uint32_t iss () const =0
 
virtual bool isStage2 () const
 
virtual FSR getFsr (ThreadContext *tc) const
 
virtual void setSyndrome (ThreadContext *tc, MiscRegIndex syndrome_reg)
 
virtual bool getFaultVAddr (Addr &va) const
 
OperatingMode getToMode () const
 
- Public Member Functions inherited from FaultBase
virtual FaultName name () const =0
 
virtual ~FaultBase ()
 

Static Public Attributes

static uint8_t shortDescFaultSources [NumFaultSources]
 Encodings of the fault sources when the short-desc. More...
 
static uint8_t longDescFaultSources [NumFaultSources]
 Encodings of the fault sources when the long-desc. More...
 
static uint8_t aarch64FaultSources [NumFaultSources]
 Encodings of the fault sources in AArch64 state. More...
 

Protected Member Functions

virtual Addr getVector (ThreadContext *tc)
 
Addr getVector64 (ThreadContext *tc)
 

Protected Attributes

ExtMachInst machInst
 
uint32_t issRaw
 
bool bStep
 
bool from64
 
bool to64
 
ExceptionLevel fromEL
 
ExceptionLevel toEL
 
OperatingMode fromMode
 
OperatingMode toMode
 
bool faultUpdated
 
bool hypRouted
 
bool span
 

Detailed Description

Definition at line 60 of file faults.hh.

Member Enumeration Documentation

◆ AnnotationIDs

Enumerator
S1PTW 
OVA 
SAS 
SSE 
SRT 
CM 
OFA 
SF 
AR 

Definition at line 128 of file faults.hh.

◆ DebugType

Enumerator
NODEBUG 
BRKPOINT 
VECTORCATCH 
WPOINT_CM 
WPOINT_NOCM 

Definition at line 153 of file faults.hh.

◆ FaultSource

Generic fault source enums used to index into {short/long/aarch64}DescFaultSources[] to get the actual encodings based on the current register width state and the translation table format in use.

Enumerator
AlignmentFault 
InstructionCacheMaintenance 
SynchExtAbtOnTranslTableWalkLL 
SynchPtyErrOnTranslTableWalkLL 
TranslationLL 
AccessFlagLL 
DomainLL 
PermissionLL 
DebugEvent 
SynchronousExternalAbort 
TLBConflictAbort 
SynchPtyErrOnMemoryAccess 
AsynchronousExternalAbort 
AsynchPtyErrOnMemoryAccess 
AddressSizeLL 
PrefetchTLBMiss 
PrefetchUncacheable 
NumFaultSources 
FaultSourceInvalid 

Definition at line 91 of file faults.hh.

◆ TranMethod

Enumerator
LpaeTran 
VmsaTran 
UnknownTran 

Definition at line 146 of file faults.hh.

Constructor & Destructor Documentation

◆ ArmFault()

ArmISA::ArmFault::ArmFault ( ExtMachInst  _machInst = 0,
uint32_t  _iss = 0 
)
inline

Definition at line 211 of file faults.hh.

Member Function Documentation

◆ abortDisable()

virtual bool ArmISA::ArmFault::abortDisable ( ThreadContext tc)
pure virtual

◆ annotate()

virtual void ArmISA::ArmFault::annotate ( AnnotationIDs  id,
uint64_t  val 
)
inlinevirtual

◆ armPcElrOffset()

virtual uint8_t ArmISA::ArmFault::armPcElrOffset ( )
pure virtual

◆ armPcOffset()

virtual uint8_t ArmISA::ArmFault::armPcOffset ( bool  isHyp)
pure virtual

◆ countStat()

virtual FaultStat& ArmISA::ArmFault::countStat ( )
pure virtual

◆ ec()

virtual ExceptionClass ArmISA::ArmFault::ec ( ThreadContext tc) const
pure virtual

◆ fiqDisable()

virtual bool ArmISA::ArmFault::fiqDisable ( ThreadContext tc)
pure virtual

◆ getFaultAddrReg64()

MiscRegIndex ArmISA::ArmFault::getFaultAddrReg64 ( ) const

◆ getFaultVAddr()

virtual bool ArmISA::ArmFault::getFaultVAddr ( Addr va) const
inlinevirtual

◆ getFsr()

virtual FSR ArmISA::ArmFault::getFsr ( ThreadContext tc) const
inlinevirtual

◆ getSyndromeReg64()

MiscRegIndex ArmISA::ArmFault::getSyndromeReg64 ( ) const

◆ getToMode()

OperatingMode ArmISA::ArmFault::getToMode ( ) const
inline

Definition at line 253 of file faults.hh.

References toMode.

Referenced by ArmISA::VectorCatch::exceptionTrapping().

◆ getVector()

Addr ArmISA::ArmFault::getVector ( ThreadContext tc)
protectedvirtual

◆ getVector64()

Addr ArmISA::ArmFault::getVector64 ( ThreadContext tc)
protected

◆ instrAnnotate()

ArmStaticInst * ArmISA::ArmFault::instrAnnotate ( const StaticInstPtr inst)

Definition at line 741 of file faults.cc.

References ArmISA::ArmStaticInst::annotateFault(), and RefCountingPtr< T >::get().

Referenced by invoke(), and invoke64().

◆ invoke()

void ArmISA::ArmFault::invoke ( ThreadContext tc,
const StaticInstPtr inst = StaticInst::nullStaticInstPtr 
)
overridevirtual

Reimplemented from FaultBase.

Reimplemented in ArmISA::ArmSev, ArmISA::Watchpoint, ArmISA::HardwareBreakpoint, ArmISA::SystemError, ArmISA::PCAlignmentFault, ArmISA::AbortFault< T >, ArmISA::AbortFault< VirtualDataAbort >, ArmISA::AbortFault< PrefetchAbort >, ArmISA::AbortFault< DataAbort >, ArmISA::SecureMonitorCall, ArmISA::SupervisorCall, ArmISA::UndefinedInstruction, ArmISA::Reset, and ArmISA::VirtualDataAbort.

Definition at line 486 of file faults.cc.

References abortDisable(), armPcOffset(), ArmISA::CCREG_C, ArmISA::CCREG_GE, ArmISA::CCREG_NZ, ArmISA::CCREG_V, countStat(), csprintf(), DPRINTF, ec(), ArmISA::EC_UNKNOWN, fiqDisable(), FullSystem, getVector(), ArmSystem::haveSecurity(), ArmSystem::haveVirtualization(), instrAnnotate(), ArmISA::INTREG_LR, FaultBase::invoke(), invoke64(), ArmISA::MISCREG_CPSR, ArmISA::MISCREG_ELR_HYP, ArmISA::MISCREG_HSCTLR, ArmISA::MISCREG_HSR, ArmISA::MISCREG_LOCKFLAG, ArmISA::MISCREG_SCR, ArmISA::MISCREG_SCTLR, ArmISA::MISCREG_SEV_MAILBOX, ArmISA::MISCREG_SPSR_ABT, ArmISA::MISCREG_SPSR_FIQ, ArmISA::MISCREG_SPSR_HYP, ArmISA::MISCREG_SPSR_IRQ, ArmISA::MISCREG_SPSR_MON, ArmISA::MISCREG_SPSR_SVC, ArmISA::MISCREG_SPSR_UND, ArmISA::MODE_ABORT, ArmISA::MODE_FIQ, ArmISA::MODE_HYP, ArmISA::MODE_IRQ, ArmISA::MODE_MON, ArmISA::MODE_SVC, ArmISA::MODE_UNDEFINED, FaultBase::name(), panic, MipsISA::pc, ThreadContext::pcState(), ThreadContext::readCCReg(), ThreadContext::readIntReg(), ThreadContext::readMiscReg(), ThreadContext::readMiscRegNoEffect(), ThreadContext::setIntReg(), ThreadContext::setMiscReg(), ThreadContext::setMiscRegNoEffect(), setSyndrome(), span, thumbPcOffset(), to64, toMode, update(), and vectorCatch().

Referenced by ArmISA::Reset::invoke(), ArmISA::UndefinedInstruction::invoke(), ArmISA::SupervisorCall::invoke(), ArmISA::SecureMonitorCall::invoke(), ArmISA::AbortFault< DataAbort >::invoke(), ArmISA::PCAlignmentFault::invoke(), ArmISA::SystemError::invoke(), ArmISA::HardwareBreakpoint::invoke(), and ArmISA::Watchpoint::invoke().

◆ invoke64()

void ArmISA::ArmFault::invoke64 ( ThreadContext tc,
const StaticInstPtr inst = StaticInst::nullStaticInstPtr 
)

◆ isResetSPSR()

bool ArmISA::ArmFault::isResetSPSR ( )
inline

Definition at line 228 of file faults.hh.

References bStep.

Referenced by invoke64().

◆ iss()

virtual uint32_t ArmISA::ArmFault::iss ( ) const
pure virtual

◆ isStage2()

virtual bool ArmISA::ArmFault::isStage2 ( ) const
inlinevirtual

Reimplemented in ArmISA::AbortFault< T >.

Definition at line 249 of file faults.hh.

Referenced by ArmISA::ISA::addressTranslation(), and ArmISA::ISA::addressTranslation64().

◆ nextMode()

virtual OperatingMode ArmISA::ArmFault::nextMode ( )
pure virtual

◆ offset()

virtual FaultOffset ArmISA::ArmFault::offset ( ThreadContext tc)
pure virtual

◆ offset64()

virtual FaultOffset ArmISA::ArmFault::offset64 ( ThreadContext tc)
pure virtual

◆ routeToHyp()

virtual bool ArmISA::ArmFault::routeToHyp ( ThreadContext tc) const
inlinevirtual

◆ routeToMonitor()

virtual bool ArmISA::ArmFault::routeToMonitor ( ThreadContext tc) const
pure virtual

◆ setSyndrome()

void ArmISA::ArmFault::setSyndrome ( ThreadContext tc,
MiscRegIndex  syndrome_reg 
)
virtual

◆ thumbPcElrOffset()

virtual uint8_t ArmISA::ArmFault::thumbPcElrOffset ( )
pure virtual

◆ thumbPcOffset()

virtual uint8_t ArmISA::ArmFault::thumbPcOffset ( bool  isHyp)
pure virtual

◆ update()

void ArmISA::ArmFault::update ( ThreadContext tc)

◆ vectorCatch()

bool ArmISA::ArmFault::vectorCatch ( ThreadContext tc,
const StaticInstPtr inst 
)

Definition at line 727 of file faults.cc.

References ArmISA::ISA::getSelfDebug(), ArmISA::VectorCatch::isVCMatch(), NoFault, and ArmISA::sd.

Referenced by invoke().

◆ vectorCatchFlag()

virtual uint32_t ArmISA::ArmFault::vectorCatchFlag ( ) const
inlinevirtual

Member Data Documentation

◆ aarch64FaultSources

uint8_t ArmISA::ArmFault::aarch64FaultSources
static

Encodings of the fault sources in AArch64 state.

Definition at line 126 of file faults.hh.

Referenced by ArmISA::AbortFault< DataAbort >::getFaultStatusCode().

◆ bStep

bool ArmISA::ArmFault::bStep
protected

◆ faultUpdated

bool ArmISA::ArmFault::faultUpdated
protected

Definition at line 78 of file faults.hh.

Referenced by update().

◆ from64

bool ArmISA::ArmFault::from64
protected

◆ fromEL

ExceptionLevel ArmISA::ArmFault::fromEL
protected

◆ fromMode

OperatingMode ArmISA::ArmFault::fromMode
protected

Definition at line 72 of file faults.hh.

Referenced by update().

◆ hypRouted

bool ArmISA::ArmFault::hypRouted
protected

◆ issRaw

uint32_t ArmISA::ArmFault::issRaw
protected

◆ longDescFaultSources

uint8_t ArmISA::ArmFault::longDescFaultSources
static

Encodings of the fault sources when the long-desc.

translation table format is in use (ARM ARM Issue C B3.13.3)

Definition at line 124 of file faults.hh.

Referenced by ArmISA::AbortFault< DataAbort >::getFaultStatusCode().

◆ machInst

ExtMachInst ArmISA::ArmFault::machInst
protected

◆ shortDescFaultSources

uint8_t ArmISA::ArmFault::shortDescFaultSources
static

Encodings of the fault sources when the short-desc.

translation table format is in use (ARM ARM Issue C B3.13.3)

Definition at line 121 of file faults.hh.

Referenced by ArmISA::AbortFault< DataAbort >::getFaultStatusCode().

◆ span

bool ArmISA::ArmFault::span
protected

Definition at line 81 of file faults.hh.

Referenced by invoke(), invoke64(), and update().

◆ to64

bool ArmISA::ArmFault::to64
protected

◆ toEL

ExceptionLevel ArmISA::ArmFault::toEL
protected

◆ toMode

OperatingMode ArmISA::ArmFault::toMode
protected

Definition at line 73 of file faults.hh.

Referenced by getToMode(), invoke(), and update().


The documentation for this class was generated from the following files:

Generated on Wed Sep 30 2020 14:02:34 for gem5 by doxygen 1.8.17