Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 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