我已经安装了具有以下设置的 riscv-gnu-toolchain,它按预期工作:
./configure --prefix=/opt/riscv --enable-multilib --with-arch=rv32i --with-abi=ilp32
现在我正在尝试构建一个能够运行使用此工具链编译的可执行文件的尖峰版本。
riscv-fesvr 似乎没有任何特定于 ISA 的设置。我用它编译了
../configure --prefix=/opt/riscv
riscv-isa-sim 提供--with-isa,所以我设置为:
../configure --prefix=/opt/riscv --with-isa=RV32I
除了缺少包含到 fesvr 的路径的一些问题之外,我必须在 makefile 中手动修复这些问题。我用 riscv-pk 构建的
../configure --prefix=/opt/riscv --host=riscv32-unknown-elf
,编译也没有问题。
不幸的是,如果我尝试运行生成的尖峰可执行文件,则会出现分段错误。如果我不提出任何论据,我会得到“使用”打印,但没有其他工作。
$ echo -e '#include <stdio.h>\n int main(void) { printf("Hello world!\\n"); return 0; }' > hello.c
$ riscv32-unknown-elf-gcc -o hello hello.c
$ spike pk hello
$ Segmentation fault (core dumped)
$ spike pk
$ Segmentation fault (core dumped)
$ spike hello
$ Segmentation fault (core dumped)
$ spike --isa=RV32 pk hello
$ Segmentation fault (core dumped)
$ spike --isa=RV32 pk
$ Segmentation fault (core dumped)
$ spike --isa=RV32 hello
$ Segmentation fault (core dumped)
我不知道从哪里开始调试这个。