LLVM 20.0.0git
Classes | Public Member Functions | Protected Attributes | Friends | List of all members
llvm::orc::ExecutorProcessControl Class Referenceabstract

ExecutorProcessControl supports interaction with a JIT target process. More...

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

Inheritance diagram for llvm::orc::ExecutorProcessControl:
Inheritance graph
[legend]

Classes

class  IncomingWFRHandler
 A handler or incoming WrapperFunctionResults – either return values from callWrapper* calls, or incoming JIT-dispatch requests. More...
 
struct  JITDispatchInfo
 Contains the address of the dispatch function and context that the ORC runtime can use to call functions in the JIT. More...
 
class  MemoryAccess
 APIs for manipulating memory in the target process. More...
 
class  RunAsTask
 Constructs an IncomingWFRHandler from a function object by creating a new function object that dispatches the original using a TaskDispatcher, wrapping the original as a GenericNamedTask. More...
 
class  RunInPlace
 Constructs an IncomingWFRHandler from a function object that is callable as void(shared::WrapperFunctionResult). More...
 

Public Member Functions

 ExecutorProcessControl (std::shared_ptr< SymbolStringPool > SSP, std::unique_ptr< TaskDispatcher > D)
 
virtual ~ExecutorProcessControl ()
 
ExecutionSessiongetExecutionSession ()
 Return the ExecutionSession associated with this instance.
 
SymbolStringPtr intern (StringRef SymName)
 Intern a symbol name in the SymbolStringPool.
 
std::shared_ptr< SymbolStringPoolgetSymbolStringPool () const
 Return a shared pointer to the SymbolStringPool for this instance.
 
TaskDispatchergetDispatcher ()
 
const TriplegetTargetTriple () const
 Return the Triple for the target process.
 
unsigned getPageSize () const
 Get the page size for the target process.
 
const JITDispatchInfogetJITDispatchInfo () const
 Get the JIT dispatch function and context address for the executor.
 
MemoryAccessgetMemoryAccess () const
 Return a MemoryAccess object for the target process.
 
jitlink::JITLinkMemoryManagergetMemMgr () const
 Return a JITLinkMemoryManager for the target process.
 
DylibManagergetDylibMgr () const
 Return the DylibManager for the target process.
 
const StringMap< std::vector< char > > & getBootstrapMap () const
 Returns the bootstrap map.
 
template<typename T , typename SPSTagT >
Error getBootstrapMapValue (StringRef Key, std::optional< T > &Val) const
 Look up and SPS-deserialize a bootstrap map value.
 
const StringMap< ExecutorAddr > & getBootstrapSymbolsMap () const
 Returns the bootstrap symbol map.
 
Error getBootstrapSymbols (ArrayRef< std::pair< ExecutorAddr &, StringRef > > Pairs) const
 For each (ExecutorAddr&, StringRef) pair, looks up the string in the bootstrap symbols map and writes its address to the ExecutorAddr if found.
 
virtual Expected< int32_t > runAsMain (ExecutorAddr MainFnAddr, ArrayRef< std::string > Args)=0
 Run function with a main-like signature.
 
virtual Expected< int32_t > runAsVoidFunction (ExecutorAddr VoidFnAddr)=0
 Run function with a int (*)(void) signature.
 
virtual Expected< int32_t > runAsIntFunction (ExecutorAddr IntFnAddr, int Arg)=0
 Run function with a int (*)(int) signature.
 
virtual void callWrapperAsync (ExecutorAddr WrapperFnAddr, IncomingWFRHandler OnComplete, ArrayRef< char > ArgBuffer)=0
 Run a wrapper function in the executor.
 
template<typename RunPolicyT , typename FnT >
void callWrapperAsync (RunPolicyT &&Runner, ExecutorAddr WrapperFnAddr, FnT &&OnComplete, ArrayRef< char > ArgBuffer)
 Run a wrapper function in the executor using the given Runner to dispatch OnComplete when the result is ready.
 
template<typename FnT >
void callWrapperAsync (ExecutorAddr WrapperFnAddr, FnT &&OnComplete, ArrayRef< char > ArgBuffer)
 Run a wrapper function in the executor.
 
shared::WrapperFunctionResult callWrapper (ExecutorAddr WrapperFnAddr, ArrayRef< char > ArgBuffer)
 Run a wrapper function in the executor.
 
template<typename SPSSignature , typename RunPolicyT , typename SendResultT , typename... ArgTs>
void callSPSWrapperAsync (RunPolicyT &&Runner, ExecutorAddr WrapperFnAddr, SendResultT &&SendResult, const ArgTs &...Args)
 Run a wrapper function using SPS to serialize the arguments and deserialize the results.
 
