如何使用带有自定义插件和前置C文件的Clang编译coreutils

时间:2018-12-03 16:52:00

标签: clang llvm gnu-coreutils

我有一个LLVM传递,应该执行一些转换。其中,它应将函数调用插入文件foo.c中定义的函数中。

我的想法是使用LLVM通过重新编译coreutils,以便我可以测试生成的二进制文件。

coreutils的构建过程非常简单。应该克隆存储库,然后执行以下操作:

$ ./bootstrap
$ ./configure
$ make

简单的交换编译器似乎可以正常工作:

$ export CC=clang
$ ./configure
$ make

但是(据我所知)要加载我的通行证,我必须像这样调用clang(前提是我按照here所述设置了自动通行证调用):

clang -Xclang -load -Xclang path/to/Pass.so file_to_compile.c

如果我尝试将CC设置为上述形式:

$ export CC="clang -Xclang -load -Xclang path/to/Pass.so foo.c"

我在./configure上遇到了错误:

checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether make supports nested variables... (cached) yes
checking whether make supports the include directive... yes (GNU style)
checking for gcc... clang -Xclang -load -Xclang myPass.so foo.c
checking whether the C compiler works... no
configure: error: in `~/coreutils':
configure: error: C compiler cannot create executables
See `config.log' for more details

config.log是:

configure:5245: clang -Xclang -load -Xclang myPass.so foo.c -V >&5
clang-7: error: argument to '-V' is missing (expected 1 value)
clang-7: error: no such file or directory: 'foo.c'
clang-7: error: no input files
configure:5256: $? = 1
configure:5245: clang -Xclang -load -Xclang myPass.so foo.c -qversion >&5
clang-7: error: unknown argument '-qversion', did you mean '--version'?
clang-7: error: no such file or directory: 'foo.c'
clang-7: error: no input files
configure:5256: $? = 1
configure:5245: clang -Xclang -load -Xclang myPass.so foo.c -version >&5
clang-7: error: unknown argument '-version', did you mean '--version'?
clang-7: error: no such file or directory: 'foo.c'
clang-7: error: no input files
configure:5256: $? = 1
configure:5276: checking whether the C compiler works
configure:5298: clang -Xclang -load -Xclang myPass.so foo.c    conftest.c  >&5
clang-7: error: no such file or directory: 'foo.c'

总而言之,我的基本思想是使用Clang和我的自定义遍历重新编译coreutils,该遍历将对外部函数的调用注入。

0 个答案:

没有答案