从LLVM IR中获取C/C++源代码数据

7

http://llvm.org/docs/SourceLevelDebugging.html所述,
我可以使用以下代码从LLVM IR中找到源代码的行号和列号。

if (MDNode *N = I->getMetadata("dbg")) {  // Here I is an LLVM instruction
  DILocation Loc(N);                      // DILocation is in DebugInfo.h
  unsigned Line = Loc.getLineNumber();
  StringRef File = Loc.getFilename();
  StringRef Dir = Loc.getDirectory();
}

然而,我需要更精确的信息。
在AST级别上,clang提供了FullSourceLoc API (getCharaterData()),以便我可以找到AST节点和原始源代码之间的映射。我想要找到LLVM IR和源代码之间的这种映射关系。
我能否从IR的调试信息中获取确切的字符数据?
谢谢。
1个回答

7

单凭IR调试信息,无法获得确切的字符数据。最好的办法是手动将源代码保存在某个地方,然后使用从调试信息中获得的行和列信息。

顺便提一下,获取Instruction的调试信息有一个更简单的方法:Instruction::getDebugLoc()返回一个DebugLoc实例,您可以使用getLine()getCol()查询(但请务必先用其isUnknown方法进行检查)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接