template<typename SPSSignature , typename SendResultT , typename... ArgTs>
void callSPSWrapperAsync (ExecutorAddr WrapperFnAddr, SendResultT &&SendResult, const ArgTs &...Args)
 Run a wrapper function using SPS to serialize the arguments and deserialize the results.
 
template<typename SPSSignature , typename... WrapperCallArgTs>
Error callSPSWrapper (ExecutorAddr WrapperFnAddr, WrapperCallArgTs &&...WrapperCallArgs)
 Run a wrapper function using SPS to serialize the arguments and deserialize the results.
 
virtual Error disconnect ()=0
 Disconnect from the target process.
 

Protected Attributes

std::shared_ptr< SymbolStringPoolSSP
 
std::unique_ptr< TaskDispatcherD
 
ExecutionSessionES = nullptr
 
Triple TargetTriple
 
unsigned PageSize = 0
 
JITDispatchInfo JDI
 
MemoryAccessMemAccess = nullptr
 
jitlink::JITLinkMemoryManagerMemMgr = nullptr
 
DylibManagerDylibMgr = nullptr
 
StringMap< std::vector< char > > BootstrapMap
 
StringMap< ExecutorAddrBootstrapSymbols
 

Friends

class ExecutionSession
 

Detailed Description

ExecutorProcessControl supports interaction with a JIT target process.

Definition at line 38 of file ExecutorProcessControl.h.

Constructor & Destructor Documentation

◆ ExecutorProcessControl()

llvm::orc::ExecutorProcessControl::ExecutorProcessControl ( std::shared_ptr< SymbolStringPool SSP,
std::unique_ptr< TaskDispatcher D 
)
inline

Definition at line 182 of file ExecutorProcessControl.h.

◆ ~ExecutorProcessControl()

llvm::orc::ExecutorProcessControl::~ExecutorProcessControl ( )
virtualdefault

Member Function Documentation

◆ callSPSWrapper()

template<typename SPSSignature , typename... WrapperCallArgTs>
Error llvm::orc::ExecutorProcessControl::callSPSWrapper ( ExecutorAddr  WrapperFnAddr,
WrapperCallArgTs &&...  WrapperCallArgs 
)
inline

Run a wrapper function using SPS to serialize the arguments and deserialize the results.

If SPSSignature is a non-void function signature then the second argument (the first in the Args list) should be a reference to a return value.

Definition at line 371 of file ExecutorProcessControl.h.

References callWrapper().

Referenced by llvm::orc::EPCGenericRTDyldMemoryManager::finalizeMemory(), llvm::orc::VTuneSupportPlugin::notifyRemovingResources(), llvm::orc::PerfSupportPlugin::PerfSupportPlugin(), llvm::orc::EPCGenericRTDyldMemoryManager::reserveAllocationSpace(), llvm::orc::EPCGenericRTDyldMemoryManager::~EPCGenericRTDyldMemoryManager(), and llvm::orc::PerfSupportPlugin::~PerfSupportPlugin().

◆ callSPSWrapperAsync() [1/2]

template<typename SPSSignature , typename SendResultT , typename... ArgTs>
void llvm::orc::ExecutorProcessControl::callSPSWrapperAsync ( ExecutorAddr  WrapperFnAddr,
SendResultT &&  SendResult,
const ArgTs &...  Args 
)
inline

Run a wrapper function using SPS to serialize the arguments and deserialize the results.

Definition at line 358 of file ExecutorProcessControl.h.

References D.

◆ callSPSWrapperAsync() [2/2]

template<typename SPSSignature , typename RunPolicyT , typename SendResultT , typename... ArgTs>
void llvm::orc::ExecutorProcessControl::callSPSWrapperAsync ( RunPolicyT &&  Runner,
ExecutorAddr  WrapperFnAddr,
SendResultT &&  SendResult,
const ArgTs &...  Args 
)
inline

◆ callWrapper()

shared::WrapperFunctionResult llvm::orc::ExecutorProcessControl::callWrapper ( ExecutorAddr  WrapperFnAddr,
ArrayRef< char ArgBuffer 
)
inline

Run a wrapper function in the executor.

The wrapper function should be callable as:

CWrapperFunctionResult fn(uint8_t *Data, uint64_t Size);
uint64_t Size

{.cpp}

Definition at line 327 of file ExecutorProcessControl.h.

References callWrapperAsync().

