From 44ef8897daee098e361b279406693bc6849c61e5 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 29 Nov 1995 19:14:33 +0000 Subject: [PATCH] * elf.c (assign_file_positions_for_segments): Fix case where extra program headers were allocated. --- bfd/ChangeLog | 3 +++ bfd/elf.c | 19 ++++++++----------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 7e5b6947f3..d9c4856c47 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,8 @@ Wed Nov 29 12:42:36 1995 Ian Lance Taylor + * 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 diff --git a/bfd/elf.c b/bfd/elf.c index b00997fa52..ba00bc8d0c 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -1835,13 +1835,15 @@ assign_file_positions_for_segments (abfd) { 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 @@ -1864,7 +1866,6 @@ assign_file_positions_for_segments (abfd) p->p_filesz = 0; p->p_memsz = 0; - adjusted = false; if (p->p_type == PT_LOAD) { p->p_offset = off; @@ -1890,7 +1891,6 @@ assign_file_positions_for_segments (abfd) p->p_memsz = off; p->p_vaddr -= off; p->p_paddr -= off; - adjusted = true; } if (mi->p_type == PT_PHDR) pi_phdr = pi; @@ -1927,14 +1927,11 @@ assign_file_positions_for_segments (abfd) 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; }