背景: 在 AArch32 上,每种模式(FIQ、IRQ 等)都有一个 SP(R13)寄存器的“存储”副本。这允许不同的模式维护自己的独立堆栈。
现在在 AArch64 上似乎并非如此。例如:如果我们考虑 EL1,在 AArch64 上,相当于 IRQ 和 SVC 的两种模式是 EL1'h' 和 EL1't'(h = 处理程序和 t = 线程)。在这种情况下,'h' 和 't' 模式是否必须共享一个公共堆栈?我问是因为每个 EL 只有一个堆栈指针,即 SP_ELx。
问题:
- AArch64 如何为 Linux 这样的操作系统管理这种差异。像 EL1'h' 和 EL1't' 这样的两种模式会共享同一个堆栈吗?
- 与 AArch32 类似,Linux 对 IRQ 和 SVC 模式有不同的堆栈,在 AArch64 的情况下,为 EL1'h' 和 EL1't' 维护不同的堆栈需要做什么?