我试图了解 ARM 架构(ARMv8)如何支持虚拟化环境中的故障地址。对于虚拟机管理程序,必须捕获来宾的每个设备访问以模拟设备。
来自来宾的内存访问将产生异常,并且管理程序将通过读取 ESR 来识别异常原因。然后意识到原因是data_abort。
之后,从管理程序的角度来看,故障地址是主要兴趣,它将通过读取 HPFAR(IPA 的部分)和 FAR(故障地址的 VA)来获取故障地址。通过合并它们(故障地址的上部来自 HPFAR,下部来自 FAR),管理程序终于可以知道故障地址,但是,它确实不是 64 位地址。它仅代表([51:12] 或 [47:12],取决于 ARMv8 的版本)的 IPA 范围,而不是完整的 64 位 IPA。
尽管大多数实际平台没有 2^64 大小的内存,但我认为 ARM 架构必须支持表示 64 位充满 IPA,但似乎没有。
谁能告诉我是我遗漏了什么还是 ARM 不支持 64 位 IPA 的特殊原因?