diff options
author | Alan Modra <amodra@gmail.com> | 2019-02-24 16:44:48 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2019-02-24 18:57:04 +1030 |
commit | f616c36b79d0776e51213b177e45a0f5d386cc58 (patch) | |
tree | 565d71b6f7fde2bacedacf2c8be9ddce7ce43b61 /gas | |
parent | 4323c5ad3cbcb2a3d2178d778278109f24071b26 (diff) | |
download | gdb-f616c36b79d0776e51213b177e45a0f5d386cc58.zip gdb-f616c36b79d0776e51213b177e45a0f5d386cc58.tar.gz gdb-f616c36b79d0776e51213b177e45a0f5d386cc58.tar.bz2 |
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.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 6 | ||||
-rw-r--r-- | gas/config/obj-aout.c | 32 |
2 files changed, 27 insertions, 11 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index a301c04..03c9b4e 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -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. diff --git a/gas/config/obj-aout.c b/gas/config/obj-aout.c index 22e103b..03e0ef3 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 |