Fix SIZEOF_HEADERS in gold.
authorCary Coutant <ccoutant@gmail.com>
Thu, 4 Jun 2015 03:30:11 +0000 (20:30 -0700)
committerCary Coutant <ccoutant@gmail.com>
Thu, 4 Jun 2015 03:30:11 +0000 (20:30 -0700)
commit8086551f52df808681fa09ca00dfb91e67d8d2ff
tree495eb3d4047371bf419af67f46c65762ca3fd635
parent374082dfab280123f5a54a23b1c1b2cb893b4d2b
Fix SIZEOF_HEADERS in gold.

Gold undercounts the number of program headers it's going to add when
initially evaluating the SIZEOF_HEADERS expression. As a result, scripts
that use it end up skipping a page unnecessarily when the starting address
is too low. The undercounting is because it doesn't count the PT_INTERP
segment.

Then, when finalizing symbols, gold overcounts the program headers: all
segments have already been created, but we still count the headers we
expected to add from the script.

This patch fixes both problems.

gold/
* script-sections.cc (Script_sections::Script_sections): Initialize
segments_created_.
(Script_sections::create_note_and_tls_segments): Set flag when
segments are created.
(Script_sections::expected_segment_count): Count PT_INTERP.
(Script_sections::attach_sections_using_phdrs_clause): Set flag when
segments are created.
* script-sections.h (Script_sections::segments_created_): New data
member.
gold/ChangeLog
gold/script-sections.cc
gold/script-sections.h