Referenced by callSPSWrapper().

◆ callWrapperAsync() [1/3]

template<typename FnT >
void llvm::orc::ExecutorProcessControl::callWrapperAsync ( ExecutorAddr  WrapperFnAddr,
FnT &&  OnComplete,
ArrayRef< char ArgBuffer 
)
inline

Run a wrapper function in the executor.

OnComplete will be dispatched as a GenericNamedTask using this instance's TaskDispatch object.

Definition at line 315 of file ExecutorProcessControl.h.

References callWrapperAsync(), and D.

◆ callWrapperAsync() [2/3]

virtual void llvm::orc::ExecutorProcessControl::callWrapperAsync ( ExecutorAddr  WrapperFnAddr,
IncomingWFRHandler  OnComplete,
ArrayRef< char ArgBuffer 
)
pure virtual

Run a wrapper function in the executor.

The given WFRHandler will be called on the result when it is returned.

The wrapper function should be callable as:

CWrapperFunctionResult fn(uint8_t *Data, uint64_t Size);

{.cpp}

Implemented in llvm::orc::UnsupportedExecutorProcessControl, llvm::orc::SelfExecutorProcessControl, and llvm::orc::SimpleRemoteEPC.

Referenced by callSPSWrapperAsync(), callWrapper(), and callWrapperAsync().

◆ callWrapperAsync() [3/3]

template<typename RunPolicyT , typename FnT >
void llvm::orc::ExecutorProcessControl::callWrapperAsync ( RunPolicyT &&  Runner,
ExecutorAddr  WrapperFnAddr,
FnT &&  OnComplete,
ArrayRef< char ArgBuffer 
)
inline

Run a wrapper function in the executor using the given Runner to dispatch OnComplete when the result is ready.

Definition at line 306 of file ExecutorProcessControl.h.

References callWrapperAsync().

◆ disconnect()

virtual Error llvm::orc::ExecutorProcessControl::disconnect ( )
pure virtual

Disconnect from the target process.

This should be called after the JIT session is shut down.

Implemented in llvm::orc::UnsupportedExecutorProcessControl, llvm::orc::SelfExecutorProcessControl, and llvm::orc::SimpleRemoteEPC.

◆ getBootstrapMap()

const StringMap< std::vector< char > > & llvm::orc::ExecutorProcessControl::getBootstrapMap ( ) const
inline

Returns the bootstrap map.

Definition at line 231 of file ExecutorProcessControl.h.

References BootstrapMap.

◆ getBootstrapMapValue()

template<typename T , typename SPSTagT >
Error llvm::orc::ExecutorProcessControl::getBootstrapMapValue ( StringRef  Key,
std::optional< T > &  Val 
) const
inline

◆ getBootstrapSymbols()

Error llvm::orc::ExecutorProcessControl::getBootstrapSymbols ( ArrayRef< std::pair< ExecutorAddr &, StringRef > >  Pairs) const
inline

For each (ExecutorAddr&, StringRef) pair, looks up the string in the bootstrap symbols map and writes its address to the ExecutorAddr if found.

If any symbol is not found then the function returns an error.

Definition at line 263 of file ExecutorProcessControl.h.

References BootstrapSymbols, I, llvm::inconvertibleErrorCode(), and llvm::Error::success().

Referenced by llvm::orc::EPCEHFrameRegistrar::Create(), llvm::orc::EPCGenericDylibManager::CreateWithDefaultBootstrapSymbols(), and llvm::orc::EPCGenericRTDyldMemoryManager::CreateWithDefaultBootstrapSymbols().

◆ getBootstrapSymbolsMap()

const StringMap< ExecutorAddr > & llvm::orc::ExecutorProcessControl::getBootstrapSymbolsMap ( ) const
inline

Returns the bootstrap symbol map.

Definition at line 256 of file ExecutorProcessControl.h.

References BootstrapSymbols.

◆ getDispatcher()

TaskDispatcher & llvm::orc::ExecutorProcessControl::getDispatcher ( )
inline

Definition at line 201 of file ExecutorProcessControl.h.

References D.

◆ getDylibMgr()

DylibManager & llvm::orc::ExecutorProcessControl::getDylibMgr ( ) const
inline

◆ getExecutionSession()

ExecutionSession & llvm::orc::ExecutorProcessControl::getExecutionSession ( )
inline

Return the ExecutionSession associated with this instance.

Not callable until the ExecutionSession has been associated.

Definition at line 190 of file ExecutorProcessControl.h.

References assert(), and ES.

