#include "llvm/ExecutionEngine/Orc/EPCIndirectionUtils.h"
#include "llvm/ExecutionEngine/Orc/ExecutorProcessControl.h"
#include "llvm/Support/MathExtras.h"
#include <future>
usingnamespacellvm;
usingnamespacellvm::orc;
namespace llvm {
namespace orc {
class EPCIndirectionUtilsAccess { … };
}
}
namespace {
class EPCTrampolinePool : public TrampolinePool { … };
class EPCIndirectStubsManager : public IndirectStubsManager,
private EPCIndirectionUtilsAccess { … };
EPCTrampolinePool::EPCTrampolinePool(EPCIndirectionUtils &EPCIU)
: … { … }
Error EPCTrampolinePool::deallocatePool() { … }
Error EPCTrampolinePool::grow() { … }
Error EPCIndirectStubsManager::createStub(StringRef StubName,
ExecutorAddr StubAddr,
JITSymbolFlags StubFlags) { … }
Error EPCIndirectStubsManager::createStubs(const StubInitsMap &StubInits) { … }
ExecutorSymbolDef EPCIndirectStubsManager::findStub(StringRef Name,
bool ExportedStubsOnly) { … }
ExecutorSymbolDef EPCIndirectStubsManager::findPointer(StringRef Name) { … }
Error EPCIndirectStubsManager::updatePointer(StringRef Name,
ExecutorAddr NewAddr) { … }
}
namespace llvm {
namespace orc {
EPCIndirectionUtils::ABISupport::~ABISupport() = default;
Expected<std::unique_ptr<EPCIndirectionUtils>>
EPCIndirectionUtils::Create(ExecutorProcessControl &EPC) { … }
Error EPCIndirectionUtils::cleanup() { … }
Expected<ExecutorAddr>
EPCIndirectionUtils::writeResolverBlock(ExecutorAddr ReentryFnAddr,
ExecutorAddr ReentryCtxAddr) { … }
std::unique_ptr<IndirectStubsManager>
EPCIndirectionUtils::createIndirectStubsManager() { … }
TrampolinePool &EPCIndirectionUtils::getTrampolinePool() { … }
LazyCallThroughManager &EPCIndirectionUtils::createLazyCallThroughManager(
ExecutionSession &ES, ExecutorAddr ErrorHandlerAddr) { … }
EPCIndirectionUtils::EPCIndirectionUtils(ExecutorProcessControl &EPC,
std::unique_ptr<ABISupport> ABI)
: … { … }
Expected<EPCIndirectionUtils::IndirectStubInfoVector>
EPCIndirectionUtils::getIndirectStubs(unsigned NumStubs) { … }
static JITTargetAddress reentry(JITTargetAddress LCTMAddr,
JITTargetAddress TrampolineAddr) { … }
Error setUpInProcessLCTMReentryViaEPCIU(EPCIndirectionUtils &EPCIU) { … }
}
}