[ORC] Hook up the LLVMOrcAddObjectFile function in the Orc C Bindings.
This can be used to add a relocatable object to the JIT session.
llvm-svn: 313474
diff --git a/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp b/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp
index 5a4d6b4..d9448d4 100644
--- a/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp
+++ b/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp
@@ -8,6 +8,7 @@
//===----------------------------------------------------------------------===//
#include "OrcTestCommon.h"
+#include "llvm/ExecutionEngine/Orc/CompileUtils.h"
#include "llvm-c/Core.h"
#include "llvm-c/OrcBindings.h"
#include "llvm-c/Target.h"
@@ -37,6 +38,15 @@
return MB.takeModule();
}
+ std::shared_ptr<object::OwningBinary<object::ObjectFile>>
+ createTestObject() {
+ orc::SimpleCompiler IRCompiler(*TM);
+ auto M = createTestModule(TM->getTargetTriple());
+ M->setDataLayout(TM->createDataLayout());
+ return std::make_shared<object::OwningBinary<object::ObjectFile>>(
+ IRCompiler(*M));
+ }
+
typedef int (*MainFnTy)();
static int myTestFuncImpl() {
@@ -134,6 +144,36 @@
LLVMOrcDisposeInstance(JIT);
}
+TEST_F(OrcCAPIExecutionTest, TestAddObjectFile) {
+ if (!TM)
+ return;
+
+ std::unique_ptr<MemoryBuffer> ObjBuffer;
+ {
+ auto OwningObj = createTestObject();
+ auto ObjAndBuffer = OwningObj->takeBinary();
+ ObjBuffer = std::move(ObjAndBuffer.second);
+ }
+
+ LLVMOrcJITStackRef JIT =
+ LLVMOrcCreateInstance(wrap(TM.get()));
+ LLVMOrcGetMangledSymbol(JIT, &testFuncName, "testFunc");
+
+ LLVMOrcModuleHandle H;
+ LLVMOrcAddObjectFile(JIT, &H, wrap(ObjBuffer.release()), myResolver, nullptr);
+ LLVMOrcTargetAddress MainAddr;
+ LLVMOrcGetSymbolAddress(JIT, &MainAddr, "main");
+ MainFnTy MainFn = (MainFnTy)MainAddr;
+ int Result = MainFn();
+ EXPECT_EQ(Result, 42)
+ << "Lazily JIT'd code did not return expected result";
+
+ LLVMOrcRemoveModule(JIT, H);
+
+ LLVMOrcDisposeMangledSymbol(testFuncName);
+ LLVMOrcDisposeInstance(JIT);
+}
+
TEST_F(OrcCAPIExecutionTest, TestDirectCallbacksAPI) {
if (!TM)
return;