LLVM  4.0.0
OrcBindings.h
Go to the documentation of this file.
1 /*===----------- llvm-c/OrcBindings.h - Orc Lib C Iface ---------*- C++ -*-===*\
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 |* This header declares the C interface to libLLVMOrcJIT.a, which implements *|
11 |* JIT compilation of LLVM IR. *|
12 |* *|
13 |* Many exotic languages can interoperate with C code but have a harder time *|
14 |* with C++ due to name mangling. So in addition to C, this interface enables *|
15 |* tools written in such languages. *|
16 |* *|
17 |* Note: This interface is experimental. It is *NOT* stable, and may be *|
18 |* changed without warning. *|
19 |* *|
20 \*===----------------------------------------------------------------------===*/
21 
22 #ifndef LLVM_C_ORCBINDINGS_H
23 #define LLVM_C_ORCBINDINGS_H
24 
25 #include "llvm-c/Object.h"
26 #include "llvm-c/TargetMachine.h"
27 
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31 
32 typedef struct LLVMOrcOpaqueJITStack *LLVMOrcJITStackRef;
34 typedef uint64_t LLVMOrcTargetAddress;
35 typedef uint64_t (*LLVMOrcSymbolResolverFn)(const char *Name, void *LookupCtx);
36 typedef uint64_t (*LLVMOrcLazyCompileCallbackFn)(LLVMOrcJITStackRef JITStack,
37  void *CallbackCtx);
38 
40 
41 /**
42  * Create an ORC JIT stack.
43  *
44  * The client owns the resulting stack, and must call OrcDisposeInstance(...)
45  * to destroy it and free its memory. The JIT stack will take ownership of the
46  * TargetMachine, which will be destroyed when the stack is destroyed. The
47  * client should not attempt to dispose of the Target Machine, or it will result
48  * in a double-free.
49  */
51 
52 /**
53  * Get the error message for the most recent error (if any).
54  *
55  * This message is owned by the ORC JIT Stack and will be freed when the stack
56  * is disposed of by LLVMOrcDisposeInstance.
57  */
58 const char *LLVMOrcGetErrorMsg(LLVMOrcJITStackRef JITStack);
59 
60 /**
61  * Mangle the given symbol.
62  * Memory will be allocated for MangledSymbol to hold the result. The client
63  */
64 void LLVMOrcGetMangledSymbol(LLVMOrcJITStackRef JITStack, char **MangledSymbol,
65  const char *Symbol);
66 
67 /**
68  * Dispose of a mangled symbol.
69  */
70 void LLVMOrcDisposeMangledSymbol(char *MangledSymbol);
71 
72 /**
73  * Create a lazy compile callback.
74  */
75 LLVMOrcTargetAddress
76 LLVMOrcCreateLazyCompileCallback(LLVMOrcJITStackRef JITStack,
78  void *CallbackCtx);
79 
80 /**
81  * Create a named indirect call stub.
82  */
83 LLVMOrcErrorCode LLVMOrcCreateIndirectStub(LLVMOrcJITStackRef JITStack,
84  const char *StubName,
85  LLVMOrcTargetAddress InitAddr);
86 
87 /**
88  * Set the pointer for the given indirect stub.
89  */
90 LLVMOrcErrorCode LLVMOrcSetIndirectStubPointer(LLVMOrcJITStackRef JITStack,
91  const char *StubName,
92  LLVMOrcTargetAddress NewAddr);
93 
94 /**
95  * Add module to be eagerly compiled.
96  */
97 LLVMOrcModuleHandle
98 LLVMOrcAddEagerlyCompiledIR(LLVMOrcJITStackRef JITStack, LLVMModuleRef Mod,
99  LLVMOrcSymbolResolverFn SymbolResolver,
100  void *SymbolResolverCtx);
101 
102 /**
103  * Add module to be lazily compiled one function at a time.
104  */
105 LLVMOrcModuleHandle
106 LLVMOrcAddLazilyCompiledIR(LLVMOrcJITStackRef JITStack, LLVMModuleRef Mod,
107  LLVMOrcSymbolResolverFn SymbolResolver,
108  void *SymbolResolverCtx);
109 
110 /**
111  * Add an object file.
112  */
113 LLVMOrcModuleHandle LLVMOrcAddObjectFile(LLVMOrcJITStackRef JITStack,
114  LLVMObjectFileRef Obj,
115  LLVMOrcSymbolResolverFn SymbolResolver,
116  void *SymbolResolverCtx);
117 
118 /**
119  * Remove a module set from the JIT.
120  *
121  * This works for all modules that can be added via OrcAdd*, including object
122  * files.
123  */
124 void LLVMOrcRemoveModule(LLVMOrcJITStackRef JITStack, LLVMOrcModuleHandle H);
125 
126 /**
127  * Get symbol address from JIT instance.
128  */
129 LLVMOrcTargetAddress LLVMOrcGetSymbolAddress(LLVMOrcJITStackRef JITStack,
130  const char *SymbolName);
131 
132 /**
133  * Dispose of an ORC JIT stack.
134  */
135 void LLVMOrcDisposeInstance(LLVMOrcJITStackRef JITStack);
136 
137 #ifdef __cplusplus
138 }
139 #endif /* extern "C" */
140 
141 #endif /* LLVM_C_ORCBINDINGS_H */
uint64_t(* LLVMOrcLazyCompileCallbackFn)(LLVMOrcJITStackRef JITStack, void *CallbackCtx)
Definition: OrcBindings.h:36
struct LLVMOpaqueModule * LLVMModuleRef
The top-level container for all other LLVM Intermediate Representation (IR) objects.
Definition: c/Types.h:62
LLVMOrcJITStackRef LLVMOrcCreateInstance(LLVMTargetMachineRef TM)
Create an ORC JIT stack.
LLVMOrcTargetAddress LLVMOrcGetSymbolAddress(LLVMOrcJITStackRef JITStack, const char *SymbolName)
Get symbol address from JIT instance.
uint64_t(* LLVMOrcSymbolResolverFn)(const char *Name, void *LookupCtx)
Definition: OrcBindings.h:35
LLVMOrcErrorCode LLVMOrcCreateIndirectStub(LLVMOrcJITStackRef JITStack, const char *StubName, LLVMOrcTargetAddress InitAddr)
Create a named indirect call stub.
LLVMOrcTargetAddress LLVMOrcCreateLazyCompileCallback(LLVMOrcJITStackRef JITStack, LLVMOrcLazyCompileCallbackFn Callback, void *CallbackCtx)
Create a lazy compile callback.
struct LLVMOpaqueTargetMachine * LLVMTargetMachineRef
void LLVMOrcDisposeMangledSymbol(char *MangledSymbol)
Dispose of a mangled symbol.
LLVMOrcErrorCode
Definition: OrcBindings.h:39
void LLVMOrcDisposeInstance(LLVMOrcJITStackRef JITStack)
Dispose of an ORC JIT stack.
uint64_t LLVMOrcTargetAddress
Definition: OrcBindings.h:34
LLVMOrcModuleHandle LLVMOrcAddLazilyCompiledIR(LLVMOrcJITStackRef JITStack, LLVMModuleRef Mod, LLVMOrcSymbolResolverFn SymbolResolver, void *SymbolResolverCtx)
Add module to be lazily compiled one function at a time.
void LLVMOrcGetMangledSymbol(LLVMOrcJITStackRef JITStack, char **MangledSymbol, const char *Symbol)
Mangle the given symbol.
#define H(x, y, z)
Definition: MD5.cpp:53
struct LLVMOpaqueObjectFile * LLVMObjectFileRef
Definition: Object.h:37
uint32_t LLVMOrcModuleHandle
Definition: OrcBindings.h:33
LLVMOrcModuleHandle LLVMOrcAddEagerlyCompiledIR(LLVMOrcJITStackRef JITStack, LLVMModuleRef Mod, LLVMOrcSymbolResolverFn SymbolResolver, void *SymbolResolverCtx)
Add module to be eagerly compiled.
LLVMOrcErrorCode LLVMOrcSetIndirectStubPointer(LLVMOrcJITStackRef JITStack, const char *StubName, LLVMOrcTargetAddress NewAddr)
Set the pointer for the given indirect stub.
void LLVMOrcRemoveModule(LLVMOrcJITStackRef JITStack, LLVMOrcModuleHandle H)
Remove a module set from the JIT.
LLVMOrcModuleHandle LLVMOrcAddObjectFile(LLVMOrcJITStackRef JITStack, LLVMObjectFileRef Obj, LLVMOrcSymbolResolverFn SymbolResolver, void *SymbolResolverCtx)
Add an object file.
const char * LLVMOrcGetErrorMsg(LLVMOrcJITStackRef JITStack)
Get the error message for the most recent error (if any).
struct LLVMOrcOpaqueJITStack * LLVMOrcJITStackRef
Definition: OrcBindings.h:32