我对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,它非常简单和方便,但是我面临的问题是it - https://github.com/PLSysSec/sys/issues/16。
这基本上是llvm回购中的一个bug,本质上是要求我提取提交,它有修复并构建它。我尽量避免这样做(这是一个更好的方法吗?)
因此,我转向了另一种使用黄金链接器- http://gbalats.github.io/2015/12/10/compiling-autotooled-projects-to-LLVM-bitcode.html的解决方案。
我现在被困在使用这个黄金插件来获取.bc或.ll文件--我想使用这个黄金插件将一个大型C项目转换为.ll或.bc文件--但是这些步骤只展示了如何使用链接器来优化可执行文件。是否有任何命令行选项仅将其转换为.bc文件?
任何帮助都将不胜感激。
发布于 2022-04-16 20:25:37
llvm-link
工具将多个.bc文件组合成一个.bc。它根本不支持本机对象文件,也不能很好地处理普通链接器标志(它不假装为ld
)。
如果您确实希望由于系统上的本机库而更改llvm,那么对于llvm的黄金插件也支持emit-llvm
标志。当与黄金链接时,运行与-Wl,-plugin-opt=emit-llvm
的clang或gcc链接。
https://stackoverflow.com/questions/71804961
复制相似问题