From: Hans-Peter Nilsson Date: Thu, 13 Nov 2008 03:01:15 +0000 (+0000) Subject: PR ld/7028 X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=5726889422ca1dd271be75f64a0f152c04bc1476;p=deliverable%2Fbinutils-gdb.git 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. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 3d5c0226b9..461033407b 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2008-11-13 Hans-Peter Nilsson + + 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 PR 7023 diff --git a/bfd/elf.c b/bfd/elf.c index cb7d2fc3e4..3d52724010 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -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;