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....
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; bfd_byte b = 0;
bfd_boolean x = TRUE; size = sec->size;
if (bfd_section_size (stdoutput, text_section) != 0) gas_assert (bfd_set_section_contents (stdoutput, sec, &b,
x = bfd_set_section_contents (stdoutput, text_section, &b, (file_ptr) 0, size - 1, (bfd_size_type) 1));
(bfd_size_type) 1); } while (size != sec->size);
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);
} }
static void static void