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