[PATCH] D41773: [ELF] Compress debug sections after assignAddresses and support custom layout

James Henderson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 5 09:29:10 PST 2018


jhenderson created this revision.
jhenderson added reviewers: ruiu, rafael.
Herald added subscribers: JDevlieghere, emaste.

Previously, in https://reviews.llvm.org/rL320472, I moved the calculation of section offsets and sizes for compressed debug sections into maybeCompress, which happens before assignAddresses, so that the compression had the required information. However, I failed to take account of relocations that patch such sections. This had two effects:

1. A race condition existed when a debug section referred to a different debug section (see PR35788).
2. References to symbols in non-debug sections would be patched incorrectly. This is because the addresses of such symbols are not calculated until after assignAddresses (this was a partial regression caused by https://reviews.llvm.org/rL320472, but they could still have been broken before, in the event that a custom layout was used in a linker script).

assignAddresses does not need to know about the output section size of non-allocatable sections, because they do not affect the value of Dot. This means that there is no longer a reason not to support custom layout of compressed debug sections, as far as I'm aware (if anybody else knows of a reason why we cannot, then please say so!). These two points allow for delaying when maybeCompress can be called, removing the need for the loop I added to calculate the section size, and therefore the race condition. Furthermore, by delaying, we fix the issues of relocations getting incorrect symbol values, because they have now all been finalized.


https://reviews.llvm.org/D41773

Files:
  ELF/LinkerScript.cpp
  ELF/OutputSections.cpp
  ELF/Writer.cpp
  test/ELF/Inputs/compress-debug.s
  test/ELF/compress-debug-sections-reloc.s
  test/ELF/linkerscript/compress-debug-sections-custom.s

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D41773.128761.patch
Type: text/x-patch
Size: 4010 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180105/db3bdc64/attachment.bin>


More information about the llvm-commits mailing list