使用 LLVM 自定义标准 C 库(以支持 llvm 后端优化)
Customize Standard C Library Using LLVM (to support llvm backend optimization)
目的:
我在 LLVM 后端实现了一个通道,它改变了 ARMassembly/binary 的输出格式(例如在每个基本块的末尾添加一个跳转以消除掉落).通过调用:
llc -march=arm somefile.bc
它生成预期的 arm assembly/binary 运行s 在 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 打算支持裸机(无 OS)软件的二进制文件。它仅实现与硬件无关的部分(例如 libc 和 libm),并为每个依赖于硬件的系统调用(例如 libgloss 中的所有内容)保留一个存根。
事实上,我尝试使用配置了“--with-newlib”选项的 arm-none-eabi-gcc 编译一个简单的“hello world”c 程序,程序执行以qemu-arm 和 gem5 上的分段错误。
问题:
我不确定 newlib 是否与 glibc 兼容。我想知道我是否可以使用 llvm 从 newlib 交叉编译机器独立部分(同时更改 arm 输出格式)并使用 arm-none-linux-gnueabi-gcc 到从 glibc 交叉编译机器相关部分并将这两部分放在一起生成我自己的标准 c 库?
我的作品中可能有mistakes/misunderstandings。是否有任何其他可能的方法可以将我的更改至少添加到标准 c 库的一部分,并使程序 运行 在 qemu-arm 或 gem5 上?
为什么不尝试使用musl library? I use it as the standard library for my ELLCC基于clang的交叉编译环境
目的:
我在 LLVM 后端实现了一个通道,它改变了 ARMassembly/binary 的输出格式(例如在每个基本块的末尾添加一个跳转以消除掉落).通过调用:
llc -march=arm somefile.bc
它生成预期的 arm assembly/binary 运行s 在 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 打算支持裸机(无 OS)软件的二进制文件。它仅实现与硬件无关的部分(例如 libc 和 libm),并为每个依赖于硬件的系统调用(例如 libgloss 中的所有内容)保留一个存根。
事实上,我尝试使用配置了“--with-newlib”选项的 arm-none-eabi-gcc 编译一个简单的“hello world”c 程序,程序执行以qemu-arm 和 gem5 上的分段错误。
问题:
我不确定 newlib 是否与 glibc 兼容。我想知道我是否可以使用 llvm 从 newlib 交叉编译机器独立部分(同时更改 arm 输出格式)并使用 arm-none-linux-gnueabi-gcc 到从 glibc 交叉编译机器相关部分并将这两部分放在一起生成我自己的标准 c 库?
我的作品中可能有mistakes/misunderstandings。是否有任何其他可能的方法可以将我的更改至少添加到标准 c 库的一部分,并使程序 运行 在 qemu-arm 或 gem5 上?
为什么不尝试使用musl library? I use it as the standard library for my ELLCC基于clang的交叉编译环境