armv8 - AArch64 vs AArch32堆栈指针寄存器?

时间:2014-02-05 19:33:39

标签: kernel arm computer-architecture armv7 arm64

背景 在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堆栈 模式,需要做些什么来维护不同的堆栈 EL1'h'和EL1't',如果是AArch64?

1 个答案:

答案 0 :(得分:3)

首先,我们需要将ARMv7 / ARMv8(架构版本)与AArch32 / AArch64执行状态(32位与64位)分开。

如果ARMv8处理器在EL1(内核)上提供AArch32执行状态,则它具有与ARMv7中相同的异常模型。当EL1处于AArch64执行状态时,它使用完全不同的异常处理模型。

AArch64 EL1没有IRQ和SVC或AArch32所做的其他模式 - 这就是它需要/只有一个异常堆栈的原因。

相关问题