例如,如果异常发生在EL1,则将处理器状态保存在SPSR_EL1中。 保存处理器状态意味着异常处理程序可以: 从异常返回时,将处理器状态恢复到SPSR中存储的异常级别的状态。例如,异常处理程序从EL1返回时,处理器状态恢复到存储在SPSR_EL1中的状态。 检查发生异常时PSTATE的值,确定引起异常指令的当前执行状态和异常级别,例...
在ARMv8中,写入的SPSR依赖于异常级别。如果异常发生在EL1,则使用SPSR_EL1。如果异常发生在EL2,则使用SPSR_EL2,如果异常发生在EL3,则使用SPSR_EL3。处理器核会在异常发生时填充SPSR。 注意: 与异常级别相关联的寄存器对ELR_ELn和SPSR_ELn保存着在较低异常级别执行期间的状态。 5.2 异常链接寄存器(ELR) 异常链接...
例如,如果异常发生在EL1,则将处理器状态保存在SPSR_EL1中。 保存处理器状态意味着异常处理程序可以: 从异常返回时,将处理器状态恢复到SPSR中存储的异常级别的状态。例如,异常处理程序从EL1返回时,处理器状态恢复到存储在SPSR_EL1中的状态。 检查发生异常时PSTATE的值,确定引起异常指令的当前执行状态和异常级别,例...
SPSR_EL1用于存储,当在发生系统调用、异常、中断时,当前程序的PSTATE(无论是用户态还是内核态)。 2、当发生中断、异常、系统调用时,硬件会自动: 1)把当前程序的pc值放入ELR_EL1中 2)把当前状态PSTATE存入SPSR_EL1中 3)根据发生在内核态还是用户态,中断还是异常,会自动跳转到el1_sync,el1_irq,el0_sync,...
SP_EL0 :在所有level中,如果spsel=1, 则使用SP_EL0 SPSR :save program status register 备份的程序状态寄存器 ELR_ELx(x>0):异常链接寄存器,记录着异常时程序的返回地址 ESR_ELx(x>0) :同步异常, 异常特征寄存器 FAR_ELx(x>0): 同步异常, 异常时的错误地址 ...
可以看到,此时SPSel的值是1,Mode的值为EL3h,说明此时SP用的是SP_ELx。此时SPSR_EL3的值是0x3CC,SPSR的含义如下: M[3:0]的值是0xC,含义如下,表示发生异常前系统的模式和状态:AArch64、EL3、SP_EL0 下面是异常处理函数: 1//2// Current EL with SP03//4el3_vectors:5c0sync3:6mrs x0, elr_el...
将PSTATE的状态保存到SPSR_ELn寄存器中,根据当前所在的EL级别来保存到对应的SPSR寄存器中。如果当前的异常发生在EL1,则将PSTATE的状态保存到SPSR_EL1中 将PC的值存储在ELR_ELn寄存器中,也是根据当前所处的EL级别。 以上两个步骤是硬件自动保存的,不需要软件的干涉 ...
(1) PSTATE保存到SPSR_ELx; (2) 返回地址保存到ELR_ELx; (3) PSTATE寄存器里的DAIF域都设置为1,相当于把调试异常、系统错误关闭; (4)更新ESR_ELx寄存器,该寄存器包含同步异常发生的原因; (5)切换到对应的EL, 然后跳转到异常向量表里执行;
在其他任何异常级别执行时,可以将处理器配置为使用SP_EL0或配置为对应该异常级别的堆栈指针SP_ELx 软件可以在目标异常级别执行的时候通过更新PSTATE.SP来指向SP_EL0的堆栈指针 3 个不同异常等级的 SPSR_ELx saved processor state register ,保存执行异常前的 PSTATE 状态值 ...
SPSR是保存上一个模式的CPSR。 ARMv7的一般AR系列的寄存器模型和上述的基本相同,有一些新的扩展, 增加了Hyp模式以及Mon模式,分别用于虚拟扩展以及安全扩展, Hyp模式下的LR为ELR,记录异常时的返回地址,其他均一致。 CortexA53 r0-r7 用来做参数传递或者发返回结果。