From 2d10acd2e442e82e94d663861ba2f4c57430fc5b Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Tue, 7 Jan 2003 21:27:58 +0000 Subject: * config/tc-xstormy16.c (md_cgen_lookup_reloc): Adjust value based on operand type. (xstormy16_md_apply_fix3): Use adjustment. --- gas/config/tc-xstormy16.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'gas/config') 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; } -- cgit v1.1