* ldlang.c (insert_pad): Correct output section size calculation.
authorAlan Modra <amodra@gmail.com>
Thu, 1 Nov 2012 04:15:07 +0000 (04:15 +0000)
committerAlan Modra <amodra@gmail.com>
Thu, 1 Nov 2012 04:15:07 +0000 (04:15 +0000)
(lang_size_sections_1): Likewise for lang_data_statement and
lang_reloc_statement.

ld/ChangeLog
ld/ldlang.c

index 95e4e58..15bf252 100644 (file)
@@ -1,3 +1,9 @@
+2012-11-01  Alan Modra  <amodra@gmail.com>
+
+       * ldlang.c (insert_pad): Correct output section size calculation.
+       (lang_size_sections_1): Likewise for lang_data_statement and
+       lang_reloc_statement.
+
 2012-10-29  Alan Modra  <amodra@gmail.com>
 
        * configure.tgt (powerpcle-pe,winnt,cygwin): Add deffilep.o
index 0c97898..6802211 100644 (file)
@@ -4594,7 +4594,8 @@ insert_pad (lang_statement_union_type **ptr,
     }
   pad->padding_statement.output_offset = dot - output_section->vma;
   pad->padding_statement.size = alignment_needed;
-  output_section->size += alignment_needed;
+  output_section->size = TO_SIZE (dot + TO_ADDR (alignment_needed)
+                                 - output_section->vma);
 }
 
 /* Work out how much this section will move the dot point.  */
@@ -5159,7 +5160,9 @@ lang_size_sections_1
            if (size < TO_SIZE ((unsigned) 1))
              size = TO_SIZE ((unsigned) 1);
            dot += TO_ADDR (size);
-           output_section_statement->bfd_section->size += size;
+           output_section_statement->bfd_section->size
+             = TO_SIZE (dot - output_section_statement->bfd_section->vma);
+
          }
          break;
 
@@ -5173,7 +5176,8 @@ lang_size_sections_1
              output_section_statement->bfd_section;
            size = bfd_get_reloc_size (s->reloc_statement.howto);
            dot += TO_ADDR (size);
-           output_section_statement->bfd_section->size += size;
+           output_section_statement->bfd_section->size
+             = TO_SIZE (dot - output_section_statement->bfd_section->vma);
          }
          break;