本文介绍如何执行之前得到的LLVM bitcode文件。
前提是安装lli工具,用它来执行LLVM bitcode。
1. 详细步骤
在前一个文章中,我们看到在链接两个.bc文件之后会得到单个的位流文件,其中一个文件引用了另一个文件定义的func函数。而调用lli命令可以执行之前得到的output.bc文件,直接在标准输出里给出结果:
$ lli output.bc
number is 10
lli的输入是output.bc文件,它会执行bitcode文件,如果有输出会在标准输出显示结果。在这个例子中输出结果是“number is 10”,这就是由之前文章中的test1.c和test.c链接得到的output.bc文件的执行结果。test2.c文件的主函数调用了test1.c文件的func函数,并用整数5作为参数;而func函数把输入参数乘以2之后返回给主函数,主函数则向标准输出打印结果。
2. 原理
lli工具命令执行LLVM bitcode格式程序,它使用LLVM bitcod格式作为输入并且使用即时编译器(JIT)执行。当然,如果当前的架构不存在JIT编译器,会用解释器执行。
如果lli能够采用JIT编译器,那么它能高效地使用所有代码生成器参数,如llc。