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
是的,這是正確的 –