【发布时间】:2014-03-06 07:33:00
【问题描述】:
我正在尝试手动构建指令列表,其中特定变量在 LLVM IR 中被赋值。
对于函数中的局部变量,我可以通过使用指令迭代器并检查特定指令的操作数轻松获得正确的指令集。这种方法似乎不适用于全局变量,因为没有与之关联的存储指令。
有没有什么方法可以在不查看元数据字段的情况下跟踪全局变量的定义位置?如果没有,有没有办法创建一个虚拟指令,可以作为全局变量初始定义的特殊标记?
【问题讨论】:
我正在尝试手动构建指令列表,其中特定变量在 LLVM IR 中被赋值。
对于函数中的局部变量,我可以通过使用指令迭代器并检查特定指令的操作数轻松获得正确的指令集。这种方法似乎不适用于全局变量,因为没有与之关联的存储指令。
有没有什么方法可以在不查看元数据字段的情况下跟踪全局变量的定义位置?如果没有,有没有办法创建一个虚拟指令,可以作为全局变量初始定义的特殊标记?
【问题讨论】:
对于函数中的局部变量,我可以通过使用指令迭代器并检查特定指令的操作数轻松获得正确的指令集。
这并不完全准确。只要变量在内存中(并且赋值是通过 store 完成的),它就是正确的,但如果它被提升为寄存器,您将需要依赖 llvm.dbg.value 调用来跟踪其中的赋值。
这种方法似乎不适用于全局变量,因为没有与之关联的存储指令。
对全局变量的分配也显示为stores - 除了初始分配。
有没有什么方法可以在不查看元数据字段的情况下跟踪全局变量的定义位置?
如果“位置”是指在哪个源代码行中,则必须依赖调试信息元数据。
【讨论】: