Fix edge cases in orphan section placement.
authorCary Coutant <ccoutant@gmail.com>
Tue, 13 Dec 2016 01:52:09 +0000 (17:52 -0800)
committerCary Coutant <ccoutant@gmail.com>
Tue, 13 Dec 2016 01:52:53 +0000 (17:52 -0800)
commitd81222d3863037a90e0402cf438f7e45600feea2
tree7f1c9de2b682bb391df3586758588588d79ca4c1
parent75c6202b1d13b892581e8dd56b8e0664815390c1
Fix edge cases in orphan section placement.

There were still some cases I found where orphan section placement
was screwy -- where the script has no output section description for
either .data or .bss, a .bss orphan section ends up getting placed
before the .data section. In addition, if there is an output section
description for a data section not named .data (e.g., .rela.dyn),
the orphan .bss gets placed before it. This patch cleans that up,
by tracking the last allocated section even as we're adding orphans.

I've also improved segment layout in the absence of a PHDRS clause.
A zero-length NOBITS section will no longer force a new segment
when followed by a PROGBITS section.

2016-12-12  Cary Coutant  <ccoutant@gmail.com>

gold/
* script-sections.cc (Orphan_section_placement::update_last_alloc):
New method.
(Orphan_section_placement::find_place): Place orphan .data section
after either RODATA or TEXT.
(Script_sections::place_orphan): Call update_last_alloc for allocated
sections.
(Script_sections::create_segments): Improve handling of BSS.
gold/ChangeLog
gold/script-sections.cc