Generate LLVM IR for httpd



我正在尝试用LLVM编译apache2,以在LLVM IR中生成最终的二进制文件。

我在编译和链接中使用了flto选项,并通过clang将"also-emit-llvm"传递给链接器。它似乎对大多数步骤都有效,但是我有两个问题

1)早先我用的是LLVM 3.6,它的金插件不接受also-emit-llvm,只有emit- LLVM,基本上它只会发射elf或LLVM。这是Autotools构建系统不喜欢的。configure和make脚本需要二进制文件,而我需要llvm。有什么解决办法吗?

2)所以我转移到LLVM 3.5.2,构建过程很顺利,我可以生成httpd。BC和HTTPD elf二进制文件,但是链接器不想链接模块(它能够链接二进制文件)具体来说,我得到这个错误

/usr/share/apr-1.0/build/libtool --silent --mode=link /home/rbhatia/Desktop/llvm-newbuild/bin/clang  -pthread  -flto -o mod_authn_file.la -rpath /home/rbhatia/Desktop/httpd-2.4.12/llvm/modules -module -avoid-version  mod_authn_file.lo 
/usr/bin/ld: error: .libs/mod_authn_file.o:1:3: invalid chaenter code hereracter
/usr/bin/ld: error: .libs/mod_authn_file.o:1:3: syntax error, unexpected $end
/usr/bin/ld: error: .libs/mod_authn_file.o: not an object or archive
collect2: error: ld returned 1 exit status

我可以看到mod_authn_file。o是一个有效的LLVM IR文件,我可以用LLVM -dis进行反汇编。此外,在此步骤之前,链接器能够链接httpd和httpd.bc

关于错误是什么有帮助吗?

看一下

https://github.com/SRI-CSL/whole-program-llvm

我们使用这个工具将相当大的项目构建为位码。我们的到目前为止最大的是FreeBSD 10.0,所以大小通常不是问题。

我们的travis build check实际上是Apache,就像我们的教程一样。希望这对你有所帮助。

最新更新