它们是SP_EL0、SP_EL1、SP_EL2和SP_EL3。这些寄存器用来指向专用的栈。堆栈可以,例如,用来存储寄存器被损坏异常处理程序,使它们可以在返回之前恢复到原来的值原始代码 处理程序代码可以从使用SP_ELn切换到使用SP_EL0。例如,SP_EL1可能指向存储小堆栈的内存块,内核可以始终保证该小堆栈是有效的。SP_EL0可能指向...
2 人赞同了该文章 一、异常等级 EL0 非特权模式,用于运行应用程序 EL1为特权模式,用于运行操作系统内核 EL2用于运行虚拟化管理程序 EL3用于运行安全世界的管理程序 二、同步异常与异步异常 同步异常:处理器执行某条指令而直接导致的异常,往往需要在异常函数里处理该异常之后,处理器才能继续运行,常见的同步异常如下:...
(1)异常发生时,异常处理可以在当前或更高EL,EL0不能处理异常; (2)同步异常是可以在当前EL处理的,比如在EL1里发生的同步异常; (3)对于异步异常,可以路由到EL1/EL2/EL3处理,需要配置HCR以及SCR相关寄存器; 路由方法: 1.选择异常级别: 当异常发生时,PC可以有三个基地址VBAR_EL1、VBAR_EL3、VBAR_EL1(secure...
(2)当前为EL2,则陷阱异常传递给EL2; (3)当前为EL3,则陷阱异常传递给EL3; 3. 系统调用 SVC 默认情况下SVC产生supervisor call,同步异常目标级别为EL1,使得运行EL0的软件可以调用EL1下的操作系统或软件的接口 HVC 如果实现了EL2,默认情况下HVC产生hypervisor call,同步异常目标级别为EL2 注:HVC指令在EL0和secu...
arm64的异常模型由一组异常级别(EL0-EL3)组成。EL0,EL1有安全模式和非安全模式的区别。EL2是虚拟机管理级别并且只有非安全模式。EL3是最高优先级并且只存在安全模式中。 为了描述方便,下面将使用术语“boot loader”来简化所有执行在cpu将控制权转交给内核之前的软件的称呼。这里包含了安全监视器(secure monitor)和...
在实现了EL3的情况下:如果值与P相同则计算EL1中的周期,否则不。 NSU, bit[28] 在实现了EL3的情况下:如果值与U相同则计算EL0中的周期,否则不。 NSH, bit[27] 在实现了EL2的情况下: 0b0 不计算EL2中的周期 0b1 计算EL2中的周期 如果实现了EL2和EL3的话,那么是否在EL2进行计数将会进一步的由SH位进行...
EL:当前异常等级。0:表示EL0;1:表示EL1;2:表示EL2;3:表示EL3; nRW:当前执行状态。0:表示AArch64;1:表示AArch32; SP:堆栈指针选择寄存器。0:表示选择SP0;1:表示SPx; 2.特殊寄存器 3.1 零寄存器 零寄存器顾名思义,这些寄存器的内容全是0,可以用做源寄存器,也可以用作目标寄存器。WZR是32位的零寄存器,X...
ARMv8体系结构支持4个异常等级,每一个异常等级都有一个专门的SP寄存器SP_ELn,如处理器运行在EL1时选择SP_EL1寄存器作为SP寄存器。 SP_EL0:EL0下的SP寄存器。 SP_EL1:EL1下的SP寄存器。 SP_EL2:EL2下的SP寄存器。 SP_EL3:EL3下的SP寄存器。
EL0的A64和A32状态,由EL1决定,也就是CPSR.M[4] 位决定。以上的demo是从EL3的A64切换到EL2的A...