diff options
author | Alan Modra <amodra@gmail.com> | 2014-06-16 11:04:04 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2014-06-16 12:34:45 +0930 |
commit | 85024cd8bcb93f4112470ecdbd6c10fc2aea724f (patch) | |
tree | 5d4ede43c60efe30ac0db22aa5a2cbe853938a19 /gas/write.c | |
parent | 97d24fbbf5300d5b03e48018454335772d9304e8 (diff) | |
download | gdb-85024cd8bcb93f4112470ecdbd6c10fc2aea724f.zip gdb-85024cd8bcb93f4112470ecdbd6c10fc2aea724f.tar.gz gdb-85024cd8bcb93f4112470ecdbd6c10fc2aea724f.tar.bz2 |
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.
Diffstat (limited to 'gas/write.c')
-rw-r--r-- | gas/write.c | 27 |
1 files changed, 3 insertions, 24 deletions
diff --git a/gas/write.c b/gas/write.c index 4ab275d..d1918e6 100644 --- a/gas/write.c +++ b/gas/write.c @@ -1692,7 +1692,7 @@ set_symtab (void) #endif #endif -void +static void subsegs_finish (void) { struct frchain *frchainP; @@ -1761,33 +1761,12 @@ write_object_file (void) fragS *fragP; /* Track along all frags. */ #endif + subsegs_finish (); + #ifdef md_pre_output_hook md_pre_output_hook; #endif - /* Do we really want to write it? */ - { - int n_warns, n_errs; - n_warns = had_warnings (); - n_errs = had_errors (); - /* The -Z flag indicates that an object file should be generated, - regardless of warnings and errors. */ - if (flag_always_generate_output) - { - if (n_warns || n_errs) - as_warn (_("%d error%s, %d warning%s, generating bad object file"), - n_errs, n_errs == 1 ? "" : "s", - n_warns, n_warns == 1 ? "" : "s"); - } - else - { - if (n_errs) - as_fatal (_("%d error%s, %d warning%s, no object file generated"), - n_errs, n_errs == 1 ? "" : "s", - n_warns, n_warns == 1 ? "" : "s"); - } - } - #ifdef md_pre_relax_hook md_pre_relax_hook; #endif |