我正在尝试手动构建一个指令列表,其中特定变量在LLVM IR中被赋值。
对于函数中的局部变量,我可以通过使用指令迭代器并检查特定指令的操作数来轻松获得正确的指令集。这种方法似乎不适用于全局变量,因为没有与它们相关的存储指令。
有没有办法在不查看元数据字段的情况下跟踪定义全局变量的位置?如果没有,是否有某种方法可以创建一个虚拟指令,可以将其视为全局变量初始定义的特殊标记?
答案 0 :(得分:0)
对于函数中的局部变量,我可以通过使用指令迭代器并检查特定指令的操作数来轻松获得正确的指令集。
这不完全准确。只要变量在内存中(并通过store
完成分配)就是如此,但如果它被提升为寄存器,则需要依靠llvm.dbg.value
调用来跟踪对其的分配。< / p>
这种方法似乎不适用于全局变量,因为没有与它们相关的存储指令。
对全局变量的赋值也显示为store
s - 除了初始赋值。
有没有办法在不查看元数据字段的情况下跟踪定义全局变量的位置?
如果您在哪个源代码行中使用“where”,则必须依赖debug-info元数据。