* elf.c (assign_file_positions_for_segments): Use maximum of
authorAlan Modra <amodra@gmail.com>
Thu, 19 May 2005 06:51:01 +0000 (06:51 +0000)
committerAlan Modra <amodra@gmail.com>
Thu, 19 May 2005 06:51:01 +0000 (06:51 +0000)
maxpagesize and section alignment when adjusting initial
segment offset and section offsets.

bfd/ChangeLog
bfd/elf.c

index 637d162d87daabe2da9163262ff1a3578612796d..7998a65d0891dc3eb2bd2625e2a446c69e87e89f 100644 (file)
@@ -1,3 +1,9 @@
+2005-05-19  Alan Modra  <amodra@bigpond.net.au>
+
+       * elf.c (assign_file_positions_for_segments): Use maximum of
+       maxpagesize and section alignment when adjusting initial
+       segment offset and section offsets.
+
 2005-05-18  Zack Weinberg  <zack@codesourcery.com>
 
        * elf32-arm.c: Make all #ifndef OLD_ARM_ABI blocks
index 2f610ba7ea85832581c6a00c474246797cfc88d1..b68a21f47c1df0e6099778b04e4d8a0967b53207 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -4151,22 +4151,20 @@ assign_file_positions_for_segments (bfd *abfd, struct bfd_link_info *link_info)
        {
          bfd_size_type align;
          bfd_vma adjust;
+         unsigned int align_power = 0;
 
-         if ((abfd->flags & D_PAGED) != 0)
-           align = bed->maxpagesize;
-         else
+         for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
            {
-             unsigned int align_power = 0;
-             for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
-               {
-                 unsigned int secalign;
+             unsigned int secalign;
 
-                 secalign = bfd_get_section_alignment (abfd, *secpp);
-                 if (secalign > align_power)
-                   align_power = secalign;
-               }
-             align = (bfd_size_type) 1 << align_power;
+             secalign = bfd_get_section_alignment (abfd, *secpp);
+             if (secalign > align_power)
+               align_power = secalign;
            }
+         align = (bfd_size_type) 1 << align_power;
+
+         if ((abfd->flags & D_PAGED) != 0 && bed->maxpagesize > align)
+           align = bed->maxpagesize;
 
          adjust = vma_page_aligned_bias (m->sections[0]->vma, off, align);
          off += adjust;
@@ -4352,7 +4350,7 @@ assign_file_positions_for_segments (bfd *abfd, struct bfd_link_info *link_info)
                  /* The section VMA must equal the file position
                     modulo the page size.  */
                  bfd_size_type page = align;
-                 if ((abfd->flags & D_PAGED) != 0)
+                 if ((abfd->flags & D_PAGED) != 0 && bed->maxpagesize > page)
                    page = bed->maxpagesize;
                  adjust = vma_page_aligned_bias (sec->vma,
                                                  p->p_vaddr + p->p_memsz,