diff options
-rw-r--r-- | gold/ChangeLog | 11 | ||||
-rw-r--r-- | gold/arm.cc | 3 | ||||
-rw-r--r-- | gold/output.cc | 24 | ||||
-rw-r--r-- | gold/output.h | 7 |
4 files changed, 41 insertions, 4 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index e18775973d9..ad1bd1972b8 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,14 @@ +2010-10-29 Doug Kwan <dougkwan@google.com> + + * arm.cc (Arm_outout_section::fix_exidx_coverage): Adjust call to + Output_section::add_relaxed_input_section. + * output.cc (Output_section::add_relaxed_input_section): Add new + arguments LAYOUT and NAME. Set section order index. + (Output_section::convert_input_sections_in_list_to_relaxed_sections): + Copy section order index. + * output.h (Output_section::add_relaxed_input_section): Add new + arguments LAYOUT and NAME. + 2010-10-29 Viktor Kutuzov <vkutuzov@accesssoftek.com> * testsuite/Makefile.am: Move gcctestdir/ld rule to diff --git a/gold/arm.cc b/gold/arm.cc index c2dc026dac1..655682840d2 100644 --- a/gold/arm.cc +++ b/gold/arm.cc @@ -5847,7 +5847,8 @@ Arm_output_section<big_endian>::fix_exidx_coverage( Arm_exidx_merged_section* merged_section = new Arm_exidx_merged_section(*exidx_input_section, *section_offset_map, deleted_bytes); - this->add_relaxed_input_section(merged_section); + const std::string secname = exidx_relobj->section_name(exidx_shndx); + this->add_relaxed_input_section(layout, merged_section, secname); arm_relobj->convert_input_section_to_relaxed_section(exidx_shndx); // All local symbols defined in discarded portions of this input diff --git a/gold/output.cc b/gold/output.cc index 1368c196b4f..dda475d0e51 100644 --- a/gold/output.cc +++ b/gold/output.cc @@ -2203,9 +2203,25 @@ Output_section::add_output_section_data(Output_section_data* posd) // Add a relaxed input section. void -Output_section::add_relaxed_input_section(Output_relaxed_input_section* poris) +Output_section::add_relaxed_input_section(Layout* layout, + Output_relaxed_input_section* poris, + const std::string& name) { Input_section inp(poris); + + // If the --section-ordering-file option is used to specify the order of + // sections, we need to keep track of sections. + if (parameters->options().section_ordering_file()) + { + unsigned int section_order_index = + layout->find_section_order_index(name); + if (section_order_index != 0) + { + inp.set_section_order_index(section_order_index); + this->set_input_section_order_specified(); + } + } + this->add_output_section_data(&inp); if (this->lookup_maps_->is_valid()) this->lookup_maps_->add_relaxed_input_section(poris->relobj(), @@ -2373,7 +2389,13 @@ Output_section::convert_input_sections_in_list_to_relaxed_sections( Relaxation_map::const_iterator p = map.find(sid); gold_assert(p != map.end()); gold_assert((*input_sections)[p->second].is_input_section()); + + // Remember section order index of original input section + // if it is set. Copy it to the relaxed input section. + unsigned int soi = + (*input_sections)[p->second].section_order_index(); (*input_sections)[p->second] = Input_section(poris); + (*input_sections)[p->second].set_section_order_index(soi); } } diff --git a/gold/output.h b/gold/output.h index d36d587ea19..1bfb054a857 100644 --- a/gold/output.h +++ b/gold/output.h @@ -2542,9 +2542,12 @@ class Output_section : public Output_data void add_output_section_data(Output_section_data* posd); - // Add a relaxed input section PORIS to this output section. + // Add a relaxed input section PORIS called NAME to this output section + // with LAYOUT. void - add_relaxed_input_section(Output_relaxed_input_section* poris); + add_relaxed_input_section(Layout* layout, + Output_relaxed_input_section* poris, + const std::string& name); // Return the section name. const char* |