From: DJ Delorie Date: Tue, 7 Jan 2003 21:27:58 +0000 (+0000) Subject: * config/tc-xstormy16.c (md_cgen_lookup_reloc): Adjust value based X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2d10acd2e442e82e94d663861ba2f4c57430fc5b;p=binutils-gdb.git * config/tc-xstormy16.c (md_cgen_lookup_reloc): Adjust value based on operand type. (xstormy16_md_apply_fix3): Use adjustment. --- 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 + + * 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 * 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; }