* 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.
This commit is contained in:
parent
687c3cc863
commit
64f808f92b
2 changed files with 12 additions and 2 deletions
|
@ -1,3 +1,9 @@
|
|||
Wed Jul 24 12:02:53 1996 Ian Lance Taylor <ian@cygnus.com>
|
||||
|
||||
* 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 <hunt@pizza.cygnus.com>
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue