というようなことを書きたくなったのは、 TCC を x86-64 に移植してて何度か小感動したからなのでした。最初にコンパイラだけ TCC 使って、 GNU のリンカ使って Hello, world! が動いて小感動、 TCC だけで Hello, world! 出るようになって小感動、 tcc -run で Hello, world! が出るようになって小感動、 TCC がコンパイルした TCC が Hello, world! 出せるようになって小感動、 TCC がコンパイルした TCC がコンパイルした TCC が Hello, world! 出せるようになって小感動、と。
お前は何回 Hello, world! を見て感動するのかと。
http://lists.gnu.org/archive/html/tinycc-devel/2008-11/msg00037.html
なんか入れてくれるっぽいのでパッチ分割して取り込んでもらえるようしょぼしょぼやろうかと。まだ色々未完成だし。例えば ./tcc -run tcc.c が動かないとか。
今回わかったのは、 x86-64 そのものより ELF64 の方がうざいんじゃないかとか、いややっぱり致命的で探しにくいバグは x86-64 の部分だな…とかそんなこんな。あと、 TCC がコンパイルした TCC がおかしい場合に追うの大変だなぁとか、 gdb が
Program received signal SIGSEGV, Segmentation fault. 0x00002b04637e828e in ?? () (gdb) bt #0 0x00002b04637e828e in ?? () #1 0x0000000000000000 in ?? ()
とか言った時にどんな顔をすればいいのとか。こうなっちゃう直前の関数が知りたいので、全関数に break point はって cont でぶん回すスクリプトとかあるといいんじゃないかなぁ。なんか正規表現で break point 作れる rbreak .* とか始めて知ったんだけど、これなんか libc の関数にしかやってくれないような… TODO: 今度調べる