<div dir="ltr">Hi Rafael,<div><br></div><div>The ExecutionEngine already owns the LL module, right? I think we should actually make addObjectFile an owning operation too, for consistency.</div><div><br></div><div>Side note: In the long term I'd love to move to a world where ExecutionEngine and its subclasses are non-owning and we provide convenience classes to automatically manage ownership for clients with simple use cases. A lot of JIT clients probably know better than ExecutionEngine how they want their memory managed, and for them automatic ownership is just a straightjacket. </div>
<div><br></div><div>Cheers,</div><div>Lang.</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Aug 20, 2014 at 8:40 AM, Rafael Espíndola <span dir="ltr"><<a href="mailto:rafael.espindola@gmail.com" target="_blank">rafael.espindola@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Lang,<br>
<br>
This was a quick fix for a fallout from the last part of my change<br>
that dropped the creation of dummy buffers for archive members. What<br>
is your long term view with regards to buffer/object ownership in the<br>
ExecutionEngine? One option would be to keep the existing<br>
addObjectFile for use with archive members (where there is one buffer<br>
for the archive, owned somewhere else) but also have a version that<br>
takes a OwningBinary for use in top level calls like this one. What do<br>
you think?<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
On 20 August 2014 11:19, Rafael Espindola <<a href="mailto:rafael.espindola@gmail.com">rafael.espindola@gmail.com</a>> wrote:<br>
> Author: rafael<br>
> Date: Wed Aug 20 10:19:37 2014<br>
> New Revision: 216071<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=216071&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=216071&view=rev</a><br>
> Log:<br>
> Quick fix for an use after free.<br>
><br>
> Modified:<br>
>     llvm/trunk/tools/lli/lli.cpp<br>
><br>
> Modified: llvm/trunk/tools/lli/lli.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lli/lli.cpp?rev=216071&r1=216070&r2=216071&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lli/lli.cpp?rev=216071&r1=216070&r2=216071&view=diff</a><br>

> ==============================================================================<br>
> --- llvm/trunk/tools/lli/lli.cpp (original)<br>
> +++ llvm/trunk/tools/lli/lli.cpp Wed Aug 20 10:19:37 2014<br>
> @@ -529,6 +529,7 @@ int main(int argc, char **argv, char * c<br>
>      EE->addModule(std::move(XMod));<br>
>    }<br>
><br>
> +  std::vector<std::unique_ptr<MemoryBuffer>> Buffers;<br>
>    for (unsigned i = 0, e = ExtraObjects.size(); i != e; ++i) {<br>
>      ErrorOr<object::OwningBinary<object::ObjectFile>> Obj =<br>
>          object::ObjectFile::createObjectFile(ExtraObjects[i]);<br>
> @@ -536,7 +537,9 @@ int main(int argc, char **argv, char * c<br>
>        Err.print(argv[0], errs());<br>
>        return 1;<br>
>      }<br>
> -    EE->addObjectFile(std::move(Obj.get().getBinary()));<br>
> +    object::OwningBinary<object::ObjectFile> &O = Obj.get();<br>
> +    EE->addObjectFile(std::move(O.getBinary()));<br>
> +    Buffers.push_back(std::move(O.getBuffer()));<br>
>    }<br>
><br>
>    for (unsigned i = 0, e = ExtraArchives.size(); i != e; ++i) {<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</div></div></blockquote></div><br></div>