2010-10-29 Doug Kwan <dougkwan@google.com>
authorDoug Kwan <dougkwan@google.com>
Fri, 29 Oct 2010 20:49:20 +0000 (20:49 +0000)
committerDoug Kwan <dougkwan@google.com>
Fri, 29 Oct 2010 20:49:20 +0000 (20:49 +0000)
* 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.

gold/ChangeLog
gold/arm.cc
gold/output.cc
gold/output.h

index e18775973d950dda7ee52979836852358e57c84e..ad1bd1972b82a69adc1e8b78cafa2ef68830620b 100644 (file)
@@ -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
index c2dc026dac177d25f1fa7700b766924824099900..655682840d26384f3e86b00d82848ff1447048e3 100644 (file)
@@ -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
index 1368c196b4f28145749a7bf7a87ea79daa47f171..dda475d0e51e8d78885b5d74458cd93509aa17ea 100644 (file)
@@ -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);
     }
 }
   
index d36d587ea196f18ebc9c70e843331e5864528985..1bfb054a85766047b14d48c0ab7913b147156b9e 100644 (file)
@@ -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*