Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

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

  1. //===--------------- SimpleExecutorDylibManager.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 dynamic library management class. Allows dynamic libraries to be
  10. // loaded and searched.
  11. //
  12. // FIXME: The functionality in this file should be moved to the ORC runtime.
  13. //
  14. //===----------------------------------------------------------------------===//
  15.  
  16. #ifndef LLVM_EXECUTIONENGINE_ORC_TARGETPROCESS_SIMPLEEXECUTORDYLIBMANAGER_H
  17. #define LLVM_EXECUTIONENGINE_ORC_TARGETPROCESS_SIMPLEEXECUTORDYLIBMANAGER_H
  18.  
  19. #include "llvm/ADT/DenseSet.h"
  20. #include "llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h"
  21. #include "llvm/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.h"
  22. #include "llvm/ExecutionEngine/Orc/Shared/TargetProcessControlTypes.h"
  23. #include "llvm/ExecutionEngine/Orc/Shared/WrapperFunctionUtils.h"
  24. #include "llvm/ExecutionEngine/Orc/TargetProcess/ExecutorBootstrapService.h"
  25. #include "llvm/Support/DynamicLibrary.h"
  26. #include "llvm/Support/Error.h"
  27.  
  28. #include <mutex>
  29.  
  30. namespace llvm {
  31. namespace orc {
  32. namespace rt_bootstrap {
  33.  
  34. /// Simple page-based allocator.
  35. class SimpleExecutorDylibManager : public ExecutorBootstrapService {
  36. public:
  37.   virtual ~SimpleExecutorDylibManager();
  38.  
  39.   Expected<tpctypes::DylibHandle> open(const std::string &Path, uint64_t Mode);
  40.   Expected<std::vector<ExecutorAddr>> lookup(tpctypes::DylibHandle H,
  41.                                              const RemoteSymbolLookupSet &L);
  42.  
  43.   Error shutdown() override;
  44.   void addBootstrapSymbols(StringMap<ExecutorAddr> &M) override;
  45.  
  46. private:
  47.   using DylibSet = DenseSet<void *>;
  48.  
  49.   static llvm::orc::shared::CWrapperFunctionResult
  50.   openWrapper(const char *ArgData, size_t ArgSize);
  51.  
  52.   static llvm::orc::shared::CWrapperFunctionResult
  53.   lookupWrapper(const char *ArgData, size_t ArgSize);
  54.  
  55.   std::mutex M;
  56.   DylibSet Dylibs;
  57. };
  58.  
  59. } // end namespace rt_bootstrap
  60. } // end namespace orc
  61. } // end namespace llvm
  62.  
  63. #endif // LLVM_EXECUTIONENGINE_ORC_TARGETPROCESS_SIMPLEEXECUTORDYLIBMANAGER_H
  64.