我想将一些动态行为记录到一些全局变量中。所以我写了一个传递来检测代码并插入一些指令来更新全局变量。我尝试使用GlobalVariable构造函数来定义全局变量,但有两个问题。首先,我如何在包含main函数的模块中定义全局变量?其次,我如何在其他模块中声明这些全局变量?这就像“extern double someThing;”。
目标程序是用C语言编写的。
答案 0 :(得分:27)
有一个工具可以回答这个以及关于LLVM API的许多其他问题:llc -march=cpp
。您可以使用Clang或llvm-gcc生成bitcode文件,然后构建一个C ++代码,该代码应使用cpp
后端重建相同的模块。
示例输出,显示如何定义全局int *
变量:
// Global Variable Declarations
GlobalVariable* gvar_ptr_abc = new GlobalVariable(/*Module=*/*mod,
/*Type=*/PointerTy_0,
/*isConstant=*/false,
/*Linkage=*/GlobalValue::CommonLinkage,
/*Initializer=*/0, // has initializer, specified below
/*Name=*/"abc");
gvar_ptr_abc->setAlignment(4);
// Constant Definitions
ConstantPointerNull* const_ptr_2 = ConstantPointerNull::get(PointerTy_0);
// Global Variable Definitions
gvar_ptr_abc->setInitializer(const_ptr_2);