gpt4 book ai didi

clang-3.8 和编译器-rt 与 libgcc

转载 作者:行者123 更新时间:2023-12-02 03:35:34 25 4
gpt4 key购买 nike

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

最近对clang-3.8的尝试并不那么令人满意。看起来位代码 clang-3.8 生成使用

中定义的函数
compiler-rt/lib/builtins

我发现污染位码的函数的典型示例是 mulxc3mulsc3muldc3。我可以通过链接 libgcc 来解决这个问题,甚至可以使用 llvm 替代方案(如果我清楚地知道那是什么)。尽管我宁愿从一开始就防止问题发生。

我见过提到诸如 rtlib=compiler-rt 等标志,但发现有关该主题的文档很少。

这里有一些简单的问题。

  1. 是否可以阻止clang使用compiler-rt/lib/builtins在发出的位码中?或者如果不是

  2. llvm 是否生成我可以使用的 libgcc 版本。其实我会可能会构建它的位码版本,但这不是重点。

很高兴听到一些关于这方面的指导。

于 2016 年 12 月 8 日添加: 因此,我将通过特定的工作流程来说明我的问题人们可以根据自己的意愿进行复制,或者更有可能的是,指出我的愚蠢之处。

所以首先检查一下:

musllv

并按照README.中的说明进行编译(这里我在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

您还需要一个简单可执行文件的位码。我将在这里使用 nweb.c。

 wllvm nweb.c -o nweb
extract-bc nweb

现在我们可以做这样的事情:

clang -static -nostdlib nweb.bc libc.a.bc crt1.o libc.a -o nweb

此工作流程对于 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 reference to `__mulxc3'
/tmp/libc-f734a3.o: In function `cpowf':
libc.a.bc:(.text+0x38f7d): undefined reference to `__mulsc3'
/tmp/libc-f734a3.o: In function `csqrt':
libc.a.bc:(.text+0x78fc3): undefined reference to `__muldc3'
/tmp/libc-f734a3.o: In function `cpow':
libc.a.bc:(.text+0xafafc): undefined reference to `__muldc3'
clang-3.8: error: linker command failed with exit code 1 (use -v to seeinvocation)

正如 @paul-brannan 指出的,我们可以尝试

clang -static -nostdlib --rtlib=compiler-rt nweb.bc libc.a.bc crt1.o libc.a -o nweb

但这就是我可能愚蠢的地方,因为我得到:

clang-3.8: warning: argument unused during compilation: '--rtlib=compiler-rt'

无论我是否将其用作链接或编译标志。

最佳答案

好的,我终于在这方面取得了进展。我建了llvm-3.8.1compiler-rt 一起项目使用 wllvmwllvm++

构建产品之一是 libclang_rt.builtins-x86_64.a ,从这个存档中我能够提取位码模块

libclang_rt.builtins-x86_64.bc

使用命令: extract-bc -b libclang_rt.builtins-x86_64.a
该位码模块具有对那些讨厌的内在函数的定义,例如 __mulxc3 , __mulsc3 ,和__muldc3 .

哈利路亚!

关于clang-3.8 和编译器-rt 与 libgcc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38597543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com