From 37bcf2df01cfa47e4509a5d225a23e2ca95005e6 Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Thu, 9 Apr 2020 17:54:59 -0700 Subject: [PATCH] [ORC] Require JITDylib to be specified when adding IR and objects in the C API. --- .../OrcV2CBindingsAddObjectFile.c | 3 ++- .../OrcV2CBindingsBasicUsage/OrcV2CBindingsBasicUsage.c | 3 ++- .../OrcV2CBindingsReflectProcessSymbols.c | 3 ++- llvm/include/llvm-c/Orc.h | 12 +++++++----- llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp | 7 ++++--- 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/llvm/examples/OrcV2Examples/OrcV2CBindingsAddObjectFile/OrcV2CBindingsAddObjectFile.c b/llvm/examples/OrcV2Examples/OrcV2CBindingsAddObjectFile/OrcV2CBindingsAddObjectFile.c index 522eeb5..49eca25 100644 --- a/llvm/examples/OrcV2Examples/OrcV2CBindingsAddObjectFile/OrcV2CBindingsAddObjectFile.c +++ b/llvm/examples/OrcV2Examples/OrcV2CBindingsAddObjectFile/OrcV2CBindingsAddObjectFile.c @@ -111,8 +111,9 @@ int main(int argc, char *argv[]) { // Add our object file buffer to the JIT. { + LLVMOrcJITDylibRef MainJD = LLVMOrcLLJITGetMainJITDylib(J); LLVMErrorRef Err; - if ((Err = LLVMOrcLLJITAddObjectFile(J, ObjectFileBuffer))) { + if ((Err = LLVMOrcLLJITAddObjectFile(J, MainJD, ObjectFileBuffer))) { MainResult = handleError(Err); goto jit_cleanup; } diff --git a/llvm/examples/OrcV2Examples/OrcV2CBindingsBasicUsage/OrcV2CBindingsBasicUsage.c b/llvm/examples/OrcV2Examples/OrcV2CBindingsBasicUsage/OrcV2CBindingsBasicUsage.c index 373ff58..cc54cc4 100644 --- a/llvm/examples/OrcV2Examples/OrcV2CBindingsBasicUsage/OrcV2CBindingsBasicUsage.c +++ b/llvm/examples/OrcV2Examples/OrcV2CBindingsBasicUsage/OrcV2CBindingsBasicUsage.c @@ -94,8 +94,9 @@ int main(int argc, char *argv[]) { // Add our demo module to the JIT. { + LLVMOrcJITDylibRef MainJD = LLVMOrcLLJITGetMainJITDylib(J); LLVMErrorRef Err; - if ((Err = LLVMOrcLLJITAddLLVMIRModule(J, TSM))) { + if ((Err = LLVMOrcLLJITAddLLVMIRModule(J, MainJD, TSM))) { // If adding the ThreadSafeModule fails then we need to clean it up // ourselves. If adding it succeeds the JIT will manage the memory. LLVMOrcDisposeThreadSafeModule(TSM); diff --git a/llvm/examples/OrcV2Examples/OrcV2CBindingsReflectProcessSymbols/OrcV2CBindingsReflectProcessSymbols.c b/llvm/examples/OrcV2Examples/OrcV2CBindingsReflectProcessSymbols/OrcV2CBindingsReflectProcessSymbols.c index 7d70e13..a9c6510 100644 --- a/llvm/examples/OrcV2Examples/OrcV2CBindingsReflectProcessSymbols/OrcV2CBindingsReflectProcessSymbols.c +++ b/llvm/examples/OrcV2Examples/OrcV2CBindingsReflectProcessSymbols/OrcV2CBindingsReflectProcessSymbols.c @@ -161,8 +161,9 @@ int main(int argc, char *argv[]) { // Add our demo module to the JIT. { + LLVMOrcJITDylibRef MainJD = LLVMOrcLLJITGetMainJITDylib(J); LLVMErrorRef Err; - if ((Err = LLVMOrcLLJITAddLLVMIRModule(J, TSM))) { + if ((Err = LLVMOrcLLJITAddLLVMIRModule(J, MainJD, TSM))) { // If adding the ThreadSafeModule fails then we need to clean it up // ourselves. If adding it succeeds the JIT will manage the memory. LLVMOrcDisposeThreadSafeModule(TSM); diff --git a/llvm/include/llvm-c/Orc.h b/llvm/include/llvm-c/Orc.h index 60ff406..4af2141 100644 --- a/llvm/include/llvm-c/Orc.h +++ b/llvm/include/llvm-c/Orc.h @@ -292,20 +292,22 @@ LLVMOrcSymbolStringPoolEntryRef LLVMOrcLLJITMangleAndIntern(LLVMOrcLLJITRef J, const char *UnmangledName); /** - * Add a buffer representing an object file to the given LLJIT instance. This - * operation transfers ownership of the buffer to the LLJIT instance. The - * buffer should not be disposed of or referenced once this function returns. + * Add a buffer representing an object file to the given JITDylib in the given + * LLJIT instance. This operation transfers ownership of the buffer to the + * LLJIT instance. The buffer should not be disposed of or referenced once this + * function returns. */ -LLVMErrorRef LLVMOrcLLJITAddObjectFile(LLVMOrcLLJITRef J, +LLVMErrorRef LLVMOrcLLJITAddObjectFile(LLVMOrcLLJITRef J, LLVMOrcJITDylibRef JD, LLVMMemoryBufferRef ObjBuffer); /** - * Add an IR module to the main JITDylib of the given LLJIT instance. This + * Add an IR module to the given JITDylib of the given LLJIT instance. This * operation transfers ownership of the TSM argument to the LLJIT instance. * The TSM argument should not be 3disposed of or referenced once this * function returns. */ LLVMErrorRef LLVMOrcLLJITAddLLVMIRModule(LLVMOrcLLJITRef J, + LLVMOrcJITDylibRef JD, LLVMOrcThreadSafeModuleRef TSM); /** * Look up the given symbol in the main JITDylib of the given LLJIT instance. diff --git a/llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp b/llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp index 5e82a4a..a35ec69 100644 --- a/llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp +++ b/llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp @@ -204,15 +204,16 @@ LLVMOrcLLJITMangleAndIntern(LLVMOrcLLJITRef J, const char *UnmangledName) { unwrap(J)->mangleAndIntern(UnmangledName))); } -LLVMErrorRef LLVMOrcLLJITAddObjectFile(LLVMOrcLLJITRef J, +LLVMErrorRef LLVMOrcLLJITAddObjectFile(LLVMOrcLLJITRef J, LLVMOrcJITDylibRef JD, LLVMMemoryBufferRef ObjBuffer) { return wrap(unwrap(J)->addObjectFile( - std::unique_ptr(unwrap(ObjBuffer)))); + *unwrap(JD), std::unique_ptr(unwrap(ObjBuffer)))); } LLVMErrorRef LLVMOrcLLJITAddLLVMIRModule(LLVMOrcLLJITRef J, + LLVMOrcJITDylibRef JD, LLVMOrcThreadSafeModuleRef TSM) { - return wrap(unwrap(J)->addIRModule(std::move(*unwrap(TSM)))); + return wrap(unwrap(J)->addIRModule(*unwrap(JD), std::move(*unwrap(TSM)))); } LLVMErrorRef LLVMOrcLLJITLookup(LLVMOrcLLJITRef J, -- 2.7.4