次のCコードがある場合
int main()
{
return 77;
}
clang で -S オプションを使用して asm コードを生成すると、次のようになります (Intel 構文)。
$clang -O0 -mllvm --x86-asm-syntax=intel main.c -S
そのときのコードは
.section __TEXT,__text,regular,pure_instructions
.globl _main
.align 4, 0x90
_main: ## @main
.cfi_startproc
## BB#0:
push RBP
Ltmp2:
.cfi_def_cfa_offset 16
Ltmp3:
.cfi_offset rbp, -16
mov RBP, RSP
Ltmp4:
.cfi_def_cfa_register rbp
mov EAX, 77
mov DWORD PTR [RBP - 4], 0
pop RBP
ret
.cfi_endproc
.subsections_via_symbols
ただし、gas も nasm も ld とリンクするオブジェクト ファイルを生成しません。clang や gcc は実際に適切な「すぐに使える」asm を生成しますか? gcc のデフォルトのアセンブラは Gas です (これは mac os x にもインストールされていません...? clang と同じではないでしょうか)。
では、asm コードを手動でアセンブルしてからリンクするにはどうすればよいでしょうか。