0

我正在尝试手动构建指令列表,其中在 LLVM IR 中为特定变量分配了一个值。

对于函数中的局部变量,我可以通过使用指令迭代器并检查特定指令的操作数轻松获得正确的指令集。这种方法似乎不适用于全局变量,因为没有与它们关联的存储指令。

有没有办法在不查看元数据字段的情况下跟踪全局变量的定义位置?如果没有,是否有某种方法可以创建一个虚拟指令,可以将其视为全局变量初始定义的特殊标记?

4

1 回答 1

0

对于函数中的局部变量,我可以通过使用指令迭代器并检查特定指令的操作数轻松获得正确的指令集。

这并不完全准确。只要变量在内存中(并且赋值是通过 完成的store),它就是正确的,但如果它被提升为寄存器,您将需要依赖llvm.dbg.value调用来跟踪它的赋值。

这种方法似乎不适用于全局变量,因为没有与它们关联的存储指令。

对全局变量的赋值也显示为stores - 除了初始赋值。

有没有办法在不查看元数据字段的情况下跟踪全局变量的定义位置?

如果“位置”是指在哪个源代码行,则必须依赖调试信息元数据。

于 2014-03-06T07:52:03.337 回答