KLICのコンパイルとCの互換性

Erlangつながりで、久しぶりにKL1触ってみるか、とダウンロードするもののMac OS Xでは動かず :-(
ものは、ここからダウンロードしたもの。
まず、Configureでlibc.aが見つからない、と言われるので、これはConfigureスクリプトを修正(libc.dylibにする)。
次に、"../include/klic/options.h:23: error: array type has incomplete element type"と言われるんだが、どうも"extern Const struct opttable opttable[];"が原因。古いコンパイラではWarningで許してもらえた宣言が、エラーになっている模様。gcc4.0の変更点らしい。この辺に説明が。
まぁ、これは修正したんだけど、次に"newatom.c:206: error: PIC register '%ebx' clobbered in 'asm'"と言われる。なんじゃこら。インラインアセンブラで、%ebxが使えないと主張しているように見えるが、ググってもよく分からん。LinuxならOKなんだろうか?

余談だが、先日古いfleng処理系を引っ張りだしてきてコンパイルしようとしたが、これもあえなく失敗。まぁこちらはそんなもんだろう。SunOS5に依存してたりするし。

まぁ、システムレベルのプログラムだから仕方が無いとも思うが、Cプログラムの互換性というのはやはり問題になるなぁ。

[追記] -fPICでは、ebxは使っちゃ駄目らしい:8546 – ebx is not being preserve for inline asm if -fPIC。というわけで、ebxを使っている、shm_machine.hで定義されているマクロをeaxを使うように変更(っていいのか?)あと、hm_rsv.cのコンパイルで、shm.hで定義されている型と矛盾するというエラーが出たので修正(Volatileが抜けていただけ)。
すると、コンパイルは通って、逐次版のテストは通るみたいなんだけど、共有メモリ版並列実装のテストが通らない orz
ううう、pvm版で試すかなぁ。

[追記2] 「-shm オプションを受け付ける SHM 版の開発は KLIC-2.* で止まっているらしく、 KLIC-3.* ではバグがあるので使えないそうな。」なにー。

[追記3] 変更点を書いておく。

% diff options.h.org options.h
23c23
< extern Const struct opttable opttable[];
    • -
> /* extern Const struct opttable opttable; */ 43c43,44 < extern Const struct opttable opttable;
    • -
> /*extern Const struct opttable opttable;*/ > extern Const struct opttable *opttable; 56c57 < Const struct opttable opttable = {
    • -
> extern Const struct opttable opttable[] = {
diff Configure.org Configure
848a849
> locate_file libc.dylib f $LIBPATH ||

これであってるのかどうかは知らんが。