我正在开发一个自定义版本的Rocket Chip,它具有一些额外的指令,我希望Linux能正确地处理这些指令。尽管使用这些指令的裸机程序运行良好,但Linux会使相同的基准测试崩溃,并显示“非法指令”消息。
有没有人知道Linux的哪个软件元素-加载器、反汇编程序或其他什么-负责检测非法指令?
我的目标是修改这个软件,这样Linux就不会再抱怨我的指令了。如果有人知道一种更简单的方法来抑制这种错误,那也是非常有用的。
发布于 2018-10-15 07:54:38
只要遇到尚未实现的指令,RISC-V实现(处理器)就会引发非法指令陷阱。这些非法指令陷阱将通过管道传输到Linux (通过陷阱委派或由机器模式软件处理后),然后流经标准陷阱处理流程:
strapvec指向了Handle_exception,它做了大量的记账以避免破坏用户空间,然后将陷阱定向到正确的位置。excp_vect_table jump table,它处理所有无聊的陷阱。scause索引的,在这种情况下,它指向scause,它只是一个通用的Linux陷阱处理程序,它将SIGILL传递给导致陷阱的任何东西。这可能会向用户空间任务、内核任务发出信号,或者直接导致内核崩溃。这里有一堆间接层,我们目前没有做任何事情,但将来可能会用来模拟未实现的指令。
https://stackoverflow.com/questions/51827928
复制相似问题