diff options
author | Hans-Peter Nilsson <hp@axis.com> | 2008-11-13 03:01:15 +0000 |
---|---|---|
committer | Hans-Peter Nilsson <hp@axis.com> | 2008-11-13 03:01:15 +0000 |
commit | 5726889422ca1dd271be75f64a0f152c04bc1476 (patch) | |
tree | 1b42a13bb6da9f40c3fd3262a3c155f4855c9a35 /bfd/elf.c | |
parent | 84290f2fa20e40e8a5288b7d6236d0f4bdb22ca0 (diff) | |
download | gdb-5726889422ca1dd271be75f64a0f152c04bc1476.zip gdb-5726889422ca1dd271be75f64a0f152c04bc1476.tar.gz gdb-5726889422ca1dd271be75f64a0f152c04bc1476.tar.bz2 |
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.
Diffstat (limited to 'bfd/elf.c')
-rw-r--r-- | bfd/elf.c | 16 |
1 files changed, 15 insertions, 1 deletions
@@ -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; |