plctlab / plct-spike

Spike, a RISC-V ISA Simulator
Other
9 stars 4 forks source link

couldn't find extension 'nice_demo' in shared library 'libcustomext.so' #4

Open vah15270391729 opened 3 years ago

vah15270391729 commented 3 years ago

我在外部指令集扩展中,按照操作流程进行修改。在编译完之后,build文件下也出现了libnicext.so。但是我使用命令 spike --extension=nice_demo --extlib=libnicext.so pk test spike --isa=rv64gc_xnice_demo --extlib=libnicext.so pk test 运行后,却会报错: couldn't find extension 'nice_demo' in shared library 'libcustomext.so'

我认为是--extension --isa会生成libnice.so和libnice_demo.so,所以libname就是默认的libcustomext.so。 --extlib没有起到作用,我该如何解决这个问题。

lazyparser commented 3 years ago

感谢提醒,已经转给模拟器分支的伙伴来回复

vah15270391729 commented 3 years ago

我将riscv/riscv.mk.in进行了对比,在你们的源码中,riscv_insn_list中没有包含$(riscv_insn_nice) \,但是我的代码中却有$(riscv_insn_nice) \。作为基础指令集的话,riscv_insn_nice是不应该出现的。是否是这个问题引起的?我没有添加$(riscv_insn_nice) \,为什么它会自动地添加?感谢!

liweiwei90 commented 3 years ago

我本地实验了一下spike-cources分支: spike --isa=rv64gc_xnice_demo --extlib=libnicext.so pk test时没有出错 在spike --extension=nice_demo --extlib=libnicext.so pk test时出现了上述错误 这个错误应该和spike的命令解析顺序有关,如果--extlib在--exension之后解析,那么在解析extension时libnicext.so还没加载(默认从libnice_demo.so以及libcustomext.so去找),这个时候就会找不到nice_demo,出现上诉错误。 可以调换一下两者的顺序再试试: spike --extlib=libnicext.so --extension=nice_demo pk test

liweiwei90 commented 3 years ago

isa string应该会在--extlib解析完成后才会被解析,nice demo扩展会在库加载的时候被注册,如果也出现上诉错误,可以检查一下是否注册成功了,目前我能想到的原因有两种:一种是实现代码最后是否有调用REGISTER_EXTENSION宏来注册该扩展; 一种是扩展名称(name()函数中)是否是nice_demo。

liweiwei90 commented 3 years ago

在spike-courses分支中$(riscv_insn_nice) 是加进riscv_insn_list(https://github.com/plctlab/plct-spike/blob/spike-courses/riscv/riscv.mk.in) 了的,这个文件不会自动修改,如果想测试外部扩展--extlib,那么需要注释掉$(riscv_insn_nice)。

vah15270391729 commented 3 years ago

好的,我准备试一下。