LLVM 20.0.0git
|
Mediates between ELFNix initialization and ExecutionSession state. More...
#include "llvm/ExecutionEngine/Orc/ELFNixPlatform.h"
Public Member Functions | |
ExecutionSession & | getExecutionSession () const |
ObjectLinkingLayer & | getObjectLinkingLayer () const |
Error | setupJITDylib (JITDylib &JD) override |
This method will be called outside the session lock each time a JITDylib is created (unless it is created with EmptyJITDylib set) to allow the Platform to install any JITDylib specific standard symbols (e.g __dso_handle). | |
Error | teardownJITDylib (JITDylib &JD) override |
This method will be called outside the session lock each time a JITDylib is removed to allow the Platform to remove any JITDylib-specific data. | |
Error | notifyAdding (ResourceTracker &RT, const MaterializationUnit &MU) override |
This method will be called under the ExecutionSession lock each time a MaterializationUnit is added to a JITDylib. | |
Error | notifyRemoving (ResourceTracker &RT) override |
This method will be called under the ExecutionSession lock when a ResourceTracker is removed. | |
Public Member Functions inherited from llvm::orc::Platform | |
virtual | ~Platform () |
virtual Error | setupJITDylib (JITDylib &JD)=0 |
This method will be called outside the session lock each time a JITDylib is created (unless it is created with EmptyJITDylib set) to allow the Platform to install any JITDylib specific standard symbols (e.g __dso_handle). | |
virtual Error | teardownJITDylib (JITDylib &JD)=0 |
This method will be called outside the session lock each time a JITDylib is removed to allow the Platform to remove any JITDylib-specific data. | |
virtual Error | notifyAdding (ResourceTracker &RT, const MaterializationUnit &MU)=0 |
This method will be called under the ExecutionSession lock each time a MaterializationUnit is added to a JITDylib. | |
virtual Error | notifyRemoving (ResourceTracker &RT)=0 |
This method will be called under the ExecutionSession lock when a ResourceTracker is removed. | |
Static Public Member Functions | |
static Expected< std::unique_ptr< ELFNixPlatform > > | Create (ObjectLinkingLayer &ObjLinkingLayer, JITDylib &PlatformJD, std::unique_ptr< DefinitionGenerator > OrcRuntime, std::optional< SymbolAliasMap > RuntimeAliases=std::nullopt) |
Try to create a ELFNixPlatform instance, adding the ORC runtime to the given JITDylib. | |
static Expected< std::unique_ptr< ELFNixPlatform > > | Create (ObjectLinkingLayer &ObjLinkingLayer, JITDylib &PlatformJD, const char *OrcRuntimePath, std::optional< SymbolAliasMap > RuntimeAliases=std::nullopt) |
Construct using a path to the ORC runtime. | |
static Expected< SymbolAliasMap > | standardPlatformAliases (ExecutionSession &ES, JITDylib &PlatformJD) |
Returns an AliasMap containing the default aliases for the ELFNixPlatform. | |
static ArrayRef< std::pair< const char *, const char * > > | requiredCXXAliases () |
Returns the array of required CXX aliases. | |
static ArrayRef< std::pair< const char *, const char * > > | standardRuntimeUtilityAliases () |
Returns the array of standard runtime utility aliases for ELF. | |
static ArrayRef< std::pair< const char *, const char * > > | standardLazyCompilationAliases () |
Returns a list of aliases required to enable lazy compilation via the ORC runtime. | |
Static Public Member Functions inherited from llvm::orc::Platform | |
static Expected< DenseMap< JITDylib *, SymbolMap > > | lookupInitSymbols (ExecutionSession &ES, const DenseMap< JITDylib *, SymbolLookupSet > &InitSyms) |
A utility function for looking up initializer symbols. | |
static void | lookupInitSymbolsAsync (unique_function< void(Error)> OnComplete, ExecutionSession &ES, const DenseMap< JITDylib *, SymbolLookupSet > &InitSyms) |
Performs an async lookup for the given symbols in each of the given JITDylibs, calling the given handler once all lookups have completed. | |
Mediates between ELFNix initialization and ExecutionSession state.
Definition at line 68 of file ELFNixPlatform.h.
|
static |
Construct using a path to the ORC runtime.
Definition at line 280 of file ELFNixPlatform.cpp.
References Create(), and llvm::orc::StaticLibraryDefinitionGenerator::Load().
|
static |
Try to create a ELFNixPlatform instance, adding the ORC runtime to the given JITDylib.
The ORC runtime requires access to a number of symbols in libc++. It is up to the caller to ensure that the required symbols can be referenced by code added to PlatformJD. The standard way to achieve this is to first attach dynamic library search generators for either the given process, or for the specific required libraries, to PlatformJD, then to create the platform instance:
Alternatively, these symbols could be added to another JITDylib that PlatformJD links against.
Clients are also responsible for ensuring that any JIT'd code that depends on runtime functions (including any code using TLV or static destructors) can reference the runtime symbols. This is usually achieved by linking any JITDylibs containing regular code against PlatformJD.
By default, ELFNixPlatform will add the set of aliases returned by the standardPlatformAliases function. This includes both required aliases (e.g. __cxa_atexit -> __orc_rt_elf_cxa_atexit for static destructor support), and optional aliases that provide JIT versions of common functions (e.g. dlopen -> __orc_rt_elf_jit_dlopen). Clients can override these defaults by passing a non-None value for the RuntimeAliases function, in which case the client is responsible for setting up all aliases (including the required ones).
Definition at line 233 of file ELFNixPlatform.cpp.
References llvm::orc::absoluteSymbols(), llvm::orc::JITDylib::define(), llvm::JITSymbolFlags::Exported, llvm::orc::LinkGraphLayer::getExecutionSession(), llvm::orc::ExecutionSession::getExecutorProcessControl(), llvm::orc::ExecutionSession::getTargetTriple(), llvm::inconvertibleErrorCode(), llvm::orc::ExecutionSession::intern(), P, standardPlatformAliases(), llvm::Triple::str(), llvm::Error::success(), and llvm::orc::symbolAliases().
Referenced by Create(), and llvm::orc::ExecutorNativePlatform::operator()().
|
inline |
Definition at line 119 of file ELFNixPlatform.h.
|
inline |
Definition at line 120 of file ELFNixPlatform.h.
|
overridevirtual |
This method will be called under the ExecutionSession lock each time a MaterializationUnit is added to a JITDylib.
Implements llvm::orc::Platform.
Definition at line 315 of file ELFNixPlatform.cpp.
References llvm::dbgs(), llvm::orc::MaterializationUnit::getInitializerSymbol(), llvm::orc::ResourceTracker::getJITDylib(), llvm::orc::MaterializationUnit::getName(), LLVM_DEBUG, llvm::Error::success(), and llvm::orc::WeaklyReferencedSymbol.
|
overridevirtual |
This method will be called under the ExecutionSession lock when a ResourceTracker is removed.
Implements llvm::orc::Platform.
Definition at line 332 of file ELFNixPlatform.cpp.
References llvm_unreachable.
|
static |
Returns the array of required CXX aliases.
Definition at line 357 of file ELFNixPlatform.cpp.
Referenced by standardPlatformAliases().
This method will be called outside the session lock each time a JITDylib is created (unless it is created with EmptyJITDylib set) to allow the Platform to install any JITDylib specific standard symbols (e.g __dso_handle).
Implements llvm::orc::Platform.
Definition at line 295 of file ELFNixPlatform.cpp.
References llvm::orc::JITDylib::define(), and llvm::orc::ExecutionSession::lookup().
|
static |
Returns a list of aliases required to enable lazy compilation via the ORC runtime.
Definition at line 382 of file ELFNixPlatform.cpp.
Referenced by standardPlatformAliases().
|
static |
Returns an AliasMap containing the default aliases for the ELFNixPlatform.
This can be modified by clients when constructing the platform to add or remove aliases.
Definition at line 347 of file ELFNixPlatform.cpp.
References llvm::orc::addAliases(), requiredCXXAliases(), standardLazyCompilationAliases(), and standardRuntimeUtilityAliases().
Referenced by Create().
|
static |
Returns the array of standard runtime utility aliases for ELF.
Definition at line 366 of file ELFNixPlatform.cpp.
Referenced by standardPlatformAliases().
This method will be called outside the session lock each time a JITDylib is removed to allow the Platform to remove any JITDylib-specific data.
Implements llvm::orc::Platform.
Definition at line 303 of file ELFNixPlatform.cpp.
References assert(), I, and llvm::Error::success().