如何从 .ll 文件 LLVM 获取源代码行号
How to get source line number from .ll file LLVM
我正在使用LLVM 3.4,想从IR获取源文件的行号信息。IR 是使用 Clang 从简单的 c 代码生成的。我想从 IR 正文中的行中获取源 c 文件中的行号。
我试过这个——
- 对于指令BI,无符号行 = 行 = BI->getDebugLoc().getLine();
- 对于循环 L, std::cout <<L->getStartLoc().getLine();
但是,存储/打印的结果始终为 0。我不知道如何从LLVM IR获取源中的行号。
我的源 C 文件是 -
#include <stdio.h>
int main()
{
int i;
int inbuf[100];
int outbuf[100];
for(i = 0; i < 100; ++i)
inbuf[i] ^= outbuf[i];
inbuf[1] += 402;
inbuf[6] += 107;
inbuf[97] += 231;
for(i = 0; i < 100; ++i)
{
inbuf[i] += outbuf[i];
}
inbuf[47] += 312;
//print-statements
for (i=0;i<100;i++) {
printf("inbuf[%d] = %dn",i,inbuf[i]);
}
return 0;
使用的命令-~/llvm/build/Release+Asserts/bin/clang -O3 -fno-unroll-loops -fno-vectorize -fno-slp-vectorize -S -emit-llvm sample.c -o sample.ll
谢谢!
要将行号信息放入 .ll 文件中,您必须为 clang 指定 -O0
和-g
标志。
http://llvm.org/docs/SourceLevelDebugging.html#debugging-optimized-code
行号存储在专用元数据节点中。
http://llvm.org/docs/LangRef.html#specialized-metadata-nodes
所以完整的命令行必须如下所示:
~/llvm/build/Release+Asserts/bin/clang -O0 -g -S -emit-llvm sample.c -o sample.ll
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 如何使用QT创建器获取网页源代码?
- 如何在使用 LLVM 编译时获取部分源代码的二进制代码
- 是否有可能使用debug_info获取ELF文件的源代码?
- 从源代码本身C++获取输入
- 如何从CPP源代码行号中获取LLVM位码行号?
- 我可以从Crash Signature(Windows Crash Report)获取源代码吗?
- 在哪里可以在ASIO的源代码中获取有关IOCP的代码
- 如何在后台打开默认浏览器并获取网页的源代码
- 如何获取小型MFC源代码
- 如何获取 rand() (C++) 的源代码
- 从下载的源代码和Visual Studio 2013获取LLVM和Clang
- 从LLVM IR中获取C/C++源代码数据
- 如何在C++中获取网页的源代码
- sourceCpp()无法获取此文件的源代码
- 如何从 .ll 文件 LLVM 获取源代码行号
- 获取源代码树中 boost:shared_ptr get 方法的所有用法的列表
- 获取源代码列表