diff options
| author | Lang Hames <lhames@gmail.com> | 2018-09-23 02:09:18 +0000 | 
|---|---|---|
| committer | Lang Hames <lhames@gmail.com> | 2018-09-23 02:09:18 +0000 | 
| commit | 72d195ecf03b5ed9622fd16e36be053b3664e499 (patch) | |
| tree | 3e5c4c9dfb446223a8ecb662726d6e1b745ffb55 /llvm/lib/ExecutionEngine/Orc/OrcCBindings.cpp | |
| parent | 91cef98d2c41eff0dea474a760d2dce5ba873209 (diff) | |
| download | bcm5719-llvm-72d195ecf03b5ed9622fd16e36be053b3664e499.tar.gz bcm5719-llvm-72d195ecf03b5ed9622fd16e36be053b3664e499.zip  | |
[ORC] Update ORC C bindings to use the new llvm::Error C API.
This replaces instances of the LLVMOrcErrorCode type with LLVMErrorRef,
simplifying the implementation of the OrcCBindingsStack class and ORC
C API bindings and making it possible to return arbitrary (wrapped)
llvm::Errors.
llvm-svn: 342828
Diffstat (limited to 'llvm/lib/ExecutionEngine/Orc/OrcCBindings.cpp')
| -rw-r--r-- | llvm/lib/ExecutionEngine/Orc/OrcCBindings.cpp | 121 | 
1 files changed, 71 insertions, 50 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/OrcCBindings.cpp b/llvm/lib/ExecutionEngine/Orc/OrcCBindings.cpp index d6005d24a64..6dea64a6e78 100644 --- a/llvm/lib/ExecutionEngine/Orc/OrcCBindings.cpp +++ b/llvm/lib/ExecutionEngine/Orc/OrcCBindings.cpp @@ -42,89 +42,110 @@ void LLVMOrcGetMangledSymbol(LLVMOrcJITStackRef JITStack, char **MangledName,  void LLVMOrcDisposeMangledSymbol(char *MangledName) { delete[] MangledName; } -LLVMOrcErrorCode -LLVMOrcCreateLazyCompileCallback(LLVMOrcJITStackRef JITStack, -                                 LLVMOrcTargetAddress *RetAddr, -                                 LLVMOrcLazyCompileCallbackFn Callback, -                                 void *CallbackCtx) { +LLVMErrorRef LLVMOrcCreateLazyCompileCallback( +    LLVMOrcJITStackRef JITStack, LLVMOrcTargetAddress *RetAddr, +    LLVMOrcLazyCompileCallbackFn Callback, void *CallbackCtx) {    OrcCBindingsStack &J = *unwrap(JITStack); -  return J.createLazyCompileCallback(*RetAddr, Callback, CallbackCtx); +  if (auto Addr = J.createLazyCompileCallback(Callback, CallbackCtx)) { +    *RetAddr = *Addr; +    return LLVMErrorSuccess; +  } else +    return wrap(Addr.takeError());  } -LLVMOrcErrorCode LLVMOrcCreateIndirectStub(LLVMOrcJITStackRef JITStack, -                                           const char *StubName, -                                           LLVMOrcTargetAddress InitAddr) { +LLVMErrorRef LLVMOrcCreateIndirectStub(LLVMOrcJITStackRef JITStack, +                                       const char *StubName, +                                       LLVMOrcTargetAddress InitAddr) {    OrcCBindingsStack &J = *unwrap(JITStack); -  return J.createIndirectStub(StubName, InitAddr); +  return wrap(J.createIndirectStub(StubName, InitAddr));  } -LLVMOrcErrorCode LLVMOrcSetIndirectStubPointer(LLVMOrcJITStackRef JITStack, -                                               const char *StubName, -                                               LLVMOrcTargetAddress NewAddr) { +LLVMErrorRef LLVMOrcSetIndirectStubPointer(LLVMOrcJITStackRef JITStack, +                                           const char *StubName, +                                           LLVMOrcTargetAddress NewAddr) {    OrcCBindingsStack &J = *unwrap(JITStack); -  return J.setIndirectStubPointer(StubName, NewAddr); +  return wrap(J.setIndirectStubPointer(StubName, NewAddr));  } -LLVMOrcErrorCode -LLVMOrcAddEagerlyCompiledIR(LLVMOrcJITStackRef JITStack, -                            LLVMOrcModuleHandle *RetHandle, LLVMModuleRef Mod, -                            LLVMOrcSymbolResolverFn SymbolResolver, -                            void *SymbolResolverCtx) { +LLVMErrorRef LLVMOrcAddEagerlyCompiledIR(LLVMOrcJITStackRef JITStack, +                                         LLVMOrcModuleHandle *RetHandle, +                                         LLVMModuleRef Mod, +                                         LLVMOrcSymbolResolverFn SymbolResolver, +                                         void *SymbolResolverCtx) {    OrcCBindingsStack &J = *unwrap(JITStack);    std::unique_ptr<Module> M(unwrap(Mod)); -  return J.addIRModuleEager(*RetHandle, std::move(M), SymbolResolver, -                            SymbolResolverCtx); +  if (auto Handle = +          J.addIRModuleEager(std::move(M), SymbolResolver, SymbolResolverCtx)) { +    *RetHandle = *Handle; +    return LLVMErrorSuccess; +  } else +    return wrap(Handle.takeError());  } -LLVMOrcErrorCode -LLVMOrcAddLazilyCompiledIR(LLVMOrcJITStackRef JITStack, -                           LLVMOrcModuleHandle *RetHandle, LLVMModuleRef Mod, -                           LLVMOrcSymbolResolverFn SymbolResolver, -                           void *SymbolResolverCtx) { +LLVMErrorRef LLVMOrcAddLazilyCompiledIR(LLVMOrcJITStackRef JITStack, +                                        LLVMOrcModuleHandle *RetHandle, +                                        LLVMModuleRef Mod, +                                        LLVMOrcSymbolResolverFn SymbolResolver, +                                        void *SymbolResolverCtx) {    OrcCBindingsStack &J = *unwrap(JITStack);    std::unique_ptr<Module> M(unwrap(Mod)); -  return J.addIRModuleLazy(*RetHandle, std::move(M), SymbolResolver, -                           SymbolResolverCtx); +  if (auto Handle = +          J.addIRModuleLazy(std::move(M), SymbolResolver, SymbolResolverCtx)) { +    *RetHandle = *Handle; +    return LLVMErrorSuccess; +  } else +    return wrap(Handle.takeError());  } -LLVMOrcErrorCode -LLVMOrcAddObjectFile(LLVMOrcJITStackRef JITStack, -                     LLVMOrcModuleHandle *RetHandle, -                     LLVMMemoryBufferRef Obj, -                     LLVMOrcSymbolResolverFn SymbolResolver, -                     void *SymbolResolverCtx) { +LLVMErrorRef LLVMOrcAddObjectFile(LLVMOrcJITStackRef JITStack, +                                  LLVMOrcModuleHandle *RetHandle, +                                  LLVMMemoryBufferRef Obj, +                                  LLVMOrcSymbolResolverFn SymbolResolver, +                                  void *SymbolResolverCtx) {    OrcCBindingsStack &J = *unwrap(JITStack);    std::unique_ptr<MemoryBuffer> O(unwrap(Obj)); -  return J.addObject(*RetHandle, std::move(O), SymbolResolver, -                     SymbolResolverCtx); +  if (auto Handle = +          J.addObject(std::move(O), SymbolResolver, SymbolResolverCtx)) { +    *RetHandle = *Handle; +    return LLVMErrorSuccess; +  } else +    return wrap(Handle.takeError());  } -LLVMOrcErrorCode LLVMOrcRemoveModule(LLVMOrcJITStackRef JITStack, -                                     LLVMOrcModuleHandle H) { +LLVMErrorRef LLVMOrcRemoveModule(LLVMOrcJITStackRef JITStack, +                                 LLVMOrcModuleHandle H) {    OrcCBindingsStack &J = *unwrap(JITStack); -  return J.removeModule(H); +  return wrap(J.removeModule(H));  } -LLVMOrcErrorCode LLVMOrcGetSymbolAddress(LLVMOrcJITStackRef JITStack, -                                         LLVMOrcTargetAddress *RetAddr, -                                         const char *SymbolName) { +LLVMErrorRef LLVMOrcGetSymbolAddress(LLVMOrcJITStackRef JITStack, +                                     LLVMOrcTargetAddress *RetAddr, +                                     const char *SymbolName) {    OrcCBindingsStack &J = *unwrap(JITStack); -  return J.findSymbolAddress(*RetAddr, SymbolName, true); +  if (auto Addr = J.findSymbolAddress(SymbolName, true)) { +    *RetAddr = *Addr; +    return LLVMErrorSuccess; +  } else +    return wrap(Addr.takeError());  } -LLVMOrcErrorCode LLVMOrcGetSymbolAddressIn(LLVMOrcJITStackRef JITStack, -                                           LLVMOrcTargetAddress *RetAddr, -                                           LLVMOrcModuleHandle H, -                                           const char *SymbolName) { +LLVMErrorRef LLVMOrcGetSymbolAddressIn(LLVMOrcJITStackRef JITStack, +                                       LLVMOrcTargetAddress *RetAddr, +                                       LLVMOrcModuleHandle H, +                                       const char *SymbolName) {    OrcCBindingsStack &J = *unwrap(JITStack); -  return J.findSymbolAddressIn(*RetAddr, H, SymbolName, true); +  if (auto Addr = J.findSymbolAddressIn(H, SymbolName, true)) { +    *RetAddr = *Addr; +    return LLVMErrorSuccess; +  } else +    return wrap(Addr.takeError());  } -LLVMOrcErrorCode LLVMOrcDisposeInstance(LLVMOrcJITStackRef JITStack) { +LLVMErrorRef LLVMOrcDisposeInstance(LLVMOrcJITStackRef JITStack) {    auto *J = unwrap(JITStack);    auto Err = J->shutdown();    delete J; -  return Err; +  return wrap(std::move(Err));  }  void LLVMOrcRegisterJITEventListener(LLVMOrcJITStackRef JITStack, LLVMJITEventListenerRef L)  | 

