PR24144, pdp11-ld overwriting section data with zeros

bfd/
	PR 24144
	* pdp11.c (set_section_contents): Revert 2015-02-24 change.
gas/
	PR 24144
	* config/obj-aout.c (obj_aout_frob_file_before_fix): Write to end
	of section to ensure file contents cover aligned section size.
This commit is contained in:
Alan Modra
2019-02-24 16:44:48 +10:30
parent 4323c5ad3c
commit f616c36b79
4 changed files with 32 additions and 19 deletions

View File

@ -1,3 +1,8 @@
2019-02-24 Alan Modra <amodra@gmail.com>
PR 24144
* pdp11.c (set_section_contents): Revert 2015-02-24 change.
2019-02-20 Eric Tsai <erictsai@cadence.com> 2019-02-20 Eric Tsai <erictsai@cadence.com>
* elf32-xtensa.c (is_resolvable_asm_expansion): Scan output * elf32-xtensa.c (is_resolvable_asm_expansion): Scan output

View File

@ -1146,14 +1146,6 @@ NAME (aout, set_section_contents) (bfd *abfd,
if (bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0 if (bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0
|| bfd_bwrite (location, count, abfd) != count) || bfd_bwrite (location, count, abfd) != count)
return FALSE; return FALSE;
/* If necessary, pad the section to its aligned size. */
if ((section == obj_datasec (abfd)
|| section == obj_textsec (abfd))
&& count < section->size
&& (bfd_seek (abfd, section->filepos + offset + section->size - 1, SEEK_SET) != 0
|| bfd_bwrite ("", 1, abfd) != 1))
return FALSE;
} }
return TRUE; return TRUE;

View File

@ -1,3 +1,9 @@
2019-02-24 Alan Modra <amodra@gmail.com>
PR 24144
* config/obj-aout.c (obj_aout_frob_file_before_fix): Write to end
of section to ensure file contents cover aligned section size.
2019-02-22 Kyrylo Tkachov <kyrylo.tkachov@arm.com> 2019-02-22 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* config/tc-arm.c (arm_cpus): Add neoverse-n1. * config/tc-arm.c (arm_cpus): Add neoverse-n1.

View File

@ -118,17 +118,27 @@ obj_aout_frob_file_before_fix (void)
{ {
/* Relocation processing may require knowing the VMAs of the sections. /* Relocation processing may require knowing the VMAs of the sections.
Since writing to a section will cause the BFD back end to compute the Since writing to a section will cause the BFD back end to compute the
VMAs, fake it out here.... */ VMAs, fake it out here....
bfd_byte b = 0; Writing to the end of the section ensures the file contents
bfd_boolean x = TRUE; extend to cover the entire aligned size. We possibly won't know
if (bfd_section_size (stdoutput, text_section) != 0) the aligned size until after VMAs and sizes are set on the first
x = bfd_set_section_contents (stdoutput, text_section, &b, (file_ptr) 0, bfd_set_section_contents call, so it might be necessary to repeat. */
(bfd_size_type) 1); asection *sec = NULL;
else if (bfd_section_size (stdoutput, data_section) != 0) if (data_section->size != 0)
x = bfd_set_section_contents (stdoutput, data_section, &b, (file_ptr) 0, sec = data_section;
(bfd_size_type) 1); else if (text_section->size != 0)
sec = text_section;
gas_assert (x); if (sec)
{
bfd_size_type size;
do
{
bfd_byte b = 0;
size = sec->size;
gas_assert (bfd_set_section_contents (stdoutput, sec, &b,
size - 1, (bfd_size_type) 1));
} while (size != sec->size);
}
} }
static void static void