aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2003-01-07 21:27:58 +0000
committerDJ Delorie <dj@redhat.com>2003-01-07 21:27:58 +0000
commit2d10acd2e442e82e94d663861ba2f4c57430fc5b (patch)
treebd10fea6ac389fef26c853b1526db8b32497a086
parent33d9fdd0d8ca9a8cf258dbf2795c5877d47f342a (diff)
downloadgdb-2d10acd2e442e82e94d663861ba2f4c57430fc5b.zip
gdb-2d10acd2e442e82e94d663861ba2f4c57430fc5b.tar.gz
gdb-2d10acd2e442e82e94d663861ba2f4c57430fc5b.tar.bz2
* config/tc-xstormy16.c (md_cgen_lookup_reloc): Adjust value based
on operand type. (xstormy16_md_apply_fix3): Use adjustment.
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/config/tc-xstormy16.c13
2 files changed, 17 insertions, 2 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 3216c09..54d04b1 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2003-01-07 DJ Delorie <dj@redhat.com>
+
+ * config/tc-xstormy16.c (md_cgen_lookup_reloc): Adjust value based
+ on operand type.
+ (xstormy16_md_apply_fix3): Use adjustment.
+
2003-01-02 Ben Elliston <bje@redhat.com>
* configure.in: Add iq2000-elf target.
diff --git a/gas/config/tc-xstormy16.c b/gas/config/tc-xstormy16.c
index 2e006a8..cf57bd9 100644
--- a/gas/config/tc-xstormy16.c
+++ b/gas/config/tc-xstormy16.c
@@ -352,8 +352,10 @@ md_cgen_lookup_reloc (insn, operand, fixP)
case XSTORMY16_OPERAND_ABS24:
return BFD_RELOC_XSTORMY16_24;
- case XSTORMY16_OPERAND_REL8_2:
case XSTORMY16_OPERAND_REL8_4:
+ fixP->fx_addnumber -= 2;
+ case XSTORMY16_OPERAND_REL8_2:
+ fixP->fx_addnumber -= 2;
fixP->fx_pcrel = 1;
return BFD_RELOC_8_PCREL;
@@ -361,6 +363,7 @@ md_cgen_lookup_reloc (insn, operand, fixP)
fixP->fx_where += 2;
/* Fall through... */
case XSTORMY16_OPERAND_REL12A:
+ fixP->fx_addnumber -= 2;
fixP->fx_pcrel = 1;
return BFD_RELOC_XSTORMY16_REL_12;
@@ -423,6 +426,12 @@ xstormy16_md_apply_fix3 (fixP, valueP, seg)
/* Canonical name, since used a lot. */
CGEN_CPU_DESC cd = gas_cgen_cpu_desc;
+ /* md_cgen_lookup_reloc() will adjust this to compensate for where
+ in the opcode the relocation happens, for pcrel relocations. We
+ have no other way of keeping track of what this offset needs to
+ be. */
+ fixP->fx_addnumber = 0;
+
/* This port has pc-relative relocs and DIFF_EXPR_OK defined, so
it must deal with turning a BFD_RELOC_{8,16,32,64} into a
BFD_RELOC_*_PCREL for the case of
@@ -556,7 +565,7 @@ xstormy16_md_apply_fix3 (fixP, valueP, seg)
/* Tuck `value' away for use by tc_gen_reloc.
See the comment describing fx_addnumber in write.h.
This field is misnamed (or misused :-). */
- fixP->fx_addnumber = value;
+ fixP->fx_addnumber += value;
}