2010-09-03 Rafael Espindola <espindola@google.com>
authorRafael Ávila de Espíndola <respindola@mozilla.com>
Thu, 9 Sep 2010 00:13:08 +0000 (00:13 +0000)
committerRafael Ávila de Espíndola <respindola@mozilla.com>
Thu, 9 Sep 2010 00:13:08 +0000 (00:13 +0000)
      * layout.cc (Layout::set_segment_offsets): Always advance to a new page.

gold/ChangeLog
gold/layout.cc

index a8a1107..0ed1a2f 100644 (file)
@@ -1,3 +1,7 @@
+2010-09-03  Rafael Espindola  <espindola@google.com>
+
+      * layout.cc (Layout::set_segment_offsets): Always advance to a new page.
+
 2010-09-08  Doug Kwan  <dougkwan@google.com>
 
        * arm.cc (Arm_exidx_cantunwind::do_print_to_mapfile): New method.
index bfe6a5e..f0a431e 100644 (file)
@@ -2567,7 +2567,6 @@ Layout::set_segment_offsets(const Target* target, Output_segment* load_seg,
   const bool check_sections = parameters->options().check_sections();
   Output_segment* last_load_segment = NULL;
 
-  bool was_readonly = false;
   for (Segment_list::iterator p = this->segment_list_.begin();
        p != this->segment_list_.end();
        ++p)
@@ -2614,21 +2613,17 @@ Layout::set_segment_offsets(const Target* target, Output_segment* load_seg,
 
          if (!are_addresses_set)
            {
-             // If the last segment was readonly, and this one is
-             // not, then skip the address forward one page,
-             // maintaining the same position within the page.  This
-             // lets us store both segments overlapping on a single
-             // page in the file, but the loader will put them on
-             // different pages in memory.
+             // Skip the address forward one page, maintaining the same
+             // position within the page.  This lets us store both segments
+             // overlapping on a single page in the file, but the loader will
+             // put them on different pages in memory. We will revisit this
+             // decision once we know the size of the segment.
 
              addr = align_address(addr, (*p)->maximum_alignment());
              aligned_addr = addr;
 
-             if (was_readonly && ((*p)->flags() & elfcpp::PF_W) != 0)
-               {
-                 if ((addr & (abi_pagesize - 1)) != 0)
-                   addr = addr + abi_pagesize;
-               }
+             if ((addr & (abi_pagesize - 1)) != 0)
+                addr = addr + abi_pagesize;
 
              off = orig_off + ((addr - orig_addr) & (abi_pagesize - 1));
            }
@@ -2686,9 +2681,6 @@ Layout::set_segment_offsets(const Target* target, Output_segment* load_seg,
 
          addr = new_addr;
 
-         if (((*p)->flags() & elfcpp::PF_W) == 0)
-           was_readonly = true;
-
          // Implement --check-sections.  We know that the segments
          // are sorted by LMA.
          if (check_sections && last_load_segment != NULL)