代码之家  ›  专栏  ›  技术社区  ›  HardcoreHenry

VBAR寄存器是否保存在ARM的上下文开关上?

  •  3
  • HardcoreHenry  · 技术社区  · 6 年前

    有一次我被告知vbar_el0/1寄存器没有在上下文开关上备份。我还注意到VBAR EL0/1寄存器没有列出 here ,但除此之外,我找不到太多关于它的信息。这是否意味着对于所有32位进程,异常表必须位于同一位置?另外,在32位和64位处理器模式之间切换时,这是如何工作的?

    我使用的是针对armv8交叉编译的linux 4.1。

    1 回复  |  直到 6 年前
        1
  •  1
  •   S.Wan    6 年前

    关于上下文切换的第一个问题,我没有找到任何现有的参考,但我个人的经验是,除非手动更新vbar_el0/1寄存器,否则所有进程都共享同一个异常向量表。 如果成功更新寄存器,则所有进程都将根据新寄存器的值找到异常处理程序。

    关于你的第二个问题:

    在32位和64位处理器模式之间切换时如何工作?

    根据 ARM Architecture Reference Manual :

    vbar_el1[31:0]在体系结构上映射到aarch32系统寄存器vbar。