diff options
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 7 | ||||
-rw-r--r-- | bfd/elf.c | 16 |
2 files changed, 22 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 3d5c022..4610334 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -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 @@ -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; |