<div dir="ltr">That's correct, but I believe it also matches the existing behavior: Using a separate memory manager for each module is required so that the modules can be removed again (RuntimeDyld::MemoryManager has no free/release method, it just frees everything on destruction).<div><br></div><div>Part of the reason for this change was to decouple the memory management scheme from the rest of the ORC APIs (since memory management is really an implementation detail for the linker). This will allow us to design new linking layers that can share an allocator and still free memory when modules are removed.</div><div><br></div><div>Cheers,</div><div>Lang.</div><div><br></div><div> </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jul 6, 2017 at 7:08 PM, Andres Freund <span dir="ltr"><<a href="mailto:andres@anarazel.de" target="_blank">andres@anarazel.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<span class=""><br>
On 2017-07-04 04:42:30 -0000, Lang Hames via llvm-commits wrote:><br>
>      auto LO =<br>
> -      createLinkedObject(std::move(<wbr>Obj), std::move(MemMgr), std::move(Resolver),<br>
> -                         std::move(Finalizer), ProcessAllSections);<br>
> +      createLinkedObject(std::move(<wbr>Obj), GetMemMgr(),<br>
> +                         std::move(Resolver), std::move(Finalizer),<br>
> +                         ProcessAllSections);<br>
</span><span class="">> Modified: llvm/trunk/lib/<wbr>ExecutionEngine/Orc/<wbr>OrcCBindingsStack.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/Orc/OrcCBindingsStack.h?rev=307058&r1=307057&r2=307058&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>ExecutionEngine/Orc/<wbr>OrcCBindingsStack.h?rev=<wbr>307058&r1=307057&r2=307058&<wbr>view=diff</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- llvm/trunk/lib/<wbr>ExecutionEngine/Orc/<wbr>OrcCBindingsStack.h (original)<br>
> +++ llvm/trunk/lib/<wbr>ExecutionEngine/Orc/<wbr>OrcCBindingsStack.h Mon Jul  3 21:42:30 2017<br>
> @@ -105,6 +105,10 @@ public:<br>
>                      IndirectStubsManagerBuilder IndirectStubsMgrBuilder)<br>
>        : DL(TM.createDataLayout()), IndirectStubsMgr(<wbr>IndirectStubsMgrBuilder()),<br>
>          CCMgr(std::move(CCMgr)),<br>
> +        ObjectLayer(<br>
> +          []() {<br>
> +            return std::make_shared<<wbr>SectionMemoryManager>();<br>
> +          }),<br>
<br>
</span>Doesn't this mean we'll, at least if GetMemMgr() returns a new mmgr as<br>
the case in the OrcC stack, create a new mmgr for every object? That<br>
seems suboptimal?<br>
<span class="HOEnZb"><font color="#888888"><br>
- Andres<br>
</font></span></blockquote></div><br></div>