What to do about alignment of ELF objects
Rui Ueyama
ruiu at google.com
Thu Apr 23 12:34:04 PDT 2015
On Thu, Apr 23, 2015 at 12:26 PM, Rafael EspĂndola <
rafael.espindola at gmail.com> wrote:
> On 23 April 2015 at 15:17, Rui Ueyama <ruiu at google.com> wrote:
> > Did you actually confirm it's leaking?
> >
> > A memory buffer of an archive file is co-owned by the archive file object
> > and file objects create out of it using shared_ptr. Look at
> > instantiateMember in lib/ReaderWriter/FileArchive.cpp. If you free all
> > files, the memory buffer should be freed as well.
>
> My patch makes it leak. Note the
>
> + Copy.release(); //leak
>
> :-)
>
Ah, I was looking only at the patch for LLD. Sorry. Yeah it leaks memory.
> The idea from the llvm side is simple. Delete that release and have
> AlignedMemberData own the data.
>
> From lld it complicates --whole-archive a bit. Right now what happens is:
>
> * The Archive is created.
> * The members are read (with my patch any unaligned members are copied
> to anonymous memory).
> * The Archive is discarded.
> * Link continues using the members.
>
> One way to handle it would be to change
>
> if (wholeArchive)
> return parseMemberFiles(files);
>
> into
>
> if (wholeArchive) {
> ctx.registry().saveArchive....
> return parseMemberFiles(files);
> }
>
> I will try coding it to see exactly what it looks like.
>
The other idea would be to copy a memory buffer if it's unaligned in LLD,
not in LLVM, and gives the ownership of the new memory buffer to a
newly-created file. But I don't know which is better (at least your idea
looks more generic).
If we go with your idea, we should remove code to make member files
co-owners of the original memory buffer because it's useless.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150423/92668538/attachment.html>
More information about the llvm-commits
mailing list