如何将调试信息附加到LLVM Pass中的指令中

问题描述 投票:0回答:1

我试图在运行时从我的LLVM优化传递中收集一些信息。换句话说,我想知道编译后特定IR指令的物理地址。所以我的想法是将LLVM元数据转换为可在运行时使用的LLVM DWARF数据。我想附上自己的信息,而不是附加文件名和行号。我的问题分为两部分:

  1. 这是一个可以获取指令的文件名和行号的代码: if (DILocation *Loc = I->getDebugLoc()) { // Here I is an LLVM instruction unsigned Line = Loc->getLine(); StringRef File = Loc->getFilename(); StringRef Dir = Loc->getDirectory(); bool ImplicitCode = Loc->isImplicitCode(); }

但是如何设置此字段?我找不到相关的功能。

  1. 如何在(文件名和行号)运行时期间查看更新的调试信息?我使用-g进行编译,但我仍然没有看到调试信息。

谢谢

c++ clang llvm
1个回答
0
投票

你需要它的功能setDebugLoc()和信息只包括在结果中,如果你包括足够的。 The module verifier会告诉你你错过了什么。这两行也可能是你绊倒的原因。

module->addModuleFlag(Module::Warning, "Dwarf Version", dwarf::DWARF_VERSION);
module->addModuleFlag(Module::Warning, "Debug Info Version", DEBUG_METADATA_VERSION);
© www.soinside.com 2019 - 2024. All rights reserved.