2008-09-09

透過的なLLVM (4)

静的リンクライブラリはLLVMの世界のなかにある。llvm-arとllvm-ranlibがそれを扱う。llvm-ldは動的リンクライブラリをリンクする(bitcodeで表現された静的リンクライブラリが見つからなかったら)。現代的なオペレーティングシステムにおいて、動的リンクライブラリが実行可能バイナリとほとんど同義であるとしたら、動的リンクライブラリはnative codeで表現されるだろう。

llvm-gcc -emit-llvm -Wall -O2 -g -c foo.c
llvm-gcc -emit-llvm -Wall -O2 -g -c bar.c
llvm-ld -link-as-library foo.o bar.o -o libfoobar.bc
llc libfoobar.bc -f -o libfoobar.s
gcc -Wall -O2 -g -c libfoobar.s
libtool -dynamic libfoobar.o -o libfoobar.dylib

libtoolはldを呼び出す(もちろんlibtoolはGNU libtoolではない)。自明なオプションとアーキテクチャ関連のオプションは省略しよう。

ld -dylib -ldylib1.o libfoobar.dylib.o -o libfoobar.dylib

ldには既にフックがかけてある。解は単純だ。ldに-dylibオプションが与えられていたら、入力をnative codeに変換してからシステムのldを呼び出せばいい。

1 件のコメント:

csn7 さんのコメント...

libtoolは引数のファイルタイプを調べてからldを呼び出すので、libtoolにもフックが必要だ。