* config/tc-xstormy16.c (md_cgen_lookup_reloc): Adjust value based
authorDJ Delorie <dj@redhat.com>
Tue, 7 Jan 2003 21:27:58 +0000 (21:27 +0000)
committerDJ Delorie <dj@redhat.com>
Tue, 7 Jan 2003 21:27:58 +0000 (21:27 +0000)
on operand type.
(xstormy16_md_apply_fix3): Use adjustment.

gas/ChangeLog
gas/config/tc-xstormy16.c

index 3216c0958bca105613c8fff669c79a83b18e795a..54d04b180832383b0c356094bd059ee3d7417099 100644 (file)
@@ -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.
index 2e006a83347d900e4105fdcf072130371f6c95f2..cf57bd9edcc214b2af47987e6a23126a6f8a663e 100644 (file)
@@ -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;
 }
 
 \f