spikeは、RISC-Vの命令セットシミュレータの1つです。本年度のアセンブリ演習では、RISC-Vアーキテクチャを利用します。そのため、手元で書いたプログラムをRISC-V環境向けにクロスコンパイルし、spike上でシミュレーションすることで実験を行うことになります。
ECCSの環境では既にspikeがインストールされていますので、特に環境設定などを行うことなくspikeを用いることが出来ます。まず、hello.cとして次のソースコードが書かれたファイルを作成してください。
#include <stdio.h>
int main(){
printf("Hello, world\n");
return 0;
}
これをコンパイルするわけですが、普通にgcc hello.cとすると、現在の実行環境で利用できるような形でプログラムがコンパイルされ、RISC-Vアーキテクチャのもとで実行可能なプログラムになりません。RISC-Vアーキテクチャの環境で利用できるコードを生成するためには、次のようにクロスコンパイル(現在とは異なる環境で動作するコードにコンパイルすること)を行います。
riscv64-unknown-elf-gcc hello.c
これでRISC-Vアーキテクチャで実行可能なプログラムが生成されました。試しに./a.outと実行してみても、現在の環境では正しく動作しないことがわかります。このプログラムをspikeを使って実行します。
spike /usr/local/brew/opt/riscv-pk/riscv64-unknown-elf/bin/pk a.out
Hello, worldが表示されれば、spikeは正常に動作しています。
追記1) 現在、spikeのpkコマンドのパスに不具合が出ているため、"spike pk a.out"だけでプログラムを実行することができません。お手数ですが、pkコマンドを使用するために、フルパス(/usr/local/brew/opt/riscv-pk/riscv64-unknown-elf/bin/pk)を指定してください。ECCSサーバーのメンテナンスが完了しましたら、改めて報告させていただきます(2021.10.19)