This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

关于ARMv8中不同Security状态下异常向量表的问题

Hi,各位专家:

    在ARMv7-A架构中,共有四张异常向量表,即Secure状态下的exception table, Non-Secure状态下的exception table,Monitor Mode下的exception table,以及hypervisor模式下的异常向量表,因为在不同Security状态下,VBAR寄存器是banked,所以它可将不同security状态的异常向量表分开,即Secure状态和Non-secure状态对应不同的exception table.

    但在ARMv8中,当EL3运行在AArch64状态下时,是不支持这种备份方式的,这意味着当处理器在EL3使用AArch64执行态时,在Secure EL1(运行kernel)下和Non-Secure EL1下(运行secure os)访问的VBAR(或VBAR_EL1)是同一个寄存器,也就是说Secure状态和Non-secure状态对应着同一个exception table,这样在ARMv8下就只有3张异常向量表。

    不知我这样理解是否正确?如果正确,那么这岂不是cpu在Secure状态下执行了Non-secure的代码?

Parents
  • 谢谢!ARMv8这样设计感觉实时性会有所影响,如果频繁的切换Security状态会增加额外保存系统寄存器上下文的时间。

    还有一个问题需要询问一下,谢谢!

    以Cortex-A53为例,运行linux,当处理器处于Secure EL1,运行Secure OS时产生了一个IRQ,这时有什么比较好的处理方法?返回先返回到Non-Secure EL1处理中断然后再执行SMC再进入Secure OS继续执行还是有其它好的方法joeyxu

Reply
  • 谢谢!ARMv8这样设计感觉实时性会有所影响,如果频繁的切换Security状态会增加额外保存系统寄存器上下文的时间。

    还有一个问题需要询问一下,谢谢!

    以Cortex-A53为例,运行linux,当处理器处于Secure EL1,运行Secure OS时产生了一个IRQ,这时有什么比较好的处理方法?返回先返回到Non-Secure EL1处理中断然后再执行SMC再进入Secure OS继续执行还是有其它好的方法joeyxu

Children