在其他任何异常级别执行时,可以将处理器配置为使用SP_EL0或配置为对应该异常级别的堆栈指针SP_ELx 软件可以在目标异常级别执行的时候通过更新PSTATE.SP来指向SP_EL0的堆栈指针 3 个不同异常等级的 SPSR_ELx saved processor state register ,保存执行异常前的 PSTATE 状态值 3 个不同异常等级的 ELR_RLx,except...
安全状态的切换只能是异常从非安全的ELx切换到安全态的EL3 任何异常ELx的异常上报到EL3都不会改变SCR_EL3.NS安全标志位 当异常发生时(AArch64)工作: 1) PE的状态保存到对应的SPSR_ELx 2) 首选的异常返回地址保存到ELR_ELx中(异常上报到哪个ELx,就将返回地址保存在哪个ELR_Elx中) 3) PSTATE.{D,A,I,...
例如,从EL1返回时,PC将恢复到ELR_EL1中存储的地址。 AArch64状态为每个异常级别都提供了ELR寄存器: ELR_EL1,用于EL1的异常。 如果实现了EL2,ELR_EL2用于EL2的异常。 如果实现了EL3,ELR_EL3用于EL3的异常。 (5)ESR(Exception Syndrome Register) 异常综合表征寄存器ESR_ELn包含的异常信息用以异常处理程序...
ELR_ELx(x>0):异常链接寄存器,记录着异常时程序的返回地址 ESR_ELx(x>0) :同步异常, 异常特征寄存器 FAR_ELx(x>0): 同步异常, 异常时的错误地址 VBAR_ELx(x>0): 向量表基地址寄存器 TTBRn_ELx(n=1,2、x>0):地址翻译基地址寄存器 MAIR_ELx(x>0) :内存属性寄存器 PAR_EL1:物理地址寄存器, ...
ARMv8异常分为同步异常和异步异常,发生异常的时候需要保存异常进入地址到ELR_ELx,同步异常(und/abt等)是当前地址,而异步异常(irq/fiq等)是下一条指令地址,在返回异常现场的时候,可以使用ELR_ELx来恢复PC值。 同步异常,缺页异常对应的底层应该是同步异常吧?
PC从ELR_ELx恢复 PSTATE从SPSR_ELx恢复 11 中断的标记 在gicv3中断控制器中,对中断进行了分组:Group0、Secure Group1、Non-secure Group1。当一个中断进来的时候,cpu interface会根据中断的分组类型和当前PE的security状态来决定是标记为IRQ还是FIQ 12 中断的路由 ...
PC从ELR_ELx恢复 PSTATE从SPSR_ELx恢复 11中断的标记 在gicv3中断控制器中,对中断进行了分组:Group0、Secure Group1、Non-secure Group1。当一个中断进来的时候,cpu interface会根据中断的分组类型和当前PE的security状态来决定是标记为IRQ还是FIQ 12 中断的路由 ...
处理器状态保存到目标异常级别的SPSR_ELx中。 返回地址保存到目标异常级别的ELR_ELx中。 如果异常是同步异常或SError中断,异常的表征信息将保存在目标异常级别的ESR_ELx中。 如果是指令止异常(Instruction Abort exception),数据中止异常(Data Abort exception,),PC对齐错误异常(PC alignment fault exception),故障的...
返回地址保存ELR_ELx。 PSTATE寄存器里的DAIF域都设置为1,相当于把调试异常、系统错误(SError)、 IRQ中断以及FIQ中断都关闭了。 更新了ESR_ELx寄存器,里面包含了同步异常发生的原因 SP执行SP_ELx。 切换到对应的EL,然后跳转到异常向量表里执行。 当异常发生后,操作系统需要做哪些事情?
ELR_ELx(x>0):异常链接寄存器,记录着异常时程序的返回地址 ESR_ELx(x>0) :同步异常, 异常特征寄存器 FAR_ELx(x>0): 同步异常, 异常时的错误地址 VBAR_ELx(x>0): 向量表基地址寄存器 TTBRn_ELx(n=1,2、x>0): 地址翻译基地址寄存器