[PATCH] D18055: ELF: Implement --build-id.
David Blaikie via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 10 12:14:21 PST 2016
Do you have a sense of how other linkers implement this feature and/or how
much it costs in performance/link time? You mention what an "okay" cost for
this would be, but it's not clear to me how you determined that cost.
On Thu, Mar 10, 2016 at 11:23 AM, Rui Ueyama via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> ruiu created this revision.
> ruiu added reviewers: rafael, emaste.
> ruiu added a subscriber: llvm-commits.
>
> This is not ready for submission.
>
> This patch implements --build-id in a naive way. After the linker creates
> an output file in the memory buffer, it computes the md5sum of the
> resulting
> file and set the hash to the .note section as a build-id.
>
> The problem is that its performance impact is too large. Computing a secure
> hash is a computational intensive task (our md5sum function seems a bit too
> slow, though). Here are some numbers (milliseconds to link):
>
> LLD: 713.78 -> 883.44 (+23.8%)
> Scylla: 5005.64 -> 5437.84 (+8.6%)
>
> Even if we replace MD5 with a faster hash function, it cannot be within
> an "okay" range, which is, say, +3%.
>
> Do you guys have any opnion on this? I have a few ideas.
>
> - Use CRC32 instead of MD5. Non-secure hash should be much faster.
>
> - Make clang to calculate a secure hash for each section.
> This is basically moving the workload from the linker to the compiler,
> but we can use the hash for ICF in the linker,
> so it might be a overall win.
>
> - Compute a build-id from input files' timestamps. This makes builds
> non-reproducible if you touch a file, so I don't think we want this.
>
> - Build-id is not needed for program execution in general.
> So we may be able to let the linker exit as soon as it's done with
> linking,
> and backfill the hash value in a background process which is kicked in
> by the linker. (It's probably unrealistic plan, though.)
>
> - Do not support build-id and let the user pass --build-id=<hash value>.
>
> http://reviews.llvm.org/D18055
>
> Files:
> ELF/Config.h
> ELF/Driver.cpp
> ELF/Options.td
> ELF/OutputSections.cpp
> ELF/OutputSections.h
> ELF/Writer.cpp
>
>
> _______________________________________________
> 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/20160310/b6b2a76e/attachment.html>
More information about the llvm-commits
mailing list