Referenced by llvm::orc::PerfSupportPlugin::Create(), llvm::orc::VTuneSupportPlugin::Create(), and llvm::orc::PerfSupportPlugin::modifyPassConfig().

◆ getJITDispatchInfo()

const JITDispatchInfo & llvm::orc::ExecutorProcessControl::getJITDispatchInfo ( ) const
inline

Get the JIT dispatch function and context address for the executor.

Definition at line 210 of file ExecutorProcessControl.h.

References JDI.

◆ getMemMgr()

jitlink::JITLinkMemoryManager & llvm::orc::ExecutorProcessControl::getMemMgr ( ) const
inline

Return a JITLinkMemoryManager for the target process.

Definition at line 219 of file ExecutorProcessControl.h.

References assert(), and MemMgr.

◆ getMemoryAccess()

MemoryAccess & llvm::orc::ExecutorProcessControl::getMemoryAccess ( ) const
inline

Return a MemoryAccess object for the target process.

Definition at line 213 of file ExecutorProcessControl.h.

References assert(), and MemAccess.

Referenced by llvm::orc::JITLinkRedirectableSymbolManager::redirect().

◆ getPageSize()

unsigned llvm::orc::ExecutorProcessControl::getPageSize ( ) const
inline

◆ getSymbolStringPool()

std::shared_ptr< SymbolStringPool > llvm::orc::ExecutorProcessControl::getSymbolStringPool ( ) const
inline

Return a shared pointer to the SymbolStringPool for this instance.

Definition at line 199 of file ExecutorProcessControl.h.

References SSP.

◆ getTargetTriple()

const Triple & llvm::orc::ExecutorProcessControl::getTargetTriple ( ) const
inline

Return the Triple for the target process.

Definition at line 204 of file ExecutorProcessControl.h.

References TargetTriple.

Referenced by llvm::orc::EPCIndirectionUtils::Create(), and llvm::orc::PerfSupportPlugin::Create().

◆ intern()

SymbolStringPtr llvm::orc::ExecutorProcessControl::intern ( StringRef  SymName)
inline

Intern a symbol name in the SymbolStringPool.

Definition at line 196 of file ExecutorProcessControl.h.

References SSP.

◆ runAsIntFunction()

virtual Expected< int32_t > llvm::orc::ExecutorProcessControl::runAsIntFunction ( ExecutorAddr  IntFnAddr,
int  Arg 
)
pure virtual

◆ runAsMain()

virtual Expected< int32_t > llvm::orc::ExecutorProcessControl::runAsMain ( ExecutorAddr  MainFnAddr,
ArrayRef< std::string >  Args 
)
pure virtual

◆ runAsVoidFunction()

virtual Expected< int32_t > llvm::orc::ExecutorProcessControl::runAsVoidFunction ( ExecutorAddr  VoidFnAddr)
pure virtual

Friends And Related Function Documentation

◆ ExecutionSession

friend class ExecutionSession
friend

Definition at line 39 of file ExecutorProcessControl.h.

Member Data Documentation

◆ BootstrapMap

StringMap<std::vector<char> > llvm::orc::ExecutorProcessControl::BootstrapMap
protected

Definition at line 396 of file ExecutorProcessControl.h.

Referenced by getBootstrapMap(), and getBootstrapMapValue().

◆ BootstrapSymbols

StringMap<ExecutorAddr> llvm::orc::ExecutorProcessControl::BootstrapSymbols
protected

◆ D

std::unique_ptr<TaskDispatcher> llvm::orc::ExecutorProcessControl::D
protected

◆ DylibMgr

DylibManager* llvm::orc::ExecutorProcessControl::DylibMgr = nullptr
protected

◆ ES

ExecutionSession* llvm::orc::ExecutorProcessControl::ES = nullptr
protected

Definition at line 389 of file ExecutorProcessControl.h.

Referenced by getExecutionSession().

◆ JDI

JITDispatchInfo llvm::orc::ExecutorProcessControl::JDI
protected

◆ MemAccess

MemoryAccess* llvm::orc::ExecutorProcessControl::MemAccess = nullptr
protected

◆ MemMgr

jitlink::JITLinkMemoryManager* llvm::orc::ExecutorProcessControl::MemMgr = nullptr
protected

◆ PageSize

unsigned llvm::orc::ExecutorProcessControl::PageSize = 0
protected

◆ SSP

std::shared_ptr<SymbolStringPool> llvm::orc::ExecutorProcessControl::SSP
protected

◆ TargetTriple

Triple llvm::orc::ExecutorProcessControl::TargetTriple
protected

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