用于大型 C 项目的 LLVM IR

发布于 2025-01-20 02:59:32 字数 942 浏览 0 评论 0原文

我是 LLVM、clang 等新手。 我的主要需求是将 C 代码转换为 LLVM IR (.ll),然后将其解析为类似汇编的语言。为此,我到目前为止一直在使用小长度的 c 代码(单个文件),并将它们转换为我使用的 LLVM IR -

$ clang -emit-llvm -S multiply.c -o multiply.ll

为了对大型 C 项目进行此转换,我尝试了 gllvm - https://github.com/SRI-CSL/gllvm 这真的很容易&方便,但我面临这个问题 - https://github.com/PLSysSec/sys/问题/16
这基本上是 llvm-hs 存储库中的一个错误,本质上要求我拉出已修复的提交并构建它。我试图避免这样做(这是更好的方法吗?)

所以我转向使用黄金链接器的另一个解决方案 - http://gbalats.github.io/2015/12/10/compiling-autotooled-projects-to-LLVM-bitcode.html

我现在坚持使用这个黄金插件来获取 .bc 或.ll 文件 - 我想使用这个黄金插件将大型 C 项目转换为 .ll 或 .bc 文件 - 但这些步骤仅显示如何使用链接器来获得优化的可执行文件。是否有任何命令行选项只能将其转换为 .bc 文件?

任何帮助将不胜感激。

I'm new to LLVM, clang etc.
My primary need is to convert C code to LLVM IR (.ll) then parse this to a assembly-like language. For this I was till now working with small length c codes (single file) and to get these converted to LLVM IR I used -

$ clang -emit-llvm -S multiply.c -o multiply.ll

To do this conversion with a large C project, I tried gllvm - https://github.com/SRI-CSL/gllvm
and it was really easy & convenient but I am facing this issue with it - https://github.com/PLSysSec/sys/issues/16
which basically a bug in the llvm-hs repo essentially asking me to pull the commit which has the fix and build it. I'm trying to avoid doing this (is this a better way ?)

So I moved onto another solution of using the gold linker - http://gbalats.github.io/2015/12/10/compiling-autotooled-projects-to-LLVM-bitcode.html

I am now stuck on using this gold plugin to get .bc or .ll files - I want to use this gold plugin to convert a large C project into .ll or .bc files - but the steps only show how to use the linker to get optimised executable. Are there any command line options to only convert it till .bc files ?

Any help would be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

究竟谁懂我的在乎 2025-01-27 02:59:32

llvm-link 工具将多个 .bc 文件合并为一个 .bc。它根本不支持本机目标文件,也不能与普通链接器标志一起正常工作(它不会假装是ld)。

如果您确实希望由于系统上的本机库而更改 llvm IR,则 llvm 的 gold 插件还支持 emit-llvm 标志。使用 gold 链接时,使用 -Wl,-plugin-opt=emit-llvm 运行 clang 或 gcc 链接。

The llvm-link tool combines multiple .bc files into a single .bc. It does not support native object files at all, nor does it work well with normal linker flags (it does not pretend to be ld).

If you do want changes to the llvm IR due to your native libraries on the system, the gold plugin to llvm also supports a emit-llvm flag. Run a clang or gcc link with -Wl,-plugin-opt=emit-llvm when linking with gold.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文