使用LLVM自定义标准C库(支持llvm后端优化)

时间:2015-03-11 15:30:13

标签: llvm cross-compiling gnu glibc newlib

目的:

我在LLVM后端实现了一个传递,它改变了 ARM 程序集/二进制文件的输出格式(例如,在每个基本块的末尾添加一个跳转以消除掉落)。致电:

llc -march=arm somefile.bc

它生成预期的arm程序集/二进制文件,它可以在arm gnu linux上正常运行(我使用qemu-arm和gem5来模拟它)。现在我想在标准c库上做同样的事情,但这里有问题。

的问题:

根据:

http://article.gmane.org/gmane.comp.compilers.llvm.devel/77025 
https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_14/docs/OpenProjects.html#glibc   

编译glibc 使用llvm可能不是一个合适的选择。另一方面,根据:

http://lists.cs.uiuc.edu/pipermail/llvmdev/2012-January/047088.html

llvm能够编译newlib,因此人们会将newlib视为替代方案。但是,根据:

http://www.embecosm.com/appnotes/ean9/ean9-howto-newlib-1.0.html#id2711887

newlib打算支持裸机(无操作系统)软件的二进制文件。它仅实现与硬件无关的部分(例如libc和libm),并为每个依赖于硬件的系统调用留下存根(例如libgloss中的所有内容)。

实际上我尝试使用arm-none-eabi-gcc编译一个简单的“hello world”c程序,该程序配置了“--with-newlib”选项,程序执行最终会导致qemu-上的分段错误手臂和宝石5。

的问题:

我不确定newlib是否与glibc兼容。我想知道我是否可以使用llvm从newlib交叉编译机器独立部分(同时更改arm输出格式)并使用arm-none-linux-gnueabi-gcc交叉编译机器相关部件glibc并将这两个部分放在一起以生成我自己的标准c库?

我的作品可能存在错误/误解。是否有任何其他可能的方法可以将我的更改添加到至少部分标准c库中,并使程序在qemu-arm或gem5上运行?

1 个答案:

答案 0 :(得分:2)

为什么不尝试使用musl library?我将它用作基于ELLCC clang的交叉编译环境的标准库。

相关问题