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>
* 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
|| bfd_bwrite (location, count, abfd) != count)
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;

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>
* 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.
Since writing to a section will cause the BFD back end to compute the
VMAs, fake it out here.... */
bfd_byte b = 0;
bfd_boolean x = TRUE;
if (bfd_section_size (stdoutput, text_section) != 0)
x = bfd_set_section_contents (stdoutput, text_section, &b, (file_ptr) 0,
(bfd_size_type) 1);
else if (bfd_section_size (stdoutput, data_section) != 0)
x = bfd_set_section_contents (stdoutput, data_section, &b, (file_ptr) 0,
(bfd_size_type) 1);
gas_assert (x);
VMAs, fake it out here....
Writing to the end of the section ensures the file contents
extend to cover the entire aligned size. We possibly won't know
the aligned size until after VMAs and sizes are set on the first
bfd_set_section_contents call, so it might be necessary to repeat. */
asection *sec = NULL;
if (data_section->size != 0)
sec = data_section;
else if (text_section->size != 0)
sec = text_section;
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