如何在ARMv8中ERET到相同的异常级别?

Vic*_*kyi 5 assembly arm

已知如何从异常级别返回到上一个异常级别(set elr_el3 -> set spsr_el3 ->execute eret),但是如何从 EL3 ERET 到同一个 EL3?在ARM的官方文档中,我发现这样一句话说这是可能的:“从异常返回可以保持在相同的异常级别或进入较低的异常级别。它不能移动到更高的异常级别。”。

Ros*_*dge 8

ERET 指令可用于返回到 CPU 支持的相同或任何较低的异常级别。如果存储的保存模式字段SPSR_EL3.M[4:0]设置为0b011010b01100,其中位编码M[3:2]异常级别 3,则在 EL3 执行的 ERET 指令将返回到 EL3。

有关 SPSR_ELx 寄存器如何布局的更多详细信息,请参阅ARM 架构参考手册 - ARMv8中的“D1.6.4 保存的程序状态寄存器 (SPSR)”部分,了解 ARMv8-A 架构配置文件。