esr_el1
寄存器esr_el1是在权限级EL1下可以访问的系统寄存器,即由操作系统内核访问来查明具体触发异常原因的寄存器。当飞腾CPU在EL0/EL1状态下,发生异常,并跳入EL1进行异常处理时,该寄存器的相关状态就表明了异常发生的具体原因。
在AArch64状态下,该寄存器是一个64位的系统寄存器。
-
该寄存器的访问方式
读 mrs <xt>, esr_el1 写 msr esr_el1, <xt>
-
寄存器分析
寄存器esr_el1主要分为EC[31:26]、IL、ISS三部分2.1 EC是异常分类
EC主要描述了异常触发的原因,也就是分类。EC一共占6位,当EC=0b010101时,表示从AArch64状态的用户程序执行SVC指令而触发的异常,即系统调用。2.2 IL是同步异常的指令长度
IL只有1位,IL=0b1表示32位指令,常规系统调用不检查该位。2.3 ISS是具体指令特征
ISS是25位,当EC有明确异常分类并且IL=0b1时,这25位就保留。 -
同步异常和系统调用
系统调用是一种同步异常。操作系统内核要判断异常触发时的CPU权限级,也要判断异常类型。