* config/obj-coffbfd.c (fixup_segment): If TC_M88K, don't adjust
authorIan Lance Taylor <ian@airs.com>
Thu, 15 Jul 1993 20:23:43 +0000 (20:23 +0000)
committerIan Lance Taylor <ian@airs.com>
Thu, 15 Jul 1993 20:23:43 +0000 (20:23 +0000)
by md_pcrel_from if we are relocating against a symbol (we still
need md_pcrel_from for a PC relative relocation within the same
file).
* config/tc-m88k.c (md_pcrel_from): Corrected return value.

gas/ChangeLog
gas/config/obj-coffbfd.c
gas/config/tc-m88k.c

index 8b331fd..f4d86ea 100644 (file)
@@ -1,5 +1,11 @@
 Thu Jul 15 11:51:03 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
 
+       * config/obj-coffbfd.c (fixup_segment): If TC_M88K, don't adjust
+       by md_pcrel_from if we are relocating against a symbol (we still
+       need md_pcrel_from for a PC relative relocation within the same
+       file).
+       * config/tc-m88k.c (md_pcrel_from): Corrected return value.
+
        * Preliminary support for m88k-coff.
        * configure.in (m88k-*-coff*): New target.  Use coffbfd and
        m88kcoff.
index 0496739..a54ed98 100644 (file)
@@ -2529,7 +2529,11 @@ DEFUN (fixup_segment, (segP, this_segment_type),
 
       if (pcrel)
        {
+#ifndef TC_M88K
+         /* This adjustment is not correct on the m88k, for which the
+            linker does all the computation.  */
          add_number -= md_pcrel_from (fixP);
+#endif
          if (add_symbolP == 0)
            {
              fixP->fx_addsy = &abs_symbol;
index 2178be3..5c8d602 100644 (file)
@@ -1442,7 +1442,16 @@ long
 md_pcrel_from (fixp)
      fixS *fixp;
 {
-  return fixp->fx_frag->fr_address + fixp->fx_where + 4;
+  switch (fixp->fx_r_type)
+    {
+    case RELOC_PC16:
+      return fixp->fx_frag->fr_address + fixp->fx_where - 2;
+    case RELOC_PC26:
+      return fixp->fx_frag->fr_address + fixp->fx_where;
+    default:
+      abort ();
+    }
+  /*NOTREACHED*/
 }
 
 #endif /* M88KCOFF */