From d664c051a8f16a2836553576488be06acf51e049 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 1 Nov 2012 04:15:06 +0000 Subject: * ldlang.c (insert_pad): Correct output section size calculation. (lang_size_sections_1): Likewise for lang_data_statement and lang_reloc_statement. --- ld/ChangeLog | 6 ++++++ ld/ldlang.c | 10 +++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index 95e4e58355..15bf252cf6 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2012-11-01 Alan Modra + + * 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 * configure.tgt (powerpcle-pe,winnt,cygwin): Add deffilep.o diff --git a/ld/ldlang.c b/ld/ldlang.c index 0c978983dd..680221122a 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; -- cgit v1.2.1