program headers were allocated.
Wed Nov 29 12:42:36 1995 Ian Lance Taylor <ian@cygnus.com>
+ * elf.c (assign_file_positions_for_segments): Fix case where extra
+ program headers were allocated.
+
* elf.c (_bfd_elf_print_private_bfd_data): New function.
* elf-bfd.h (_bfd_elf_print_private_bfd_data): Declare.
* elfxx-target.h (bfd_elfNN_bfd_print_private_bfd_data): Define to
{
unsigned int i;
asection **secpp;
- boolean adjusted;
p->p_type = m->p_type;
if (m->p_flags_valid)
p->p_flags = m->p_flags;
+ if (p->p_type == PT_LOAD && m->count > 0)
+ off += (m->sections[0]->vma - off) % bed->maxpagesize;
+
if (m->count == 0)
p->p_vaddr = 0;
else
p->p_filesz = 0;
p->p_memsz = 0;
- adjusted = false;
if (p->p_type == PT_LOAD)
{
p->p_offset = off;
p->p_memsz = off;
p->p_vaddr -= off;
p->p_paddr -= off;
- adjusted = true;
}
if (mi->p_type == PT_PHDR)
pi_phdr = pi;
adjust = (sec->vma - off) % bed->maxpagesize;
if (adjust != 0)
{
- if (i == 0 && ! adjusted)
- p->p_offset += adjust;
- else
- {
- p->p_memsz += adjust;
- if ((flags & SEC_LOAD) != 0)
- p->p_filesz += adjust;
- }
+ if (i == 0)
+ abort ();
+ p->p_memsz += adjust;
+ if ((flags & SEC_LOAD) != 0)
+ p->p_filesz += adjust;
off += adjust;
}