Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===---------------- SimpleExecutorMemoryManager.h -------------*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. //
  9. // A simple allocator class suitable for basic remote-JIT use.
  10. //
  11. // FIXME: The functionality in this file should be moved to the ORC runtime.
  12. //
  13. //===----------------------------------------------------------------------===//
  14.  
  15. #ifndef LLVM_EXECUTIONENGINE_ORC_TARGETPROCESS_SIMPLEEXECUTORMEMORYMANAGER_H
  16. #define LLVM_EXECUTIONENGINE_ORC_TARGETPROCESS_SIMPLEEXECUTORMEMORYMANAGER_H
  17.  
  18. #include "llvm/ADT/DenseMap.h"
  19. #include "llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h"
  20. #include "llvm/ExecutionEngine/Orc/Shared/TargetProcessControlTypes.h"
  21. #include "llvm/ExecutionEngine/Orc/Shared/WrapperFunctionUtils.h"
  22. #include "llvm/ExecutionEngine/Orc/TargetProcess/ExecutorBootstrapService.h"
  23. #include "llvm/Support/Error.h"
  24.  
  25. #include <mutex>
  26.  
  27. namespace llvm {
  28. namespace orc {
  29. namespace rt_bootstrap {
  30.  
  31. /// Simple page-based allocator.
  32. class SimpleExecutorMemoryManager : public ExecutorBootstrapService {
  33. public:
  34.   virtual ~SimpleExecutorMemoryManager();
  35.  
  36.   Expected<ExecutorAddr> allocate(uint64_t Size);
  37.   Error finalize(tpctypes::FinalizeRequest &FR);
  38.   Error deallocate(const std::vector<ExecutorAddr> &Bases);
  39.  
  40.   Error shutdown() override;
  41.   void addBootstrapSymbols(StringMap<ExecutorAddr> &M) override;
  42.  
  43. private:
  44.   struct Allocation {
  45.     size_t Size = 0;
  46.     std::vector<shared::WrapperFunctionCall> DeallocationActions;
  47.   };
  48.  
  49.   using AllocationsMap = DenseMap<void *, Allocation>;
  50.  
  51.   Error deallocateImpl(void *Base, Allocation &A);
  52.  
  53.   static llvm::orc::shared::CWrapperFunctionResult
  54.   reserveWrapper(const char *ArgData, size_t ArgSize);
  55.  
  56.   static llvm::orc::shared::CWrapperFunctionResult
  57.   finalizeWrapper(const char *ArgData, size_t ArgSize);
  58.  
  59.   static llvm::orc::shared::CWrapperFunctionResult
  60.   deallocateWrapper(const char *ArgData, size_t ArgSize);
  61.  
  62.   std::mutex M;
  63.   AllocationsMap Allocations;
  64. };
  65.  
  66. } // end namespace rt_bootstrap
  67. } // end namespace orc
  68. } // end namespace llvm
  69.  
  70. #endif // LLVM_EXECUTIONENGINE_ORC_TARGETPROCESS_SIMPLEEXECUTORMEMORYMANAGER_H
  71.