PR 10494
authorAlan Modra <amodra@gmail.com>
Sat, 8 Aug 2009 01:43:28 +0000 (01:43 +0000)
committerAlan Modra <amodra@gmail.com>
Sat, 8 Aug 2009 01:43:28 +0000 (01:43 +0000)
* elf.c (_bfd_elf_make_section_from_shdr): When setting up section
LMAs, use ELF_IS_SECTION_IN_SEGMENT to match sections with headers.

bfd/ChangeLog
bfd/elf.c

index e7d0e94..51b337c 100644 (file)
@@ -1,3 +1,9 @@
+2009-08-08  Alan Modra  <amodra@bigpond.net.au>
+
+       PR 10494
+       * elf.c (_bfd_elf_make_section_from_shdr): When setting up section
+       LMAs, use ELF_IS_SECTION_IN_SEGMENT to match sections with headers.
+
 2009-08-07  Tom Tromey  <tromey@redhat.com>
 
        * elf32-microblaze.c (microblaze_elf_check_relocs): Avoid strict
index 85829ec..408cebd 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -971,25 +971,8 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
       phdr = elf_tdata (abfd)->phdr;
       for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
        {
-         /* This section is part of this segment if its file
-            offset plus size lies within the segment's memory
-            span and, if the section is loaded, the extent of the
-            loaded data lies within the extent of the segment.
-
-            Note - we used to check the p_paddr field as well, and
-            refuse to set the LMA if it was 0.  This is wrong
-            though, as a perfectly valid initialised segment can
-            have a p_paddr of zero.  Some architectures, eg ARM,
-            place special significance on the address 0 and
-            executables need to be able to have a segment which
-            covers this address.  */
          if (phdr->p_type == PT_LOAD
-             && (bfd_vma) hdr->sh_offset >= phdr->p_offset
-             && (hdr->sh_offset + hdr->sh_size
-                 <= phdr->p_offset + phdr->p_memsz)
-             && ((flags & SEC_LOAD) == 0
-                 || (hdr->sh_offset + hdr->sh_size
-                     <= phdr->p_offset + phdr->p_filesz)))
+             && ELF_IS_SECTION_IN_SEGMENT (hdr, phdr))
            {
              if ((flags & SEC_LOAD) == 0)
                newsect->lma = (phdr->p_paddr