diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2018-07-28 10:51:19 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2018-07-28 10:51:19 +0000 | 
| commit | eb11fae6d08f479c0799db45860a98af528fa6e7 (patch) | |
| tree | 44d492a50c8c1a7eb8e2d17ea3360ec4d066f042 /include/llvm/ExecutionEngine/Orc/ObjectTransformLayer.h | |
| parent | b8a2042aa938069e862750553db0e4d82d25822c (diff) | |
Notes
Diffstat (limited to 'include/llvm/ExecutionEngine/Orc/ObjectTransformLayer.h')
| -rw-r--r-- | include/llvm/ExecutionEngine/Orc/ObjectTransformLayer.h | 71 | 
1 files changed, 41 insertions, 30 deletions
| diff --git a/include/llvm/ExecutionEngine/Orc/ObjectTransformLayer.h b/include/llvm/ExecutionEngine/Orc/ObjectTransformLayer.h index cb47e7520b1a..c6b43a9c8ed6 100644 --- a/include/llvm/ExecutionEngine/Orc/ObjectTransformLayer.h +++ b/include/llvm/ExecutionEngine/Orc/ObjectTransformLayer.h @@ -15,6 +15,7 @@  #define LLVM_EXECUTIONENGINE_ORC_OBJECTTRANSFORMLAYER_H  #include "llvm/ExecutionEngine/JITSymbol.h" +#include "llvm/ExecutionEngine/Orc/Layer.h"  #include <algorithm>  #include <memory>  #include <string> @@ -22,7 +23,24 @@  namespace llvm {  namespace orc { -/// @brief Object mutating layer. +class ObjectTransformLayer2 : public ObjectLayer { +public: +  using TransformFunction = +      std::function<Expected<std::unique_ptr<MemoryBuffer>>( +          std::unique_ptr<MemoryBuffer>)>; + +  ObjectTransformLayer2(ExecutionSession &ES, ObjectLayer &BaseLayer, +                        TransformFunction Transform); + +  void emit(MaterializationResponsibility R, VModuleKey K, +            std::unique_ptr<MemoryBuffer> O) override; + +private: +  ObjectLayer &BaseLayer; +  TransformFunction Transform; +}; + +/// Object mutating layer.  ///  ///   This layer accepts sets of ObjectFiles (via addObject). It  /// immediately applies the user supplied functor to each object, then adds @@ -30,29 +48,24 @@ namespace orc {  template <typename BaseLayerT, typename TransformFtor>  class ObjectTransformLayer {  public: -  /// @brief Handle to a set of added objects. -  using ObjHandleT = typename BaseLayerT::ObjHandleT; - -  /// @brief Construct an ObjectTransformLayer with the given BaseLayer +  /// Construct an ObjectTransformLayer with the given BaseLayer    ObjectTransformLayer(BaseLayerT &BaseLayer,                         TransformFtor Transform = TransformFtor())        : BaseLayer(BaseLayer), Transform(std::move(Transform)) {} -  /// @brief Apply the transform functor to each object in the object set, then +  /// Apply the transform functor to each object in the object set, then    ///        add the resulting set of objects to the base layer, along with the    ///        memory manager and symbol resolver.    ///    /// @return A handle for the added objects. -  template <typename ObjectPtr> -  Expected<ObjHandleT> addObject(ObjectPtr Obj, -                                 std::shared_ptr<JITSymbolResolver> Resolver) { -    return BaseLayer.addObject(Transform(std::move(Obj)), std::move(Resolver)); +  template <typename ObjectPtr> Error addObject(VModuleKey K, ObjectPtr Obj) { +    return BaseLayer.addObject(std::move(K), Transform(std::move(Obj)));    } -  /// @brief Remove the object set associated with the handle H. -  Error removeObject(ObjHandleT H) { return BaseLayer.removeObject(H); } +  /// Remove the object set associated with the VModuleKey K. +  Error removeObject(VModuleKey K) { return BaseLayer.removeObject(K); } -  /// @brief Search for the given named symbol. +  /// Search for the given named symbol.    /// @param Name The name of the symbol to search for.    /// @param ExportedSymbolsOnly If true, search only for exported symbols.    /// @return A handle for the given named symbol, if it exists. @@ -60,36 +73,34 @@ public:      return BaseLayer.findSymbol(Name, ExportedSymbolsOnly);    } -  /// @brief Get the address of the given symbol in the context of the set of -  ///        objects represented by the handle H. This call is forwarded to the -  ///        base layer's implementation. -  /// @param H The handle for the object set to search in. +  /// Get the address of the given symbol in the context of the set of +  ///        objects represented by the VModuleKey K. This call is forwarded to +  ///        the base layer's implementation. +  /// @param K The VModuleKey associated with the object set to search in.    /// @param Name The name of the symbol to search for.    /// @param ExportedSymbolsOnly If true, search only for exported symbols.    /// @return A handle for the given named symbol, if it is found in the    ///         given object set. -  JITSymbol findSymbolIn(ObjHandleT H, const std::string &Name, +  JITSymbol findSymbolIn(VModuleKey K, const std::string &Name,                           bool ExportedSymbolsOnly) { -    return BaseLayer.findSymbolIn(H, Name, ExportedSymbolsOnly); +    return BaseLayer.findSymbolIn(K, Name, ExportedSymbolsOnly);    } -  /// @brief Immediately emit and finalize the object set represented by the -  ///        given handle. -  /// @param H Handle for object set to emit/finalize. -  Error emitAndFinalize(ObjHandleT H) { -    return BaseLayer.emitAndFinalize(H); -  } +  /// Immediately emit and finalize the object set represented by the +  ///        given VModuleKey K. +  Error emitAndFinalize(VModuleKey K) { return BaseLayer.emitAndFinalize(K); } -  /// @brief Map section addresses for the objects associated with the handle H. -  void mapSectionAddress(ObjHandleT H, const void *LocalAddress, +  /// Map section addresses for the objects associated with the +  /// VModuleKey K. +  void mapSectionAddress(VModuleKey K, const void *LocalAddress,                           JITTargetAddress TargetAddr) { -    BaseLayer.mapSectionAddress(H, LocalAddress, TargetAddr); +    BaseLayer.mapSectionAddress(K, LocalAddress, TargetAddr);    } -  /// @brief Access the transform functor directly. +  /// Access the transform functor directly.    TransformFtor &getTransform() { return Transform; } -  /// @brief Access the mumate functor directly. +  /// Access the mumate functor directly.    const TransformFtor &getTransform() const { return Transform; }  private: | 
