1 //===----------- OrcCBindings.cpp - C bindings for the Orc APIs -----------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "OrcCBindingsStack.h"
11 #include "llvm-c/OrcBindings.h"
15 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(OrcCBindingsStack, LLVMOrcJITStackRef);
16 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(TargetMachine, LLVMTargetMachineRef);
18 LLVMOrcJITStackRef LLVMOrcCreateInstance(LLVMTargetMachineRef TM,
19 LLVMContextRef Context) {
20 TargetMachine *TM2(unwrap(TM));
21 LLVMContext &Ctx = *unwrap(Context);
23 Triple T(TM2->getTargetTriple());
25 auto CallbackMgrBuilder = OrcCBindingsStack::createCallbackManagerBuilder(T);
26 auto IndirectStubsMgrBuilder =
27 OrcCBindingsStack::createIndirectStubsMgrBuilder(T);
29 OrcCBindingsStack *JITStack =
30 new OrcCBindingsStack(*TM2, Ctx, CallbackMgrBuilder,
31 IndirectStubsMgrBuilder);
33 return wrap(JITStack);
36 void LLVMOrcGetMangledSymbol(LLVMOrcJITStackRef JITStack, char **MangledName,
37 const char *SymbolName) {
38 OrcCBindingsStack &J = *unwrap(JITStack);
39 std::string Mangled = J.mangle(SymbolName);
40 *MangledName = new char[Mangled.size() + 1];
41 strcpy(*MangledName, Mangled.c_str());
44 void LLVMOrcDisposeMangledSymbol(char *MangledName) {
49 LLVMOrcAddEagerlyCompiledIR(LLVMOrcJITStackRef JITStack, LLVMModuleRef Mod,
50 LLVMOrcSymbolResolverFn SymbolResolver,
51 void *SymbolResolverCtx) {
52 OrcCBindingsStack &J = *unwrap(JITStack);
53 Module *M(unwrap(Mod));
54 return J.addIRModuleEager(M, SymbolResolver, SymbolResolverCtx);
58 LLVMOrcAddLazilyCompiledIR(LLVMOrcJITStackRef JITStack, LLVMModuleRef Mod,
59 LLVMOrcSymbolResolverFn SymbolResolver,
60 void *SymbolResolverCtx) {
61 OrcCBindingsStack &J = *unwrap(JITStack);
62 Module *M(unwrap(Mod));
63 return J.addIRModuleLazy(M, SymbolResolver, SymbolResolverCtx);
66 void LLVMOrcRemoveModule(LLVMOrcJITStackRef JITStack, LLVMOrcModuleHandle H) {
67 OrcCBindingsStack &J = *unwrap(JITStack);
71 LLVMOrcTargetAddress LLVMOrcGetSymbolAddress(LLVMOrcJITStackRef JITStack,
72 const char *SymbolName) {
73 OrcCBindingsStack &J = *unwrap(JITStack);
74 auto Sym = J.findSymbol(SymbolName, true);
75 return Sym.getAddress();
78 void LLVMOrcDisposeInstance(LLVMOrcJITStackRef JITStack) {
79 delete unwrap(JITStack);