gpt4 book ai didi

c - 如何从给定 LLVM IR 的源代码中获取变量的所有行号?

转载 作者:太空宇宙 更新时间:2023-11-03 23:57:53 25 4
gpt4 key购买 nike

我完全是 LLVM 的新手。我想知道在给定 LLVM IR 的情况下,我们如何从源代码中获取特定变量的所有行号?

例如(显示 LLVM IR 的片段)

store i32 0, i32* %i, align 4, !dbg !12
!12 = !DILocation(line: 2, column: 6, scope: !7)
%4 = load i32*, i32** %ip, align 8, !dbg !30
!30 = !DILocation(line: 7, column: 4, scope: !25)

我相信,通过检查 LLVM IR,获取任何变量的行号详细信息与在指令末尾访问 !dbg 有关。但我不知道如何访问这些信息。

另一个疑问是,如果用指针来存储变量的地址,我们怎么知道它存储的是哪个变量的地址?

最佳答案

I believe, from inspecting LLVM IR, getting the line number details for any variable has something to do with accessing !dbg at the end of instruction. But I don't know how to access this information.

我相信您的假设是正确的。据我所知,所有信息都为您准备好了:

第一条指令以 !dbg !12 结尾(store i32 0, i32* %i, align 4, !dbg !12)。

然后您应该找到以 !12 开头的行。提示,调试信息通常位于模块的 LLVM IR 的底部。

在你的情况下是:!12 = !DILocation(line: 2, column: 6, scope: !7) <-- 这里的解释是:用 标记的指令!12 来自生成此 LLVM IR 的源文件中的第 2 行第 6 列。源文件的名称也应该可用(通常在 LLVM IR 的顶部)。

Another doubt is if a pointer is used to store address of a variable, how do we know for which variable it is storing address of ?

您需要自己推断出该信息,例如通过数据流分析。不过从概念上讲它相当简单,因为 LLVM IR is in SSA form已经。

关于c - 如何从给定 LLVM IR 的源代码中获取变量的所有行号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58096202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com