The ESR_EL1 characteristics are:
Holds syndrome information for an exception taken to EL1.
AArch64 System register ESR_EL1 bits [31:0] are architecturally mapped to AArch32 System register DFSR[31:0] .
RW fields in this register reset to architecturally UNKNOWN values.
ESR_EL1 is a 64-bit register.
The ESR_EL1 bit assignments are:
63 | 62 | 61 | 60 | 59 | 58 | 57 | 56 | 55 | 54 | 53 | 52 | 51 | 50 | 49 | 48 | 47 | 46 | 45 | 44 | 43 | 42 | 41 | 40 | 39 | 38 | 37 | 36 | 35 | 34 | 33 | 32 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
EC | IL | ISS | |||||||||||||||||||||||||||||
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ESR_EL1 is made UNKNOWN as a result of an exception return from EL1.
When an UNPREDICTABLE instruction is treated as UNDEFINED, and the exception is taken to EL1, the value of ESR_EL1 is UNKNOWN. The value written to ESR_EL1 must be consistent with a value that could be created as a result of an exception from the same Exception level that generated the exception as a result of a situation that is not UNPREDICTABLE at that Exception level, in order to avoid the possibility of a privilege violation.
Reserved, RES0.
Exception Class. Indicates the reason for the exception that this register holds information about.
For each EC value, the table references a subsection that gives information about:
Possible values of the EC field are:
EC | Meaning | ISS |
---|---|---|
0b000000 |
Unknown reason. | ISS encoding for exceptions with an unknown reason. |
0b000001 |
Trapped WFI or WFE instruction execution. Conditional WFE and WFI instructions that fail their condition code check do not cause an exception. | ISS encoding for an exception from a WFI or WFE instruction. |
0b000011 |
Trapped MCR or MRC access with (coproc==0b1111) that is not reported using EC 0b000000. | ISS encoding for an exception from an MCR or MRC access. |
0b000100 |
Trapped MCRR or MRRC access with (coproc==0b1111) that is not reported using EC 0b000000. | ISS encoding for an exception from an MCRR or MRRC access. |
0b000101 |
Trapped MCR or MRC access with (coproc==0b1110). | ISS encoding for an exception from an MCR or MRC access. |
0b000110 |
Trapped LDC or STC access. The only architected uses of these instruction are:
| ISS encoding for an exception from an LDC or STC instruction. |
0b000111 |
Access to SVE, Advanced SIMD, or floating-point functionality trapped by CPACR_EL1.FPEN, CPTR_EL2.FPEN, CPTR_EL2.TFP, or CPTR_EL3.TFP control. Excludes exceptions resulting from CPACR_EL1 when the value of HCR_EL2.TGE is 1, or because SVE or Advanced SIMD and floating-point are not implemented. These are reported with EC value 0b000000 as described in 'EC encodings when routing exceptions to EL2' in the ARMv8 ARM, section D1.10.4. | ISS encoding for an exception from an access to SVE, Advanced SIMD or floating-point functionality, resulting from CPACR_EL1.FPEN, CPTR_EL2.FPEN or CPTR_ELx.TFP. |
0b001100 |
Trapped MRRC access with (coproc==0b1110). | ISS encoding for an exception from an MCRR or MRRC access. |
0b001110 |
Illegal Execution state. | ISS encoding for an exception from an Illegal Execution state, or a PC or SP alignment fault. |
0b010001 |
SVC instruction execution in AArch32 state. This is reported in ESR_EL2 only when the exception is generated because the value of HCR_EL2.TGE is 1. | ISS encoding for an exception from HVC or SVC instruction execution. |
0b010101 |
SVC instruction execution in AArch64 state. | ISS encoding for an exception from HVC or SVC instruction execution. |
0b011000 |
Trapped MSR, MRS or System instruction execution in AArch64 state, that is not reported using EC 0b000000, 0b000001 or 0b000111, or an exception generated on a read of an ID register. This includes all instructions that cause exceptions that are part of the encoding space defined in 'System instruction class encoding overview' in the ARMv8 ARM, section C5.2.2, except for those exceptions reported using EC values 0b000000, 0b000001, or 0b000111. | ISS encoding for an exception from MSR, MRS, or System instruction execution in AArch64 state or, when ARMv8.4-IDST is implemented, on a read of an ID register. |
0b011001 |
Access to SVE functionality trapped as a result of CPACR_EL1.ZEN, CPTR_EL2.ZEN, CPTR_EL2.TZ, or CPTR_EL3.EZ, that is not reported using EC 0b000000. This EC is defined only if SVE is implemented. | ISS encoding for an exception from an access to SVE functionality, resulting from CPACR_EL1.ZEN, CPTR_EL2.ZEN, CPTR_EL2.TZ, or CPTR_EL3.EZ. |
0b100000 |
Instruction Abort from a lower Exception level, that might be using AArch32 or AArch64. Used for MMU faults generated by instruction accesses and synchronous External aborts, including synchronous parity or ECC errors. Not used for debug related exceptions. | ISS encoding for an exception from an Instruction Abort. |
0b100001 |
Instruction Abort taken without a change in Exception level. Used for MMU faults generated by instruction accesses and synchronous External aborts, including synchronous parity or ECC errors. Not used for debug related exceptions. | ISS encoding for an exception from an Instruction Abort. |
0b100010 |
PC alignment fault exception. | ISS encoding for an exception from an Illegal Execution state, or a PC or SP alignment fault. |
0b100100 |
Data Abort from a lower Exception level, that might be using AArch32 or AArch64. Used for MMU faults generated by data accesses, alignment faults other than those caused by Stack Pointer misalignment, and synchronous External aborts, including synchronous parity or ECC errors. Not used for debug related exceptions. | ISS encoding for an exception from a Data Abort. |
0b100101 |
Data Abort taken without a change in Exception level. Used for MMU faults generated by data accesses, alignment faults other than those caused by Stack Pointer misalignment, and synchronous External aborts, including synchronous parity or ECC errors. Not used for debug related exceptions. | ISS encoding for an exception from a Data Abort. |
0b100110 |
SP alignment fault exception. | ISS encoding for an exception from an Illegal Execution state, or a PC or SP alignment fault. |
0b101000 |
Trapped floating-point exception taken from AArch32 state. This EC value is valid if the implementation supports trapping of floating-point exceptions, otherwise it is reserved. Whether a floating-point implementation supports trapping of floating-point exceptions is IMPLEMENTATION DEFINED. | ISS encoding for an exception from a trapped floating-point exception. |
0b101100 |
Trapped floating-point exception taken from AArch64 state. This EC value is valid if the implementation supports trapping of floating-point exceptions, otherwise it is reserved. Whether a floating-point implementation supports trapping of floating-point exceptions is IMPLEMENTATION DEFINED. | ISS encoding for an exception from a trapped floating-point exception. |
0b101111 |
SError interrupt. | ISS encoding for a serror interrupt. |
0b110000 |
Breakpoint exception from a lower Exception level, that might be using AArch32 or AArch64. | ISS encoding for an exception from a Breakpoint or Vector Catch debug exception. |
0b110001 |
Breakpoint exception taken without a change in Exception level. | ISS encoding for an exception from a Breakpoint or Vector Catch debug exception. |
0b110010 |
Software Step exception from a lower Exception level, that might be using AArch32 or AArch64. | ISS encoding for an exception from a Software Step exception. |
0b110011 |
Software Step exception taken without a change in Exception level. | ISS encoding for an exception from a Software Step exception. |
0b110100 |
Watchpoint exception from a lower Exception level, that might be using AArch32 or AArch64. | ISS encoding for an exception from a Watchpoint exception. |
0b110101 |
Watchpoint exception taken without a change in Exception level. | ISS encoding for an exception from a Watchpoint exception. |
0b111000 |
BKPT instruction execution in AArch32 state. | ISS encoding for an exception from execution of a Breakpoint instruction. |
0b111100 |
BRK instruction execution in AArch64 state. This is reported in ESR_EL3 only if a BRK instruction is executed. | ISS encoding for an exception from execution of a Breakpoint instruction. |
All other EC values are reserved by ARM, and:
The effect of programming this field to a reserved value is that behavior is CONSTRAINED UNPREDICTABLE, as described in 'Reserved values in System and memory-mapped registers and translation table entries' in the ARM ARM, section K1.1.11.
This field resets to an architecturally UNKNOWN value.
Instruction Length for synchronous exceptions. Possible values of this bit are:
IL | Meaning |
---|---|
0b0 |
16-bit instruction trapped. |
0b1 |
|
This field resets to an architecturally UNKNOWN value.
Instruction Specific Syndrome. Architecturally, this field can be defined independently for each defined Exception class. However, in practice, some ISS encodings are used for more than one Exception class.
Typically, an ISS encoding has a number of subfields. When an ISS subfield holds a register number, the value returned in that field is the AArch64 view of the register number. For an exception taken from AArch32 state, 'Mapping of the general-purpose registers between the Execution states' in the ARMv8 ARM, section D1.20.1, defines this view of the specified AArch32 register. If the AArch32 register descriptor is 0b1111, then:
When the EC field is 0b000000, indicating an exception with an unknown reason, the ISS field is not valid, RES0.
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Reserved, RES0.
When an exception is reported using this EC code the IL field is set to 1.
This EC code is used for all exceptions that are not covered by any other EC value. This includes exceptions that are generated in the following situations:
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
CV | COND | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | TI |
Condition code valid. Possible values of this bit are:
CV | Meaning |
---|---|
0b0 |
The COND field is not valid. |
0b1 |
The COND field is valid. |
For exceptions taken from AArch64, CV is set to 1.
For exceptions taken from AArch32:
This field resets to an architecturally UNKNOWN value.
The condition code for the trapped instruction. This field is valid only for exceptions taken from AArch32, and only when the value of CV is 1.
For exceptions taken from AArch64, this field is set to 0b1110.
For exceptions taken from AArch32:
This field resets to an architecturally UNKNOWN value.
Reserved, RES0.
Trapped instruction. Possible values of this bit are:
TI | Meaning |
---|---|
0b0 |
WFI trapped. |
0b1 |
WFE trapped. |
This field resets to an architecturally UNKNOWN value.
The following sections describe configuration settings for generating this exception:
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
CV | COND | Opc2 | Opc1 | CRn | Rt | CRm | Direction |
Condition code valid. Possible values of this bit are:
CV | Meaning |
---|---|
0b0 |
The COND field is not valid. |
0b1 |
The COND field is valid. |
For exceptions taken from AArch64, CV is set to 1.
For exceptions taken from AArch32:
This field resets to an architecturally UNKNOWN value.
The condition code for the trapped instruction. This field is valid only for exceptions taken from AArch32, and only when the value of CV is 1.
For exceptions taken from AArch64, this field is set to 0b1110.
For exceptions taken from AArch32:
This field resets to an architecturally UNKNOWN value.
The Opc2 value from the issued instruction.
For a trapped VMRS access, holds the value 0b000.
This field resets to an architecturally UNKNOWN value.
The Opc1 value from the issued instruction.
For a trapped VMRS access, holds the value 0b111.
This field resets to an architecturally UNKNOWN value.
The CRn value from the issued instruction.
For a trapped VMRS access, holds the reg field from the VMRS instruction encoding.
This field resets to an architecturally UNKNOWN value.
The Rt value from the issued instruction, the general-purpose register used for the transfer. The reported value gives the AArch64 view of the register. See 'Mapping of the general-purpose registers between the Execution states' in the ARMv8 ARM, section D1.20.1.
This field resets to an architecturally UNKNOWN value.
The CRm value from the issued instruction.
For a trapped VMRS access, holds the value 0b0000.
This field resets to an architecturally UNKNOWN value.
Indicates the direction of the trapped instruction. The possible values of this bit are:
Direction | Meaning |
---|---|
0b0 |
Write to System register space. MCR instruction. |
0b1 |
Read from System register space. MRC or VMRS instruction. |
This field resets to an architecturally UNKNOWN value.
The following sections describe configuration settings for generating exceptions that are reported using EC value 0b000011:
The following sections describe configuration settings for generating exceptions that are reported using EC value 0b000101:
'Traps to EL2 of Non-secure EL1 and EL0 accesses to the ID registers' in the ARMv8 ARM, section D1, describes configuration settings for generating exceptions that are reported using EC value 0b001000.
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
CV | COND | Opc1 | 0 | Rt2 | Rt | CRm | Direction |
Condition code valid. Possible values of this bit are:
CV | Meaning |
---|---|
0b0 |
The COND field is not valid. |
0b1 |
The COND field is valid. |
For exceptions taken from AArch64, CV is set to 1.
For exceptions taken from AArch32:
This field resets to an architecturally UNKNOWN value.
The condition code for the trapped instruction. This field is valid only for exceptions taken from AArch32, and only when the value of CV is 1.
For exceptions taken from AArch64, this field is set to 0b1110.
For exceptions taken from AArch32:
This field resets to an architecturally UNKNOWN value.
The Opc1 value from the issued instruction.
This field resets to an architecturally UNKNOWN value.
Reserved, RES0.
The Rt2 value from the issued instruction, the second general-purpose register used for the transfer. The reported value gives the AArch64 view of the register. See 'Mapping of the general-purpose registers between the Execution states' in the ARMv8 ARM, section D1.20.1.
This field resets to an architecturally UNKNOWN value.
The Rt value from the issued instruction, the first general-purpose register used for the transfer. The reported value gives the AArch64 view of the register. See 'Mapping of the general-purpose registers between the Execution states' in the ARMv8 ARM, section D1.20.1.
This field resets to an architecturally UNKNOWN value.
The CRm value from the issued instruction.
This field resets to an architecturally UNKNOWN value.
Indicates the direction of the trapped instruction. The possible values of this bit are:
Direction | Meaning |
---|---|
0b0 |
Write to System register space. MCRR instruction. |
0b1 |
Read from System register space. MRRC instruction. |
This field resets to an architecturally UNKNOWN value.
The following sections describe configuration settings for generating exceptions that are reported using EC value 0b000100:
The following sections describe configuration settings for generating exceptions that are reported using EC value 0b001100:
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
CV | COND | imm8 | 0 | 0 | Rn | Offset | AM | Direction |
Condition code valid. Possible values of this bit are:
CV | Meaning |
---|---|
0b0 |
The COND field is not valid. |
0b1 |
The COND field is valid. |
For exceptions taken from AArch64, CV is set to 1.
For exceptions taken from AArch32:
This field resets to an architecturally UNKNOWN value.
The condition code for the trapped instruction. This field is valid only for exceptions taken from AArch32, and only when the value of CV is 1.
For exceptions taken from AArch64, this field is set to 0b1110.
For exceptions taken from AArch32:
This field resets to an architecturally UNKNOWN value.
The immediate value from the issued instruction.
This field resets to an architecturally UNKNOWN value.
Reserved, RES0.
The Rn value from the issued instruction, the general-purpose register used for the transfer. The reported value gives the AArch64 view of the register. See 'Mapping of the general-purpose registers between the Execution states' in the ARMv8 ARM, section D1.20.1.
This field is valid only when AM[2] is 0, indicating an immediate form of the LDC or STC instruction. When AM[2] is 1, indicating a literal form of the LDC or STC instruction, this field is UNKNOWN.
This field resets to an architecturally UNKNOWN value.
Indicates whether the offset is added or subtracted:
Offset | Meaning |
---|---|
0b0 |
Subtract offset. |
0b1 |
Add offset. |
This bit corresponds to the U bit in the instruction encoding.
This field resets to an architecturally UNKNOWN value.
Addressing mode. The permitted values of this field are:
AM | Meaning |
---|---|
0b000 |
Immediate unindexed. |
0b001 |
Immediate post-indexed. |
0b010 |
Immediate offset. |
0b011 |
Immediate pre-indexed. |
0b100 |
For a trapped STC instruction or a trapped T32 LDC instruction this encoding is reserved. |
0b110 |
For a trapped STC instruction, this encoding is reserved. |
The values 0b101 and 0b111 are reserved. The effect of programming this field to a reserved value is that behavior is CONSTRAINED UNPREDICTABLE, as described in 'Reserved values in AArch64 System registers and translation table entries' in the ARM ARM, section K1.2.2.
Bit [2] in this subfield indicates the instruction form, immediate or literal.
Bits [1:0] in this subfield correspond to the bits {P, W} in the instruction encoding.
This field resets to an architecturally UNKNOWN value.
Indicates the direction of the trapped instruction. The possible values of this bit are:
Direction | Meaning |
---|---|
0b0 |
Write to memory. STC instruction. |
0b1 |
Read from memory. LDC instruction. |
This field resets to an architecturally UNKNOWN value.
The following sections describe the configuration settings for the traps that are reported using EC value 0b000110:
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
CV | COND | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
The accesses covered by this trap include:
For an implementation that does not include either SVE or support for floating-point and Advanced SIMD, the exception is reported using the EC value 0b000000.
Condition code valid. Possible values of this bit are:
CV | Meaning |
---|---|
0b0 |
The COND field is not valid. |
0b1 |
The COND field is valid. |
For exceptions taken from AArch64, CV is set to 1.
For exceptions taken from AArch32:
This field resets to an architecturally UNKNOWN value.
The condition code for the trapped instruction. This field is valid only for exceptions taken from AArch32, and only when the value of CV is 1.
For exceptions taken from AArch64, this field is set to 0b1110.
For exceptions taken from AArch32:
This field resets to an architecturally UNKNOWN value.
Reserved, RES0.
The following sections describe the configuration settings for the traps that are reported using EC value 0b000111:
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Reserved, RES0.
Reserved, RES0.
The accesses covered by this trap include:
For an implementation that does not include SVE, the exception is reported using the EC value 0b000000.
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Reserved, RES0.
There are no configuration settings for generating Illegal Execution state exceptions and PC alignment fault exceptions. For more information about these exceptions see 'The Illegal Execution state exception' in the ARMv8 ARM, section D1 and 'PC alignment checking' in the ARMv8 ARM, section D1.
'Stack pointer alignment checking' in the ARMv8 ARM, section D1 describes the configuration settings for generating SP alignment fault exceptions.
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | imm16 |
Reserved, RES0.
The value of the immediate field from the HVC or SVC instruction.
For an HVC instruction, and for an A64 SVC instruction, this is the value of the imm16 field of the issued instruction.
For an A32 or T32 SVC instruction:
This field resets to an architecturally UNKNOWN value.
In AArch32 state, the HVC instruction is unconditional, and a conditional SVC instruction generates an exception only if it passes its condition code check. Therefore, the syndrome information for these exceptions does not require conditionality information.
For T32 and A32 instructions, see 'SVC' in the ARMv8 ARM, section F7 (T32 and A32 Base Instruction Set Instruction Descriptions) and 'HVC' in the ARMv8 ARM, section F7.
For A64 instructions, see 'SVC' in the ARMv8 ARM, section C5 (A64 Base Instruction Descriptions), and 'HVC' in the ARMv8 ARM, section C5.
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
CV | COND | CCKNOWNPASS | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
For an SMC instruction that completes normally and generates an exception that is taken to EL3, the ISS encoding is RES0.
For an SMC instruction that is trapped to EL2 from EL1 because HCR_EL2.TSC is 1, the ISS encoding is as shown in the diagram.
Condition code valid. Possible values of this bit are:
CV | Meaning |
---|---|
0b0 |
The COND field is not valid. |
0b1 |
The COND field is valid. |
For exceptions taken from AArch64, CV is set to 1.
For exceptions taken from AArch32:
This field is only valid if CCKNOWNPASS is 1, otherwise it is RES0.
This field resets to an architecturally UNKNOWN value.
The condition code for the trapped instruction. This field is valid only for exceptions taken from AArch32, and only when the value of CV is 1.
For exceptions taken from AArch64, this field is set to 0b1110.
For exceptions taken from AArch32:
This field is only valid if CCKNOWNPASS is 1, otherwise it is RES0.
This field resets to an architecturally UNKNOWN value.
Indicates whether the instruction might have failed its condition code check.
CCKNOWNPASS | Meaning |
---|---|
0b0 |
The instruction was unconditional, or was conditional and passed its condition code check. |
0b1 |
The instruction was conditional, and might have failed its condition code check. |
In an implementation in which an SMC instruction that fails it code check is not trapped, this field can always return the value 0.
This field resets to an architecturally UNKNOWN value.
Reserved, RES0.
'Traps to EL2 of Non-secure EL1 execution of SMC instructions' in the ARMv8 ARM, section D1 (The AArch64 System Level Programmers' Model), describes the configuration settings for trapping SMC instructions from EL1 modes, and 'System calls' in the ARMv8 ARM, section D1.16, describes the case where these exceptions are trapped to EL3.
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | imm16 |
Reserved, RES0.
The value of the immediate field from the issued SMC instruction.
This field resets to an architecturally UNKNOWN value.
The value of ISS[24:0] described here is used both:
'Traps to EL2 of Non-secure EL1 execution of SMC instructions' in the ARMv8 ARM, section D1 (The AArch64 System Level Programmers' Model), describes the configuration settings for trapping SMC instructions from Non-secure EL1 modes, and 'System calls' in the ARMv8 ARM, section D1.16, describes the case where these exceptions are trapped to EL3.
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | 0 | Op0 | Op2 | Op1 | CRn | Rt | CRm | Direction |
Reserved, RES0.
The Op0 value from the issued instruction.
This field resets to an architecturally UNKNOWN value.
The Op2 value from the issued instruction.
This field resets to an architecturally UNKNOWN value.
The Op1 value from the issued instruction.
This field resets to an architecturally UNKNOWN value.
The CRn value from the issued instruction.
This field resets to an architecturally UNKNOWN value.
The Rt value from the issued instruction, the general-purpose register used for the transfer.
This field resets to an architecturally UNKNOWN value.
The CRm value from the issued instruction.
This field resets to an architecturally UNKNOWN value.
Indicates the direction of the trapped instruction. The possible values of this bit are:
Direction | Meaning |
---|---|
0b0 |
Write access, including MSR instructions. |
0b1 |
Read access, including MRS instructions. |
This field resets to an architecturally UNKNOWN value.
For exceptions caused by System instructions, see the 'System' subsection of 'Branches, exception generating and System instructions' in the ARMv8 ARM, section C3 (A64 Instruction Set Encoding), for the encoding values returned by an instruction.
The following sections describe configuration settings for generating the exception that is reported using EC value 0b011000:
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
IMPLEMENTATION DEFINED |
IMPLEMENTATION DEFINED.
This field resets to an architecturally UNKNOWN value.
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | SET | FnV | EA | 0 | S1PTW | 0 | IFSC |
Reserved, RES0.
Synchronous Error Type. When the RAS Extension is implemented and IFSC is 0b010000, describes the state of the PE after taking the Instruction Abort exception. The possible values of this field are:
SET | Meaning |
---|---|
0b00 |
Recoverable error (UER). |
0b10 |
Uncontainable error (UC). |
0b11 |
Restartable error (UEO) or Corrected error (CE). |
All other values are reserved.
Software can use this information to determine what recovery might be possible. Taking a synchronous External Abort exception might result in an unrecoverable PE state.
This field is RES0 if either:
This field resets to an architecturally UNKNOWN value.
FAR not Valid, for a synchronous External abort other than a synchronous External abort on a translation table walk.
FnV | Meaning |
---|---|
0b0 |
FAR is valid. |
0b1 |
FAR is not valid, and holds an UNKNOWN value. |
This field is only valid if the IFSC code is 0b010000. It is RES0 for all other aborts.
This field resets to an architecturally UNKNOWN value.
External abort type. This bit can provide an IMPLEMENTATION DEFINED classification of External aborts.
For any abort other than an External abort this bit returns a value of 0.
This field resets to an architecturally UNKNOWN value.
Reserved, RES0.
For a stage 2 fault, indicates whether the fault was a stage 2 fault on an access made for a stage 1 translation table walk:
S1PTW | Meaning |
---|---|
0b0 |
Fault not on a stage 2 translation for a stage 1 translation table walk. |
0b1 |
Fault on the stage 2 translation of an access for a stage 1 translation table walk. |
For any abort other than a stage 2 fault this bit is RES0.
This field resets to an architecturally UNKNOWN value.
Reserved, RES0.
Instruction Fault Status Code. Possible values of this field are:
IFSC | Meaning |
---|---|
0b000000 |
Address size fault, level 0 of translation or translation table base register |
0b000001 |
Address size fault, level 1 |
0b000010 |
Address size fault, level 2 |
0b000011 |
Address size fault, level 3 |
0b000100 |
Translation fault, level 0 |
0b000101 |
Translation fault, level 1 |
0b000110 |
Translation fault, level 2 |
0b000111 |
Translation fault, level 3 |
0b001001 |
Access flag fault, level 1 |
0b001010 |
Access flag fault, level 2 |
0b001011 |
Access flag fault, level 3 |
0b001101 |
Permission fault, level 1 |
0b001110 |
Permission fault, level 2 |
0b001111 |
Permission fault, level 3 |
0b010000 |
Synchronous External abort, not on translation table walk |
0b010100 |
Synchronous External abort, on translation table walk, level 0 |
0b010101 |
Synchronous External abort, on translation table walk, level 1 |
0b010110 |
Synchronous External abort, on translation table walk, level 2 |
0b010111 |
Synchronous External abort, on translation table walk, level 3 |
0b011000 |
Synchronous parity or ECC error on memory access, not on translation table walk |
0b011100 |
Synchronous parity or ECC error on memory access on translation table walk, level 0 |
0b011101 |
Synchronous parity or ECC error on memory access on translation table walk, level 1 |
0b011110 |
Synchronous parity or ECC error on memory access on translation table walk, level 2 |
0b011111 |
Synchronous parity or ECC error on memory access on translation table walk, level 3 |
0b110000 |
TLB conflict abort |
0b110001 |
Unsupported atomic hardware update fault, if the implementation includes ARMv8.1-TTHM]. Otherwise reserved. |
All other values are reserved.
When the RAS Extension is implemented, 0b011000, 0b011100, 0b011101, 0b011110, and 0b011111, are reserved.
ARMv8.2 requires the implementation of the RAS Extension.
For more information about the lookup level associated with a fault, see 'The level associated with MMU faults' in the ARMv8 ARM.
Because Access flag faults and Permission faults can only result from a Block or Page translation table descriptor, they cannot occur at level 0.
If the S1PTW bit is set, then the level refers the level of the stage2 translation that is translating a stage 1 translation walk.
This field resets to an architecturally UNKNOWN value.
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ISV | SAS | SSE | SRT | SF | AR | VNCR | SET | FnV | EA | CM | S1PTW | WnR | DFSC |
Instruction syndrome valid. Indicates whether the syndrome information in ISS[23:0] is valid.
ISV | Meaning |
---|---|
0b0 |
No valid instruction syndrome. ISS[23:14] are RES0. |
0b1 |
ISS[23:14] hold a valid instruction syndrome. |
This bit is 0 for all faults reported in ESR_EL2 except the following stage 2 aborts:
For these cases, ISV is UNKNOWN if the exception was generated in Debug state in memory access mode, and otherwise indicates whether ISS[23:14] hold a valid syndrome.
ISV is 0 for all faults reported in ESR_EL1 or ESR_EL3.
When the RAS Extension is implemented, ISV is 0 for any synchronous External abort.
For ISS reporting, a stage 2 abort on a stage 1 translation table walk does not return a valid instruction syndrome, and therefore ISV is 0 for these aborts.
When the RAS Extension is not implemented, the value of ISV on a synchronous External abort on a stage 2 translation table walk is IMPLEMENTATION DEFINED.
This field resets to an architecturally UNKNOWN value.
Syndrome Access Size. When ISV is 1, indicates the size of the access attempted by the faulting operation.
SAS | Meaning |
---|---|
0b00 |
Byte |
0b01 |
Halfword |
0b10 |
Word |
0b11 |
Doubleword |
This field is UNKNOWN when the value of ISV is UNKNOWN.
This field is RES0 when the value of ISV is 0.
This field resets to an architecturally UNKNOWN value.
Syndrome Sign Extend. When ISV is 1, for a byte, halfword, or word load operation, indicates whether the data item must be sign extended. For these cases, the possible values of this bit are:
SSE | Meaning |
---|---|
0b0 |
Sign-extension not required. |
0b1 |
Data item must be sign-extended. |
For all other operations this bit is 0.
This field is UNKNOWN when the value of ISV is UNKNOWN.
This field is RES0 when the value of ISV is 0.
This field resets to an architecturally UNKNOWN value.
Syndrome Register transfer. When ISV is 1, the register number of the Rt operand of the faulting instruction. If the exception was taken from an Exception level that is using AArch32 then this is the AArch64 view of the register. See 'Mapping of the general-purpose registers between the Execution states' in the ARMv8 ARM, section D1.20.1.
This field is UNKNOWN when the value of ISV is UNKNOWN.
This field is RES0 when the value of ISV is 0.
This field resets to an architecturally UNKNOWN value.
Width of the register accessed by the instruction is Sixty-Four. When ISV is 1, the possible values of this bit are:
SF | Meaning |
---|---|
0b0 |
Instruction loads/stores a 32-bit wide register. |
0b1 |
Instruction loads/stores a 64-bit wide register. |
This field specifies the register width identified by the instruction, not the Execution state.
This field is UNKNOWN when the value of ISV is UNKNOWN.
This field is RES0 when the value of ISV is 0.
This field resets to an architecturally UNKNOWN value.
Acquire/Release. When ISV is 1, the possible values of this bit are:
AR | Meaning |
---|---|
0b0 |
Instruction did not have acquire/release semantics. |
0b1 |
Instruction did have acquire/release semantics. |
This field is UNKNOWN when the value of ISV is UNKNOWN.
This field is RES0 when the value of ISV is 0.
This field resets to an architecturally UNKNOWN value.
Indicates that the fault came from use of VNCR_EL2 register by EL1 code.
VNCR | Meaning |
---|---|
0b0 |
The fault was not generated by the use of VNCR_EL2, by an MRS or MSR instruction executed at EL1. |
0b1 |
The fault was generated by the use of VNCR_EL2, by an MRS or MSR instruction executed at EL1. |
This field is 0 in ESR_EL1.
This field resets to an architecturally UNKNOWN value.
Reserved, RES0.
Reserved, RES0.
Synchronous Error Type. When the RAS Extension is implemented and DFSC is 0b010000, describes the state of the PE after taking the Data Abort exception. The possible values of this field are:
SET | Meaning |
---|---|
0b00 |
Recoverable error (UER). |
0b10 |
Uncontainable error (UC). |
0b11 |
Restartable error (UEO) or Corrected error (CE). |
All other values are reserved.
Software can use this information to determine what recovery might be possible. Taking a synchronous External Abort exception might result in an unrecoverable PE state.
This field is RES0 if either:
This field resets to an architecturally UNKNOWN value.
FAR not Valid, for a synchronous External abort other than a synchronous External abort on a translation table walk.
FnV | Meaning |
---|---|
0b0 |
FAR is valid. |
0b1 |
FAR is not valid, and holds an UNKNOWN value. |
This field is valid only if the DFSC code is 0b010000. It is RES0 for all other aborts.
This field resets to an architecturally UNKNOWN value.
External abort type. This bit can provide an IMPLEMENTATION DEFINED classification of External aborts.
For any abort other than an External abort this bit returns a value of 0.
This field resets to an architecturally UNKNOWN value.
Cache maintenance. Indicates whether the Data Abort came from a cache maintenance or address translation instruction:
CM | Meaning |
---|---|
0b0 |
The Data Abort was not generated by the execution of one of the System instructions identified in the description of value 1. |
0b1 |
The Data Abort was generated by either the execution of a cache maintenance instruction or by a synchronous fault on the execution of an address translation instruction. The DC ZVA instruction is not classified as a cache maintenance instruction, and therefore its execution cannot cause this field to be set to 1. |
This field resets to an architecturally UNKNOWN value.
For a stage 2 fault, indicates whether the fault was a stage 2 fault on an access made for a stage 1 translation table walk:
S1PTW | Meaning |
---|---|
0b0 |
Fault not on a stage 2 translation for a stage 1 translation table walk. |
0b1 |
Fault on the stage 2 translation of an access for a stage 1 translation table walk. |
For any abort other than a stage 2 fault this bit is RES0.
This field resets to an architecturally UNKNOWN value.
Write not Read. Indicates whether a synchronous abort was caused by an instruction writing to a memory location, or by an instruction reading from a memory location. The possible values of this bit are:
WnR | Meaning |
---|---|
0b0 |
Abort caused by an instruction reading from a memory location. |
0b1 |
Abort caused by an instruction writing to a memory location. |
For faults on cache maintenance and address translation instructions, this bit always returns a value of 1.
For faults from an atomic instruction that both reads and writes from a memory location, this bit is set to 0 if a read of the address specified by the instruction would have generated the fault is being reported, otherwise it is set to 1. The architecture permits, but does not require, a relaxation of this requirement such that for all stage 2 aborts on stage 1 translation table walks for atomic instructions, the WnR bit is always 0.
This field is UNKNOWN for:
This field resets to an architecturally UNKNOWN value.
Data Fault Status Code. Possible values of this field are:
DFSC | Meaning |
---|---|
0b000000 |
Address size fault, level 0 of translation or translation table base register. |
0b000001 |
Address size fault, level 1. |
0b000010 |
Address size fault, level 2. |
0b000011 |
Address size fault, level 3. |
0b000100 |
Translation fault, level 0. |
0b000101 |
Translation fault, level 1. |
0b000110 |
Translation fault, level 2. |
0b000111 |
Translation fault, level 3. |
0b001001 |
Access flag fault, level 1. |
0b001010 |
Access flag fault, level 2. |
0b001011 |
Access flag fault, level 3. |
0b001101 |
Permission fault, level 1. |
0b001110 |
Permission fault, level 2. |
0b001111 |
Permission fault, level 3. |
0b010000 |
Synchronous External abort, not on translation table walk. |
0b010001 |
Synchronous Tag Check fail |
0b010100 |
Synchronous External abort, on translation table walk, level 0. |
0b010101 |
Synchronous External abort, on translation table walk, level 1. |
0b010110 |
Synchronous External abort, on translation table walk, level 2. |
0b010111 |
Synchronous External abort, on translation table walk, level 3. |
0b011000 |
Synchronous parity or ECC error on memory access, not on translation table walk. |
0b011100 |
Synchronous parity or ECC error on memory access on translation table walk, level 0. |
0b011101 |
Synchronous parity or ECC error on memory access on translation table walk, level 1. |
0b011110 |
Synchronous parity or ECC error on memory access on translation table walk, level 2. |
0b011111 |
Synchronous parity or ECC error on memory access on translation table walk, level 3. |
0b100001 |
Alignment fault. |
0b110000 |
TLB conflict abort. |
0b110001 |
Unsupported atomic hardware update fault, if the implementation includes ARMv8.1-TTHM]. Otherwise reserved. |
0b110100 |
IMPLEMENTATION DEFINED fault (Lockdown). |
0b110101 |
IMPLEMENTATION DEFINED fault (Unsupported Exclusive or Atomic access). |
0b111101 |
Section Domain Fault, used only for faults reported in the PAR_EL1. |
0b111110 |
Page Domain Fault, used only for faults reported in the PAR_EL1. |
All other values are reserved.
When the RAS Extension is implemented, 0b011000, 0b011100, 0b011101, 0b011110, and 0b011111, are reserved.
For more information about the lookup level associated with a fault, see 'The level associated with MMU faults' in the ARMv8 ARM.
Because Access flag faults and Permission faults can only result from a Block or Page translation table descriptor, they cannot occur at level 0.
If the S1PTW bit is set, then the level refers the level of the stage2 translation that is translating a stage 1 translation walk.
This field resets to an architecturally UNKNOWN value.
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | TFV | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | VECITR | IDF | 0 | 0 | IXF | UFF | OFF | DZF | IOF |
Reserved, RES0.
Trapped Fault Valid bit. Indicates whether the IDF, IXF, UFF, OFF, DZF, and IOF bits hold valid information about trapped floating-point exceptions. The possible values of this bit are:
TFV | Meaning |
---|---|
0b0 |
The IDF, IXF, UFF, OFF, DZF, and IOF bits do not hold valid information about trapped floating-point exceptions and are UNKNOWN. |
0b1 |
One or more floating-point exceptions occurred during an operation performed while executing the reported instruction. The IDF, IXF, UFF, OFF, DZF, and IOF bits indicate trapped floating-point exceptions that occurred. For more information see 'Floating-point exception traps' in the ARMv8 ARM, section D1.13.4. |
It is IMPLEMENTATION DEFINED whether this field is set to 0 on an exception generated by a trapped floating point exception from a vector instruction.
This is not a requirement. Implementations can set this field to 1 on a trapped floating-point exception from a vector instruction and return valid information in the {IDF, IXF, UFF, OFF, DZF, IOF} fields.
This field resets to an architecturally UNKNOWN value.
Reserved, RES0.
For a trapped floating-point exception from an instruction executed in AArch32 state this field is RES1.
For a trapped floating-point exception from an instruction executed in AArch64 state this field is UNKNOWN.
This field resets to an architecturally UNKNOWN value.
Input Denormal floating-point exception trapped bit. If the TFV field is 0, this bit is UNKNOWN. Otherwise, the possible values of this bit are:
IDF | Meaning |
---|---|
0b0 |
Input denormal floating-point exception has not occurred. |
0b1 |
Input denormal floating-point exception occurred during execution of the reported instruction. |
This field resets to an architecturally UNKNOWN value.
Reserved, RES0.
Inexact floating-point exception trapped bit. If the TFV field is 0, this bit is UNKNOWN. Otherwise, the possible values of this bit are:
IXF | Meaning |
---|---|
0b0 |
Inexact floating-point exception has not occurred. |
0b1 |
Inexact floating-point exception occurred during execution of the reported instruction. |
This field resets to an architecturally UNKNOWN value.
Underflow floating-point exception trapped bit. If the TFV field is 0, this bit is UNKNOWN. Otherwise, the possible values of this bit are:
UFF | Meaning |
---|---|
0b0 |
Underflow floating-point exception has not occurred. |
0b1 |
Underflow floating-point exception occurred during execution of the reported instruction. |
This field resets to an architecturally UNKNOWN value.
Overflow floating-point exception trapped bit. If the TFV field is 0, this bit is UNKNOWN. Otherwise, the possible values of this bit are:
OFF | Meaning |
---|---|
0b0 |
Overflow floating-point exception has not occurred. |
0b1 |
Overflow floating-point exception occurred during execution of the reported instruction. |
This field resets to an architecturally UNKNOWN value.
Divide by Zero floating-point exception trapped bit. If the TFV field is 0, this bit is UNKNOWN. Otherwise, the possible values of this bit are:
DZF | Meaning |
---|---|
0b0 |
Divide by Zero floating-point exception has not occurred. |
0b1 |
Divide by Zero floating-point exception occurred during execution of the reported instruction. |
This field resets to an architecturally UNKNOWN value.
Invalid Operation floating-point exception trapped bit. If the TFV field is 0, this bit is UNKNOWN. Otherwise, the possible values of this bit are:
IOF | Meaning |
---|---|
0b0 |
Invalid Operation floating-point exception has not occurred. |
0b1 |
Invalid Operation floating-point exception occurred during execution of the reported instruction. |
This field resets to an architecturally UNKNOWN value.
In an implementation that supports the trapping of floating-point exceptions:
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
IDS | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | IESB | AET | EA | 0 | 0 | 0 | DFSC |
IMPLEMENTATION DEFINED syndrome. Possible values of this bit are:
IDS | Meaning |
---|---|
0b0 |
Bits[23:0] of the ISS field holds the fields described in this encoding. Note
If the RAS Extension is not implemented, this means that bits[23:0] of the ISS field are RES0. |
0b1 |
Bits[23:0] of the ISS field holds IMPLEMENTATION DEFINED syndrome information that can be used to provide additional information about the SError interrupt. |
This field was previously called ISV.
This field resets to an architecturally UNKNOWN value.
Reserved, RES0.
Implicit error synchronization event.
IESB | Meaning |
---|---|
0b0 |
The SError interrupt was either not synchronized by the implicit error synchronization event or not taken immediately. |
0b1 |
The SError interrupt was synchronized by the implicit error synchronization event and taken immediately. |
This field is RES0 if the value returned in the DFSC field is not 0b010001.
ARMv8.2 requires the implementation of the RAS Extension and ARMv8.2-IESB.
This field resets to an architecturally UNKNOWN value.
Reserved, RES0.
Asynchronous Error Type.
When the RAS Extension is implemented and DFSC is 0b010001, describes the state of the PE after taking the SError interrupt exception. The possible values of this field are:
AET | Meaning |
---|---|
0b000 |
Uncontainable error (UC). |
0b001 |
Unrecoverable error (UEU). |
0b010 |
Restartable error (UEO). |
0b011 |
Recoverable error (UER). |
0b110 |
Corrected error (CE). |
All other values are reserved.
If multiple errors are taken as a single SError interrupt exception, the overall state of the PE is reported. For example, if both a Recoverable and Unrecoverable error occurred, the state is Unrecoverable.
Software can use this information to determine what recovery might be possible. The recovery software must also examine any implemented fault records to determine the location and extent of the error.
This field is RES0 if either:
ARMv8.2 requires the implementation of the RAS Extension.
This field resets to an architecturally UNKNOWN value.
External abort type. When the RAS Extension is implemented, this bit can provide an IMPLEMENTATION DEFINED classification of External aborts.
For any abort other than an External abort this bit returns a value of 0.
This field is RES0 if either:
ARMv8.2 requires the implementation of the RAS Extension.
This field resets to an architecturally UNKNOWN value.
Reserved, RES0.
Data Fault Status Code. When the RAS Extension is implemented, possible values of this field are:
DFSC | Meaning |
---|---|
0b000000 |
Uncategorized. |
0b010001 |
Asynchronous SError interrupt. |
All other values are reserved.
If the RAS Extension is not implemented, this field is RES0.
ARMv8.2 requires the implementation of the RAS Extension.
This field resets to an architecturally UNKNOWN value.
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | IFSC |
Reserved, RES0.
Instruction Fault Status Code. This field is set to 0b100010, to indicate a Debug exception.
This field resets to an architecturally UNKNOWN value.
For more information about generating these exceptions:
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ISV | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | EX | IFSC |
Instruction syndrome valid. Indicates whether the EX bit, ISS[6], is valid, as follows:
ISV | Meaning |
---|---|
0b0 |
EX bit is RES0. |
0b1 |
EX bit is valid. |
See the EX bit description for more information.
This field resets to an architecturally UNKNOWN value.
Reserved, RES0.
Exclusive operation. If the ISV bit is set to 1, this bit indicates whether a Load-Exclusive instruction was stepped.
EX | Meaning |
---|---|
0b0 |
An instruction other than a Load-Exclusive instruction was stepped. |
0b1 |
A Load-Exclusive instruction was stepped. |
If the ISV bit is set to 0, this bit is RES0, indicating no syndrome data is available.
This field resets to an architecturally UNKNOWN value.
Instruction Fault Status Code. This field is set to 0b100010, to indicate a Debug exception.
This field resets to an architecturally UNKNOWN value.
For more information about generating these exceptions, see 'Software Step exceptions' in the ARMv8 ARM, section D2 (AArch64 Self-hosted Debug).
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | VNCR | 0 | 0 | 0 | 0 | CM | 0 | WnR | DFSC |
Reserved, RES0.
Indicates that the watchpoint came from use of VNCR_EL2 register by EL1 code.
VNCR | Meaning |
---|---|
0b0 |
The watchpoint was not generated by the use of VNCR_EL2 by EL1 code. |
0b1 |
The watchpoint was generated by the use of VNCR_EL2 by EL1 code. |
This field is 0 in ESR_EL1.
This field resets to an architecturally UNKNOWN value.
Reserved, RES0.
Reserved, RES0.
Reserved, RES0.
Cache maintenance. Indicates whether the Watchpoint exception came from a cache maintenance or address translation instruction:
CM | Meaning |
---|---|
0b0 |
The Watchpoint exception was not generated by the execution of one of the System instructions identified in the description of value 1. |
0b1 |
The Watchpoint exception was generated by either the execution of a cache maintenance instruction or by a synchronous Watchpoint exception on the execution of an address translation instruction. The DC ZVA instruction is not classified as a cache maintenance instruction, and therefore its execution cannot cause this field to be set to 1. |
This field resets to an architecturally UNKNOWN value.
Reserved, RES0.
Write not Read. Indicates whether the Watchpoint exception was caused by an instruction writing to a memory location, or by an instruction reading from a memory location. The possible values of this bit are:
WnR | Meaning |
---|---|
0b0 |
Watchpoint exception caused by an instruction reading from a memory location. |
0b1 |
Watchpoint exception caused by an instruction writing to a memory location. |
For Watchpoint exceptions on cache maintenance and address translation instructions, this bit always returns a value of 1.
For Watchpoint exceptions from an atomic instruction, this field is set to 0 if a read of the location would have generated the Watchpoint exception, otherwise it is set to 1.
If multiple watchpoints match on the same access, it is UNPREDICTABLE which watchpoint generates the Watchpoint exception.
This field resets to an architecturally UNKNOWN value.
Data Fault Status Code. This field is set to 0b100010, to indicate a Debug exception.
This field resets to an architecturally UNKNOWN value.
For more information about generating these exceptions, see 'Watchpoint exceptions' in the ARMv8 ARM, section D2 (AArch64 Self-hosted Debug).
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Comment |
Reserved, RES0.
Set to the instruction comment field value, zero extended as necessary. For the AArch32 BKPT instructions, the comment field is described as the immediate field.
This field resets to an architecturally UNKNOWN value.
For more information about generating these exceptions, see 'Breakpoint instruction exceptions' in the ARMv8 ARM, section D2 (AArch64 Self-hosted Debug).
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ERET | ERETA |
This EC value only applies when HCR_EL2.NV is 1.
Reserved, RES0.
Indicates whether an ERET or ERETA* instruction was trapped to EL2. Possible values are:
ERET | Meaning |
---|---|
0b0 |
ERET instruction trapped to EL2. |
0b1 |
ERETAA or ERETAB instruction trapped to EL2. |
If this bit is 0, the ERETA field is RES0.
This field resets to an architecturally UNKNOWN value.
Indicates whether an ERETAA or ERETAB instruction was trapped to EL2. Possible values are:
ERETA | Meaning |
---|---|
0b0 |
ERETAA instruction trapped to EL2. |
0b1 |
ERETAB instruction trapped to EL2. |
When the ERET field is 0, this bit is RES0.
This field resets to an architecturally UNKNOWN value.
For more information about generating these exceptions, see 'Traps to EL2 for Nested virtualization' in the ARMv8 ARM, section D1.
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | BTYPE |
Reserved, RES0.
This field is set to the PSTATE.BTYPE value that generated the Branch Target Exception.
For more information about generating these exceptions, see The AArch64 application level programmers' model' in the ARMv8 ARM, section B1.
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Reserved, RES0.
For more information about generating these exceptions, see:
This is the layout of the ISS field for exceptions with the following values:
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Reserved, RES0.
For more information about generating these exceptions, see 'The AArch64 application level programmers' model' in the ARMv8 ARM, section B1.
This register can be written using MSR (register) with the following syntax:
MSR <systemreg>, <Xt>
This register can be read using MRS with the following syntax:
MRS <Xt>, <systemreg>
This syntax uses the following encoding in the System instruction encoding space:
<systemreg> | op0 | CRn | op1 | op2 | CRm |
---|---|---|---|---|---|
ESR_EL1 | 11 | 0101 | 000 | 000 | 0010 |
ESR_EL12 | 11 | 0101 | 101 | 000 | 0010 |
The register is accessible as follows:
<systemreg> | Configuration | Accessibility | |||
---|---|---|---|---|---|
EL0 | EL1 | EL2 | EL3 | ||
ESR_EL1 | SCR_EL3.NS == 0 && SCR_EL3.EEL2 == 0 | - | RW | n/a | RW |
ESR_EL1 | (HCR_EL2.NV == 0 || HCR_EL2.NV1 == 0 || HCR_EL2.NV2 == 0) && HCR_EL2.TGE == 0 && HCR_EL2.E2H == 0 && (SCR_EL3.NS == 1 || SCR_EL3.EEL2 == 1) | - | RW | RW | RW |
ESR_EL1 | HCR_EL2.NV == 1 && HCR_EL2.NV1 == 1 && HCR_EL2.NV2 == 1 && HCR_EL2.TGE == 0 && HCR_EL2.E2H == 0 && (SCR_EL3.NS == 1 || SCR_EL3.EEL2 == 1) | - | [VNCR_EL2.BADDR << 12 + 0x138] | RW | RW |
ESR_EL1 | HCR_EL2.TGE == 1 && HCR_EL2.E2H == 0 && (SCR_EL3.NS == 1 || SCR_EL3.EEL2 == 1) | - | n/a | RW | RW |
ESR_EL1 | (HCR_EL2.NV == 0 || HCR_EL2.NV1 == 0 || HCR_EL2.NV2 == 0) && HCR_EL2.TGE == 0 && HCR_EL2.E2H == 1 && (SCR_EL3.NS == 1 || SCR_EL3.EEL2 == 1) | - | RW | ESR_EL2 | RW |
ESR_EL1 | HCR_EL2.NV == 1 && HCR_EL2.NV1 == 1 && HCR_EL2.NV2 == 1 && HCR_EL2.TGE == 0 && HCR_EL2.E2H == 1 && (SCR_EL3.NS == 1 || SCR_EL3.EEL2 == 1) | - | [VNCR_EL2.BADDR << 12 + 0x138] | ESR_EL2 | RW |
ESR_EL1 | HCR_EL2.TGE == 1 && HCR_EL2.E2H == 1 && (SCR_EL3.NS == 1 || SCR_EL3.EEL2 == 1) | - | n/a | ESR_EL2 | RW |
ESR_EL12 | SCR_EL3.NS == 0 && SCR_EL3.EEL2 == 0 | - | - | n/a | - |
ESR_EL12 | (HCR_EL2.NV == 0 || HCR_EL2.NV1 == 1 || HCR_EL2.NV2 == 0) && HCR_EL2.TGE == 0 && HCR_EL2.E2H == 0 && (SCR_EL3.NS == 1 || SCR_EL3.EEL2 == 1) | - | - | - | - |
ESR_EL12 | HCR_EL2.NV == 1 && HCR_EL2.NV1 == 0 && HCR_EL2.NV2 == 1 && HCR_EL2.TGE == 0 && HCR_EL2.E2H == 0 && (SCR_EL3.NS == 1 || SCR_EL3.EEL2 == 1) | - | [VNCR_EL2.BADDR << 12 + 0x138] | - | - |
ESR_EL12 | HCR_EL2.TGE == 1 && HCR_EL2.E2H == 0 && (SCR_EL3.NS == 1 || SCR_EL3.EEL2 == 1) | - | n/a | - | - |
ESR_EL12 | (HCR_EL2.NV == 0 || HCR_EL2.NV1 == 1 || HCR_EL2.NV2 == 0) && HCR_EL2.TGE == 0 && HCR_EL2.E2H == 1 && (SCR_EL3.NS == 1 || SCR_EL3.EEL2 == 1) | - | - | RW | RW |
ESR_EL12 | HCR_EL2.NV == 1 && HCR_EL2.NV1 == 0 && HCR_EL2.NV2 == 1 && HCR_EL2.TGE == 0 && HCR_EL2.E2H == 1 && (SCR_EL3.NS == 1 || SCR_EL3.EEL2 == 1) | - | [VNCR_EL2.BADDR << 12 + 0x138] | RW | RW |
ESR_EL12 | HCR_EL2.TGE == 1 && HCR_EL2.E2H == 1 && (SCR_EL3.NS == 1 || SCR_EL3.EEL2 == 1) | - | n/a | RW | RW |
When HCR_EL2.E2H is 1, without explicit synchronization, access from EL3 using the mnemonic ESR_EL1 or ESR_EL12 are not guaranteed to be ordered with respect to accesses using the other mnemonic.
For a description of the prioritization of any generated exceptions, see section D1.13.2 (Synchronous exception prioritization) in the ARM® Architecture Reference Manual, ARMv8, for ARMv8-A architecture profile. Subject to the prioritization rules, the following traps and enables are applicable when accessing this register.
If IsUsingAccessor(ESR_EL1) && (SCR_EL3.NS == 1 || SCR_EL3.EEL2 == 1) && IsUsingAArch64(EL2) && HCR_EL2.E2H == 0 && HCR_EL2.TRVM == 1, then read accesses at EL1 are trapped to EL2.
If (HCR_EL2.NV2 == 0 || HCR_EL2.NV1 == 1 || HCR_EL2.NV == 0) && IsUsingAccessor(ESR_EL12) && (SCR_EL3.NS == 1 || SCR_EL3.EEL2 == 1) && IsUsingAArch64(EL2) && HCR_EL2.E2H == 0 && HCR_EL2.TRVM == 1, then read accesses at EL1 are trapped to EL2.
If IsUsingAccessor(ESR_EL1) && (SCR_EL3.NS == 1 || SCR_EL3.EEL2 == 1) && IsUsingAArch64(EL2) && HCR_EL2.E2H == 0 && HCR_EL2.TVM == 1, then write accesses at EL1 are trapped to EL2.
If (HCR_EL2.NV2 == 0 || HCR_EL2.NV1 == 1 || HCR_EL2.NV == 0) && IsUsingAccessor(ESR_EL12) && (SCR_EL3.NS == 1 || SCR_EL3.EEL2 == 1) && IsUsingAArch64(EL2) && HCR_EL2.E2H == 0 && HCR_EL2.TVM == 1, then write accesses at EL1 are trapped to EL2.
If (HCR_EL2.NV2 == 0 || HCR_EL2.NV1 == 1) && (SCR_EL3.NS == 1 || SCR_EL3.EEL2 == 1) && IsUsingAArch64(EL2) && HCR_EL2.E2H == 0 && IsUsingAccessor(ESR_EL12) && HCR_EL2.NV == 1, then accesses at EL1 are trapped to EL2.
If IsUsingAccessor(ESR_EL1) && (SCR_EL3.NS == 1 || SCR_EL3.EEL2 == 1) && IsUsingAArch64(EL2) && HCR_EL2.E2H == 1 && HCR_EL2.TGE == 0 && HCR_EL2.TRVM == 1, then read accesses at EL1 are trapped to EL2.
If (HCR_EL2.NV2 == 0 || HCR_EL2.NV1 == 1 || HCR_EL2.NV == 0) && IsUsingAccessor(ESR_EL12) && (SCR_EL3.NS == 1 || SCR_EL3.EEL2 == 1) && IsUsingAArch64(EL2) && HCR_EL2.E2H == 1 && HCR_EL2.TGE == 0 && HCR_EL2.TRVM == 1, then read accesses at EL1 are trapped to EL2.
If IsUsingAccessor(ESR_EL1) && (SCR_EL3.NS == 1 || SCR_EL3.EEL2 == 1) && IsUsingAArch64(EL2) && HCR_EL2.E2H == 1 && HCR_EL2.TGE == 0 && HCR_EL2.TVM == 1, then write accesses at EL1 are trapped to EL2.
15/10/2018 19:26; 79a37e9f651257790ccdbbdd2c8c3713837d12fb
Copyright © 2010-2018 ARM Limited or its affiliates. All rights reserved. This document is Non-Confidential.