[llvm] r227778 - [Orc] Make the ObjectLinkingLayer take ownership of object files until

David Blaikie dblaikie at gmail.com
Sun Feb 1 20:51:08 PST 2015


On Sun, Feb 1, 2015 at 8:32 PM, Lang Hames <lhames at gmail.com> wrote:

> Author: lhames
> Date: Sun Feb  1 22:32:17 2015
> New Revision: 227778
>
> URL: http://llvm.org/viewvc/llvm-project?rev=227778&view=rev
> Log:
> [Orc] Make the ObjectLinkingLayer take ownership of object files until
> finalization time.
>
> As currently implemented, RuntimeDyldELF requires the original object
> file to be avaible when relocations are being resolved. This patch
> ensures that the ObjectLinkingLayer preserves it until then. In the
> future RuntimeDyldELF should be rewritten to remove this requirement, at
> which point this patch can be reverted.
>
> Regression test cases for Orc (which include coverage of this bug) will
> be committed shortly.
>
>
> Modified:
>     llvm/trunk/include/llvm/ExecutionEngine/Orc/IRCompileLayer.h
>     llvm/trunk/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h
>
> Modified: llvm/trunk/include/llvm/ExecutionEngine/Orc/IRCompileLayer.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/Orc/IRCompileLayer.h?rev=227778&r1=227777&r2=227778&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ExecutionEngine/Orc/IRCompileLayer.h (original)
> +++ llvm/trunk/include/llvm/ExecutionEngine/Orc/IRCompileLayer.h Sun Feb
> 1 22:32:17 2015
> @@ -76,7 +76,12 @@ public:
>        Buffers.push_back(std::move(Buffer));
>      }
>
> -    return BaseLayer.addObjectSet(std::move(Objects), std::move(MM));
> +    ModuleSetHandleT H =
> +      BaseLayer.addObjectSet(Objects, std::move(MM));
> +
> +    BaseLayer.takeOwnershipOfBuffers(H, std::move(Buffers));


Could you just keep ownership on this layer, rather than passing it down?


> +
> +    return H;
>    }
>
>    /// @brief Remove the module set associated with the handle H.
>
> Modified: llvm/trunk/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h?rev=227778&r1=227777&r2=227778&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h
> (original)
> +++ llvm/trunk/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h Sun
> Feb  1 22:32:17 2015
> @@ -61,6 +61,7 @@ protected:
>        RTDyld->resolveRelocations();
>        RTDyld->registerEHFrames();
>        MM->finalizeMemory();
> +      OwnedBuffers.clear();
>        State = Finalized;
>      }
>
> @@ -70,10 +71,19 @@ protected:
>        RTDyld->mapSectionAddress(LocalAddress, TargetAddress);
>      }
>
> +    void takeOwnershipOfBuffer(std::unique_ptr<MemoryBuffer> B) {
> +      OwnedBuffers.push_back(std::move(B));
> +    }
> +
>    private:
>      std::unique_ptr<RTDyldMemoryManager> MM;
>      std::unique_ptr<RuntimeDyld> RTDyld;
>      enum { Raw, Finalizing, Finalized } State;
> +
> +    // FIXME: This ownership hack only exists because RuntimeDyldELF still
> +    //        wants to be able to inspect the original object when
> resolving
> +    //        relocations. As soon as that can be fixed this should be
> removed.
> +    std::vector<std::unique_ptr<MemoryBuffer>> OwnedBuffers;
>    };
>
>    typedef std::list<LinkedObjectSet> LinkedObjectSetListT;
> @@ -81,6 +91,16 @@ protected:
>  public:
>    /// @brief Handle to a set of loaded objects.
>    typedef LinkedObjectSetListT::iterator ObjSetHandleT;
> +
> +  // Ownership hack.
> +  // FIXME: Remove this as soon as RuntimeDyldELF can apply relocations
> without
> +  //        referencing the original object.
> +  template <typename OwningMBSet>
> +  void takeOwnershipOfBuffers(ObjSetHandleT H, OwningMBSet MBs) {
> +    for (auto &MB : MBs)
> +      H->takeOwnershipOfBuffer(std::move(MB));
> +  }
> +
>  };
>
>  /// @brief Default (no-op) action to perform when loading objects.
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150201/36edbee0/attachment.html>


More information about the llvm-commits mailing list