* write.c (fixup_segment <Difference of 2 syms same seg>): Don't
authorAlan Modra <amodra@gmail.com>
Wed, 27 Jun 2001 07:02:24 +0000 (07:02 +0000)
committerAlan Modra <amodra@gmail.com>
Wed, 27 Jun 2001 07:02:24 +0000 (07:02 +0000)
subtract MD_PCREL_FROM_SECTION for 68k.
(fixup_segment <Difference of 2 syms different seg>): Only fudge
by adding MD_PCREL_FROM_SECTION for 68k or if not already pcrel.

gas/ChangeLog
gas/write.c

index 270b2b1..426f6ac 100644 (file)
@@ -1,3 +1,10 @@
+2001-06-27  Alan Modra  <amodra@bigpond.net.au>
+
+       * write.c (fixup_segment <Difference of 2 syms same seg>): Don't
+       subtract MD_PCREL_FROM_SECTION for 68k.
+       (fixup_segment <Difference of 2 syms different seg>): Only fudge
+       by adding MD_PCREL_FROM_SECTION for 68k or if not already pcrel.
+
 2001-06-27  Tracy A. Kuhrt  <Tracy.Kuhrt@microchip.com>
 
        * write.c (fixup_segment <Difference of 2 syms same seg>): If
index b6492c2..2beb1d7 100644 (file)
@@ -2663,7 +2663,12 @@ fixup_segment (fixP, this_segment_type)
 #endif /* TC_I960  */
              add_number += (S_GET_VALUE (add_symbolP)
                             - S_GET_VALUE (sub_symbolP));
-             if (pcrel)
+             if (1
+#ifdef TC_M68K
+                 /* See the comment below about 68k weirdness.  */
+                 && 0
+#endif
+                 && pcrel)
                add_number -= MD_PCREL_FROM_SECTION (fixP, this_segment_type);
 
              add_symbolP = NULL;
@@ -2689,21 +2694,26 @@ fixup_segment (fixP, this_segment_type)
                add_number -= S_GET_VALUE (sub_symbolP);
 
 #ifdef DIFF_EXPR_OK
-             else if (S_GET_SEGMENT (sub_symbolP) == this_segment_type
-#if 0
-                      /* Do this even if it's already described as
-                         pc-relative.  For example, on the m68k, an
-                         operand of "pc@(foo-.-2)" should address
-                         "foo" in a pc-relative mode.  */
-                      && pcrel
-#endif
-                      )
+             else if (S_GET_SEGMENT (sub_symbolP) == this_segment_type)
                {
                  /* Make it pc-relative.  */
-                 add_number += (MD_PCREL_FROM_SECTION (fixP, this_segment_type)
-                                - S_GET_VALUE (sub_symbolP));
-                 pcrel = 1;
-                 fixP->fx_pcrel = 1;
+                 if (0
+#ifdef TC_M68K
+                     /* Do this for m68k even if it's already described
+                        as pc-relative.  On the m68k, an operand of
+                        "pc@(foo-.-2)" should address "foo" in a
+                        pc-relative mode.  */
+                     || 1
+#endif
+                     || !pcrel)
+                   {
+                     add_number += MD_PCREL_FROM_SECTION (fixP,
+                                                          this_segment_type);
+                     pcrel = 1;
+                     fixP->fx_pcrel = 1;
+                   }
+
+                 add_number -= S_GET_VALUE (sub_symbolP);
                  sub_symbolP = 0;
                  fixP->fx_subsy = 0;
                }