Class LLVMOrc

java.lang.Object
org.lwjgl.llvm.LLVMOrc

public class LLVMOrc extends Object
Requires LLVM 12 or higher.
  • Field Details

  • Method Details

    • nLLVMOrcExecutionSessionSetErrorReporter

      public static void nLLVMOrcExecutionSessionSetErrorReporter(long ES, long ReportError, long Ctx)
    • LLVMOrcExecutionSessionSetErrorReporter

      public static void LLVMOrcExecutionSessionSetErrorReporter(long ES, LLVMOrcErrorReporterFunctionI ReportError, long Ctx)
      Attach a custom error reporter function to the ExecutionSession.

      The error reporter will be called to deliver failure notices that can not be directly reported to a caller. For example, failure to resolve symbols in the JIT linker is typically reported via the error reporter (callers requesting definitions from the JIT will typically be delivered a FailureToMaterialize error instead).

    • LLVMOrcExecutionSessionGetSymbolStringPool

      public static long LLVMOrcExecutionSessionGetSymbolStringPool(long ES)
      Return a reference to the SymbolStringPool for an ExecutionSession.

      Ownership of the pool remains with the ExecutionSession: The caller is not required to free the pool.

    • LLVMOrcSymbolStringPoolClearDeadEntries

      public static void LLVMOrcSymbolStringPoolClearDeadEntries(long SSP)
      Clear all unreferenced symbol string pool entries.

      This can be called at any time to release unused entries in the ExecutionSession's string pool. Since it locks the pool (preventing interning of any new strings) it is recommended that it only be called infrequently, ideally when the caller has reason to believe that some entries will have become unreferenced, e.g. after removing a module or closing a JITDylib.

    • nLLVMOrcExecutionSessionIntern

      public static long nLLVMOrcExecutionSessionIntern(long ES, long Name)
      Unsafe version of: OrcExecutionSessionIntern
    • LLVMOrcExecutionSessionIntern

      public static long LLVMOrcExecutionSessionIntern(long ES, ByteBuffer Name)
      Intern a string in the ExecutionSession's SymbolStringPool and return a reference to it. This increments the ref-count of the pool entry, and the returned value should be released once the client is done with it by calling OrcReleaseSymbolStringPoolEntry.

      Since strings are uniqued within the SymbolStringPool LLVMOrcSymbolStringPoolEntryRefs can be compared by value to test string equality.

      Note that this function does not perform linker-mangling on the string.

    • LLVMOrcExecutionSessionIntern

      public static long LLVMOrcExecutionSessionIntern(long ES, CharSequence Name)
      Intern a string in the ExecutionSession's SymbolStringPool and return a reference to it. This increments the ref-count of the pool entry, and the returned value should be released once the client is done with it by calling OrcReleaseSymbolStringPoolEntry.

      Since strings are uniqued within the SymbolStringPool LLVMOrcSymbolStringPoolEntryRefs can be compared by value to test string equality.

      Note that this function does not perform linker-mangling on the string.

    • LLVMOrcRetainSymbolStringPoolEntry

      public static void LLVMOrcRetainSymbolStringPoolEntry(long S)
      Increments the ref-count for a SymbolStringPool entry.
    • nLLVMOrcExecutionSessionLookup

      public static void nLLVMOrcExecutionSessionLookup(long ES, int K, long SearchOrder, long SearchOrderSize, long Symbols, long SymbolsSize, long HandleResult, long Ctx)
      Unsafe version of: OrcExecutionSessionLookup
    • LLVMOrcExecutionSessionLookup

      public static void LLVMOrcExecutionSessionLookup(long ES, int K, @Nullable LLVMOrcCJITDylibSearchOrderElement.Buffer SearchOrder, @Nullable LLVMOrcCLookupSetElement.Buffer Symbols, LLVMOrcExecutionSessionLookupHandleResultFunctionI HandleResult, long Ctx)
      Look up symbols in an execution session.

      This is a wrapper around the general ExecutionSession::lookup function.

      The SearchOrder argument contains a list of (JITDylibs, JITDylibSearchFlags) pairs that describe the search order. The JITDylibs will be searched in the given order to try to find the symbols in the Symbols argument.

      The Symbols argument should contain a null-terminated array of (SymbolStringPtr, SymbolLookupFlags) pairs describing the symbols to be searched for. This function takes ownership of the elements of the Symbols array. The Name fields of the Symbols elements are taken to have been retained by the client for this function. The client should not release the Name fields, but are still responsible for destroying the array itself.

      The HandleResult function will be called once all searched for symbols have been found, or an error occurs. The HandleResult function will be passed an LLVMErrorRef indicating success or failure, and (on success) a null-terminated LLVMOrcCSymbolMapPairs array containing the function result, and the Ctx value passed to the lookup function.

      The client is fully responsible for managing the lifetime of the Ctx object. A common idiom is to allocate the context prior to the lookup and deallocate it in the handler.

      THIS API IS EXPERIMENTAL AND LIKELY TO CHANGE IN THE NEAR FUTURE!

    • LLVMOrcReleaseSymbolStringPoolEntry

      public static void LLVMOrcReleaseSymbolStringPoolEntry(long S)
      Reduces the ref-count for of a SymbolStringPool entry.
    • nLLVMOrcSymbolStringPoolEntryStr

      public static long nLLVMOrcSymbolStringPoolEntryStr(long S)
      Unsafe version of: OrcSymbolStringPoolEntryStr
    • LLVMOrcSymbolStringPoolEntryStr

      public static @Nullable String LLVMOrcSymbolStringPoolEntryStr(long S)
      Return the c-string for the given symbol.

      This string will remain valid until the entry is freed (once all LLVMOrcSymbolStringPoolEntryRefs have been released).

    • LLVMOrcReleaseResourceTracker

      public static void LLVMOrcReleaseResourceTracker(long RT)
      Reduces the ref-count of a ResourceTracker.
    • LLVMOrcResourceTrackerTransferTo

      public static void LLVMOrcResourceTrackerTransferTo(long SrcRT, long DstRT)
      Transfers tracking of all resources associated with resource tracker SrcRT to resource tracker DstRT.
    • LLVMOrcResourceTrackerRemove

      public static long LLVMOrcResourceTrackerRemove(long RT)
      Remove all resources associated with the given tracker. See ResourceTracker::remove().
    • LLVMOrcDisposeDefinitionGenerator

      public static void LLVMOrcDisposeDefinitionGenerator(long DG)
      Dispose of a JITDylib::DefinitionGenerator. This should only be called if ownership has not been passed to a JITDylib (e.g. because some error prevented the client from calling OrcJITDylibAddGenerator).
    • LLVMOrcDisposeMaterializationUnit

      public static void LLVMOrcDisposeMaterializationUnit(long MU)
      Dispose of a MaterializationUnit.
    • nLLVMOrcCreateCustomMaterializationUnit

      public static long nLLVMOrcCreateCustomMaterializationUnit(long Name, long Ctx, long Syms, long NumSyms, long InitSym, long Materialize, long Discard, long Destroy)
    • LLVMOrcCreateCustomMaterializationUnit

      public static long LLVMOrcCreateCustomMaterializationUnit(ByteBuffer Name, long Ctx, LLVMOrcCSymbolFlagsMapPair.Buffer Syms, long InitSym, LLVMOrcMaterializationUnitMaterializeFunctionI Materialize, LLVMOrcMaterializationUnitDiscardFunctionI Discard, LLVMOrcMaterializationUnitDestroyFunctionI Destroy)
      Create a custom MaterializationUnit.

      Name is a name for this MaterializationUnit to be used for identification and logging purposes (e.g. if this MaterializationUnit produces an object buffer then the name of that buffer will be derived from this name).

      The Syms list contains the names and linkages of the symbols provided by this unit. This function takes ownership of the elements of the Syms array. The Name fields of the array elements are taken to have been retained for this function. The client should not release the elements of the array, but is still responsible for destroying the array itself.

      The InitSym argument indicates whether or not this MaterializationUnit contains static initializers. If there are no static initializers (the common case) then this argument should be null. If there are static initializers then InitSym should be set to a unique name that also appears in the Syms list with the JITSymbolGenericFlagsMaterializationSideEffectsOnly flag set. This function takes ownership of the InitSym, which should have been retained twice on behalf of this function: once for the Syms entry and once for InitSym. If clients wish to use the InitSym value after this function returns they must retain it once more for themselves.

      If any of the symbols in the Syms list is looked up then the Materialize function will be called.

      If any of the symbols in the Syms list is overridden then the Discard function will be called.

      The caller owns the underling MaterializationUnit and is responsible for either passing it to a JITDylib (via OrcJITDylibDefine) or disposing of it by calling OrcDisposeMaterializationUnit.

      Since:
      13
    • LLVMOrcCreateCustomMaterializationUnit

      public static long LLVMOrcCreateCustomMaterializationUnit(CharSequence Name, long Ctx, LLVMOrcCSymbolFlagsMapPair.Buffer Syms, long InitSym, LLVMOrcMaterializationUnitMaterializeFunctionI Materialize, LLVMOrcMaterializationUnitDiscardFunctionI Discard, LLVMOrcMaterializationUnitDestroyFunctionI Destroy)
      Create a custom MaterializationUnit.

      Name is a name for this MaterializationUnit to be used for identification and logging purposes (e.g. if this MaterializationUnit produces an object buffer then the name of that buffer will be derived from this name).

      The Syms list contains the names and linkages of the symbols provided by this unit. This function takes ownership of the elements of the Syms array. The Name fields of the array elements are taken to have been retained for this function. The client should not release the elements of the array, but is still responsible for destroying the array itself.

      The InitSym argument indicates whether or not this MaterializationUnit contains static initializers. If there are no static initializers (the common case) then this argument should be null. If there are static initializers then InitSym should be set to a unique name that also appears in the Syms list with the JITSymbolGenericFlagsMaterializationSideEffectsOnly flag set. This function takes ownership of the InitSym, which should have been retained twice on behalf of this function: once for the Syms entry and once for InitSym. If clients wish to use the InitSym value after this function returns they must retain it once more for themselves.

      If any of the symbols in the Syms list is looked up then the Materialize function will be called.

      If any of the symbols in the Syms list is overridden then the Discard function will be called.

      The caller owns the underling MaterializationUnit and is responsible for either passing it to a JITDylib (via OrcJITDylibDefine) or disposing of it by calling OrcDisposeMaterializationUnit.

      Since:
      13
    • nLLVMOrcAbsoluteSymbols

      public static long nLLVMOrcAbsoluteSymbols(long Syms, long NumPairs)
      Unsafe version of: OrcAbsoluteSymbols
    • LLVMOrcAbsoluteSymbols

      public static long LLVMOrcAbsoluteSymbols(LLVMOrcCSymbolMapPair.Buffer Syms)
      Create a MaterializationUnit to define the given symbols as pointing to the corresponding raw addresses.

      This function takes ownership of the elements of the Syms array. The Name fields of the array elements are taken to have been retained for this function. This allows the following pattern...

      
       size_t NumPairs;
       LLVMOrcCSymbolMapPairs Sym;
       -- Build Syms array --
       LLVMOrcMaterializationUnitRef MU =
           LLVMOrcAbsoluteSymbols(Syms, NumPairs);

      ... without requiring cleanup of the elements of the Sym array afterwards.

      The client is still responsible for deleting the Sym array itself.

      If a client wishes to reuse elements of the Sym array after this call they must explicitly retain each of the elements for themselves.

    • nLLVMOrcLazyReexports

      public static long nLLVMOrcLazyReexports(long LCTM, long ISM, long SourceRef, long CallableAliases, long NumPairs)
      Unsafe version of: OrcLazyReexports
    • LLVMOrcLazyReexports

      public static long LLVMOrcLazyReexports(long LCTM, long ISM, long SourceRef, LLVMOrcCSymbolAliasMapPair.Buffer CallableAliases)
      Create a MaterializationUnit to define lazy re-expots. These are callable entry points that call through to the given symbols.

      This function takes ownership of the CallableAliases array. The Name fields of the array elements are taken to have been retained for this function. This allows the following pattern...

      
       size_t NumPairs;
       LLVMOrcCSymbolAliasMapPairs CallableAliases;
       -- Build CallableAliases array --
       LLVMOrcMaterializationUnitRef MU =
           LLVMOrcLazyReexports(LCTM, ISM, JD, CallableAliases, NumPairs);

      ... without requiring cleanup of the elements of the CallableAliases array afterwards.

      The client is still responsible for deleting the CallableAliases array itself.

      If a client wishes to reuse elements of the CallableAliases array after this call they must explicitly retain each of the elements for themselves.

      Since:
      13
    • LLVMOrcDisposeMaterializationResponsibility

      public static void LLVMOrcDisposeMaterializationResponsibility(long MR)
      Disposes of the passed MaterializationResponsibility object.

      This should only be done after the symbols covered by the object have either been resolved and emitted (via OrcMaterializationResponsibilityNotifyResolved and OrcMaterializationResponsibilityNotifyEmitted) or failed (via OrcMaterializationResponsibilityFailMaterialization).

      Since:
      13
    • LLVMOrcMaterializationResponsibilityGetTargetDylib

      public static long LLVMOrcMaterializationResponsibilityGetTargetDylib(long MR)
      Returns the target JITDylib that these symbols are being materialized into.
      Since:
      13
    • LLVMOrcMaterializationResponsibilityGetExecutionSession

      public static long LLVMOrcMaterializationResponsibilityGetExecutionSession(long MR)
      Returns the ExecutionSession for this MaterializationResponsibility.
      Since:
      13
    • nLLVMOrcMaterializationResponsibilityGetSymbols

      public static long nLLVMOrcMaterializationResponsibilityGetSymbols(long MR, long NumPairs)
    • LLVMOrcMaterializationResponsibilityGetSymbols

      public static @Nullable LLVMOrcCSymbolFlagsMapPair.Buffer LLVMOrcMaterializationResponsibilityGetSymbols(long MR)
      Returns the symbol flags map for this responsibility instance.

      The length of the array is returned in NumPairs and the caller is responsible for the returned memory and needs to call OrcDisposeCSymbolFlagsMap.

      To use the returned symbols beyond the livetime of the MaterializationResponsibility requires the caller to retain the symbols explicitly.

      Since:
      13
    • nLLVMOrcDisposeCSymbolFlagsMap

      public static void nLLVMOrcDisposeCSymbolFlagsMap(long Pairs)
      Unsafe version of: OrcDisposeCSymbolFlagsMap
    • LLVMOrcDisposeCSymbolFlagsMap

      public static void LLVMOrcDisposeCSymbolFlagsMap(LLVMOrcCSymbolFlagsMapPair Pairs)
      Disposes of the passed LLVMOrcCSymbolFlagsMap.

      Does not release the entries themselves.

      Since:
      13
    • LLVMOrcMaterializationResponsibilityGetInitializerSymbol

      public static long LLVMOrcMaterializationResponsibilityGetInitializerSymbol(long MR)
      Returns the initialization pseudo-symbol, if any. This symbol will also be present in the SymbolFlagsMap for this MaterializationResponsibility object.

      The returned symbol is not retained over any mutating operation of the MaterializationResponsbility or beyond the lifetime thereof.

      Since:
      13
    • nLLVMOrcMaterializationResponsibilityGetRequestedSymbols

      public static long nLLVMOrcMaterializationResponsibilityGetRequestedSymbols(long MR, long NumSymbols)
    • LLVMOrcMaterializationResponsibilityGetRequestedSymbols

      public static @Nullable org.lwjgl.PointerBuffer LLVMOrcMaterializationResponsibilityGetRequestedSymbols(long MR)
      Returns the names of any symbols covered by this MaterializationResponsibility object that have queries pending. This information can be used to return responsibility for unrequested symbols back to the JITDylib via the delegate method.
      Since:
      13
    • nLLVMOrcDisposeSymbols

      public static void nLLVMOrcDisposeSymbols(long Symbols)
      Unsafe version of: OrcDisposeSymbols
    • LLVMOrcDisposeSymbols

      public static void LLVMOrcDisposeSymbols(org.lwjgl.PointerBuffer Symbols)
      Disposes of the passed LLVMOrcSymbolStringPoolEntryRef*.

      Does not release the symbols themselves.

      Since:
      13
    • nLLVMOrcMaterializationResponsibilityNotifyResolved

      public static long nLLVMOrcMaterializationResponsibilityNotifyResolved(long MR, long Symbols, long NumPairs)
    • LLVMOrcMaterializationResponsibilityNotifyResolved

      public static long LLVMOrcMaterializationResponsibilityNotifyResolved(long MR, LLVMOrcCSymbolMapPair.Buffer Symbols)
      Notifies the target JITDylib that the given symbols have been resolved. This will update the given symbols' addresses in the JITDylib, and notify any pending queries on the given symbols of their resolution. The given symbols must be ones covered by this MaterializationResponsibility instance. Individual calls to this method may resolve a subset of the symbols, but all symbols must have been resolved prior to calling emit.

      This method will return an error if any symbols being resolved have been moved to the error state due to the failure of a dependency. If this method returns an error then clients should log it and call OrcMaterializationResponsibilityFailMaterialization. If no dependencies have been registered for the symbols covered by this MaterializationResponsibility then this method is guaranteed to return ErrorSuccess.

      Since:
      13
    • nLLVMOrcMaterializationResponsibilityNotifyEmitted

      public static long nLLVMOrcMaterializationResponsibilityNotifyEmitted(long MR, long SymbolDepGroups, long NumSymbolDepGroups)
    • LLVMOrcMaterializationResponsibilityNotifyEmitted

      public static long LLVMOrcMaterializationResponsibilityNotifyEmitted(long MR, LLVMOrcCSymbolDependenceGroup.Buffer SymbolDepGroups)
      Notifies the target JITDylib (and any pending queries on that JITDylib) that all symbols covered by this MaterializationResponsibility instance have been emitted.

      This function takes ownership of the symbols in the Dependencies struct. This allows the following pattern...

      
       LLVMOrcSymbolStringPoolEntryRef Names[] = {...};
       LLVMOrcCDependenceMapPair Dependence = {JD, {Names, sizeof(Names)}}
       LLVMOrcMaterializationResponsibilityAddDependencies(JD, Name, &Dependence, 1);

      ... without requiring cleanup of the elements of the Names array afterwards.

      The client is still responsible for deleting the Dependencies.Names arrays, and the Dependencies array itself.

      This method will return an error if any symbols being resolved have been moved to the error state due to the failure of a dependency. If this method returns an error then clients should log it and call OrcMaterializationResponsibilityFailMaterialization. If no dependencies have been registered for the symbols covered by this MaterializationResponsibility then this method is guaranteed to return ErrorSuccess.

      Since:
      13
    • nLLVMOrcMaterializationResponsibilityDefineMaterializing

      public static long nLLVMOrcMaterializationResponsibilityDefineMaterializing(long MR, long Pairs, long NumPairs)
    • LLVMOrcMaterializationResponsibilityDefineMaterializing

      public static long LLVMOrcMaterializationResponsibilityDefineMaterializing(long MR, LLVMOrcCSymbolFlagsMapPair.Buffer Pairs)
      Attempt to claim responsibility for new definitions. This method can be used to claim responsibility for symbols that are added to a materialization unit during the compilation process (e.g. literal pool symbols). Symbol linkage rules are the same as for symbols that are defined up front: duplicate strong definitions will result in errors. Duplicate weak definitions will be discarded (in which case they will not be added to this responsibility instance).

      This method can be used by materialization units that want to add additional symbols at materialization time (e.g. stubs, compile callbacks, metadata)

      Since:
      13
    • LLVMOrcMaterializationResponsibilityFailMaterialization

      public static void LLVMOrcMaterializationResponsibilityFailMaterialization(long MR)
      Notify all not-yet-emitted covered by this MaterializationResponsibility instance that an error has occurred. This will remove all symbols covered by this MaterializationResponsibility from the target JITDylib, and send an error to any queries waiting on these symbols.
      Since:
      13
    • LLVMOrcMaterializationResponsibilityReplace

      public static long LLVMOrcMaterializationResponsibilityReplace(long MR, long MU)
      Transfers responsibility to the given MaterializationUnit for all symbols defined by that MaterializationUnit. This allows materializers to break up work based on run-time information (e.g. by introspecting which symbols have actually been looked up and materializing only those).
      Since:
      13
    • nLLVMOrcMaterializationResponsibilityDelegate

      public static long nLLVMOrcMaterializationResponsibilityDelegate(long MR, long Symbols, long NumSymbols, long Result)
    • LLVMOrcMaterializationResponsibilityDelegate

      public static long LLVMOrcMaterializationResponsibilityDelegate(long MR, org.lwjgl.PointerBuffer Symbols, org.lwjgl.PointerBuffer Result)
      Delegates responsibility for the given symbols to the returned materialization responsibility. Useful for breaking up work between threads, or different kinds of materialization processes.

      The caller retains responsibility of the the passed MaterializationResponsibility.

      Since:
      13
    • nLLVMOrcMaterializationResponsibilityAddDependencies

      public static void nLLVMOrcMaterializationResponsibilityAddDependencies(long MR, long Name, long Dependencies, long NumPairs)
    • LLVMOrcMaterializationResponsibilityAddDependencies

      public static void LLVMOrcMaterializationResponsibilityAddDependencies(long MR, long Name, LLVMOrcCDependenceMapPair.Buffer Dependencies)
      Removed in LLVM 19.
      Since:
      13
    • nLLVMOrcMaterializationResponsibilityAddDependenciesForAll

      public static void nLLVMOrcMaterializationResponsibilityAddDependenciesForAll(long MR, long Dependencies, long NumPairs)
    • LLVMOrcMaterializationResponsibilityAddDependenciesForAll

      public static void LLVMOrcMaterializationResponsibilityAddDependenciesForAll(long MR, LLVMOrcCDependenceMapPair.Buffer Dependencies)
      Removed in LLVM 19.
      Since:
      13
    • nLLVMOrcExecutionSessionCreateBareJITDylib

      public static long nLLVMOrcExecutionSessionCreateBareJITDylib(long ES, long Name)
    • LLVMOrcExecutionSessionCreateBareJITDylib

      public static long LLVMOrcExecutionSessionCreateBareJITDylib(long ES, ByteBuffer Name)
      Create a "bare" JITDylib.

      The client is responsible for ensuring that the JITDylib's name is unique, e.g. by calling OrcExecutionSessionGetJITDylibByName first.

      This call does not install any library code or symbols into the newly created JITDylib. The client is responsible for all configuration.

    • LLVMOrcExecutionSessionCreateBareJITDylib

      public static long LLVMOrcExecutionSessionCreateBareJITDylib(long ES, CharSequence Name)
      Create a "bare" JITDylib.

      The client is responsible for ensuring that the JITDylib's name is unique, e.g. by calling OrcExecutionSessionGetJITDylibByName first.

      This call does not install any library code or symbols into the newly created JITDylib. The client is responsible for all configuration.

    • nLLVMOrcExecutionSessionCreateJITDylib

      public static long nLLVMOrcExecutionSessionCreateJITDylib(long ES, long Result, long Name)
    • LLVMOrcExecutionSessionCreateJITDylib

      public static long LLVMOrcExecutionSessionCreateJITDylib(long ES, org.lwjgl.PointerBuffer Result, ByteBuffer Name)
      Create a JITDylib.

      The client is responsible for ensuring that the JITDylib's name is unique, e.g. by calling OrcExecutionSessionGetJITDylibByName first.

      If a Platform is attached to the ExecutionSession then Platform::setupJITDylib will be called to install standard platform symbols (e.g. standard library interposes). If no Platform is installed then this call is equivalent to OrcExecutionSessionCreateBareJITDylib and will always return success.

    • LLVMOrcExecutionSessionCreateJITDylib

      public static long LLVMOrcExecutionSessionCreateJITDylib(long ES, org.lwjgl.PointerBuffer Result, CharSequence Name)
      Create a JITDylib.

      The client is responsible for ensuring that the JITDylib's name is unique, e.g. by calling OrcExecutionSessionGetJITDylibByName first.

      If a Platform is attached to the ExecutionSession then Platform::setupJITDylib will be called to install standard platform symbols (e.g. standard library interposes). If no Platform is installed then this call is equivalent to OrcExecutionSessionCreateBareJITDylib and will always return success.

    • nLLVMOrcExecutionSessionGetJITDylibByName

      public static long nLLVMOrcExecutionSessionGetJITDylibByName(long ES, long Name)
    • LLVMOrcExecutionSessionGetJITDylibByName

      public static long LLVMOrcExecutionSessionGetJITDylibByName(long ES, ByteBuffer Name)
      Returns the JITDylib with the given name, or NULL if no such JITDylib exists.
    • LLVMOrcExecutionSessionGetJITDylibByName

      public static long LLVMOrcExecutionSessionGetJITDylibByName(long ES, CharSequence Name)
      Returns the JITDylib with the given name, or NULL if no such JITDylib exists.
    • LLVMOrcJITDylibCreateResourceTracker

      public static long LLVMOrcJITDylibCreateResourceTracker(long JD)
      Return a reference to a newly created resource tracker associated with JD. The tracker is returned with an initial ref-count of 1, and must be released with OrcReleaseResourceTracker when no longer needed.
    • LLVMOrcJITDylibGetDefaultResourceTracker

      public static long LLVMOrcJITDylibGetDefaultResourceTracker(long JD)
      Return a reference to the default resource tracker for the given JITDylib. This operation will increase the retain count of the tracker: Clients should call OrcReleaseResourceTracker when the result is no longer needed.
    • LLVMOrcJITDylibDefine

      public static long LLVMOrcJITDylibDefine(long JD, long MU)
      Add the given MaterializationUnit to the given JITDylib.

      If this operation succeeds then JITDylib JD will take ownership of MU. If the operation fails then ownership remains with the caller who should call OrcDisposeMaterializationUnit to destroy it.

    • LLVMOrcJITDylibClear

      public static long LLVMOrcJITDylibClear(long JD)
      Calls remove on all trackers associated with this JITDylib, see JITDylib::clear().
    • LLVMOrcJITDylibAddGenerator

      public static void LLVMOrcJITDylibAddGenerator(long JD, long DG)
      Add a DefinitionGenerator to the given JITDylib.

      The JITDylib will take ownership of the given generator: The client is no longer responsible for managing its memory.

    • nLLVMOrcCreateCustomCAPIDefinitionGenerator

      public static long nLLVMOrcCreateCustomCAPIDefinitionGenerator(long F, long Ctx, long Dispose)
    • LLVMOrcCreateCustomCAPIDefinitionGenerator

      public static long LLVMOrcCreateCustomCAPIDefinitionGenerator(LLVMOrcCAPIDefinitionGeneratorTryToGenerateFunctionI F, long Ctx, @Nullable LLVMOrcDisposeCAPIDefinitionGeneratorFunctionI Dispose)
      Create a custom generator.

      The F argument will be used to implement the DefinitionGenerator's tryToGenerate method (see LLVMOrcCAPIDefinitionGeneratorTryToGenerateFunction).

      Ctx is a context object that will be passed to F. This argument is permitted to be null.

      Dispose is the disposal function for Ctx. This argument is permitted to be null (in which case the client is responsible for the lifetime of Ctx).

    • LLVMOrcLookupStateContinueLookup

      public static void LLVMOrcLookupStateContinueLookup(long S, long Err)
      Continue a lookup that was suspended in a generator (see LLVMOrcCAPIDefinitionGeneratorTryToGenerateFunction).
    • nLLVMOrcCreateDynamicLibrarySearchGeneratorForProcess

      public static long nLLVMOrcCreateDynamicLibrarySearchGeneratorForProcess(long Result, byte GlobalPrefx, long Filter, long FilterCtx)
    • LLVMOrcCreateDynamicLibrarySearchGeneratorForProcess

      public static long LLVMOrcCreateDynamicLibrarySearchGeneratorForProcess(org.lwjgl.PointerBuffer Result, byte GlobalPrefx, @Nullable LLVMOrcSymbolPredicateI Filter, long FilterCtx)
      Get a DynamicLibrarySearchGenerator that will reflect process symbols into the JITDylib. On success the resulting generator is owned by the client. Ownership is typically transferred by adding the instance to a JITDylib using OrcJITDylibAddGenerator.

      The GlobalPrefix argument specifies the character that appears on the front of linker-mangled symbols for the target platform (e.g. '_' on MachO). If non-null, this character will be stripped from the start of all symbol strings before passing the remaining substring to dlsym.

      The optional Filter and Ctx arguments can be used to supply a symbol name filter: Only symbols for which the filter returns true will be visible to JIT'd code. If the Filter argument is null then all process symbols will be visible to JIT'd code. Note that the symbol name passed to the Filter function is the full mangled symbol: The client is responsible for stripping the global prefix if present.

    • nLLVMOrcCreateDynamicLibrarySearchGeneratorForPath

      public static long nLLVMOrcCreateDynamicLibrarySearchGeneratorForPath(long Result, long FileName, byte GlobalPrefix, long Filter, long FilterCtx)
    • LLVMOrcCreateDynamicLibrarySearchGeneratorForPath

      public static long LLVMOrcCreateDynamicLibrarySearchGeneratorForPath(org.lwjgl.PointerBuffer Result, ByteBuffer FileName, byte GlobalPrefix, @Nullable LLVMOrcSymbolPredicateI Filter, long FilterCtx)
      Get a LLVMOrcCreateDynamicLibrarySearchGeneratorForPath that will reflect library symbols into the JITDylib. On success the resulting generator is owned by the client. Ownership is typically transferred by adding the instance to a JITDylib using OrcJITDylibAddGenerator,

      The GlobalPrefix argument specifies the character that appears on the front of linker-mangled symbols for the target platform (e.g. '_' on MachO). If non-null, this character will be stripped from the start of all symbol strings before passing the remaining substring to dlsym.

      The optional Filter and Ctx arguments can be used to supply a symbol name filter: Only symbols for which the filter returns true will be visible to JIT'd code. If the Filter argument is null then all library symbols will be visible to JIT'd code. Note that the symbol name passed to the Filter function is the full mangled symbol: The client is responsible for stripping the global prefix if present.

      THIS API IS EXPERIMENTAL AND LIKELY TO CHANGE IN THE NEAR FUTURE!

    • LLVMOrcCreateDynamicLibrarySearchGeneratorForPath

      public static long LLVMOrcCreateDynamicLibrarySearchGeneratorForPath(org.lwjgl.PointerBuffer Result, CharSequence FileName, byte GlobalPrefix, @Nullable LLVMOrcSymbolPredicateI Filter, long FilterCtx)
      Get a LLVMOrcCreateDynamicLibrarySearchGeneratorForPath that will reflect library symbols into the JITDylib. On success the resulting generator is owned by the client. Ownership is typically transferred by adding the instance to a JITDylib using OrcJITDylibAddGenerator,

      The GlobalPrefix argument specifies the character that appears on the front of linker-mangled symbols for the target platform (e.g. '_' on MachO). If non-null, this character will be stripped from the start of all symbol strings before passing the remaining substring to dlsym.

      The optional Filter and Ctx arguments can be used to supply a symbol name filter: Only symbols for which the filter returns true will be visible to JIT'd code. If the Filter argument is null then all library symbols will be visible to JIT'd code. Note that the symbol name passed to the Filter function is the full mangled symbol: The client is responsible for stripping the global prefix if present.

      THIS API IS EXPERIMENTAL AND LIKELY TO CHANGE IN THE NEAR FUTURE!

    • nLLVMOrcCreateStaticLibrarySearchGeneratorForPath

      public static long nLLVMOrcCreateStaticLibrarySearchGeneratorForPath(long Result, long ObjLayer, long FileName, long TargetTriple)
    • LLVMOrcCreateStaticLibrarySearchGeneratorForPath

      public static long LLVMOrcCreateStaticLibrarySearchGeneratorForPath(org.lwjgl.PointerBuffer Result, long ObjLayer, ByteBuffer FileName, @Nullable ByteBuffer TargetTriple)
      Get a LLVMOrcCreateStaticLibrarySearchGeneratorForPath that will reflect static library symbols into the JITDylib. On success the resulting generator is owned by the client. Ownership is typically transferred by adding the instance to a JITDylib using OrcJITDylibAddGenerator,

      Call with the optional TargetTriple argument will succeed if the file at the given path is a static library or a MachO universal binary containing a static library that is compatible with the given triple. Otherwise it will return an error.

      THIS API IS EXPERIMENTAL AND LIKELY TO CHANGE IN THE NEAR FUTURE!

    • LLVMOrcCreateStaticLibrarySearchGeneratorForPath

      public static long LLVMOrcCreateStaticLibrarySearchGeneratorForPath(org.lwjgl.PointerBuffer Result, long ObjLayer, CharSequence FileName, @Nullable CharSequence TargetTriple)
      Get a LLVMOrcCreateStaticLibrarySearchGeneratorForPath that will reflect static library symbols into the JITDylib. On success the resulting generator is owned by the client. Ownership is typically transferred by adding the instance to a JITDylib using OrcJITDylibAddGenerator,

      Call with the optional TargetTriple argument will succeed if the file at the given path is a static library or a MachO universal binary containing a static library that is compatible with the given triple. Otherwise it will return an error.

      THIS API IS EXPERIMENTAL AND LIKELY TO CHANGE IN THE NEAR FUTURE!

    • LLVMOrcCreateNewThreadSafeContext

      public static long LLVMOrcCreateNewThreadSafeContext()
      Create a ThreadSafeContext containing a new LLVMContext.

      Ownership of the underlying ThreadSafeContext data is shared: Clients can and should dispose of their ThreadSafeContext as soon as they no longer need to refer to it directly. Other references (e.g. from ThreadSafeModules) will keep the data alive as long as it is needed.

    • LLVMOrcThreadSafeContextGetContext

      public static long LLVMOrcThreadSafeContextGetContext(long TSCtx)
      Get a reference to the wrapped LLVMContext.
    • LLVMOrcDisposeThreadSafeContext

      public static void LLVMOrcDisposeThreadSafeContext(long TSCtx)
      Dispose of a ThreadSafeContext.
    • LLVMOrcCreateNewThreadSafeModule

      public static long LLVMOrcCreateNewThreadSafeModule(long M, long TSCtx)
      Create a ThreadSafeModule wrapper around the given LLVM module. This takes ownership of the M argument which should not be disposed of or referenced after this function returns.

      Ownership of the ThreadSafeModule is unique: If it is transferred to the JIT (e.g. by OrcLLJITAddLLVMIRModule) then the client is no longer responsible for it. If it is not transferred to the JIT then the client should call OrcDisposeThreadSafeModule to dispose of it.

    • LLVMOrcDisposeThreadSafeModule

      public static void LLVMOrcDisposeThreadSafeModule(long TSM)
      Dispose of a ThreadSafeModule. This should only be called if ownership has not been passed to LLJIT (e.g. because some error prevented the client from adding this to the JIT).
    • nLLVMOrcThreadSafeModuleWithModuleDo

      public static long nLLVMOrcThreadSafeModuleWithModuleDo(long TSM, long F, long Ctx)
    • LLVMOrcThreadSafeModuleWithModuleDo

      public static long LLVMOrcThreadSafeModuleWithModuleDo(long TSM, LLVMOrcGenericIRModuleOperationFunctionI F, long Ctx)
      Apply the given function to the module contained in this ThreadSafeModule.
      Since:
      13
    • nLLVMOrcJITTargetMachineBuilderDetectHost

      public static long nLLVMOrcJITTargetMachineBuilderDetectHost(long Result)
    • LLVMOrcJITTargetMachineBuilderDetectHost

      public static long LLVMOrcJITTargetMachineBuilderDetectHost(org.lwjgl.PointerBuffer Result)
      Create a JITTargetMachineBuilder by detecting the host.

      On success the client owns the resulting JITTargetMachineBuilder. It must be passed to a consuming operation (e.g. OrcLLJITBuilderSetJITTargetMachineBuilder) or disposed of by calling OrcDisposeJITTargetMachineBuilder.

    • LLVMOrcJITTargetMachineBuilderCreateFromTargetMachine

      public static long LLVMOrcJITTargetMachineBuilderCreateFromTargetMachine(long TM)
      Create a JITTargetMachineBuilder from the given TargetMachine template.

      This operation takes ownership of the given TargetMachine and destroys it before returing. The resulting JITTargetMachineBuilder is owned by the client and must be passed to a consuming operation (e.g. OrcLLJITBuilderSetJITTargetMachineBuilder) or disposed of by calling OrcDisposeJITTargetMachineBuilder.

    • LLVMOrcDisposeJITTargetMachineBuilder

      public static void LLVMOrcDisposeJITTargetMachineBuilder(long JTMB)
      Dispose of a JITTargetMachineBuilder.
    • nLLVMOrcJITTargetMachineBuilderGetTargetTriple

      public static long nLLVMOrcJITTargetMachineBuilderGetTargetTriple(long JTMB)
    • LLVMOrcJITTargetMachineBuilderGetTargetTriple

      public static @Nullable String LLVMOrcJITTargetMachineBuilderGetTargetTriple(long JTMB)
      Returns the target triple for the given JITTargetMachineBuilder as a string.

      The caller owns the resulting string as must dispose of it by calling LLVMDisposeMessage.

      Since:
      13
    • nLLVMOrcJITTargetMachineBuilderSetTargetTriple

      public static void nLLVMOrcJITTargetMachineBuilderSetTargetTriple(long JTMB, long TargetTriple)
    • LLVMOrcJITTargetMachineBuilderSetTargetTriple

      public static void LLVMOrcJITTargetMachineBuilderSetTargetTriple(long JTMB, ByteBuffer TargetTriple)
      Sets the target triple for the given JITTargetMachineBuilder to the given string.
      Since:
      13
    • LLVMOrcJITTargetMachineBuilderSetTargetTriple

      public static void LLVMOrcJITTargetMachineBuilderSetTargetTriple(long JTMB, CharSequence TargetTriple)
      Sets the target triple for the given JITTargetMachineBuilder to the given string.
      Since:
      13
    • LLVMOrcObjectLayerAddObjectFile

      public static long LLVMOrcObjectLayerAddObjectFile(long ObjLayer, long JD, long ObjBuffer)
      Add an object to an ObjectLayer to the given JITDylib.

      Adds a buffer representing an object file to the given JITDylib using the given ObjectLayer instance. This operation transfers ownership of the buffer to the ObjectLayer instance. The buffer should not be disposed of or referenced once this function returns.

      Resources associated with the given object will be tracked by the given JITDylib's default ResourceTracker.

      Since:
      13
    • LLVMOrcObjectLayerAddObjectFileWithRT

      public static long LLVMOrcObjectLayerAddObjectFileWithRT(long ObjLayer, long RT, long ObjBuffer)
      Add an object to an ObjectLayer using the given ResourceTracker.

      Adds a buffer representing an object file to the given ResourceTracker's JITDylib using the given ObjectLayer instance. This operation transfers ownership of the buffer to the ObjectLayer instance. The buffer should not be disposed of or referenced once this function returns.

      Resources associated with the given object will be tracked by ResourceTracker RT.

      Since:
      13
    • LLVMOrcObjectLayerEmit

      public static void LLVMOrcObjectLayerEmit(long ObjLayer, long R, long ObjBuffer)
      Emit an object buffer to an ObjectLayer.

      Ownership of the responsibility object and object buffer pass to this function. The client is not responsible for cleanup.

      Since:
      13
    • LLVMOrcDisposeObjectLayer

      public static void LLVMOrcDisposeObjectLayer(long ObjLayer)
      Dispose of an ObjectLayer.
    • LLVMOrcIRTransformLayerEmit

      public static void LLVMOrcIRTransformLayerEmit(long IRTransformLayer, long MR, long TSM)
      Since:
      13
    • nLLVMOrcIRTransformLayerSetTransform

      public static void nLLVMOrcIRTransformLayerSetTransform(long IRTransformLayer, long TransformFunction, long Ctx)
    • LLVMOrcIRTransformLayerSetTransform

      public static void LLVMOrcIRTransformLayerSetTransform(long IRTransformLayer, LLVMOrcIRTransformLayerTransformFunctionI TransformFunction, long Ctx)
      Set the transform function of the provided transform layer, passing through a pointer to user provided context.
      Since:
      13
    • nLLVMOrcObjectTransformLayerSetTransform

      public static void nLLVMOrcObjectTransformLayerSetTransform(long ObjTransformLayer, long TransformFunction, long Ctx)
    • LLVMOrcObjectTransformLayerSetTransform

      public static void LLVMOrcObjectTransformLayerSetTransform(long ObjTransformLayer, LLVMOrcObjectTransformLayerTransformFunctionI TransformFunction, long Ctx)
      Set the transform function on an LLVMOrcObjectTransformLayer.
      Since:
      13
    • nLLVMOrcCreateLocalIndirectStubsManager

      public static long nLLVMOrcCreateLocalIndirectStubsManager(long TargetTriple)
    • LLVMOrcCreateLocalIndirectStubsManager

      public static long LLVMOrcCreateLocalIndirectStubsManager(ByteBuffer TargetTriple)
      Create a LocalIndirectStubsManager from the given target triple.

      The resulting IndirectStubsManager is owned by the client and must be disposed of by calling OrcDisposeIndirectStubsManager.

      Since:
      13
    • LLVMOrcCreateLocalIndirectStubsManager

      public static long LLVMOrcCreateLocalIndirectStubsManager(CharSequence TargetTriple)
      Create a LocalIndirectStubsManager from the given target triple.

      The resulting IndirectStubsManager is owned by the client and must be disposed of by calling OrcDisposeIndirectStubsManager.

      Since:
      13
    • LLVMOrcDisposeIndirectStubsManager

      public static void LLVMOrcDisposeIndirectStubsManager(long ISM)
      Dispose of an IndirectStubsManager.
      Since:
      13
    • nLLVMOrcCreateLocalLazyCallThroughManager

      public static long nLLVMOrcCreateLocalLazyCallThroughManager(long TargetTriple, long ES, long ErrorHandlerAddr, long LCTM)
    • LLVMOrcCreateLocalLazyCallThroughManager

      public static long LLVMOrcCreateLocalLazyCallThroughManager(ByteBuffer TargetTriple, long ES, long ErrorHandlerAddr, org.lwjgl.PointerBuffer LCTM)
      Since:
      13
    • LLVMOrcCreateLocalLazyCallThroughManager

      public static long LLVMOrcCreateLocalLazyCallThroughManager(CharSequence TargetTriple, long ES, long ErrorHandlerAddr, org.lwjgl.PointerBuffer LCTM)
      Since:
      13
    • LLVMOrcDisposeLazyCallThroughManager

      public static void LLVMOrcDisposeLazyCallThroughManager(long LCTM)
      Dispose of an LazyCallThroughManager.
      Since:
      13
    • nLLVMOrcCreateDumpObjects

      public static long nLLVMOrcCreateDumpObjects(long DumpDir, long IdentifierOverride)
      Unsafe version of: OrcCreateDumpObjects
    • LLVMOrcCreateDumpObjects

      public static long LLVMOrcCreateDumpObjects(ByteBuffer DumpDir, ByteBuffer IdentifierOverride)
      Create a DumpObjects instance.

      DumpDir specifies the path to write dumped objects to. DumpDir may be empty in which case files will be dumped to the working directory.

      IdentifierOverride specifies a file name stem to use when dumping objects. If empty then each MemoryBuffer's identifier will be used (with a .o suffix added if not already present). If an identifier override is supplied it will be used instead, along with an incrementing counter (since all buffers will use the same identifier, the resulting files will be named <ident>.o, <ident>.2.o, <ident>.3.o, and so on). IdentifierOverride should not contain an extension, as a .o suffix will be added by DumpObjects.

      Since:
      13
    • LLVMOrcCreateDumpObjects

      public static long LLVMOrcCreateDumpObjects(CharSequence DumpDir, CharSequence IdentifierOverride)
      Create a DumpObjects instance.

      DumpDir specifies the path to write dumped objects to. DumpDir may be empty in which case files will be dumped to the working directory.

      IdentifierOverride specifies a file name stem to use when dumping objects. If empty then each MemoryBuffer's identifier will be used (with a .o suffix added if not already present). If an identifier override is supplied it will be used instead, along with an incrementing counter (since all buffers will use the same identifier, the resulting files will be named <ident>.o, <ident>.2.o, <ident>.3.o, and so on). IdentifierOverride should not contain an extension, as a .o suffix will be added by DumpObjects.

      Since:
      13
    • LLVMOrcDisposeDumpObjects

      public static void LLVMOrcDisposeDumpObjects(long DumpObjects)
      Dispose of a DumpObjects instance.
      Since:
      13
    • nLLVMOrcDumpObjects_CallOperator

      public static long nLLVMOrcDumpObjects_CallOperator(long DumpObjects, long ObjBuffer)
      Unsafe version of: OrcDumpObjects_CallOperator
    • LLVMOrcDumpObjects_CallOperator

      public static long LLVMOrcDumpObjects_CallOperator(long DumpObjects, org.lwjgl.PointerBuffer ObjBuffer)
      Dump the contents of the given MemoryBuffer.
      Since:
      13