From 64f808f92bcb3cd2e8083c4b97d09de0b83be2d6 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 24 Jul 1996 16:05:32 +0000 Subject: [PATCH] * elf.c (assign_file_positions_for_segments): Track the virtual memory position separately from the file position, and use it to compute the alignment adjustment. PR 10039. --- bfd/ChangeLog | 6 ++++++ bfd/elf.c | 8 ++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index ddd2c297b6..cfa7b40606 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +Wed Jul 24 12:02:53 1996 Ian Lance Taylor + + * elf.c (assign_file_positions_for_segments): Track the virtual + memory position separately from the file position, and use it to + compute the alignment adjustment. + start-sanitize-d10v Tue Jul 23 10:43:31 1996 Martin M. Hunt diff --git a/bfd/elf.c b/bfd/elf.c index 32d9e7a0f2..8981800060 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -1897,7 +1897,7 @@ assign_file_positions_for_segments (abfd) struct elf_segment_map *m; unsigned int alloc; Elf_Internal_Phdr *phdrs; - file_ptr off; + file_ptr off, voff; bfd_vma filehdr_vaddr, filehdr_paddr; bfd_vma phdrs_vaddr, phdrs_paddr; Elf_Internal_Phdr *p; @@ -2068,6 +2068,7 @@ assign_file_positions_for_segments (abfd) } } + voff = off; for (i = 0, secpp = m->sections; i < m->count; i++, secpp++) { asection *sec; @@ -2085,13 +2086,14 @@ assign_file_positions_for_segments (abfd) the page size. */ if ((flags & SEC_ALLOC) != 0) { - adjust = (sec->vma - off) % bed->maxpagesize; + adjust = (sec->vma - voff) % bed->maxpagesize; if (adjust != 0) { if (i == 0) abort (); p->p_memsz += adjust; off += adjust; + voff += adjust; if ((flags & SEC_LOAD) != 0) p->p_filesz += adjust; } @@ -2101,6 +2103,8 @@ assign_file_positions_for_segments (abfd) if ((flags & SEC_LOAD) != 0) off += sec->_raw_size; + if ((flags & SEC_ALLOC) != 0) + voff += sec->_raw_size; } p->p_memsz += sec->_raw_size;