From: Alan Modra Date: Thu, 22 Apr 2010 01:51:01 +0000 (+0000) Subject: bfd/ X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3ac9b6c910daef1a01271f14f137862eb570a420;p=binutils-gdb.git bfd/ * elf.c (assign_file_positions_for_load_sections): Revert 2008-05-29 change. Tidy. Don't error on sections not allocated in segment. ld/testsuite/ * ld-elf/extract-symbol-1sec.d: Update lma. * ld-i386/alloc.d: Expect a warning, not an error. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 5cd828953f8..9fedd11f928 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2010-04-22 Alan Modra + + * elf.c (assign_file_positions_for_load_sections): Revert 2008-05-29 + change. Tidy. Don't error on sections not allocated in segment. + 2010-04-15 Andrew Haley * bfd-in.h (elf32_arm_fix_exidx_coverage): Add new flag: diff --git a/bfd/elf.c b/bfd/elf.c index bcd238d6216..0ffc2d08895 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -4453,32 +4453,17 @@ assign_file_positions_for_load_sections (bfd *abfd, && ((this_hdr->sh_flags & SHF_TLS) == 0 || p->p_type == PT_TLS)))) { - bfd_signed_vma adjust = sec->vma - (p->p_vaddr + p->p_memsz); + bfd_vma adjust = sec->lma - (p->p_paddr + p->p_memsz); - if (sec->vma < p->p_vaddr + p->p_memsz) + if (sec->lma < p->p_paddr + p->p_memsz) { (*_bfd_error_handler) - (_("%B: section %A vma 0x%lx overlaps previous sections"), - abfd, sec, (unsigned long) sec->vma); + (_("%B: section %A lma 0x%lx overlaps previous sections"), + abfd, sec, (unsigned long) sec->lma); adjust = 0; - } - p->p_memsz += adjust; - - if (p->p_paddr + p->p_memsz != sec->lma) - { - /* This behavior is a compromise--ld has long - silently changed the lma of sections when - lma - vma is not equal for every section in a - pheader--but only in the internal elf structures. - Silently changing the lma is probably a bug, but - changing it would have subtle and unknown - consequences for existing scripts. - - Instead modify the bfd data structure to reflect - what happened. This at least fixes the values - for the lma in the mapfile. */ sec->lma = p->p_paddr + p->p_memsz; } + p->p_memsz += adjust; if (this_hdr->sh_type != SHT_NOBITS) { @@ -4581,8 +4566,6 @@ assign_file_positions_for_load_sections (bfd *abfd, (_("%B: section `%A' can't be allocated in segment %d"), abfd, sec, j); print_segment_map (m); - bfd_set_error (bfd_error_bad_value); - return FALSE; } } } diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 3556c5bb4c3..2239cf6ab66 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-04-22 Alan Modra + + * ld-elf/extract-symbol-1sec.d: Update lma. + * ld-i386/alloc.d: Expect a warning, not an error. + 2010-04-20 Joseph Myers * ld-tic6x/data-reloc-global-rel.d, diff --git a/ld/testsuite/ld-elf/extract-symbol-1sec.d b/ld/testsuite/ld-elf/extract-symbol-1sec.d index 8dac15bbe9c..57a56625b57 100644 --- a/ld/testsuite/ld-elf/extract-symbol-1sec.d +++ b/ld/testsuite/ld-elf/extract-symbol-1sec.d @@ -8,7 +8,7 @@ #... Sections: *Idx +Name +Size +VMA +LMA .* - *0 +\.foo +0+ +0+10000 +0+ .* + *0 +\.foo +0+ +0+10000 +0+10000 .* *CONTENTS, ALLOC, LOAD, CODE *1 +\.bar +0+ +0+20000 +0+10000 .* *ALLOC, READONLY, CODE diff --git a/ld/testsuite/ld-i386/alloc.d b/ld/testsuite/ld-i386/alloc.d index c2b22f2e004..72d8e91343c 100644 --- a/ld/testsuite/ld-i386/alloc.d +++ b/ld/testsuite/ld-i386/alloc.d @@ -1,4 +1,4 @@ #name: Invalid allocated section #as: --32 #ld: -melf_i386 -T alloc.t -#error: .*section `.foo' can't be allocated in segment 0.* +#warning: .*section `.foo' can't be allocated in segment 0.*