如何使用LLVM API获取全局变量的初始化器
How to get the inializers of global variables with LLVM API
我正在编写一个适用于LLVM IR代码的LLVM通行证。目标的一部分是读取全局变量的初始值,其中全局变量可以是任何类型的,从基本类型到结构和类。我该如何实现?
如果在GlobalVariable
实例上调用getInitializer
,则会获得类型为 Constant
的初始值设定项(尽管请确保先调用 hasInitializer
或其姊妹方法之一,以验证是否存在初始值设定项)。此外,IIRC 全局变量和常量是作为同一件事实现的,因此如果您不需要常量,请使用 isConstant
过滤掉它们。
当然,Constant
是抽象基类;实际类型将是它的子类之一,您可以在文档页面上显示的图表中看到。您可以通过 isa
/cast
/dyn_cast
以通常的方式查询和获取实际的常量类型,或者您可以在其上使用getType
(毕竟常量是一种Value
)并从那里开始工作。
最后,要从Module
获取所有全局变量,请使用global_begin
/global_end
迭代器,或者只在其上使用getGlobalList
(它有自己的迭代器)。
相关文章:
- 未初始化的变量有什么危险
- 使用的未初始化局部变量'Quick'
- C++如何通过"constructor initialization"初始化行变量?
- "local scope"中的 C++ 初始化静态变量
- 使用 std::ios_base::Init 正确初始化全局变量
- 在 glsl 中初始化全局变量?
- 未显式初始化C++全局变量时发出警告?
- 定义,初始化全局const变量是安全的吗?
- 如何懒惰地初始化全局变量?
- 初始化全局变量时,Clang-4.0会生成冗余方法
- 何时初始化静态变量和全局变量
- 条件运算符是在全局作用域中初始化全局变量的唯一方法
- 交叉初始化全局(外部)变量
- 强制在某个静态字段之前初始化全局变量
- 使用C与C++中的函数调用初始化全局变量
- 如果需要从配置文件初始化全局变量,如何在项目中共享全局变量
- 在初始化全局变量时使用断言宏
- c++中如何初始化全局变量?
- 用于初始化全局变量的函数究竟何时执行
- 在c++中重载全局new()调用之前未初始化全局静态变量