LLVM 22.0.0git
llvm::orc::MachOPlatform Class Reference

Mediates between MachO initialization and ExecutionSession state. More...

#include "llvm/ExecutionEngine/Orc/MachOPlatform.h"

Inheritance diagram for llvm::orc::MachOPlatform:
[legend]

Classes

struct  HeaderOptions
 Configuration for the mach-o header of a JITDylib. More...
struct  MachOJITDylibDepInfo

Public Types

enum class  MachOExecutorSymbolFlags : uint8_t { None = 0 , Weak = 1U << 0 , Callable = 1U << 1 }
using MachOJITDylibDepInfoMap
using MachOHeaderMUBuilder
 Used by setupJITDylib to create MachO header MaterializationUnits for JITDylibs.

Public Member Functions

ExecutionSessiongetExecutionSession () const
ObjectLinkingLayergetObjectLinkingLayer () const
NonOwningSymbolStringPtr getMachOHeaderStartSymbol () 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 setupJITDylib (JITDylib &JD, HeaderOptions Opts)
 Install any platform-specific symbols (e.g.
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 ()

Static Public Member Functions

static std::unique_ptr< MaterializationUnitbuildSimpleMachOHeaderMU (MachOPlatform &MOP, HeaderOptions Opts)
 Simple MachO header graph builder.
static Expected< std::unique_ptr< MachOPlatform > > Create (ObjectLinkingLayer &ObjLinkingLayer, JITDylib &PlatformJD, std::unique_ptr< DefinitionGenerator > OrcRuntime, HeaderOptions PlatformJDOpts={}, MachOHeaderMUBuilder BuildMachOHeaderMU=buildSimpleMachOHeaderMU, std::optional< SymbolAliasMap > RuntimeAliases=std::nullopt)
 Try to create a MachOPlatform instance, adding the ORC runtime to the given JITDylib.
static Expected< std::unique_ptr< MachOPlatform > > Create (ObjectLinkingLayer &ObjLinkingLayer, JITDylib &PlatformJD, const char *OrcRuntimePath, HeaderOptions PlatformJDOpts={}, MachOHeaderMUBuilder BuildMachOHeaderMU=buildSimpleMachOHeaderMU, std::optional< SymbolAliasMap > RuntimeAliases=std::nullopt)
 Construct using a path to the ORC runtime.
static SymbolAliasMap standardPlatformAliases (ExecutionSession &ES)
 Returns an AliasMap containing the default aliases for the MachOPlatform.
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 MachO.
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.

Detailed Description

Mediates between MachO initialization and ExecutionSession state.

Definition at line 31 of file MachOPlatform.h.

Member Typedef Documentation

◆ MachOHeaderMUBuilder

Initial value:
unique_function is a type-erasing functor similar to std::function.
Configuration for the mach-o header of a JITDylib.

Used by setupJITDylib to create MachO header MaterializationUnits for JITDylibs.

Definition at line 97 of file MachOPlatform.h.

◆ MachOJITDylibDepInfoMap

Initial value:
std::vector<std::pair<ExecutorAddr, MachOJITDylibDepInfo>>

Definition at line 40 of file MachOPlatform.h.

Member Enumeration Documentation

◆ MachOExecutorSymbolFlags

Enumerator
None 
Weak 
Callable 

Definition at line 44 of file MachOPlatform.h.

Member Function Documentation

◆ buildSimpleMachOHeaderMU()

std::unique_ptr< MaterializationUnit > llvm::orc::MachOPlatform::buildSimpleMachOHeaderMU ( MachOPlatform & MOP,
HeaderOptions Opts )
inlinestatic

Simple MachO header graph builder.

Definition at line 419 of file MachOPlatform.h.

◆ Create() [1/2]

Expected< std::unique_ptr< MachOPlatform > > llvm::orc::MachOPlatform::Create ( ObjectLinkingLayer & ObjLinkingLayer,
JITDylib & PlatformJD,
const char * OrcRuntimePath,
HeaderOptions PlatformJDOpts = {},
MachOHeaderMUBuilder BuildMachOHeaderMU = buildSimpleMachOHeaderMU,
std::optional< SymbolAliasMap > RuntimeAliases = std::nullopt )
static

Construct using a path to the ORC runtime.

Definition at line 325 of file MachOPlatform.cpp.

References Create(), and llvm::orc::StaticLibraryDefinitionGenerator::Load().

◆ Create() [2/2]

Expected< std::unique_ptr< MachOPlatform > > llvm::orc::MachOPlatform::Create ( ObjectLinkingLayer & ObjLinkingLayer,
JITDylib & PlatformJD,
std::unique_ptr< DefinitionGenerator > OrcRuntime,
HeaderOptions PlatformJDOpts = {},
MachOHeaderMUBuilder BuildMachOHeaderMU = buildSimpleMachOHeaderMU,
std::optional< SymbolAliasMap > RuntimeAliases = std::nullopt )
static

Try to create a MachOPlatform instance, adding the ORC runtime to the given JITDylib.

The ORC runtime requires access to a number of symbols in libc++, and requires access to symbols in libobjc, and libswiftCore to support Objective-C and Swift code. 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:

auto &PlatformJD = ES.createBareJITDylib("stdlib");
PlatformJD.addGenerator(
::GetForTargetProcess(EPC)));
ExitOnErr(MachOPlatform::Create(ES, ObjLayer, EPC, PlatformJD,
"/path/to/orc/runtime")));
void setPlatform(std::unique_ptr< Platform > P)
Set the Platform for this ExecutionSession.
Definition Core.h:1412
LLVM_ABI JITDylib & createBareJITDylib(std::string Name)
Add a new bare JITDylib to this ExecutionSession.
Definition Core.cpp:1665
GeneratorT & addGenerator(std::unique_ptr< GeneratorT > DefGenerator)
Adds a definition generator to this JITDylib and returns a referenece to it.
Definition Core.h:1865
static Expected< std::unique_ptr< MachOPlatform > > Create(ObjectLinkingLayer &ObjLinkingLayer, JITDylib &PlatformJD, std::unique_ptr< DefinitionGenerator > OrcRuntime, HeaderOptions PlatformJDOpts={}, MachOHeaderMUBuilder BuildMachOHeaderMU=buildSimpleMachOHeaderMU, std::optional< SymbolAliasMap > RuntimeAliases=std::nullopt)
Try to create a MachOPlatform instance, adding the ORC runtime to the given JITDylib.

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, MachOPlatform will add the set of aliases returned by the standardPlatformAliases function. This includes both required aliases (e.g. __cxa_atexit -> __orc_rt_macho_cxa_atexit for static destructor support), and optional aliases that provide JIT versions of common functions (e.g. dlopen -> __orc_rt_macho_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 280 of file MachOPlatform.cpp.

References llvm::orc::absoluteSymbols(), llvm::JITSymbolFlags::Exported, llvm::inconvertibleErrorCode(), llvm::make_error(), P, standardPlatformAliases(), llvm::Error::success(), and llvm::orc::symbolAliases().

Referenced by Create(), and llvm::orc::ExecutorNativePlatform::operator()().

◆ getExecutionSession()

ExecutionSession & llvm::orc::MachOPlatform::getExecutionSession ( ) const
inline

Definition at line 157 of file MachOPlatform.h.

Referenced by llvm::orc::createHeaderBlock().

◆ getMachOHeaderStartSymbol()

NonOwningSymbolStringPtr llvm::orc::MachOPlatform::getMachOHeaderStartSymbol ( ) const
inline

Definition at line 160 of file MachOPlatform.h.

◆ getObjectLinkingLayer()

ObjectLinkingLayer & llvm::orc::MachOPlatform::getObjectLinkingLayer ( ) const
inline

Definition at line 158 of file MachOPlatform.h.

◆ notifyAdding()

◆ notifyRemoving()

Error llvm::orc::MachOPlatform::notifyRemoving ( ResourceTracker & RT)
overridevirtual

This method will be called under the ExecutionSession lock when a ResourceTracker is removed.

Implements llvm::orc::Platform.

Definition at line 382 of file MachOPlatform.cpp.

References llvm_unreachable.

◆ requiredCXXAliases()

ArrayRef< std::pair< const char *, const char * > > llvm::orc::MachOPlatform::requiredCXXAliases ( )
static

Returns the array of required CXX aliases.

Definition at line 405 of file MachOPlatform.cpp.

Referenced by standardPlatformAliases().

◆ setupJITDylib() [1/2]

Error llvm::orc::MachOPlatform::setupJITDylib ( JITDylib & JD)
overridevirtual

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 342 of file MachOPlatform.cpp.

References setupJITDylib().

Referenced by setupJITDylib().

◆ setupJITDylib() [2/2]

Error llvm::orc::MachOPlatform::setupJITDylib ( JITDylib & JD,
HeaderOptions Opts )

Install any platform-specific symbols (e.g.

__dso_handle) and create a mach-o header based on the given options.

Definition at line 346 of file MachOPlatform.cpp.

References llvm::orc::JITDylib::define().

◆ standardLazyCompilationAliases()

ArrayRef< std::pair< const char *, const char * > > llvm::orc::MachOPlatform::standardLazyCompilationAliases ( )
static

Returns a list of aliases required to enable lazy compilation via the ORC runtime.

Definition at line 429 of file MachOPlatform.cpp.

Referenced by standardPlatformAliases().

◆ standardPlatformAliases()

SymbolAliasMap llvm::orc::MachOPlatform::standardPlatformAliases ( ExecutionSession & ES)
static

Returns an AliasMap containing the default aliases for the MachOPlatform.

This can be modified by clients when constructing the platform to add or remove aliases.

Definition at line 396 of file MachOPlatform.cpp.

References llvm::orc::addAliases(), requiredCXXAliases(), standardLazyCompilationAliases(), and standardRuntimeUtilityAliases().

Referenced by Create().

◆ standardRuntimeUtilityAliases()

ArrayRef< std::pair< const char *, const char * > > llvm::orc::MachOPlatform::standardRuntimeUtilityAliases ( )
static

Returns the array of standard runtime utility aliases for MachO.

Definition at line 413 of file MachOPlatform.cpp.

Referenced by standardPlatformAliases().

◆ teardownJITDylib()

Error llvm::orc::MachOPlatform::teardownJITDylib ( JITDylib & JD)
overridevirtual

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 353 of file MachOPlatform.cpp.

References assert(), I, and llvm::Error::success().


The documentation for this class was generated from the following files: