如何使用hvc(0)调用参数,我通常看到0,使用?
如果r0不用于传递此参数,那么它是如何传递给hvc处理程序的。
我见过两个虚拟机管理程序向量表的实现,两者都像
.align 5
__hyp_stub_vectors:
__hyp_stub_reset: W(b) .
__hyp_stub_und: W(b) .
__hyp_stub_svc: W(b) .
__hyp_stub_pabort: W(b) .
__hyp_stub_dabort: W(b) .
__hyp_stub_trap: W(b) __hyp_stub_do_trap
__hyp_stub_irq: W(b) .
__hyp_stub_fiq: W(b) .
e.g。在以下链接
我不明白为什么管理程序陷阱总是位于向量表中的第6个位置。
现在调用hvc(0)切换到HYP模式,将CPSR保存到Hyp_SPSR并分支到hyp向量表。从向量表中将调用__hyp_stub_do_trap例程,该例程位于第6位。
为什么这个陷阱例程将被调用为什么不例行,例如在第四个位置(如果已定义)将被调用?
谢谢, 的Pankaj
答案 0 :(得分:1)
ARM Aarch32中的异常具有特定的向量地址,具体取决于异常的类型。如上所列,异常可以是复位,未定义指令,系统调用(SVC),预取或数据中止,管理程序陷阱,中断。
这是异常处理程序的工作,用于定义异常发生的原因。如果是由HVC指令或指令或寄存器陷阱引起的管理程序陷阱,则调用相同的处理程序。然后,处理程序可以查看异常综合症(HSR
),它将提供有关异常原因的信息。
关于HVC的参数,这不在r0上传递,而是直接在指令的操作码中编码。处理程序可以使用链接寄存器(LR或R14)查找指令并对其进行解码,或使用Syndrome寄存器查找此信息。