有人告诉我,VBAR_EL0/1 寄存器没有在上下文切换上备份。我还注意到此处未列出 VBAR_EL0/1 寄存器,但除此之外,我没有找到太多关于它的信息。这是否意味着所有 32 位进程的异常表必须位于同一位置?另外,在 32 位和 64 位处理器模式之间切换时,它是如何工作的?
我正在使用为 Armv8 交叉编译的 Linux 4.1。
有人告诉我,VBAR_EL0/1 寄存器没有在上下文切换上备份。我还注意到此处未列出 VBAR_EL0/1 寄存器,但除此之外,我没有找到太多关于它的信息。这是否意味着所有 32 位进程的异常表必须位于同一位置?另外,在 32 位和 64 位处理器模式之间切换时,它是如何工作的?
我正在使用为 Armv8 交叉编译的 Linux 4.1。
关于上下文切换的第一个问题,我没有找到任何现有的参考资料,但我个人的经验是所有进程共享相同的异常向量表,除非您手动更新 VBAR_EL0/1 寄存器。如果成功更新寄存器,那么所有进程都会根据新寄存器的值找到异常处理程序。
对于你的第二个问题:
在 32 位和 64 位处理器模式之间切换时这是如何工作的?
根据ARM 架构参考手册:
VBAR_EL1[31:0] 在架构上映射到 AArch32 系统寄存器 VBAR。