描述
当处理器处于调试状态并且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等])之后,始终在停止模式下发出加载/存储操作后检查粘滞中止)。
没有回复内容