在LLVM中跟踪全局定义
我试图手动构建一个指令列表,其中一个特定变量在LLVM IR中被赋值 对于函数中的局部变量,我可以通过使用指令迭代器和检查特定指令的操作数轻松获得正确的指令集。这种方法似乎不适用于全局变量,因为没有与它们相关联的存储指令 是否有某种方法可以在不查看元数据字段的情况下跟踪全局变量的定义位置?若并没有,那个么有并没有办法创建一个可以作为全局变量初始定义的特殊标记的伪指令 对于函数中的局部变量,我可以通过使用指令迭代器和检查特定指令的操作数轻松获得正确的指令集 这并不完全准确。只要变量在内存中(赋值是通过在LLVM中跟踪全局定义,llvm,llvm-ir,Llvm,Llvm Ir,我试图手动构建一个指令列表,其中一个特定变量在LLVM IR中被赋值 对于函数中的局部变量,我可以通过使用指令迭代器和检查特定指令的操作数轻松获得正确的指令集。这种方法似乎不适用于全局变量,因为没有与它们相关联的存储指令 是否有某种方法可以在不查看元数据字段的情况下跟踪全局变量的定义位置?若并没有,那个么有并没有办法创建一个可以作为全局变量初始定义的特殊标记的伪指令 对于函数中的局部变量,我可以通过使用指令迭代器和检查特定指令的操作数轻松获得正确的指令集 这并不完全准确。只要变量在内存中(赋值是
store
完成的),这是正确的,但如果它升级到寄存器,则需要依靠llvm.dbg.value
调用来跟踪赋值
这种方法似乎不适用于全局变量,因为没有与它们相关联的存储指令
全局分配也显示为store
s-初始分配除外
是否有某种方法可以在不查看元数据字段的情况下跟踪全局变量的定义位置
如果“where”是指在哪个源代码行中,则必须依赖调试信息元数据。在将变量升级到寄存器之前,我会这样做。我最终能够通过getNamedValue()方法获得全局alloc的(值*),并能够使用它跟踪全局变量的重新定义。这可能不是最好的解决方案,但目前看来似乎能解决问题。