HomeFreeBSD

Pull in r321986 from upstream lld trunk (by James Henderson):

Description

Pull in r321986 from upstream lld trunk (by James Henderson):

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

Previously, in r320472, 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 r320472, 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.
These two points allow for delaying when maybeCompress can be called,
removing the need for the loop I previously 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.

This should fix thread race conditions when linking parts of ruby24.

Details

Provenance
dimAuthored on
Parents
rS327731: Consolidate two identical copies of sysres_ids.
Branches
Unknown
Tags
Unknown