aboutsummaryrefslogtreecommitdiff
path: root/bfd/elf.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2005-05-19 06:51:01 +0000
committerAlan Modra <amodra@gmail.com>2005-05-19 06:51:01 +0000
commita49e53ed184b89cc31ae70d7db62e485ad6044d1 (patch)
tree3e25ddb700eee02643b859c7a7068968f7650570 /bfd/elf.c
parent4600db4835639751fda271513fa57e375e334e5e (diff)
downloadbinutils-a49e53ed184b89cc31ae70d7db62e485ad6044d1.zip
binutils-a49e53ed184b89cc31ae70d7db62e485ad6044d1.tar.gz
binutils-a49e53ed184b89cc31ae70d7db62e485ad6044d1.tar.bz2
* elf.c (assign_file_positions_for_segments): Use maximum of
maxpagesize and section alignment when adjusting initial segment offset and section offsets.
Diffstat (limited to 'bfd/elf.c')
-rw-r--r--bfd/elf.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/bfd/elf.c b/bfd/elf.c
index 2f610ba..b68a21f 100644
--- 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,