PR ld/7028

* elf.c (assign_file_positions_for_load_sections): Allocate phrds
	with bfd_zalloc2 instead of bfd_alloc2.  For the amount, use
	the possibly-preset header-size, not the computed one.
This commit is contained in:
Hans-Peter Nilsson 2008-11-13 03:01:15 +00:00
parent 84290f2fa2
commit 5726889422
2 changed files with 22 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2008-11-13 Hans-Peter Nilsson <hp@axis.com>
PR ld/7028
* elf.c (assign_file_positions_for_load_sections): Allocate phrds
with bfd_zalloc2 instead of bfd_alloc2. For the amount, use
the possibly-preset header-size, not the computed one.
2008-11-13 Alan Modra <amodra@bigpond.net.au>
PR 7023

View File

@ -4183,7 +4183,21 @@ assign_file_positions_for_load_sections (bfd *abfd,
return TRUE;
}
phdrs = bfd_alloc2 (abfd, alloc, sizeof (Elf_Internal_Phdr));
/* We're writing the size in elf_tdata (abfd)->program_header_size,
see assign_file_positions_except_relocs, so make sure we have
that amount allocated, with trailing space cleared.
The variable alloc contains the computed need, while elf_tdata
(abfd)->program_header_size contains the size used for the
layout.
See ld/emultempl/elf-generic.em:gld${EMULATION_NAME}_map_segments
where the layout is forced to according to a larger size in the
last iterations for the testcase ld-elf/header. */
BFD_ASSERT (elf_tdata (abfd)->program_header_size % bed->s->sizeof_phdr
== 0);
phdrs = bfd_zalloc2 (abfd,
(elf_tdata (abfd)->program_header_size
/ bed->s->sizeof_phdr),
sizeof (Elf_Internal_Phdr));
elf_tdata (abfd)->phdr = phdrs;
if (phdrs == NULL)
return FALSE;