操作系统级的异常状态表征寄存器esr_el1

1. 操作系统级的异常状态表征寄存器esr_el1

寄存器esr_el1是在权限级EL1下可以访问的系统寄存器,即由操作系统内核访问来查明具体触发异常原因的寄存器。当飞腾CPU在EL0/EL1状态下,发生异常,并跳入EL1进行异常处理时,该寄存器的相关状态就表明了异常发生的具体原因。当飞腾CPU进入EL1,操作系统内核在进行异常处理的通用路径上,通过对比esr_el1的状态,进行最终跳转。

在AArch64状态下,该寄存器是一个64位的系统寄存器。

该寄存器的访问方式

        读  mrs <xt>, esr_el1

        写 msr esr_el1, <xt>

2. 寄存器分析

寄存器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位就保留。

3. 同步异常和系统调用

系统调用是一种同步异常。操作系统内核要判断异常触发时的CPU权限级,也要判断异常类型。

来自用户态的同步异常,仅仅需要检查EC部分即可。

猜你喜欢

转载自blog.csdn.net/lsshao/article/details/119379653