我正在开发一个定制版本的Rocket Chip,该版本具有一些我希望Linux可以正确处理的额外说明。尽管使用这些指令的裸机程序运行良好,但Linux仍会因“非法指令”消息而使基准测试崩溃。
有人知道Linux的哪个软件元素-加载程序,反汇编程序或其他内容-负责检测非法指令吗?
我的目标是修改该软件,以便Linux不再抱怨我的指令。如果有人知道抑制这种错误的简便方法,那也将非常有用。
答案 0 :(得分:1)
RISC-V实现(处理器)在遇到未实现的指令时会引发非法指令陷阱。这些非法指令陷阱将通过陷阱委托或在机器模式软件处理后,通过管道传递到Linux,然后通过标准陷阱处理流程进行流:
strapvec
指向Handle_exception,它会做大量记账工作,以避免浪费用户空间,然后将陷阱定向到正确的位置。excp_vect_table
jump table,该陷阱处理所有无聊的陷阱。scause
索引,在这种情况下,该索引指向do_trap_insn_illegal
。do_trap_insn_illegal
只是一个通用的Linux陷阱处理程序,它将SIGILL
传递给引起陷阱的任何原因。这可能会向用户空间任务,内核任务发出信号,或者只是直接使内核崩溃。这里有很多间接层,我们目前不做任何事情,但是将来可能会模仿未实现的指令。