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