Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

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

  1. //===- EPCGenericDylibManager.h -- Generic EPC Dylib management -*- 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. // Implements dylib loading and searching by making calls to
  10. // ExecutorProcessControl::callWrapper.
  11. //
  12. // This simplifies the implementaton of new ExecutorProcessControl instances,
  13. // as this implementation will always work (at the cost of some performance
  14. // overhead for the calls).
  15. //
  16. //===----------------------------------------------------------------------===//
  17.  
  18. #ifndef LLVM_EXECUTIONENGINE_ORC_EPCGENERICDYLIBMANAGER_H
  19. #define LLVM_EXECUTIONENGINE_ORC_EPCGENERICDYLIBMANAGER_H
  20.  
  21. #include "llvm/ExecutionEngine/Orc/ExecutorProcessControl.h"
  22. #include "llvm/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.h"
  23.  
  24. namespace llvm {
  25. namespace orc {
  26.  
  27. class SymbolLookupSet;
  28.  
  29. class EPCGenericDylibManager {
  30. public:
  31.   /// Function addresses for memory access.
  32.   struct SymbolAddrs {
  33.     ExecutorAddr Instance;
  34.     ExecutorAddr Open;
  35.     ExecutorAddr Lookup;
  36.   };
  37.  
  38.   /// Create an EPCGenericMemoryAccess instance from a given set of
  39.   /// function addrs.
  40.   static Expected<EPCGenericDylibManager>
  41.   CreateWithDefaultBootstrapSymbols(ExecutorProcessControl &EPC);
  42.  
  43.   /// Create an EPCGenericMemoryAccess instance from a given set of
  44.   /// function addrs.
  45.   EPCGenericDylibManager(ExecutorProcessControl &EPC, SymbolAddrs SAs)
  46.       : EPC(EPC), SAs(SAs) {}
  47.  
  48.   /// Loads the dylib with the given name.
  49.   Expected<tpctypes::DylibHandle> open(StringRef Path, uint64_t Mode);
  50.  
  51.   /// Looks up symbols within the given dylib.
  52.   Expected<std::vector<ExecutorAddr>> lookup(tpctypes::DylibHandle H,
  53.                                              const SymbolLookupSet &Lookup);
  54.  
  55.   /// Looks up symbols within the given dylib.
  56.   Expected<std::vector<ExecutorAddr>>
  57.   lookup(tpctypes::DylibHandle H, const RemoteSymbolLookupSet &Lookup);
  58.  
  59. private:
  60.   ExecutorProcessControl &EPC;
  61.   SymbolAddrs SAs;
  62. };
  63.  
  64. } // end namespace orc
  65. } // end namespace llvm
  66.  
  67. #endif // LLVM_EXECUTIONENGINE_ORC_EPCGENERICDYLIBMANAGER_H
  68.