背景 在AArch32上,每个模式(FIQ,IRQ等)都有一个SP(R13)寄存器的“存储”副本。这允许不同的模式来维护它们自己的独立堆栈。
现在在AArch64上似乎并非如此。例如:如果我们考虑EL1,在AArch64上,相当于IRQ和SVC的两种模式是EL1'h'和EL1't'(h =处理程序和t =线程)。在这种情况下,“h”和“t”模式都必须共享一个公共堆栈吗?我问,因为每个EL只有一个堆栈指针,即SP_ELx。
问题:
答案 0 :(得分:3)
首先,我们需要将ARMv7 / ARMv8(架构版本)与AArch32 / AArch64执行状态(32位与64位)分开。
如果ARMv8处理器在EL1(内核)上提供AArch32执行状态,则它具有与ARMv7中相同的异常模型。当EL1处于AArch64执行状态时,它使用完全不同的异常处理模型。
AArch64 EL1没有IRQ和SVC或AArch32所做的其他模式 - 这就是它需要/只有一个异常堆栈的原因。