【问题标题】:Customize Standard C Library Using LLVM (to support llvm backend optimization)使用 LLVM 自定义标准 C 库(支持 llvm 后端优化)
【发布时间】:2015-05-13 11:43:36
【问题描述】:

目的:

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

llc -march=arm somefile.bc

它生成在 arm gnu linux 上正常运行的预期 arm 程序集/二进制文件(我使用 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- 上的分段错误手臂和 gem5。

问题:

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

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

【问题讨论】:

    标签: llvm cross-compiling gnu glibc newlib


    【解决方案1】:

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

    【讨论】:

    • 这正是我想要的,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 2014-02-22
    相关资源
    最近更新 更多