哪个Linux实体负责生成非法指令陷阱?

时间:2018-08-13 17:50:10

标签: linux riscv binutils rocket-chip

我正在开发一个定制版本的Rocket Chip,该版本具有一些我希望Linux可以正确处理的额外说明。尽管使用这些指令的裸机程序运行良好,但Linux仍会因“非法指令”消息而使基准测试崩溃。

有人知道Linux的哪个软件元素-加载程序,反汇编程序或其他内容-负责检测非法指令吗?

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

1 个答案:

答案 0 :(得分:1)

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

  • strapvec指向Handle_exception,它会做大量记账工作,以避免浪费用户空间,然后将陷阱定向到正确的位置。
  • 对于非法指令陷阱,您将陷入the excp_vect_table jump table,该陷阱处理所有无聊的陷阱。
  • 此索引由scause索引,在这种情况下,该索引指向do_trap_insn_illegal
  • do_trap_insn_illegal只是一个通用的Linux陷阱处理程序,它将SIGILL传递给引起陷阱的任何原因。这可能会向用户空间任务,内核任务发出信号,或者只是直接使内核崩溃。

这里有很多间接层,我们目前不做任何事情,但是将来可能会模仿未实现的指令。