aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2012-11-01 04:15:06 +0000
committerAlan Modra <amodra@bigpond.net.au>2012-11-01 04:15:06 +0000
commitd664c051a8f16a2836553576488be06acf51e049 (patch)
treedb8ad853cddf227d3a2287bd9d8cffe3078e4075
parentb4e12a8eaeab232acd0ba732d85f2839efc2069e (diff)
downloadbinutils-d664c051a8f16a2836553576488be06acf51e049.tar.gz
* ldlang.c (insert_pad): Correct output section size calculation.
(lang_size_sections_1): Likewise for lang_data_statement and lang_reloc_statement.
-rw-r--r--ld/ChangeLog6
-rw-r--r--ld/ldlang.c10
2 files changed, 13 insertions, 3 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 95e4e5835..15bf252cf 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -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
diff --git a/ld/ldlang.c b/ld/ldlang.c
index 0c978983d..680221122 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -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;