Aarch64 中的 EL0 没有 LR 和 SPSR

No LR and SPSR for EL0 in Aarch64

在 AArch64 中,有 4 个异常级别,即 EL0-3。 ARM 站点提到有 4 个堆栈指针 (SP_EL0/1/2/3) 但只有 3 个异常 Link 寄存器 (ELR_EL1/2/3) 并且只有 3 个保存的程序状态寄存器 (SPSR_EL1/2/3).

为什么不需要 ELR_EL0 和 SPSR_EL0?

P.S。对不起,如果这是一个愚蠢的问题。我是 ARM 架构的新手。

根据设计,异常不能以 EL0 为目标,所以如果它永远不能接受异常,那么机器能够从一个 return 就没有用了。

为了稍微扩展一下推理(掩盖可选的和更特殊用途的更高异常级别),基本设计是 EL1 是特权系统代码运行的地方,EL0 是非特权用户代码运行的地方。因此 EL0 在它能做的事情上必然受到更多限制,并且对于处理 架构 异常不是很有用,即需要详细了解系统的低级事情。只有特权软件(通常是 OS 内核)才能访问决定是否处理该基本硬件异常所必需的完整硬件和软件状态。悄悄地从交换中调出一些东西,而不是向有问题的任务发送一个 "software exception" 类型的信号来告诉它做坏事。