是否存在与x86的单步模式等效的SPARC?我想要的是在每条指令后停止执行,并将控制流移至陷阱处理程序或类似的处理程序。
我考虑过在延迟执行槽中使用ta
指令,但是当前一条指令是设置了anul位的分支指令时,该指令将无效。
答案 0 :(得分:1)
Sparc在PSR中缺少一步,因此很难一步执行。但是我使用了一个技巧来帮助接近。将TPC设置为您要单步执行的指令的地址,并将TNPC设置为您放置陷阱指令的其他地址。当您执行重试指令以返回到流程上下文时,它将单步执行所需的一条指令,然后将执行陷阱指令,该指令将您带回到内核,您可以在其中执行所需的任何操作。 (注:这是针对sparc64的,不确定是否针对sparc32)。这是一个很好的技巧,因为您无需修改用户地址空间中的现有指令。这对我很重要,因为我只是内核中的单步指令。
我曾经但从未尝试过的另一个想法是将TNPC设置为非法地址。然后,在TPC上的指令执行后,您将获得一个自动陷阱,该陷阱将返回内核。而且由于陷阱处理代码知道该过程是单步执行的,因此不会对“真实的”非法地址陷阱感到困惑。