获取 LLVM 模块中的所有值
Getting all Values in LLVM Module
我正在处理分析过程,我需要找到所有 InlineAsm values in a module。
我试过使用 Module::getValueSymbolTable()
,但它看起来只包含全局符号和函数符号。
我还尝试为模块中的每个函数调用 Function::getValueSymbolTable()
,但文档并不清楚它包含哪些符号,而且它似乎仍然缺少我正在寻找的 InlineAsm
值对于.
仅供参考,我目前的(非工作)方法是这样的:
llvm::Module M = ...;
auto &MS = M.getValueSymbolTable();
for (auto it = MS.begin(), end = MS.end(); it != end; ++it) {
if (isa<InlineAsm>(it->second)) {
// do something
}
}
for (auto &F : M) {
auto FS = F.getValueSymbolTable();
for (auto it = FS->begin(), end = FS->end(); it != end; ++it) {
if (isa<InlineAsm>(it->second)) {
// do something
}
}
}
如何获取 llvm 模块上的所有值?
我假设您需要收集所有内联指令(而不是模块级内联汇编程序节点)。为此,您需要遍历模块的所有功能。在 Function 内部,您需要遍历所有 Instructions 检查相关指令是否表示 InlineAsm 指令。 http://llvm.org/docs/ProgrammersManual.html#iterating-over-the-instruction-in-a-function 之类的内容会有所帮助。
我正在处理分析过程,我需要找到所有 InlineAsm values in a module。
我试过使用 Module::getValueSymbolTable()
,但它看起来只包含全局符号和函数符号。
我还尝试为模块中的每个函数调用 Function::getValueSymbolTable()
,但文档并不清楚它包含哪些符号,而且它似乎仍然缺少我正在寻找的 InlineAsm
值对于.
仅供参考,我目前的(非工作)方法是这样的:
llvm::Module M = ...;
auto &MS = M.getValueSymbolTable();
for (auto it = MS.begin(), end = MS.end(); it != end; ++it) {
if (isa<InlineAsm>(it->second)) {
// do something
}
}
for (auto &F : M) {
auto FS = F.getValueSymbolTable();
for (auto it = FS->begin(), end = FS->end(); it != end; ++it) {
if (isa<InlineAsm>(it->second)) {
// do something
}
}
}
如何获取 llvm 模块上的所有值?
我假设您需要收集所有内联指令(而不是模块级内联汇编程序节点)。为此,您需要遍历模块的所有功能。在 Function 内部,您需要遍历所有 Instructions 检查相关指令是否表示 InlineAsm 指令。 http://llvm.org/docs/ProgrammersManual.html#iterating-over-the-instruction-in-a-function 之类的内容会有所帮助。