This is an archive of the discontinued LLVM Phabricator instance.

[ELF] Compress debug sections after assignAddresses and support custom layout
ClosedPublic

Authored by jhenderson on Jan 5 2018, 9:29 AM.

Details

Summary

Previously, in 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 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.

Diff Detail

Event Timeline

jhenderson created this revision.Jan 5 2018, 9:29 AM
jhenderson updated this revision to Diff 128900.Jan 8 2018, 2:03 AM

Add comments in tests as requested by rafael on the mailing list.

jhenderson accepted this revision.Jan 8 2018, 2:03 AM

@rafael gave a LGTM on the mailing list.

This revision is now accepted and ready to land.Jan 8 2018, 2:03 AM
jhenderson closed this revision.Jan 8 2018, 2:19 AM

Commited in r321986.