diff options
author | Alan Modra <amodra@gmail.com> | 2021-07-21 14:39:29 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2021-07-21 19:35:34 +0930 |
commit | 4bf094292c72b6d316a72ddc60739466c5085d3d (patch) | |
tree | f76789cd3103c27fb5f2ff965ff2b0bf29e6e72e /gas/write.c | |
parent | e28a9225b85f2ee76760b4b93116a5630bdd0699 (diff) | |
download | gdb-4bf094292c72b6d316a72ddc60739466c5085d3d.zip gdb-4bf094292c72b6d316a72ddc60739466c5085d3d.tar.gz gdb-4bf094292c72b6d316a72ddc60739466c5085d3d.tar.bz2 |
as_bad_subtract
Many places report errors of the nature "can't resolve a - b".
This provides a utility function to report such errors consistently.
I removed the section reporting and quotes around symbol names while I
was at it. Compare
ifunc-2.s:4: Error: can't resolve `bar1' {.text.1 section} - `foo1' {.text.1 section}
with
ifunc-2.s:4: Error: can't resolve bar1 - foo1
In many cases the section names don't help the user very much in
figuring out what went wrong, and the quotes if present arguably ought
to be placed around the entire expression:
can't resolve `bar1 - foo1'
The patch also tidies some tc_get_reloc functions that leak memory on
error paths.
* write.h (as_bad_subtract): Declare.
* write.c (as_bad_subtract): New function.
(fixup_segment): Use as_bad_subtract.
* config/tc-arc.c (md_apply_fix): Likewise.
* config/tc-avr.c (md_apply_fix, tc_gen_reloc): Likewise.
* config/tc-cris.c (md_apply_fix): Likewise.
* config/tc-d10v.c (md_apply_fix): Likewise.
* config/tc-d30v.c (md_apply_fix): Likewise.
* config/tc-ft32.c (md_apply_fix): Likewise.
* config/tc-h8300.c (tc_gen_reloc): Likewise.
* config/tc-m68hc11.c (md_apply_fix): Likewise.
* config/tc-mmix.c (mmix_frob_file): Likewise.
* config/tc-mn10200.c (tc_gen_reloc): Likewise.
* config/tc-nds32.c (nds32_apply_fix): Likewise.
* config/tc-pru.c (md_apply_fix): Likewise.
* config/tc-riscv.c (md_apply_fix): Likewise.
* config/tc-s12z.c (md_apply_fix): Likewise.
* config/tc-s390.c (md_apply_fix): Likewise.
* config/tc-tilegx.c (md_apply_fix): Likewise.
* config/tc-tilepro.c (md_apply_fix): Likewise.
* config/tc-v850.c (md_apply_fix): Likewise.
* config/tc-vax.c (md_apply_fix): Likewise.
* config/tc-xc16x.c (tc_gen_reloc): Likewise.
* config/tc-xgate.c (md_apply_fix): Likewise.
* config/tc-xstormy16.c (xstormy16_md_apply_fix): Likewise.
* config/tc-xtensa.c (md_apply_fix): Likewise.
* config/tc-z80.c (tc_gen_reloc): Likewise.
* config/tc-spu.c (md_apply_fix): Likewise.
(tc_gen_reloc): Delete dead code. Free memory on error.
* config/tc-cr16.c (tc_gen_reloc): Use as_bad_subtract. Free
on error.
* config/tc-crx.c (tc_gen_reloc): Likewise.
* config/tc-ppc.c (tc_gen_reloc): Likewise.
* testsuite/gas/i386/ifunc-2.l: Adjust to suit changed error message.
* testsuite/gas/mips/lui-2.l: Likewise.
* testsuite/gas/tic6x/reloc-bad-1.l: Likewise.
Diffstat (limited to 'gas/write.c')
-rw-r--r-- | gas/write.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/gas/write.c b/gas/write.c index 2d67f16..253dfc4 100644 --- a/gas/write.c +++ b/gas/write.c @@ -899,6 +899,15 @@ adjust_reloc_syms (bfd *abfd ATTRIBUTE_UNUSED, dump_section_relocs (abfd, sec, stderr); } +void +as_bad_subtract (fixS *fixp) +{ + as_bad_where (fixp->fx_file, fixp->fx_line, + _("can't resolve %s - %s"), + fixp->fx_addsy ? S_GET_NAME (fixp->fx_addsy) : "0", + S_GET_NAME (fixp->fx_subsy)); +} + /* fixup_segment() Go through all the fixS's in a segment and see which ones can be @@ -1021,12 +1030,7 @@ fixup_segment (fixS *fixP, segT this_segment) as_bad_where (fixP->fx_file, fixP->fx_line, _("register value used as expression")); else - as_bad_where (fixP->fx_file, fixP->fx_line, - _("can't resolve `%s' {%s section} - `%s' {%s section}"), - fixP->fx_addsy ? S_GET_NAME (fixP->fx_addsy) : "0", - segment_name (add_symbol_segment), - S_GET_NAME (fixP->fx_subsy), - segment_name (sub_symbol_segment)); + as_bad_subtract (fixP); } else if (sub_symbol_segment != undefined_section && ! bfd_is_com_section (sub_symbol_segment) |