LLVM  14.0.0git
Public Member Functions | Static Public Member Functions | List of all members
llvm::orc::SelfExecutorProcessControl Class Reference

A ExecutorProcessControl implementation targeting the current process. More...

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

Inheritance diagram for llvm::orc::SelfExecutorProcessControl:
Inheritance graph
[legend]
Collaboration diagram for llvm::orc::SelfExecutorProcessControl:
Collaboration graph
[legend]

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::DylibHandleloadDylib (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...
 
- Public Member Functions inherited from llvm::orc::ExecutorProcessControl
 ExecutorProcessControl (std::shared_ptr< SymbolStringPool > SSP, std::unique_ptr< TaskDispatcher > D)
 
virtual ~ExecutorProcessControl ()
 
ExecutionSessiongetExecutionSession ()
 Return the ExecutionSession associated with this instance. More...
 
SymbolStringPtr intern (StringRef SymName)
 Intern a symbol name in the SymbolStringPool. More...
 
std::shared_ptr< SymbolStringPoolgetSymbolStringPool () const
 Return a shared pointer to the SymbolStringPool for this instance. More...
 
TaskDispatchergetDispatcher ()
 
const TriplegetTargetTriple () const
 Return the Triple for the target process. More...
 
unsigned getPageSize () const
 Get the page size for the target process. More...
 
const JITDispatchInfogetJITDispatchInfo () const
 Get the JIT dispatch function and context address for the executor. More...
 
MemoryAccessgetMemoryAccess () const
 Return a MemoryAccess object for the target process. More...
 
jitlink::JITLinkMemoryManagergetMemMgr () 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

- Protected Attributes inherited from llvm::orc::ExecutorProcessControl
std::shared_ptr< SymbolStringPoolSSP
 
std::unique_ptr< TaskDispatcherD
 
ExecutionSessionES = nullptr
 
Triple TargetTriple
 
unsigned PageSize = 0
 
JITDispatchInfo JDI
 
MemoryAccessMemAccess = nullptr
 
jitlink::JITLinkMemoryManagerMemMgr = nullptr
 
StringMap< ExecutorAddrBootstrapSymbols
 

Detailed Description

A ExecutorProcessControl implementation targeting the current process.

Definition at line 410 of file ExecutorProcessControl.h.

Constructor & Destructor Documentation

◆ SelfExecutorProcessControl()

llvm::orc::SelfExecutorProcessControl::SelfExecutorProcessControl ( std::shared_ptr< SymbolStringPool SSP,
std::unique_ptr< TaskDispatcher D,
Triple  TargetTriple,
unsigned  PageSize,
std::unique_ptr< jitlink::JITLinkMemoryManager MemMgr 
)

Member Function Documentation

◆ callWrapperAsync()

void llvm::orc::SelfExecutorProcessControl::callWrapperAsync ( ExecutorAddr  WrapperFnAddr,
IncomingWFRHandler  OnComplete,
ArrayRef< char >  ArgBuffer 
)
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:

CWrapperFunctionResult fn(uint8_t *Data, uint64_t Size);

{.cpp}

Implements llvm::orc::ExecutorProcessControl.

Definition at line 124 of file ExecutorProcessControl.cpp.

References llvm::Data, llvm::ArrayRef< T >::data(), llvm::Check::Size, llvm::ArrayRef< T >::size(), and llvm::orc::ExecutorAddr::toPtr().

◆ Create()

Expected< std::unique_ptr< SelfExecutorProcessControl > > llvm::orc::SelfExecutorProcessControl::Create ( std::shared_ptr< SymbolStringPool SSP = nullptr,
std::unique_ptr< TaskDispatcher D = nullptr,
std::unique_ptr< jitlink::JITLinkMemoryManager MemMgr = nullptr 
)
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().

◆ disconnect()

Error llvm::orc::SelfExecutorProcessControl::disconnect ( )
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().

◆ loadDylib()

Expected< tpctypes::DylibHandle > llvm::orc::SelfExecutorProcessControl::loadDylib ( const char *  DylibPath)
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().

◆ lookupSymbols()

Expected< std::vector< tpctypes::LookupResult > > llvm::orc::SelfExecutorProcessControl::lookupSymbols ( ArrayRef< LookupRequest Request)
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.

◆ runAsMain()

Expected< int32_t > llvm::orc::SelfExecutorProcessControl::runAsMain ( ExecutorAddr  MainFnAddr,
ArrayRef< std::string >  Args 
)
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().


The documentation for this class was generated from the following files:
llvm::Check::Size
@ Size
Definition: FileCheck.h:73
uint64_t