如何从 .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();
但是,结果stored/printed总是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] = %d\n",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
我正在使用 LLVM 3.4,想从 IR 获取源文件的行号信息。 IR 是使用 Clang 从简单的 c 代码生成的。 我想从IR正文中的行获取源c文件中的行号。
我试过了 -
- 对于指令BI, 无符号线 = 线 = BI->getDebugLoc().getLine();
- 对于循环 L,std::cout << L->getStartLoc().getLine();
但是,结果stored/printed总是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] = %d\n",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