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:
parent
4323c5ad3c
commit
f616c36b79
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user