Zynq-7000,APU - ARM指令在中止加载/存储后写入ITR时停止调试执行

描述

当处理器处于调试状态并且sdabort标志置位时,在错误地执行中止的加载/存储指令之后写入ITR的指令而不是预期的被丢弃操作。执行ITR指令时,可能会发生不同的故障。

影响:

次要。由于指令在不应该执行时会发生不同的故障。在大多数情况下,预计故障不会导致任何重大问题。

变通办法:

有一系列的解决方法,请参阅解决方案详细信息。

受影响的配置:

使用一个或两个处理器的系统。

受影响的器件版本: 全部,没有计划修复。请参阅(Xilinx答复47916) - Zynq-7000设计咨询主答复记录。

详细说明

当处理器处于调试状态时,在中断的加载/存储指令之后写入ITR的指令在清除SDABORT_l时执行,而不是被丢弃。条件:

  • 调试器已将extDCCmode位置于Stall模式
  • 先前发出的加载/存储指令已生成同步数据中止(例如MMU故障)
  • 为了提高效率,调试器不会立即读取DBGDSCRext,以查看加载/存储是否已完成且尚未中止,而是向ITR写入更多指令,期望在出现问题时将其丢弃
  • 调试器在序列结束时读取DBGDSCR并发现加载/存储中止。
  • 调试器清除SDABORT_l标志(通过写入DBGDRCR中的Clear Sticky Aborts位)

在上述条件下,ITR中的后续指令可能会被执行而不是被丢弃。

影响细节

影响很小。由于指令在不应该执行时会发生不同的故障。在大多数情况下,预计故障不会导致任何重大问题。

解决方法细节

有一系列的解决方案,复杂性越来越高,影响越来越小。在每种情况下,调试时影响都是性能损失:

  • 不要使用失速模式。
  • 进行加载/存储操作时,请勿使用停止模式。
  • 在停止模式下发出加载/存储操作后,始终检查粘滞中止(这可能意味着(2)是一个优选的替代方案)。
  • 在发出可能损坏重要目标状态的任何进一步指令(例如进一步的加载/存储指令,写入带电寄存器的指令[VFP,CP15等])之后,始终在停止模式下发出加载/存储操作后检查粘滞中止)。
编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-31 14:48:57 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它