【发布时间】:2012-01-03 19:56:16
【问题描述】:
我正在尝试运行以下example 来使用 LLVM 工具链编译、汇编和反汇编一个小程序。
我的目的是了解它是如何工作的,因此在进一步的尝试中,我可以通过更改和/或重新排序组件的说明来进行一些性能测试。
首先,我先得到一个虚拟程序的代码:
% llvm-gcc -O3 -emit-llvm hello.c -c -o hello.bc
一旦我有了咬代码,我尝试使用 llvm-dis 实用程序查看 LLVM 汇编代码,并使用 LLC 代码生成器将程序编译回本机汇编(只是为了尝试):
% llvm-dis < hello.bc | less
% llc hello.bc -o hello.s
但在这两种情况下,我都会收到以下错误:
llvm-dis: Invalid MODULE_CODE_GLOBALVAR record
关于如何解决这个问题的任何想法?
我用谷歌搜索过,但没有找到解决方案。我也尝试过使用
otool -tV hello
但输出与 llvm 不兼容。而不是得到以下汇编格式:
.section __TEXT,__text,regular,pure_instructions
.globl _main
.align 4, 0x90
_main:
Leh_func_begin1:
pushq %rbp
Ltmp0:
movq %rsp, %rbp
Ltmp1:
subq $16, %rsp
Ltmp2:
leaq L_.str(%rip), %rax
我明白了:
__TEXT,__text) section
start:
0000000100000eb0 pushq $0x00
0000000100000eb2 movq %rsp,%rbp
0000000100000eb5 andq $0xf0,%rsp
0000000100000eb9 movq 0x08(%rbp),%rdi
0000000100000ebd leaq 0x10(%rbp),%rsi
0000000100000ec1 movl %edi,%edx
0000000100000ec3 addl $0x01,%edx
这对我无效,因为我用例如编译后一个程序集:
% gcc hello.s -o hello.native
提前致谢。
【问题讨论】:
-
llvm-gcc 已弃用。可以试试clang吗?
-
我也有类似的问题。你解决了吗???
标签: llvm