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的代码?
看来你对armv8架构还不够了解啊,最好看下armv8开发者指南,只有英文版,配合ATF源码看看,很快就能理解了
armv8中nonsecure-EL1,nonsecure-EL2,EL3,secure-EL1都有自己的中断向量表
如果不配置HCR,SCR寄存器的话,默认情况下,nonsecure-EL0的中断由nonsecure-EL1处理
nonsecure-EL1的irq,fiq,hvc中断由nonsecure-EL2处理,nonsecure-EL1的smc中断由EL3处理
nonsecure-EL2的中断由EL3处理
secure-EL0的中断由secure-EL1处理
secure-EL1的中断由EL3处理