* PR24144, pdp11-ld overwriting section data with zeros
@ 2019-02-24 8:26 Alan Modra
0 siblings, 0 replies; only message in thread
From: Alan Modra @ 2019-02-24 8:26 UTC (permalink / raw)
To: binutils
I think this is more like Nick intended..
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.
diff --git a/bfd/pdp11.c b/bfd/pdp11.c
index a46775a4ed..b16c78f939 100644
--- a/bfd/pdp11.c
+++ b/bfd/pdp11.c
@@ -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;
diff --git a/gas/config/obj-aout.c b/gas/config/obj-aout.c
index 22e103b1e3..03e0ef3c0a 100644
--- a/gas/config/obj-aout.c
+++ b/gas/config/obj-aout.c
@@ -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
--
Alan Modra
Australia Development Lab, IBM
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2019-02-24 8:26 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-24 8:26 PR24144, pdp11-ld overwriting section data with zeros Alan Modra
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).