1*5ffd83dbSDimitry Andric /*===---------------- llvm-c/Orc.h - OrcV2 C bindings -----------*- C++ -*-===*\ 2*5ffd83dbSDimitry Andric |* *| 3*5ffd83dbSDimitry Andric |* Part of the LLVM Project, under the Apache License v2.0 with LLVM *| 4*5ffd83dbSDimitry Andric |* Exceptions. *| 5*5ffd83dbSDimitry Andric |* See https://llvm.org/LICENSE.txt for license information. *| 6*5ffd83dbSDimitry Andric |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception *| 7*5ffd83dbSDimitry Andric |* *| 8*5ffd83dbSDimitry Andric |*===----------------------------------------------------------------------===*| 9*5ffd83dbSDimitry Andric |* *| 10*5ffd83dbSDimitry Andric |* This header declares the C interface to libLLVMOrcJIT.a, which implements *| 11*5ffd83dbSDimitry Andric |* JIT compilation of LLVM IR. Minimal documentation of C API specific issues *| 12*5ffd83dbSDimitry Andric |* (especially memory ownership rules) is provided. Core Orc concepts are *| 13*5ffd83dbSDimitry Andric |* documented in llvm/docs/ORCv2.rst and APIs are documented in the C++ *| 14*5ffd83dbSDimitry Andric |* headers *| 15*5ffd83dbSDimitry Andric |* *| 16*5ffd83dbSDimitry Andric |* Many exotic languages can interoperate with C code but have a harder time *| 17*5ffd83dbSDimitry Andric |* with C++ due to name mangling. So in addition to C, this interface enables *| 18*5ffd83dbSDimitry Andric |* tools written in such languages. *| 19*5ffd83dbSDimitry Andric |* *| 20*5ffd83dbSDimitry Andric |* Note: This interface is experimental. It is *NOT* stable, and may be *| 21*5ffd83dbSDimitry Andric |* changed without warning. Only C API usage documentation is *| 22*5ffd83dbSDimitry Andric |* provided. See the C++ documentation for all higher level ORC API *| 23*5ffd83dbSDimitry Andric |* details. *| 24*5ffd83dbSDimitry Andric |* *| 25*5ffd83dbSDimitry Andric \*===----------------------------------------------------------------------===*/ 26*5ffd83dbSDimitry Andric 27*5ffd83dbSDimitry Andric #ifndef LLVM_C_ORC_H 28*5ffd83dbSDimitry Andric #define LLVM_C_ORC_H 29*5ffd83dbSDimitry Andric 30*5ffd83dbSDimitry Andric #include "llvm-c/Error.h" 31*5ffd83dbSDimitry Andric #include "llvm-c/TargetMachine.h" 32*5ffd83dbSDimitry Andric #include "llvm-c/Types.h" 33*5ffd83dbSDimitry Andric 34*5ffd83dbSDimitry Andric LLVM_C_EXTERN_C_BEGIN 35*5ffd83dbSDimitry Andric 36*5ffd83dbSDimitry Andric /** 37*5ffd83dbSDimitry Andric * Represents an address in the target process. 38*5ffd83dbSDimitry Andric */ 39*5ffd83dbSDimitry Andric typedef uint64_t LLVMOrcJITTargetAddress; 40*5ffd83dbSDimitry Andric 41*5ffd83dbSDimitry Andric /** 42*5ffd83dbSDimitry Andric * A reference to an orc::ExecutionSession instance. 43*5ffd83dbSDimitry Andric */ 44*5ffd83dbSDimitry Andric typedef struct LLVMOrcOpaqueExecutionSession *LLVMOrcExecutionSessionRef; 45*5ffd83dbSDimitry Andric 46*5ffd83dbSDimitry Andric /** 47*5ffd83dbSDimitry Andric * A reference to an orc::SymbolStringPool table entry. 48*5ffd83dbSDimitry Andric */ 49*5ffd83dbSDimitry Andric typedef struct LLVMOrcQuaqueSymbolStringPoolEntryPtr 50*5ffd83dbSDimitry Andric *LLVMOrcSymbolStringPoolEntryRef; 51*5ffd83dbSDimitry Andric 52*5ffd83dbSDimitry Andric /** 53*5ffd83dbSDimitry Andric * A reference to an orc::JITDylib instance. 54*5ffd83dbSDimitry Andric */ 55*5ffd83dbSDimitry Andric typedef struct LLVMOrcOpaqueJITDylib *LLVMOrcJITDylibRef; 56*5ffd83dbSDimitry Andric 57*5ffd83dbSDimitry Andric /** 58*5ffd83dbSDimitry Andric * A reference to an orc::JITDylib::DefinitionGenerator. 59*5ffd83dbSDimitry Andric */ 60*5ffd83dbSDimitry Andric typedef struct LLVMOrcOpaqueJITDylibDefinitionGenerator 61*5ffd83dbSDimitry Andric *LLVMOrcJITDylibDefinitionGeneratorRef; 62*5ffd83dbSDimitry Andric 63*5ffd83dbSDimitry Andric /** 64*5ffd83dbSDimitry Andric * Predicate function for SymbolStringPoolEntries. 65*5ffd83dbSDimitry Andric */ 66*5ffd83dbSDimitry Andric typedef int (*LLVMOrcSymbolPredicate)(LLVMOrcSymbolStringPoolEntryRef Sym, 67*5ffd83dbSDimitry Andric void *Ctx); 68*5ffd83dbSDimitry Andric 69*5ffd83dbSDimitry Andric /** 70*5ffd83dbSDimitry Andric * A reference to an orc::ThreadSafeContext instance. 71*5ffd83dbSDimitry Andric */ 72*5ffd83dbSDimitry Andric typedef struct LLVMOrcOpaqueThreadSafeContext *LLVMOrcThreadSafeContextRef; 73*5ffd83dbSDimitry Andric 74*5ffd83dbSDimitry Andric /** 75*5ffd83dbSDimitry Andric * A reference to an orc::ThreadSafeModule instance. 76*5ffd83dbSDimitry Andric */ 77*5ffd83dbSDimitry Andric typedef struct LLVMOrcOpaqueThreadSafeModule *LLVMOrcThreadSafeModuleRef; 78*5ffd83dbSDimitry Andric 79*5ffd83dbSDimitry Andric /** 80*5ffd83dbSDimitry Andric * A reference to an orc::JITTargetMachineBuilder instance. 81*5ffd83dbSDimitry Andric */ 82*5ffd83dbSDimitry Andric typedef struct LLVMOrcOpaqueJITTargetMachineBuilder 83*5ffd83dbSDimitry Andric *LLVMOrcJITTargetMachineBuilderRef; 84*5ffd83dbSDimitry Andric 85*5ffd83dbSDimitry Andric /** 86*5ffd83dbSDimitry Andric * A reference to an orc::LLJITBuilder instance. 87*5ffd83dbSDimitry Andric */ 88*5ffd83dbSDimitry Andric typedef struct LLVMOrcOpaqueLLJITBuilder *LLVMOrcLLJITBuilderRef; 89*5ffd83dbSDimitry Andric 90*5ffd83dbSDimitry Andric /** 91*5ffd83dbSDimitry Andric * A reference to an orc::LLJIT instance. 92*5ffd83dbSDimitry Andric */ 93*5ffd83dbSDimitry Andric typedef struct LLVMOrcOpaqueLLJIT *LLVMOrcLLJITRef; 94*5ffd83dbSDimitry Andric 95*5ffd83dbSDimitry Andric /** 96*5ffd83dbSDimitry Andric * Intern a string in the ExecutionSession's SymbolStringPool and return a 97*5ffd83dbSDimitry Andric * reference to it. This increments the ref-count of the pool entry, and the 98*5ffd83dbSDimitry Andric * returned value should be released once the client is done with it by 99*5ffd83dbSDimitry Andric * calling LLVMOrReleaseSymbolStringPoolEntry. 100*5ffd83dbSDimitry Andric * 101*5ffd83dbSDimitry Andric * Since strings are uniqued within the SymbolStringPool 102*5ffd83dbSDimitry Andric * LLVMOrcSymbolStringPoolEntryRefs can be compared by value to test string 103*5ffd83dbSDimitry Andric * equality. 104*5ffd83dbSDimitry Andric * 105*5ffd83dbSDimitry Andric * Note that this function does not perform linker-mangling on the string. 106*5ffd83dbSDimitry Andric */ 107*5ffd83dbSDimitry Andric LLVMOrcSymbolStringPoolEntryRef 108*5ffd83dbSDimitry Andric LLVMOrcExecutionSessionIntern(LLVMOrcExecutionSessionRef ES, const char *Name); 109*5ffd83dbSDimitry Andric 110*5ffd83dbSDimitry Andric /** 111*5ffd83dbSDimitry Andric * Reduces the ref-count for of a SymbolStringPool entry. 112*5ffd83dbSDimitry Andric */ 113*5ffd83dbSDimitry Andric void LLVMOrcReleaseSymbolStringPoolEntry(LLVMOrcSymbolStringPoolEntryRef S); 114*5ffd83dbSDimitry Andric 115*5ffd83dbSDimitry Andric /** 116*5ffd83dbSDimitry Andric * Dispose of a JITDylib::DefinitionGenerator. This should only be called if 117*5ffd83dbSDimitry Andric * ownership has not been passed to a JITDylib (e.g. because some error 118*5ffd83dbSDimitry Andric * prevented the client from calling LLVMOrcJITDylibAddGenerator). 119*5ffd83dbSDimitry Andric */ 120*5ffd83dbSDimitry Andric void LLVMOrcDisposeJITDylibDefinitionGenerator( 121*5ffd83dbSDimitry Andric LLVMOrcJITDylibDefinitionGeneratorRef DG); 122*5ffd83dbSDimitry Andric 123*5ffd83dbSDimitry Andric /** 124*5ffd83dbSDimitry Andric * Add a JITDylib::DefinitionGenerator to the given JITDylib. 125*5ffd83dbSDimitry Andric * 126*5ffd83dbSDimitry Andric * The JITDylib will take ownership of the given generator: The client is no 127*5ffd83dbSDimitry Andric * longer responsible for managing its memory. 128*5ffd83dbSDimitry Andric */ 129*5ffd83dbSDimitry Andric void LLVMOrcJITDylibAddGenerator(LLVMOrcJITDylibRef JD, 130*5ffd83dbSDimitry Andric LLVMOrcJITDylibDefinitionGeneratorRef DG); 131*5ffd83dbSDimitry Andric 132*5ffd83dbSDimitry Andric /** 133*5ffd83dbSDimitry Andric * Get a DynamicLibrarySearchGenerator that will reflect process symbols into 134*5ffd83dbSDimitry Andric * the JITDylib. On success the resulting generator is owned by the client. 135*5ffd83dbSDimitry Andric * Ownership is typically transferred by adding the instance to a JITDylib 136*5ffd83dbSDimitry Andric * using LLVMOrcJITDylibAddGenerator, 137*5ffd83dbSDimitry Andric * 138*5ffd83dbSDimitry Andric * The GlobalPrefix argument specifies the character that appears on the front 139*5ffd83dbSDimitry Andric * of linker-mangled symbols for the target platform (e.g. '_' on MachO). 140*5ffd83dbSDimitry Andric * If non-null, this character will be stripped from the start of all symbol 141*5ffd83dbSDimitry Andric * strings before passing the remaining substring to dlsym. 142*5ffd83dbSDimitry Andric * 143*5ffd83dbSDimitry Andric * The optional Filter and Ctx arguments can be used to supply a symbol name 144*5ffd83dbSDimitry Andric * filter: Only symbols for which the filter returns true will be visible to 145*5ffd83dbSDimitry Andric * JIT'd code. If the Filter argument is null then all process symbols will 146*5ffd83dbSDimitry Andric * be visible to JIT'd code. Note that the symbol name passed to the Filter 147*5ffd83dbSDimitry Andric * function is the full mangled symbol: The client is responsible for stripping 148*5ffd83dbSDimitry Andric * the global prefix if present. 149*5ffd83dbSDimitry Andric */ 150*5ffd83dbSDimitry Andric LLVMErrorRef LLVMOrcCreateDynamicLibrarySearchGeneratorForProcess( 151*5ffd83dbSDimitry Andric LLVMOrcJITDylibDefinitionGeneratorRef *Result, char GlobalPrefx, 152*5ffd83dbSDimitry Andric LLVMOrcSymbolPredicate Filter, void *FilterCtx); 153*5ffd83dbSDimitry Andric 154*5ffd83dbSDimitry Andric /** 155*5ffd83dbSDimitry Andric * Create a ThreadSafeContext containing a new LLVMContext. 156*5ffd83dbSDimitry Andric * 157*5ffd83dbSDimitry Andric * Ownership of the underlying ThreadSafeContext data is shared: Clients 158*5ffd83dbSDimitry Andric * can and should dispose of their ThreadSafeContext as soon as they no longer 159*5ffd83dbSDimitry Andric * need to refer to it directly. Other references (e.g. from ThreadSafeModules 160*5ffd83dbSDimitry Andric * will keep the data alive as long as it is needed. 161*5ffd83dbSDimitry Andric */ 162*5ffd83dbSDimitry Andric LLVMOrcThreadSafeContextRef LLVMOrcCreateNewThreadSafeContext(void); 163*5ffd83dbSDimitry Andric 164*5ffd83dbSDimitry Andric /** 165*5ffd83dbSDimitry Andric * Get a reference to the wrapped LLVMContext. 166*5ffd83dbSDimitry Andric */ 167*5ffd83dbSDimitry Andric LLVMContextRef 168*5ffd83dbSDimitry Andric LLVMOrcThreadSafeContextGetContext(LLVMOrcThreadSafeContextRef TSCtx); 169*5ffd83dbSDimitry Andric 170*5ffd83dbSDimitry Andric /** 171*5ffd83dbSDimitry Andric * Dispose of a ThreadSafeContext. 172*5ffd83dbSDimitry Andric */ 173*5ffd83dbSDimitry Andric void LLVMOrcDisposeThreadSafeContext(LLVMOrcThreadSafeContextRef TSCtx); 174*5ffd83dbSDimitry Andric 175*5ffd83dbSDimitry Andric /** 176*5ffd83dbSDimitry Andric * Create a ThreadSafeModule wrapper around the given LLVM module. This takes 177*5ffd83dbSDimitry Andric * ownership of the M argument which should not be disposed of or referenced 178*5ffd83dbSDimitry Andric * after this function returns. 179*5ffd83dbSDimitry Andric * 180*5ffd83dbSDimitry Andric * Ownership of the ThreadSafeModule is unique: If it is transferred to the JIT 181*5ffd83dbSDimitry Andric * (e.g. by LLVMOrcLLJITAddLLVMIRModule), in which case the client is no longer 182*5ffd83dbSDimitry Andric * responsible for it. If it is not transferred to the JIT then the client 183*5ffd83dbSDimitry Andric * should call LLVMOrcDisposeThreadSafeModule to dispose of it. 184*5ffd83dbSDimitry Andric */ 185*5ffd83dbSDimitry Andric LLVMOrcThreadSafeModuleRef 186*5ffd83dbSDimitry Andric LLVMOrcCreateNewThreadSafeModule(LLVMModuleRef M, 187*5ffd83dbSDimitry Andric LLVMOrcThreadSafeContextRef TSCtx); 188*5ffd83dbSDimitry Andric 189*5ffd83dbSDimitry Andric /** 190*5ffd83dbSDimitry Andric * Dispose of a ThreadSafeModule. This should only be called if ownership has 191*5ffd83dbSDimitry Andric * not been passed to LLJIT (e.g. because some error prevented the client from 192*5ffd83dbSDimitry Andric * adding this to the JIT). 193*5ffd83dbSDimitry Andric */ 194*5ffd83dbSDimitry Andric void LLVMOrcDisposeThreadSafeModule(LLVMOrcThreadSafeModuleRef TSM); 195*5ffd83dbSDimitry Andric 196*5ffd83dbSDimitry Andric /** 197*5ffd83dbSDimitry Andric * Create a JITTargetMachineBuilder by detecting the host. 198*5ffd83dbSDimitry Andric * 199*5ffd83dbSDimitry Andric * On success the client owns the resulting JITTargetMachineBuilder. It must be 200*5ffd83dbSDimitry Andric * passed to a consuming operation (e.g. LLVMOrcCreateLLJITBuilder) or disposed 201*5ffd83dbSDimitry Andric * of by calling LLVMOrcDisposeJITTargetMachineBuilder. 202*5ffd83dbSDimitry Andric */ 203*5ffd83dbSDimitry Andric LLVMErrorRef LLVMOrcJITTargetMachineBuilderDetectHost( 204*5ffd83dbSDimitry Andric LLVMOrcJITTargetMachineBuilderRef *Result); 205*5ffd83dbSDimitry Andric 206*5ffd83dbSDimitry Andric /** 207*5ffd83dbSDimitry Andric * Create a JITTargetMachineBuilder from the given TargetMachine template. 208*5ffd83dbSDimitry Andric * 209*5ffd83dbSDimitry Andric * This operation takes ownership of the given TargetMachine and destroys it 210*5ffd83dbSDimitry Andric * before returing. The resulting JITTargetMachineBuilder is owned by the client 211*5ffd83dbSDimitry Andric * and must be passed to a consuming operation (e.g. LLVMOrcCreateLLJITBuilder) 212*5ffd83dbSDimitry Andric * or disposed of by calling LLVMOrcDisposeJITTargetMachineBuilder. 213*5ffd83dbSDimitry Andric */ 214*5ffd83dbSDimitry Andric LLVMOrcJITTargetMachineBuilderRef 215*5ffd83dbSDimitry Andric LLVMOrcJITTargetMachineBuilderCreateFromTargetMachine(LLVMTargetMachineRef TM); 216*5ffd83dbSDimitry Andric 217*5ffd83dbSDimitry Andric /** 218*5ffd83dbSDimitry Andric * Dispose of a JITTargetMachineBuilder. 219*5ffd83dbSDimitry Andric */ 220*5ffd83dbSDimitry Andric void LLVMOrcDisposeJITTargetMachineBuilder( 221*5ffd83dbSDimitry Andric LLVMOrcJITTargetMachineBuilderRef JTMB); 222*5ffd83dbSDimitry Andric 223*5ffd83dbSDimitry Andric /** 224*5ffd83dbSDimitry Andric * Create an LLJITTargetMachineBuilder. 225*5ffd83dbSDimitry Andric * 226*5ffd83dbSDimitry Andric * The client owns the resulting LLJITBuilder and should dispose of it using 227*5ffd83dbSDimitry Andric * LLVMOrcDisposeLLJITBuilder once they are done with it. 228*5ffd83dbSDimitry Andric */ 229*5ffd83dbSDimitry Andric LLVMOrcLLJITBuilderRef LLVMOrcCreateLLJITBuilder(void); 230*5ffd83dbSDimitry Andric 231*5ffd83dbSDimitry Andric /** 232*5ffd83dbSDimitry Andric * Dispose of an LLVMOrcLLJITBuilderRef. This should only be called if ownership 233*5ffd83dbSDimitry Andric * has not been passed to LLVMOrcCreateLLJIT (e.g. because some error prevented 234*5ffd83dbSDimitry Andric * that function from being called). 235*5ffd83dbSDimitry Andric */ 236*5ffd83dbSDimitry Andric void LLVMOrcDisposeLLJITBuilder(LLVMOrcLLJITBuilderRef Builder); 237*5ffd83dbSDimitry Andric 238*5ffd83dbSDimitry Andric /** 239*5ffd83dbSDimitry Andric * Set the JITTargetMachineBuilder to be used when constructing the LLJIT 240*5ffd83dbSDimitry Andric * instance. Calling this function is optional: if it is not called then the 241*5ffd83dbSDimitry Andric * LLJITBuilder will use JITTargeTMachineBuilder::detectHost to construct a 242*5ffd83dbSDimitry Andric * JITTargetMachineBuilder. 243*5ffd83dbSDimitry Andric */ 244*5ffd83dbSDimitry Andric void LLVMOrcLLJITBuilderSetJITTargetMachineBuilder( 245*5ffd83dbSDimitry Andric LLVMOrcLLJITBuilderRef Builder, LLVMOrcJITTargetMachineBuilderRef JTMB); 246*5ffd83dbSDimitry Andric 247*5ffd83dbSDimitry Andric /** 248*5ffd83dbSDimitry Andric * Create an LLJIT instance from an LLJITBuilder. 249*5ffd83dbSDimitry Andric * 250*5ffd83dbSDimitry Andric * This operation takes ownership of the Builder argument: clients should not 251*5ffd83dbSDimitry Andric * dispose of the builder after calling this function (even if the function 252*5ffd83dbSDimitry Andric * returns an error). If a null Builder argument is provided then a 253*5ffd83dbSDimitry Andric * default-constructed LLJITBuilder will be used. 254*5ffd83dbSDimitry Andric * 255*5ffd83dbSDimitry Andric * On success the resulting LLJIT instance is uniquely owned by the client and 256*5ffd83dbSDimitry Andric * automatically manages the memory of all JIT'd code and all modules that are 257*5ffd83dbSDimitry Andric * transferred to it (e.g. via LLVMOrcLLJITAddLLVMIRModule). Disposing of the 258*5ffd83dbSDimitry Andric * LLJIT instance will free all memory managed by the JIT, including JIT'd code 259*5ffd83dbSDimitry Andric * and not-yet compiled modules. 260*5ffd83dbSDimitry Andric */ 261*5ffd83dbSDimitry Andric LLVMErrorRef LLVMOrcCreateLLJIT(LLVMOrcLLJITRef *Result, 262*5ffd83dbSDimitry Andric LLVMOrcLLJITBuilderRef Builder); 263*5ffd83dbSDimitry Andric 264*5ffd83dbSDimitry Andric /** 265*5ffd83dbSDimitry Andric * Dispose of an LLJIT instance. 266*5ffd83dbSDimitry Andric */ 267*5ffd83dbSDimitry Andric LLVMErrorRef LLVMOrcDisposeLLJIT(LLVMOrcLLJITRef J); 268*5ffd83dbSDimitry Andric 269*5ffd83dbSDimitry Andric /** 270*5ffd83dbSDimitry Andric * Get a reference to the ExecutionSession for this LLJIT instance. 271*5ffd83dbSDimitry Andric * 272*5ffd83dbSDimitry Andric * The ExecutionSession is owned by the LLJIT instance. The client is not 273*5ffd83dbSDimitry Andric * responsible for managing its memory. 274*5ffd83dbSDimitry Andric */ 275*5ffd83dbSDimitry Andric LLVMOrcExecutionSessionRef LLVMOrcLLJITGetExecutionSession(LLVMOrcLLJITRef J); 276*5ffd83dbSDimitry Andric 277*5ffd83dbSDimitry Andric /** 278*5ffd83dbSDimitry Andric * Return a reference to the Main JITDylib. 279*5ffd83dbSDimitry Andric * 280*5ffd83dbSDimitry Andric * The JITDylib is owned by the LLJIT instance. The client is not responsible 281*5ffd83dbSDimitry Andric * for managing its memory. 282*5ffd83dbSDimitry Andric */ 283*5ffd83dbSDimitry Andric LLVMOrcJITDylibRef LLVMOrcLLJITGetMainJITDylib(LLVMOrcLLJITRef J); 284*5ffd83dbSDimitry Andric 285*5ffd83dbSDimitry Andric /** 286*5ffd83dbSDimitry Andric * Return the target triple for this LLJIT instance. This string is owned by 287*5ffd83dbSDimitry Andric * the LLJIT instance and should not be freed by the client. 288*5ffd83dbSDimitry Andric */ 289*5ffd83dbSDimitry Andric const char *LLVMOrcLLJITGetTripleString(LLVMOrcLLJITRef J); 290*5ffd83dbSDimitry Andric 291*5ffd83dbSDimitry Andric /** 292*5ffd83dbSDimitry Andric * Returns the global prefix character according to the LLJIT's DataLayout. 293*5ffd83dbSDimitry Andric */ 294*5ffd83dbSDimitry Andric char LLVMOrcLLJITGetGlobalPrefix(LLVMOrcLLJITRef J); 295*5ffd83dbSDimitry Andric 296*5ffd83dbSDimitry Andric /** 297*5ffd83dbSDimitry Andric * Mangles the given string according to the LLJIT instance's DataLayout, then 298*5ffd83dbSDimitry Andric * interns the result in the SymbolStringPool and returns a reference to the 299*5ffd83dbSDimitry Andric * pool entry. Clients should call LLVMOrcReleaseSymbolStringPoolEntry to 300*5ffd83dbSDimitry Andric * decrement the ref-count on the pool entry once they are finished with this 301*5ffd83dbSDimitry Andric * value. 302*5ffd83dbSDimitry Andric */ 303*5ffd83dbSDimitry Andric LLVMOrcSymbolStringPoolEntryRef 304*5ffd83dbSDimitry Andric LLVMOrcLLJITMangleAndIntern(LLVMOrcLLJITRef J, const char *UnmangledName); 305*5ffd83dbSDimitry Andric 306*5ffd83dbSDimitry Andric /** 307*5ffd83dbSDimitry Andric * Add a buffer representing an object file to the given JITDylib in the given 308*5ffd83dbSDimitry Andric * LLJIT instance. This operation transfers ownership of the buffer to the 309*5ffd83dbSDimitry Andric * LLJIT instance. The buffer should not be disposed of or referenced once this 310*5ffd83dbSDimitry Andric * function returns. 311*5ffd83dbSDimitry Andric */ 312*5ffd83dbSDimitry Andric LLVMErrorRef LLVMOrcLLJITAddObjectFile(LLVMOrcLLJITRef J, LLVMOrcJITDylibRef JD, 313*5ffd83dbSDimitry Andric LLVMMemoryBufferRef ObjBuffer); 314*5ffd83dbSDimitry Andric 315*5ffd83dbSDimitry Andric /** 316*5ffd83dbSDimitry Andric * Add an IR module to the given JITDylib of the given LLJIT instance. This 317*5ffd83dbSDimitry Andric * operation transfers ownership of the TSM argument to the LLJIT instance. 318*5ffd83dbSDimitry Andric * The TSM argument should not be 3disposed of or referenced once this 319*5ffd83dbSDimitry Andric * function returns. 320*5ffd83dbSDimitry Andric */ 321*5ffd83dbSDimitry Andric LLVMErrorRef LLVMOrcLLJITAddLLVMIRModule(LLVMOrcLLJITRef J, 322*5ffd83dbSDimitry Andric LLVMOrcJITDylibRef JD, 323*5ffd83dbSDimitry Andric LLVMOrcThreadSafeModuleRef TSM); 324*5ffd83dbSDimitry Andric /** 325*5ffd83dbSDimitry Andric * Look up the given symbol in the main JITDylib of the given LLJIT instance. 326*5ffd83dbSDimitry Andric * 327*5ffd83dbSDimitry Andric * This operation does not take ownership of the Name argument. 328*5ffd83dbSDimitry Andric */ 329*5ffd83dbSDimitry Andric LLVMErrorRef LLVMOrcLLJITLookup(LLVMOrcLLJITRef J, 330*5ffd83dbSDimitry Andric LLVMOrcJITTargetAddress *Result, 331*5ffd83dbSDimitry Andric const char *Name); 332*5ffd83dbSDimitry Andric 333*5ffd83dbSDimitry Andric LLVM_C_EXTERN_C_END 334*5ffd83dbSDimitry Andric 335*5ffd83dbSDimitry Andric #endif /* LLVM_C_ORC_H */ 336