[llvm] r325726 - [ORC] Switch from a StringMap to an internal VSO in RTDyldObjectLinkingLayer.

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 21 17:51:19 PST 2018


Oops -- this commit doesn't do what the commit message claims. It removes
the internal finalizer cruft, but keeps a StringMap<JITEvaluatedSymbol>
rather than switching to a VSO. That's coming in a follow-up patch.

-- Lang.

On Wed, Feb 21, 2018 at 1:55 PM, Lang Hames via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: lhames
> Date: Wed Feb 21 13:55:54 2018
> New Revision: 325726
>
> URL: http://llvm.org/viewvc/llvm-project?rev=325726&view=rev
> Log:
> [ORC] Switch from a StringMap to an internal VSO in
> RTDyldObjectLinkingLayer.
>
> This is a first step towards switching to VSOs as the primary symbol
> tables in
> ORC.
>
> Modified:
>     llvm/trunk/include/llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h
>
> Modified: llvm/trunk/include/llvm/ExecutionEngine/Orc/
> RTDyldObjectLinkingLayer.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/
> llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h?
> rev=325726&r1=325725&r2=325726&view=diff
> ============================================================
> ==================
> --- llvm/trunk/include/llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h
> (original)
> +++ llvm/trunk/include/llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h
> Wed Feb 21 13:55:54 2018
> @@ -103,16 +103,16 @@ public:
>  private:
>    using OwnedObject = object::OwningBinary<object::ObjectFile>;
>
> -  template <typename MemoryManagerPtrT, typename FinalizerFtor>
> +  template <typename MemoryManagerPtrT>
>    class ConcreteLinkedObject : public LinkedObject {
>    public:
> -    ConcreteLinkedObject(ExecutionSession &ES, OwnedObject Obj,
> -                         MemoryManagerPtrT MemMgr,
> +    ConcreteLinkedObject(RTDyldObjectLinkingLayer &Parent, VModuleKey K,
> +                         OwnedObject Obj, MemoryManagerPtrT MemMgr,
>                           std::shared_ptr<SymbolResolver> Resolver,
> -                         FinalizerFtor Finalizer, bool ProcessAllSections)
> +                         bool ProcessAllSections)
>          : MemMgr(std::move(MemMgr)),
>            PFC(llvm::make_unique<PreFinalizeContents>(
> -              ES, std::move(Obj), std::move(Resolver),
> std::move(Finalizer),
> +              Parent, std::move(K), std::move(Obj), std::move(Resolver),
>                ProcessAllSections)) {
>        buildInitialSymbolTable(PFC->Obj);
>      }
> @@ -124,18 +124,32 @@ private:
>      Error finalize() override {
>        assert(PFC && "mapSectionAddress called on finalized LinkedObject");
>
> -      JITSymbolResolverAdapter ResolverAdapter(PFC->ES, *PFC->Resolver);
> -      RuntimeDyld RTDyld(*MemMgr, ResolverAdapter);
> -      RTDyld.setProcessAllSections(PFC->ProcessAllSections);
> -      PFC->RTDyld = &RTDyld;
> -
> -      this->Finalized = true;
> -      auto Err = PFC->Finalizer(RTDyld, std::move(PFC->Obj),
> -                                [&]() { this->updateSymbolTable(RTDyld);
> });
> +      JITSymbolResolverAdapter ResolverAdapter(PFC->Parent.ES,
> *PFC->Resolver);
> +      PFC->RTDyld = llvm::make_unique<RuntimeDyld>(*MemMgr,
> ResolverAdapter);
> +      PFC->RTDyld->setProcessAllSections(PFC->ProcessAllSections);
> +
> +      Finalized = true;
> +
> +      std::unique_ptr<RuntimeDyld::LoadedObjectInfo> Info =
> +          PFC->RTDyld->loadObject(*PFC->Obj.getBinary());
> +
> +      updateSymbolTable(*PFC->RTDyld);
> +
> +      if (PFC->Parent.NotifyLoaded)
> +        PFC->Parent.NotifyLoaded(PFC->K, *PFC->Obj.getBinary(), *Info);
> +
> +      PFC->RTDyld->finalizeWithMemoryManagerLocking();
> +
> +      if (PFC->RTDyld->hasError())
> +        return make_error<StringError>(PFC->RTDyld->getErrorString(),
> +                                       inconvertibleErrorCode());
> +
> +      if (PFC->Parent.NotifyFinalized)
> +        PFC->Parent.NotifyFinalized(PFC->K);
>
>        // Release resources.
>        PFC = nullptr;
> -      return Err;
> +      return Error::success();
>      }
>
>      JITSymbol::GetAddressFtor getSymbolMaterializer(std::string Name)
> override {
> @@ -181,34 +195,35 @@ private:
>      // Contains the information needed prior to finalization: the object
> files,
>      // memory manager, resolver, and flags needed for RuntimeDyld.
>      struct PreFinalizeContents {
> -      PreFinalizeContents(ExecutionSession &ES, OwnedObject Obj,
> +      PreFinalizeContents(RTDyldObjectLinkingLayer &Parent, VModuleKey K,
> +                          OwnedObject Obj,
>                            std::shared_ptr<SymbolResolver> Resolver,
> -                          FinalizerFtor Finalizer, bool
> ProcessAllSections)
> -          : ES(ES), Obj(std::move(Obj)), Resolver(std::move(Resolver)),
> -            Finalizer(std::move(Finalizer)),
> +                          bool ProcessAllSections)
> +          : Parent(Parent), K(std::move(K)), Obj(std::move(Obj)),
> +            Resolver(std::move(Resolver)),
>              ProcessAllSections(ProcessAllSections) {}
>
> -      ExecutionSession &ES;
> +      RTDyldObjectLinkingLayer &Parent;
> +      VModuleKey K;
>        OwnedObject Obj;
>        std::shared_ptr<SymbolResolver> Resolver;
> -      FinalizerFtor Finalizer;
>        bool ProcessAllSections;
> -      RuntimeDyld *RTDyld;
> +      std::unique_ptr<RuntimeDyld> RTDyld;
>      };
>
>      MemoryManagerPtrT MemMgr;
>      std::unique_ptr<PreFinalizeContents> PFC;
>    };
>
> -  template <typename MemoryManagerPtrT, typename FinalizerFtor>
> -  std::unique_ptr<ConcreteLinkedObject<MemoryManagerPtrT, FinalizerFtor>>
> -  createLinkedObject(ExecutionSession &ES, OwnedObject Obj,
> -                     MemoryManagerPtrT MemMgr,
> +  template <typename MemoryManagerPtrT>
> +  std::unique_ptr<ConcreteLinkedObject<MemoryManagerPtrT>>
> +  createLinkedObject(RTDyldObjectLinkingLayer &Parent, VModuleKey K,
> +                     OwnedObject Obj, MemoryManagerPtrT MemMgr,
>                       std::shared_ptr<SymbolResolver> Resolver,
> -                     FinalizerFtor Finalizer, bool ProcessAllSections) {
> -    using LOS = ConcreteLinkedObject<MemoryManagerPtrT, FinalizerFtor>;
> -    return llvm::make_unique<LOS>(ES, std::move(Obj), std::move(MemMgr),
> -                                  std::move(Resolver),
> std::move(Finalizer),
> +                     bool ProcessAllSections) {
> +    using LOS = ConcreteLinkedObject<MemoryManagerPtrT>;
> +    return llvm::make_unique<LOS>(Parent, std::move(K), std::move(Obj),
> +                                  std::move(MemMgr), std::move(Resolver),
>                                    ProcessAllSections);
>    }
>
> @@ -249,36 +264,13 @@ public:
>      if (!Obj)
>        return Obj.takeError();
>
> -    auto Finalizer = [&, K](RuntimeDyld &RTDyld, const OwnedObject
> &ObjToLoad,
> -                            std::function<void()> LOSHandleLoad) -> Error
> {
> -      std::unique_ptr<RuntimeDyld::LoadedObjectInfo> Info =
> -          RTDyld.loadObject(*ObjToLoad.getBinary());
> -
> -      LOSHandleLoad();
> -
> -      if (this->NotifyLoaded)
> -        this->NotifyLoaded(K, *ObjToLoad.getBinary(), *Info);
> -
> -      RTDyld.finalizeWithMemoryManagerLocking();
> -
> -      if (RTDyld.hasError())
> -        return make_error<StringError>(RTDyld.getErrorString(),
> -                                       inconvertibleErrorCode());
> -
> -      if (this->NotifyFinalized)
> -        this->NotifyFinalized(K);
> -
> -      return Error::success();
> -    };
> -
>      assert(!LinkedObjects.count(K) && "VModuleKey already in use");
>
>      auto R = GetResources(K);
>
>      LinkedObjects[K] = createLinkedObject(
> -        ES, OwnedObject(std::move(*Obj), std::move(ObjBuffer)),
> -        std::move(R.MemMgr), std::move(R.Resolver), std::move(Finalizer),
> -        ProcessAllSections);
> +        *this, K, OwnedObject(std::move(*Obj), std::move(ObjBuffer)),
> +        std::move(R.MemMgr), std::move(R.Resolver), ProcessAllSections);
>
>      return Error::success();
>    }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180221/273dd7c3/attachment.html>


More information about the llvm-commits mailing list