diff options
author | Doug Kwan <dougkwan@google.com> | 2010-01-23 01:07:59 +0000 |
---|---|---|
committer | Doug Kwan <dougkwan@google.com> | 2010-01-23 01:07:59 +0000 |
commit | 8923b24c4bde41e6a15026aa1d20493fd383066c (patch) | |
tree | dfe04658736dd194c41401949bafb2afdf47dafb /gold/layout.cc | |
parent | 767acc28c194ace624485f0a907e07d1e95d4ce1 (diff) | |
download | gdb-8923b24c4bde41e6a15026aa1d20493fd383066c.zip gdb-8923b24c4bde41e6a15026aa1d20493fd383066c.tar.gz gdb-8923b24c4bde41e6a15026aa1d20493fd383066c.tar.bz2 |
2010-01-22 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::do_relax): Record an output section for section
offset adjustment it contains any stub table that has changed.
* layout.cc (Layout::clean_up_after_relaxation): Adjust section
offsets in an output section if necessary.
* output.cc (Output_section::Output_section): Initialize
section_offsets_need_adjustments_.
(Output_section::add_input_section_for_script): Renamed to
Output_section::add_simple_input_section.
(Output_section::save_states): Add a comment.
(Output_section::discard_states): New method defintion.
(Output_section::adjust_section_offsets): Same.
* output.h (Output_section::add_input_section_for_script): Renamed to
Output_section::add_simple_input_section.
(Output_section::discard_states): New method declaration.
(Output_section::adjust_section_offsets): Same.
(Output_section::section_offsets_need_adjustment,
Output_section::set_section_offsets_need_adjustment): New method
definitions.
(Output_section::section_offsets_need_adjustment_): New data member.
* script-sections.cc
(Output_section_element_input::set_section_address): Adjust code for
renaming of Output_section::add_input_section_for_script.
(Orphan_output_section::set_section_address): Same.
Diffstat (limited to 'gold/layout.cc')
-rw-r--r-- | gold/layout.cc | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/gold/layout.cc b/gold/layout.cc index dc339d6..52989a5 100644 --- a/gold/layout.cc +++ b/gold/layout.cc @@ -1401,8 +1401,15 @@ Layout::clean_up_after_relaxation() p != this->section_list_.end(); ++p) { - (*p)->reset_address_and_file_offset(); (*p)->restore_states(); + + // If an input section changes size because of relaxation, + // we need to adjust the section offsets of all input sections. + // after such a section. + if ((*p)->section_offsets_need_adjustment()) + (*p)->adjust_section_offsets(); + + (*p)->reset_address_and_file_offset(); } // Reset special output object address and file offsets. |