前回のリトマステストツール。一応テストプログラムの生成は終了してコンパイルを通そうとしたのだが、いろんなエラーが出て失敗したのだった。
riscv64-unknown-linux-gnu-gcc -D_GNU_SOURCE -DFORCE_AFFINITY -Wall -std=gnu99 -O2 -pthread -static -c -o 2+2W+porlrls.o
2+2W+porlrls.c 2+2W+porlrls.c: Assembler messages: 2+2W+porlrls.c:267: Error: unrecognized opcode `sw.rl t1,0(a5)' 2+2W+porlrls.c:269: Error: unrecognized opcode `sw.rl a1,0(a4)' 2+2W+porlrls.c:234: Error: unrecognized opcode `sw.rl t1,0(a5)' 2+2W+porlrls.c:236: Error: unrecognized opcode `sw.rl a1,0(a4)'
調べてみると自動生成されたテストコードの半数程度がsw.rlを使用しており、これはいったいどうしたらいいんだという気持ちになっている。
$ ag -l sw.rl | wc 1769 1769 65381 $ ls *.c | wc 3877 3877 123528
さらに調査を進めているとなぜかRISC-VのGCCで生成することのできない不思議な命令がたくさん表れてきて、どうしたらいいんだ。
- sw.rl
- lw.aq
- aq.rl
- ld.aq
- sd.rl
試しにこれらのテストをひたすら削ってみる。以下のスクリプトを作成し、ひたすら該当するテストに対してコメントアウトを行った。
replace.sh
#!/bin/sh for file in `grep -l -e sw.rl -e lw.aq -e aq.rl -e ld.aq -e sd.rl *.c` # for file in SB+rfipaq-poaqps.c do echo ${file} obj_file=`echo ${file} | sed 's/.c/.o/g'` func_name=`ag "int argc, " ${file} | cut -f2 -d' ' | cut -f1 -d'('` echo ${func_name} sed -i "s/${obj_file}/# ${obj_file}/g" Makefile sed -i "/${file}/d" src sed -i "s|^ *${func_name}|// ${func_name}|g" run.c sed -i "s|^extern int ${func_name}|// extern int ${func_name}|g" run.c done
make GCC=riscv64-unknown-linux-gnu-gcc -j4
一応バイナリは生成されたようだが、実行する環境がない。もうちょっとベアメタルな環境で実行できるようにリトマステスト自体を変更して行こうかな。