如何生成 SPARC HW 陷阱(陷阱类型 tt < 128)

How to generate SPARC HW traps (trap type tt < 128)

我正在编写 SPARC v8(32 位)系统,需要验证对 HW 陷阱的响应。

SPARC提供了256个陷阱,每个陷阱的区别在于陷阱类型tt,其中前128个是HW陷阱,陷阱类型128到255是软件陷阱。 SPARC指令集文档说执行

ta N    ; trap always, n = 0..127

导致类型为 tt=N+128 的陷阱。陷阱导致跳转到陷阱基地址 + tt * 16.

有没有办法以编程方式引起硬件陷阱 而无需 编写代码来展示每个硬件陷阱条件,例如 window 下溢、未对齐访问等?

我正在考虑安装 SW 陷阱处理程序,它只需跳转到陷阱处理程序 (N-128) 并保持祈祷。我对这个想法感到不安,因为硬件陷阱可能会导致其他处理器状态发生变化,而软件陷阱不会...

Is there a way to programmatically cause a HW trap without writing code exhibiting each of the HW trap conditions, such as window underflow, unaligned access, etc?

不,没有办法以编程方式复制由硬件陷阱引起的所有影响。例如,一个真正的硬件陷阱在 TBR 寄存器中设置 tt(陷阱类型字段)以指示陷阱的类型。程序员不能通过写入 TBR 寄存器来修改该字段。如果在陷阱处理程序中读取此字段(无论出于何种原因),您可能无法人为地设置它。但是,正如评论中提到的,如果您的处理器实现提供调试接口,则可能会导致硬件陷阱。

I'm programming a SPARC v8 (32bit) system and need to verify response to HW traps.

是否有特殊原因导致您无法编写实际上会导致硬件陷阱的代码(例如 window 溢出或被零除等?在 sparc 中编写小型单元测试实际上非常简单-asm 用于测试此类陷阱。如果您想彻底测试对陷阱的响应,实际上可能是必要的。另一种可能性是使用 sparc V8 模拟器。