0
我在我的C++程序中有一个bool。从C++创建llvm加载bool
bool foo;
我想创建一个读取foo
的llvm值。 (被其他llvm代码使用)我可以通过名称来引用foo吗?或者通过地址,因为它的位置不会改变?
llvm::value* loadFoo = ??
我在我的C++程序中有一个bool。从C++创建llvm加载bool
bool foo;
我想创建一个读取foo
的llvm值。 (被其他llvm代码使用)我可以通过名称来引用foo吗?或者通过地址,因为它的位置不会改变?
llvm::value* loadFoo = ??
你需要一个全球性的外部变量在LLVM代码:
@foo = external global i8
或者,用API:
llvm::GlobalVariable* fooVar = new GlobalVariable(
/*Module=*/ Module,
/*Type=*/ llvm::Type::getInt8Ty(Context),
/*isConstant=*/ false,
/*Linkage=*/ GlobalValue::ExternalLinkage,
/*Initializer=*/ nullptr,
/*Name=*/ "foo" // (1)
);
然后你可以把fooVar
为指针,以foo
值:
llvm::Value* loadFoo = builder.CreateLoad(fooVar);
最后一件事,实际上告诉ExecutionEngine
这fooVar
是bool foo
,你需要做的是明确的:
executionEngine.addGlobalMapping(fooVar, &foo);
或者,由(1)名称:
executionEngine.addGlobalMapping("foo", &foo);
让我们澄清:你想用' foo'来自'llvm :: ExecutionEngine'在同一进程中执行的LLVM代码? – deniss
是的,这是正确的 –