ARM speculative访问引起的血案

  • 函数执行到特定位置卡死,该位置只有内存和UART寄存器访问,单步无问题。
  • 查找问题:
    • 怀疑UART和SRAM ip有问题,芯片设计提供抓信号的版本
    • 抓SRAM信号,发现有0地址访问。 0地址是DDR区域,还不可访问,程序中未访问0地址
  • 定位:ARM的硬件,为了提高效率,对于配置成normal的内存区域,硬件在遇到一些分支指令时,会有prefetch,硬件根据自己的猜测到内存中进行speculative访问。 我们的程序,触发了ARM硬件的speculative访问0地址,导致A53卡死。
  • 解决方法: 先把DDR的3G空间设置成非法(非normal),这样硬件就不会随机访问这些区域了。
posted @ 2021-03-16 11:31  liuwanpeng  阅读(392)  评论(0编辑  收藏  举报