diff options
author | DJ Delorie <dj@redhat.com> | 2003-01-07 21:27:58 +0000 |
---|---|---|
committer | DJ Delorie <dj@redhat.com> | 2003-01-07 21:27:58 +0000 |
commit | 2d10acd2e442e82e94d663861ba2f4c57430fc5b (patch) | |
tree | bd10fea6ac389fef26c853b1526db8b32497a086 | |
parent | 33d9fdd0d8ca9a8cf258dbf2795c5877d47f342a (diff) | |
download | binutils-gdb-2d10acd2e442e82e94d663861ba2f4c57430fc5b.tar.gz |
* config/tc-xstormy16.c (md_cgen_lookup_reloc): Adjust value based
on operand type.
(xstormy16_md_apply_fix3): Use adjustment.
-rw-r--r-- | gas/ChangeLog | 6 | ||||
-rw-r--r-- | gas/config/tc-xstormy16.c | 13 |
2 files changed, 17 insertions, 2 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 3216c0958bc..54d04b18083 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 2e006a83347..cf57bd9edcc 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; } |