在AArch64状态下,SP对应的物理寄存器有如下四个(某一时刻只能对应下面其中一个):
SP_EL0和SP_EL1
SP_EL2
SP_EL3
如何使用呢?
1、如果程序运行在EL0,那么使用的是SP_EL0
2、如果程序运行在其他Exception level下,可以使用SP_EL0和当前Exception level所对应的SP_ELx
3、默认情况下,进入异常后,使用的是当前Exception level对应的SP_ELx。即:发生的进入EL1的异常,那么在跳转到EL1的异常处理入口后,会自动切到SP_EL1,此时SP对应的就是SP_EL1. 当然,可以在异常通过操作PSTATE.SP将SP强制切到SP_EL0
4、即便不是在异常处理程序中,也可以通过操作PSTATE.SP将SP强制切到SP_EL0或者SP_ELx
5、比如程序正运行在EL1,此时使用的SP是SP_EL0,突然发生了一个进入EL1的异常,在跳转到异常处理入口后,SP会自动切到SP_EL1,在异常返回后,SP又会自动切回到原先的SP_EL0
6、后缀t和h:
t 表示使用的是SP_EL0
h 表示使用的是SP_ELx
验证
下面使用DS5仿真的实验,验证一下上面的说法。
系统复位后,默认是在EL3,并且是secure模式。
第73行,