]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/ExecutionEngine/Orc/OrcCBindings.cpp
MFV r318947: 7578 Fix/improve some aspects of ZIL writing.
[FreeBSD/FreeBSD.git] / contrib / llvm / lib / ExecutionEngine / Orc / OrcCBindings.cpp
1 //===----------- OrcCBindings.cpp - C bindings for the Orc APIs -----------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #include "OrcCBindingsStack.h"
11 #include "llvm-c/OrcBindings.h"
12
13 using namespace llvm;
14
15 LLVMOrcJITStackRef LLVMOrcCreateInstance(LLVMTargetMachineRef TM) {
16   TargetMachine *TM2(unwrap(TM));
17
18   Triple T(TM2->getTargetTriple());
19
20   auto CompileCallbackMgr = orc::createLocalCompileCallbackManager(T, 0);
21   auto IndirectStubsMgrBuilder =
22       orc::createLocalIndirectStubsManagerBuilder(T);
23
24   OrcCBindingsStack *JITStack = new OrcCBindingsStack(
25       *TM2, std::move(CompileCallbackMgr), IndirectStubsMgrBuilder);
26
27   return wrap(JITStack);
28 }
29
30 const char *LLVMOrcGetErrorMsg(LLVMOrcJITStackRef JITStack) {
31   OrcCBindingsStack &J = *unwrap(JITStack);
32   return J.getErrorMessage().c_str();
33 }
34
35 void LLVMOrcGetMangledSymbol(LLVMOrcJITStackRef JITStack, char **MangledName,
36                              const char *SymbolName) {
37   OrcCBindingsStack &J = *unwrap(JITStack);
38   std::string Mangled = J.mangle(SymbolName);
39   *MangledName = new char[Mangled.size() + 1];
40   strcpy(*MangledName, Mangled.c_str());
41 }
42
43 void LLVMOrcDisposeMangledSymbol(char *MangledName) { delete[] MangledName; }
44
45 LLVMOrcTargetAddress
46 LLVMOrcCreateLazyCompileCallback(LLVMOrcJITStackRef JITStack,
47                                  LLVMOrcLazyCompileCallbackFn Callback,
48                                  void *CallbackCtx) {
49   OrcCBindingsStack &J = *unwrap(JITStack);
50   return J.createLazyCompileCallback(Callback, CallbackCtx);
51 }
52
53 LLVMOrcErrorCode LLVMOrcCreateIndirectStub(LLVMOrcJITStackRef JITStack,
54                                            const char *StubName,
55                                            LLVMOrcTargetAddress InitAddr) {
56   OrcCBindingsStack &J = *unwrap(JITStack);
57   return J.createIndirectStub(StubName, InitAddr);
58 }
59
60 LLVMOrcErrorCode LLVMOrcSetIndirectStubPointer(LLVMOrcJITStackRef JITStack,
61                                                const char *StubName,
62                                                LLVMOrcTargetAddress NewAddr) {
63   OrcCBindingsStack &J = *unwrap(JITStack);
64   return J.setIndirectStubPointer(StubName, NewAddr);
65 }
66
67 LLVMOrcModuleHandle
68 LLVMOrcAddEagerlyCompiledIR(LLVMOrcJITStackRef JITStack, LLVMModuleRef Mod,
69                             LLVMOrcSymbolResolverFn SymbolResolver,
70                             void *SymbolResolverCtx) {
71   OrcCBindingsStack &J = *unwrap(JITStack);
72   Module *M(unwrap(Mod));
73   return J.addIRModuleEager(M, SymbolResolver, SymbolResolverCtx);
74 }
75
76 LLVMOrcModuleHandle
77 LLVMOrcAddLazilyCompiledIR(LLVMOrcJITStackRef JITStack, LLVMModuleRef Mod,
78                            LLVMOrcSymbolResolverFn SymbolResolver,
79                            void *SymbolResolverCtx) {
80   OrcCBindingsStack &J = *unwrap(JITStack);
81   Module *M(unwrap(Mod));
82   return J.addIRModuleLazy(M, SymbolResolver, SymbolResolverCtx);
83 }
84
85 void LLVMOrcRemoveModule(LLVMOrcJITStackRef JITStack, LLVMOrcModuleHandle H) {
86   OrcCBindingsStack &J = *unwrap(JITStack);
87   J.removeModule(H);
88 }
89
90 LLVMOrcTargetAddress LLVMOrcGetSymbolAddress(LLVMOrcJITStackRef JITStack,
91                                              const char *SymbolName) {
92   OrcCBindingsStack &J = *unwrap(JITStack);
93   auto Sym = J.findSymbol(SymbolName, true);
94   return Sym.getAddress();
95 }
96
97 void LLVMOrcDisposeInstance(LLVMOrcJITStackRef JITStack) {
98   delete unwrap(JITStack);
99 }