GAS: Fix MMIX err-fb-2.s regression caused by recent generic GAS changes.
authorHans-Peter Nilsson <hp@bitrange.com>
Tue, 17 Jun 2014 22:11:01 +0000 (00:11 +0200)
committerHans-Peter Nilsson <hp@bitrange.com>
Tue, 17 Jun 2014 22:11:01 +0000 (00:11 +0200)
gas/ChangeLog
gas/config/tc-mmix.c

index d75b57fef537d0c0ef1a3e454b0caf10a8df5dbf..eaf5c0364f583d9970ce3714925b5f80ae90b268 100644 (file)
@@ -1,3 +1,10 @@
+2014-06-17  Hans-Peter Nilsson  <hp@bitrange.com>
+
+       * config/tc-mmix.c (loc_assert_s): New member frag.
+       (s_loc): Set it.
+       (mmix_md_end): If an error is reported for a LOC expression, patch
+       up the related frag.
+
 2014-06-17  Chris Metcalf  <cmetcalf@tilera.com>
 
        PR gas/16908
index ab0fd0076f3705cd7869cf078e52d2f3bfed873a..7740ee23259356c0b178648a77da87105db41c12 100644 (file)
@@ -112,6 +112,7 @@ static struct loc_assert_s
  {
    segT old_seg;
    symbolS *loc_sym;
+   fragS *frag;
    struct loc_assert_s *next;
  } *loc_asserts = NULL;
 
@@ -3560,6 +3561,15 @@ mmix_md_end (void)
          as_bad_where (fnam, line,
                        _("LOC to section unknown or indeterminable "
                          "at first pass"));
+
+         /* Patch up the generic location data to avoid cascading
+            error messages from later passes.  (See original in
+            write.c:relax_segment.)  */
+         fragP = loc_assert->frag;
+         fragP->fr_type = rs_align;
+         fragP->fr_subtype = 0;
+         fragP->fr_offset = 0;
+         fragP->fr_fix = 0;
        }
     }
 
@@ -4084,6 +4094,7 @@ s_loc (int ignore ATTRIBUTE_UNUSED)
          loc_asserts->next = next;
          loc_asserts->old_seg = now_seg;
          loc_asserts->loc_sym = esym;
+         loc_asserts->frag = frag_now;
        }
 
       p = frag_var (rs_org, 1, 1, (relax_substateT) 0, sym, off, (char *) 0);