0

我正在开发一个自定义版本的 Rocket Chip,其中包含一些我希望 Linux 正确处理的额外指令。尽管使用这些指令的裸机程序运行良好,但 Linux 使相同的基准测试因“非法指令”消息而崩溃。

有谁知道 Linux 的哪个软件元素——加载程序、反汇编程序、其他东西——负责检测非法指令?

我的目标是修改那个软件,让 Linux 不再抱怨我的指令。如果有人知道一种更简单的方法来抑制这种错误,那也将非常有用。

4

1 回答 1

1

RISC-V 实现(处理器)在遇到未实现的指令时会引发非法指令陷阱。这些非法指令陷阱将通过管道传送到 Linux(通过陷阱委托或在由机器模式软件处理之后),然后流经标准陷阱处理流程:

  • strapvec指向Handle_exception,它会做一堆簿记以避免破坏用户空间,然后将陷阱引导到正确的位置。
  • 对于非法指令陷阱,您将进入跳转excp_vect_table,它处理所有无聊的陷阱。
  • 这由 索引scause,在本例中指向do_trap_insn_illegal
  • do_trap_insn_illegal只是一个通用的 Linux 陷阱处理程序,它传递SIGILL给导致陷阱的任何原因。这可能会向用户空间任务、内核任务发出信号,或者直接使内核恐慌。

这里有很多间接级别,我们目前没有做任何事情,但将来可能会用于模拟未实现的指令。

于 2018-10-14T23:54:37.990 回答