デバッグモードを見ると謎の無限ループが発生しているようでした。ビルドがうまくいっていなかったようなのでもう一度やり直します。ビルド方法について何かご存じの方がいれば教えていただきたいです。
表示されるレジスタ一覧について、int main(){return 0;}も#include<stdio.n>\nint main(){printf("Hello World!\n");}も同じものが表示されます。
コンパイルの際-staticをつけても結果は変わりませんでした。
以下の内容は一応残しておきます。
実現したいこと
https://zenn.dev/ohno418/articles/5f6d5e01dc4981
以上の記事に従ってriscvにクロスコンパイルしたプログラムを実行した際標準出力が得られるようにしたいです。
前提
クロスコンパイラとproxy kernel, spikeのインストールを終え、エラーなくspikeを実行させることができました。
発生している問題・エラーメッセージ
しかし記事にあるような結果ではなく、以下のような出力が表示されます。
$ spike ./riscv64-unknown-linux-gnu/bin/pk hello_world bbl loader z 0000000000000000 ra ffffffc000004220 sp ffffffc00041ed30 gp 0000000000000000 tp 0000000000000000 t0 0000000000000025 t1 ffffffc00041ed6f t2 0000000000000000 s0 ffffffc00041ed31 s1 ffffffc00001a0c8 a0 000000000000002e a1 0000000000000100 a2 ffffffc00000d574 a3 0000000010000000 a4 0000000010000005 a5 0000000000000000 a6 000000000000003f a7 000000000000003f s2 ffffffc00001a0d8 s3 ffffffc00001a0e0 s4 ffffffc00000f018 s5 0000000000000001 s6 ffffffc000010478 s7 ffffffc00001a040 s8 ffffffc000010480 s9 ffffffc000010488 sA 0000000000000001 sB 0000000000000000 t3 fffffffffffffffc t4 ffffffc00000d320 t5 0000000000000009 t6 0000000000000015 pc ffffffc00000532c va/inst 0000000010000005 sr 8000000200006100 Kernel load segfault @ 0x0000000010000005
試したこと
helpで確認できるオプションを一通り試しましたが記事のような結果にはなりませんでした。
補足情報(FW/ツールのバージョンなど)
export RISCV=/opt/riscvのようにしてから、
riscv-gnu-toolchainは
./configure --prefix=$RISCV --enable-llvm --with-sim=spike --with-arch=rv64g
make -j$(nproc) linux
riscv-pkは
../configure --prefix=$RISCV--host=riscv64-unknown-linux-gnu --with-arch=rv64g
make
sudo make install
のようなパラメータでビルドしました。
riscv-pkのmakeでgnu/stubs-lp64.hがない!というエラーが起こった人は
https://github.com/riscv-software-src/riscv-pk/issues/125
が役に立つと思います。
加えて、-mcmodel=medanyなんでオプションはない!というエラーが起こった人は--with-archの指定がそろっていないのが問題みたいなので揃えてみると直るかもしれません。
gccでエラーが出たときはMakefile内のコンパイラをriscv-gnu-toolchainでインストールした$RISCV/bin下のファイルたちをgcc, objcopy, readelfに指定してあげるといいです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。