SPARC 单步执行模式

SPARC single-stepping mode

有没有相当于x86单步模式的SPARC?我想要的是在每条指令之后停止执行并将控制流移动到陷阱处理程序或类似的东西。

我想在延迟执行槽中使用 ta 指令,但是当前一条指令是设置了 annul 位的分支指令时,这将不起作用。

Sparc在PSR中缺少单步位,所以单步比较难。但我用了一个技巧来帮助靠近。将 TPC 设置为您要单步执行的指令的地址,并将 TNPC 设置为您放置陷阱指令的其他地方的地址。当你执行重试指令回到进程上下文时,它会单步执行你想要的指令,然后它会执行陷阱指令,这会把你带回内核,在那里你可以做任何你想做的事。 (n.b 这是针对 sparc64,不确定 sparc32)。这是一个很好的技巧,因为您没有修改用户地址 space 中的现有指令。这对我很重要,因为我在内核中使用单步执行指令。

我有过但从未尝试过的另一个想法,就是简单地将 TNPC 设置为非法地址。然后在 TPC 的指令执行后,您将自动陷入内核。并且由于陷阱处理代码知道进程是单步执行的,因此不会混淆 "real" 非法地址陷阱。