//===--- EPCIndirectionUtils.h - EPC based indirection utils ----*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // Indirection utilities (stubs, trampolines, lazy call-throughs) that use the // ExecutorProcessControl API to interact with the executor process. // //===----------------------------------------------------------------------===// #ifndef LLVM_EXECUTIONENGINE_ORC_EPCINDIRECTIONUTILS_H #define LLVM_EXECUTIONENGINE_ORC_EPCINDIRECTIONUTILS_H #include "llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h" #include "llvm/ExecutionEngine/Orc/IndirectionUtils.h" #include "llvm/ExecutionEngine/Orc/LazyReexports.h" #include <mutex> namespace llvm { namespace orc { class ExecutorProcessControl; /// Provides ExecutorProcessControl based indirect stubs, trampoline pool and /// lazy call through manager. class EPCIndirectionUtils { … }; /// This will call writeResolver on the given EPCIndirectionUtils instance /// to set up re-entry via a function that will directly return the trampoline /// landing address. /// /// The EPCIndirectionUtils' LazyCallThroughManager must have been previously /// created via EPCIndirectionUtils::createLazyCallThroughManager. /// /// The EPCIndirectionUtils' writeResolver method must not have been previously /// called. /// /// This function is experimental and likely subject to revision. Error setUpInProcessLCTMReentryViaEPCIU(EPCIndirectionUtils &EPCIU); namespace detail { template <typename ORCABI> class ABISupportImpl : public EPCIndirectionUtils::ABISupport { … }; } // end namespace detail template <typename ORCABI> std::unique_ptr<EPCIndirectionUtils> EPCIndirectionUtils::CreateWithABI(ExecutorProcessControl &EPC) { … } } // end namespace orc } // end namespace llvm #endif // LLVM_EXECUTIONENGINE_ORC_EPCINDIRECTIONUTILS_H