LLVM で Hello, World の puts 関数

LLVM で Hello, World の puts 関数

2007/07/22 2:06am

前回のように簡単なプログラムでも、実際に書いてみると疑問が湧いてくる。

まず、文字列を出力している puts 関数。こいつの実体はどこにあるんだろう? C のプログラムなら、リンカが標準ライブラリをこっそりリンクしている、という結末になるのだが…。検索してみると、やはり、同じように疑問をもった人がいるようで、lli が実行時のライブラリとして標準 C ライブラリを利用しているらしい。

ということは printf なんかも使えるはずだよね。

@.LC0 = internal constant [14 x i8] c"Hello world!\0A\00"

**declare i32 @printf(i8 *, ...)**

define i32 @main() {
  %cast210 = getelementptr [14 x i8]* @.LC0, i64 0, i64 0
  **call i32 (i8 *, ...)* @printf(i8 * %cast210)**
  ret i32 0
}

では、コンパイル、実行。

% llvm-as -f hello-printf.ll
% lli hello-printf.bc
Hello world!

うんうん。