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

Kernel armv8-AArch64与AArch32堆栈指针寄存器?,kernel,arm,computer-architecture,armv7,arm64,Kernel,Arm,Computer Architecture,Armv7,Arm64,背景: 在AArch32上,每个模式(FIQ、IRQ等)都有SP(R13)寄存器的“银行”副本。这允许不同的模式保持各自独立的堆栈 在AArch64上,情况似乎并非如此。例如,如果我们考虑EL1,在AGAR64上,等效于IRQ和SVC的两种模式是EL1H’和EL1’’(H= HANDER和T=线程)。在这种情况下,“h”和“t”模式是否必须共享一个公共堆栈?我这样问是因为每个EL只有一个堆栈指针,即SP_ELx 问题: AArch64如何在Linux这样的操作系统中处理这种差异。将 EL1'h

背景: 在AArch32上,每个模式(FIQ、IRQ等)都有SP(R13)寄存器的“银行”副本。这允许不同的模式保持各自独立的堆栈

在AArch64上,情况似乎并非如此。例如,如果我们考虑EL1,在AGAR64上,等效于IRQ和SVC的两种模式是EL1H’和EL1’’(H= HANDER和T=线程)。在这种情况下,“h”和“t”模式是否必须共享一个公共堆栈?我这样问是因为每个EL只有一个堆栈指针,即SP_ELx

问题:

  • AArch64如何在Linux这样的操作系统中处理这种差异。将 EL1'h'和EL1't'等两种模式共享同一堆栈
  • 与AArch32类似,Linux对IRQ和SVC有不同的堆栈 在不同的模式下,如何维护不同的堆栈 对于AArch64,EL1'h'和EL1't'

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

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


AARC64 EL1没有IRQ和SVC或AARC32有的其他模式-这就是为什么它需要/只有一个异常堆栈。

我同意AARC64 EL1没有IRQ和SVC,但它有两个等效模式,称为EL1h,EL1t。”h'=处理程序,t'=线程。如果我们这样做,我们还会在“线程”和“处理程序”模式之间共享相同的堆栈吗?ELxt和ELxh术语指的是使用EL0 SP而不是当前特权EL的SP进行选择的能力。这些名称来自M-profile的“线程”和“处理程序”模式。