LLVM
15.0.0git
|
A ExecutorProcessControl implementation targeting the current process. More...
#include "llvm/ExecutionEngine/Orc/ExecutorProcessControl.h"
Public Member Functions | |
SelfExecutorProcessControl (std::shared_ptr< SymbolStringPool > SSP, std::unique_ptr< TaskDispatcher > D, Triple TargetTriple, unsigned PageSize, std::unique_ptr< jitlink::JITLinkMemoryManager > MemMgr) | |
Expected< tpctypes::DylibHandle > | loadDylib (const char *DylibPath) override |
Load the dynamic library at the given path and return a handle to it. More... | |
Expected< std::vector< tpctypes::LookupResult > > | lookupSymbols (ArrayRef< LookupRequest > Request) override |
Search for symbols in the target process. More... | |
Expected< int32_t > | runAsMain (ExecutorAddr MainFnAddr, ArrayRef< std::string > Args) override |
Run function with a main-like signature. More... | |
void | callWrapperAsync (ExecutorAddr WrapperFnAddr, IncomingWFRHandler OnComplete, ArrayRef< char > ArgBuffer) override |
Run a wrapper function in the executor. More... | |
Error | disconnect () override |
Disconnect from the target process. More... | |
![]() | |
ExecutorProcessControl (std::shared_ptr< SymbolStringPool > SSP, std::unique_ptr< TaskDispatcher > D) | |
virtual | ~ExecutorProcessControl () |
ExecutionSession & | getExecutionSession () |
Return the ExecutionSession associated with this instance. More... | |
SymbolStringPtr | intern (StringRef SymName) |
Intern a symbol name in the SymbolStringPool. More... | |
std::shared_ptr< SymbolStringPool > | getSymbolStringPool () const |
Return a shared pointer to the SymbolStringPool for this instance. More... | |
TaskDispatcher & | getDispatcher () |
const Triple & | getTargetTriple () const |
Return the Triple for the target process. More... | |
unsigned | getPageSize () const |
Get the page size for the target process. More... | |
const JITDispatchInfo & | getJITDispatchInfo () const |
Get the JIT dispatch function and context address for the executor. More... | |
MemoryAccess & | getMemoryAccess () const |
Return a MemoryAccess object for the target process. More... | |
jitlink::JITLinkMemoryManager & | getMemMgr () const |
Return a JITLinkMemoryManager for the target process. More... | |
const StringMap< ExecutorAddr > & | getBootstrapSymbolsMap () const |
Returns the bootstrap symbol map. More... | |
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. More... | |
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. More... | |
template<typename FnT > | |
void | callWrapperAsync (ExecutorAddr WrapperFnAddr, FnT &&OnComplete, ArrayRef< char > ArgBuffer) |
Run a wrapper function in the executor. More... | |
shared::WrapperFunctionResult | callWrapper (ExecutorAddr WrapperFnAddr, ArrayRef< char > ArgBuffer) |
Run a wrapper function in the executor. More... | |
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. More... | |
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. More... | |
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. More... | |
Static Public Member Functions | |
static Expected< std::unique_ptr< SelfExecutorProcessControl > > | Create (std::shared_ptr< SymbolStringPool > SSP=nullptr, std::unique_ptr< TaskDispatcher > D=nullptr, std::unique_ptr< jitlink::JITLinkMemoryManager > MemMgr=nullptr) |
Create a SelfExecutorProcessControl with the given symbol string pool and memory manager. More... | |
Additional Inherited Members | |
![]() | |
std::shared_ptr< SymbolStringPool > | SSP |
std::unique_ptr< TaskDispatcher > | D |
ExecutionSession * | ES = nullptr |
Triple | TargetTriple |
unsigned | PageSize = 0 |
JITDispatchInfo | JDI |
MemoryAccess * | MemAccess = nullptr |
jitlink::JITLinkMemoryManager * | MemMgr = nullptr |
StringMap< ExecutorAddr > | BootstrapSymbols |
A ExecutorProcessControl implementation targeting the current process.
Definition at line 410 of file ExecutorProcessControl.h.
llvm::orc::SelfExecutorProcessControl::SelfExecutorProcessControl | ( | std::shared_ptr< SymbolStringPool > | SSP, |
std::unique_ptr< TaskDispatcher > | D, | ||
Triple | TargetTriple, | ||
unsigned | PageSize, | ||
std::unique_ptr< jitlink::JITLinkMemoryManager > | MemMgr | ||
) |
Definition at line 26 of file ExecutorProcessControl.cpp.
References llvm::orc::ExecutorAddr::fromPtr(), llvm::sys::Process::getPageSizeEstimate(), llvm::Triple::isOSBinFormatMachO(), llvm::orc::ExecutorProcessControl::JDI, llvm::orc::ExecutorProcessControl::MemAccess, llvm::orc::ExecutorProcessControl::MemMgr, move, llvm::orc::ExecutorProcessControl::PageSize, and llvm::orc::ExecutorProcessControl::TargetTriple.
|
overridevirtual |
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:
{.cpp}
Implements llvm::orc::ExecutorProcessControl.
Definition at line 124 of file ExecutorProcessControl.cpp.
References llvm::Data, llvm::ArrayRef< T >::data(), llvm::ArrayRef< T >::size(), and llvm::orc::ExecutorAddr::toPtr().
|
static |
Create a SelfExecutorProcessControl with the given symbol string pool and memory manager.
If no symbol string pool is given then one will be created. If no memory manager is given a jitlink::InProcessMemoryManager will be created and used by default.
Definition at line 48 of file ExecutorProcessControl.cpp.
References llvm::orc::ExecutorProcessControl::D, llvm::sys::Process::getPageSize(), llvm::sys::getProcessTriple(), llvm::orc::ExecutorProcessControl::MemMgr, move, llvm::orc::ExecutorProcessControl::PageSize, and llvm::orc::ExecutorProcessControl::SSP.
Referenced by llvm::orc::LLJITBuilderState::prepareForConstruction().
|
overridevirtual |
Disconnect from the target process.
This should be called after the JIT session is shut down.
Implements llvm::orc::ExecutorProcessControl.
Definition at line 133 of file ExecutorProcessControl.cpp.
References llvm::orc::ExecutorProcessControl::D, and llvm::Error::success().
|
overridevirtual |
Load the dynamic library at the given path and return a handle to it.
If LibraryPath is null this function will return the global handle for the target process.
Implements llvm::orc::ExecutorProcessControl.
Definition at line 76 of file ExecutorProcessControl.cpp.
References llvm::sys::DynamicLibrary::getPermanentLibrary(), llvm::inconvertibleErrorCode(), move, and llvm::pointerToJITTargetAddress().
|
overridevirtual |
Search for symbols in the target process.
The result of the lookup is a 2-dimentional array of target addresses that correspond to the lookup order. If a required symbol is not found then this method will return an error. If a weakly referenced symbol is not found then it be assigned a '0' value.
Implements llvm::orc::ExecutorProcessControl.
Definition at line 87 of file ExecutorProcessControl.cpp.
References Addr, llvm::any_of(), assert(), DL, move, llvm::pointerToJITTargetAddress(), llvm::orc::RequiredSymbol, and llvm::orc::ExecutorProcessControl::SSP.
|
overridevirtual |
Run function with a main-like signature.
Implements llvm::orc::ExecutorProcessControl.
Definition at line 118 of file ExecutorProcessControl.cpp.
References llvm::AMDGPU::HSAMD::Kernel::Key::Args, int, llvm::orc::runAsMain(), and llvm::orc::ExecutorAddr::toPtr().