diff options
Diffstat (limited to 'gold')
-rw-r--r-- | gold/ChangeLog | 7 | ||||
-rw-r--r-- | gold/output.cc | 26 |
2 files changed, 15 insertions, 18 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index 47ef7e8..9d48cd0 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,10 @@ +2013-01-07 Cary Coutant <ccoutant@google.com> + + PR gold/14993 + * output.cc (Output_section::add_input_section): For incremental + updates, don't track input sections that are allocated from patch + space. + 2013-01-07 H.J. Lu <hongjiu.lu@intel.com> Ian Lance Taylor <iant@google.com> diff --git a/gold/output.cc b/gold/output.cc index f2321b7..01126a3 100644 --- a/gold/output.cc +++ b/gold/output.cc @@ -2422,7 +2422,7 @@ Output_section::add_input_section(Layout* layout, input_section_size = uncompressed_size; off_t offset_in_section; - off_t aligned_offset_in_section; + if (this->has_fixed_layout()) { // For incremental updates, find a chunk of unused space in the section. @@ -2432,17 +2432,15 @@ Output_section::add_input_section(Layout* layout, gold_fallback(_("out of patch space in section %s; " "relink with --incremental-full"), this->name()); - aligned_offset_in_section = offset_in_section; - } - else - { - offset_in_section = this->current_data_size_for_child(); - aligned_offset_in_section = align_address(offset_in_section, - addralign); - this->set_current_data_size_for_child(aligned_offset_in_section - + input_section_size); + return offset_in_section; } + offset_in_section = this->current_data_size_for_child(); + off_t aligned_offset_in_section = align_address(offset_in_section, + addralign); + this->set_current_data_size_for_child(aligned_offset_in_section + + input_section_size); + // Determine if we want to delay code-fill generation until the output // section is written. When the target is relaxing, we want to delay fill // generating to avoid adjusting them during relaxation. Also, if we are @@ -2507,14 +2505,6 @@ Output_section::add_input_section(Layout* layout, this->set_input_section_order_specified(); } } - if (this->has_fixed_layout()) - { - // For incremental updates, finalize the address and offset now. - uint64_t addr = this->address(); - isecn.set_address_and_file_offset(addr + aligned_offset_in_section, - aligned_offset_in_section, - this->offset()); - } this->input_sections_.push_back(isecn); } |