小编Ian*_*son的帖子

clang-3.8和compiler-rt vs libgcc

我一直clang-3.5在愉快地构建bintode版本的musl libc,并使用结果生成漂亮的独立可执行文件.

最近的尝试并clang-3.8没有那么开心.似乎bitcode clang-3.8生成了定义的使用函数

compiler-rt/lib/builtins
Run Code Online (Sandbox Code Playgroud)

功能我觉得污染位码典型的例子是mulxc3,mulsc3muldc3.libgcc如果我对这是什么有任何明确的想法,我可以通过链接,甚至是llvm替代方案来解决这个问题.虽然我宁愿首先防止问题发生.

我已经看到过像rtlib=compiler-rt等标志的提及,但是已经找到了关于这个主题的珍贵文献.

所以这里有一些简单的问题.

  1. 是否有可能为防止clang从使用compiler-rt/lib/builtins 中发出的位码?或者如果没有

  2. llvm是否会生成我可以使用的libgcc版本.实际上我可能会建立一个bitcode版本,但这是重点.

喜欢听到一些关于此的指导.

2016年12月8日新增:所以我将通过特定工作流程来说明我的问题,如果他们愿意,人们可以复制,或者更有可能只指出我愚蠢的地方.

所以先看看:

musllv

并按照README.to编译中的说明进行操作(这里我在ubuntu 14.04上使用clang-3.8)

WLLVM_CONFIGURE_ONLY=1  CC=wllvm ./configure --target=LLVM --build=LLVM 
make
cd lib
extract-bc -b libc.a
Run Code Online (Sandbox Code Playgroud)

你还需要一个简单的可执行文件的bitcode.我将在这里使用nweb.c.

 wllvm nweb.c -o nweb
 extract-bc nweb
Run Code Online (Sandbox Code Playgroud)

现在我们可以做以下事情:

clang -static -nostdlib nweb.bc libc.a.bc crt1.o libc.a -o nweb
Run Code Online (Sandbox Code Playgroud)

对于clang-3.5,这个工作流程顺利进行,但对于clang-3.8我们得到:

clang -static -nostdlib nweb.bc libc.a.bc crt1.o libc.a -o nweb
/tmp/libc-f734a3.o: In function `cpowl':
libc.a.bc:(.text+0xbb9a): undefined …
Run Code Online (Sandbox Code Playgroud)

llvm clang llvm-clang llvm-ir

6
推荐指数
1
解决办法
1620
查看次数

标签 统计

clang ×1

llvm ×1

llvm-clang ×1

llvm-ir ×1