diff options
author | Alan Modra <amodra@gmail.com> | 2013-02-05 23:02:54 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2013-02-05 23:02:54 +0000 |
commit | 94d4433aa6a50ca4258164e33f6f46fdf4637346 (patch) | |
tree | b29a82651f76816b2117543f06f26b7e8d8e2756 /gas/config/tc-avr.c | |
parent | 21c238470a68b04bc286f4aa09a02e3a6596802b (diff) | |
download | gdb-94d4433aa6a50ca4258164e33f6f46fdf4637346.zip gdb-94d4433aa6a50ca4258164e33f6f46fdf4637346.tar.gz gdb-94d4433aa6a50ca4258164e33f6f46fdf4637346.tar.bz2 |
PR gas/14255
* config/tc-avr.h (TC_VALIDATE_FIX): Mark symbol used by reloc.
Don't skip fixups with fx_subsy non-NULL.
* config/tc-avr.c (tc_gen_reloc): Don't specially handle fixups
with fx_subsy non-NULL.
Diffstat (limited to 'gas/config/tc-avr.c')
-rw-r--r-- | gas/config/tc-avr.c | 24 |
1 files changed, 2 insertions, 22 deletions
diff --git a/gas/config/tc-avr.c b/gas/config/tc-avr.c index c693120..0bc972e 100644 --- a/gas/config/tc-avr.c +++ b/gas/config/tc-avr.c @@ -1386,29 +1386,9 @@ tc_gen_reloc (asection *seg ATTRIBUTE_UNUSED, { arelent *reloc; - if (fixp->fx_addsy && fixp->fx_subsy) + if (fixp->fx_subsy != NULL) { - long value = 0; - - if ((S_GET_SEGMENT (fixp->fx_addsy) != S_GET_SEGMENT (fixp->fx_subsy)) - || S_GET_SEGMENT (fixp->fx_addsy) == undefined_section) - { - as_bad_where (fixp->fx_file, fixp->fx_line, - "Difference of symbols in different sections is not supported"); - return NULL; - } - - /* We are dealing with two symbols defined in the same section. - Let us fix-up them here. */ - value += S_GET_VALUE (fixp->fx_addsy); - value -= S_GET_VALUE (fixp->fx_subsy); - - /* When fx_addsy and fx_subsy both are zero, md_apply_fix - only takes it's second operands for the fixup value. */ - fixp->fx_addsy = NULL; - fixp->fx_subsy = NULL; - md_apply_fix (fixp, (valueT *) &value, NULL); - + as_bad_where (fixp->fx_file, fixp->fx_line, _("expression too complex")); return NULL; } |