Run write_object_file after errors
authorAlan Modra <amodra@gmail.com>
Mon, 16 Jun 2014 01:34:04 +0000 (11:04 +0930)
committerAlan Modra <amodra@gmail.com>
Mon, 16 Jun 2014 03:04:45 +0000 (12:34 +0930)
commit85024cd8bcb93f4112470ecdbd6c10fc2aea724f
tree5d4ede43c60efe30ac0db22aa5a2cbe853938a19
parent97d24fbbf5300d5b03e48018454335772d9304e8
Run write_object_file after errors

This is to fix unitialised memory access when printing listings.
Many targets don't initialise parts of insn frags or data frags that
have fixups, relying on md_apply_fix to finalise the frag.  Which is
fine normally, but means we need to run write_object_file after
errors, for listings.  Otherwise MALLOC_PERTURB_=1 causes errors like:
x86_64-linux  +FAIL: i386 mpx-inval-1
x86_64-linux  +FAIL: i386 inval-equ-1
x86_64-linux  +FAIL: i386 x86-64-mpx-inval-1

Running write_object_file after errors requires some tweaking to the
testsuite, since we then get extra errors reported from md_apply_fix.

gas/
* write.h (subsegs_finish): Delete declaration.
* write.c (subsegs_finish): Make static.
(write_object_file): Call subsegs_finish from here.  Don't print
warning and error count here..
* as.c (main): ..do so here instead.  Remove dead code for "no
object file generated".  Split out count strings to better support
internationalisation.  Don't call subsegs_finish. Tidy setting of
"keep_it".  Run write_object_file even after errors.
(keep_it): Make static.
* config/obj-elf.c (elf_frob_symbol): Remove assert.
(elf_frob_file_before_adjust): Likewise.
gas/testsuite/
* gas/elf/bad-group.s: Use %function.
* gas/elf/bad-group.err: Expect correct line number.  Allow
other errors.
* gas/elf/bad-size.err: Allow other errors.  Match expected
error somewhat more rigorously.
* gas/i386/reloc32.l: Allow other errors.
* gas/i386/mpx-inval-1.l: Match applied relocs.
* gas/i386/x86-64-mpx-inval-1.l: Likewise, and nop padding.
* gas/i386/x86-64-mpx-inval-2.l: Match nop padding, and allow
other errors.
* gas/macros/dot.s: Use .balign.
* gas/macros/dot.l: Update alignment output.
* gas/symver/symver6.l: Allow other errors.
16 files changed:
gas/ChangeLog
gas/as.c
gas/config/obj-elf.c
gas/testsuite/ChangeLog
gas/testsuite/gas/elf/bad-group.err
gas/testsuite/gas/elf/bad-group.s
gas/testsuite/gas/elf/bad-size.err
gas/testsuite/gas/i386/mpx-inval-1.l
gas/testsuite/gas/i386/reloc32.l
gas/testsuite/gas/i386/x86-64-mpx-inval-1.l
gas/testsuite/gas/i386/x86-64-mpx-inval-2.l
gas/testsuite/gas/macros/dot.l
gas/testsuite/gas/macros/dot.s
gas/testsuite/gas/symver/symver6.l
gas/write.c
gas/write.h