【问题标题】:armv8 - AArch64 vs AArch32 Stack Pointer Register?armv8 - AArch64 与 AArch32 堆栈指针寄存器?
【发布时间】:2014-03-02 10:42:05
【问题描述】:

背景: 在 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 的情况下?

【问题讨论】:

    标签: kernel arm computer-architecture armv7 arm64


    【解决方案1】:

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

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

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

    【讨论】:

    • 嗯,我同意 AArch64 EL1 没有 IRQ 和 SVC,但它有两种等效模式,分别称为 EL1h、EL1t。 'h' = 处理程序和't' = 线程。如果我们这样做,我们是否仍然在“线程”和“处理程序”模式之间共享相同的堆栈?
    • ELxt 和 ELxh 术语是指使用 EL0 SP 而不是当前特权 EL 的 SP 进行选择的能力。这些名称来自 M 配置文件的“线程”和“处理程序”模式。
    猜你喜欢
    • 2021-06-10
    • 2020-05-17
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    相关资源
    最近更新 更多