我正在使用llc来使用命令行将.ll
文件转换为.s
。然后我想取这个文件,然后用nasm来创建一个可执行文件。虽然第一步似乎工作正常,但我无法完成第二步工作。如何从LLVM ir创建可执行文件?
原始文件被称为code.ll
,并包含下面的代码:
define i32 @main() {
ret i32 0
}
现在我使用CMD通过键入来构建.s
文件:
LLC code.ll
此工作正常,并创建一个code.s
文件包含以下代码:
.def @feat.00;
.scl 3;
.type 0;
.endef
.globl @feat.00
@feat.00 = 1
.def _main;
.scl 2;
.type 32;
.endef
.text
.globl _main
.align 16, 0x90
_main: # @main
# BB#0:
xorl %eax, %eax
ret
现在我想要使用此代码,关于其llc doc告诉我要创建可执行此:
汇编语言输出然后可以通过本地传递汇编器和链接器来生成本机可执行文件。
于是我就用nasm(应该做我想做的,据我了解)通过键入:
NASM code.s
产生错误的下面的列表:
code.s:1: error: attempt to define a local label before any non-local labels
code.s:1: error: parser: instruction expected
code.s:2: error: attempt to define a local label before any non-local labels
code.s:2: error: parser: instruction expected
code.s:3: error: attempt to define a local label before any non-local labels
code.s:3: error: parser: instruction expected
code.s:4: error: attempt to define a local label before any non-local labels
code.s:5: error: attempt to define a local label before any non-local labels
code.s:5: error: parser: instruction expected
code.s:6: error: parser: instruction expected
code.s:7: error: parser: instruction expected
code.s:8: error: parser: instruction expected
code.s:9: error: parser: instruction expected
code.s:12: error: parser: instruction expected
code.s:13: error: parser: instruction expected
code.s:14: error: parser: instruction expected
BB#0::1: error: parser: instruction expected
BB#0::2: error: parser: instruction expected
BB#0::3: error: parser: instruction expected
BB#0::4: error: parser: instruction expected
BB#0::5: error: parser: instruction expected
BB#0::8: error: parser: instruction expected
BB#0::9: error: parser: instruction expected
BB#0::10: error: parser: instruction expected
由于我关于LLVM或汇编器的经验接近于零,我无法自己解决这个问题。
如果我遗漏了一些重要的东西,请告诉我,我会尽快编辑我的答案。
生成的代码是AT&T语法,NASM不会理解它。您必须使用GNU汇编程序('as')来汇编该'.s'文件或任何能够理解AT&T语法的汇编程序。 –
@Michael Petch好的,虽然我无法测试它atm它肯定听起来像这是我所需要的。你愿意写一个答案,以便我可以接受它。如果你没有足够的时间,我会在几天内写出自己的答案,这几乎只是重申一下你的答案,简要说明AT&T语法和NASM使用的语法。谢谢 – SleepingPanda
当你认为你已经解决它时,请成为我的客人并自己回答。 –