//===----------- ExecutorSharedMemoryMapperService.h ------------*- 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 // //===----------------------------------------------------------------------===// #ifndef LLVM_EXECUTIONENGINE_ORC_TARGETPROCESS_EXECUTORSHAREDMEMORYMAPPERSERVICE_H #define LLVM_EXECUTIONENGINE_ORC_TARGETPROCESS_EXECUTORSHAREDMEMORYMAPPERSERVICE_H #include "llvm/ADT/DenseMap.h" #include "llvm/ExecutionEngine/Orc/Shared/TargetProcessControlTypes.h" #include "llvm/ExecutionEngine/Orc/TargetProcess/ExecutorBootstrapService.h" #include #include #if defined(_WIN32) #include #endif namespace llvm { namespace orc { namespace rt_bootstrap { class ExecutorSharedMemoryMapperService final : public ExecutorBootstrapService { public: ~ExecutorSharedMemoryMapperService(){}; Expected> reserve(uint64_t Size); Expected initialize(ExecutorAddr Reservation, tpctypes::SharedMemoryFinalizeRequest &FR); Error deinitialize(const std::vector &Bases); Error release(const std::vector &Bases); Error shutdown() override; void addBootstrapSymbols(StringMap &M) override; private: struct Allocation { std::vector DeinitializationActions; }; using AllocationMap = DenseMap; struct Reservation { size_t Size; std::vector Allocations; #if defined(_WIN32) HANDLE SharedMemoryFile; #endif }; using ReservationMap = DenseMap; static llvm::orc::shared::CWrapperFunctionResult reserveWrapper(const char *ArgData, size_t ArgSize); static llvm::orc::shared::CWrapperFunctionResult initializeWrapper(const char *ArgData, size_t ArgSize); static llvm::orc::shared::CWrapperFunctionResult deinitializeWrapper(const char *ArgData, size_t ArgSize); static llvm::orc::shared::CWrapperFunctionResult releaseWrapper(const char *ArgData, size_t ArgSize); #if (defined(LLVM_ON_UNIX) && !defined(__ANDROID__)) || defined(_WIN32) std::atomic SharedMemoryCount{0}; #endif std::mutex Mutex; ReservationMap Reservations; AllocationMap Allocations; }; } // namespace rt_bootstrap } // namespace orc } // namespace llvm #endif // LLVM_EXECUTIONENGINE_ORC_TARGETPROCESS_EXECUTORSHAREDMEMORYMAPPERSERVICE_H