* config/tc-mips.c (mips16_extended_frag): Don't assume that we
authorIan Lance Taylor <ian@airs.com>
Sat, 1 Mar 1997 06:10:58 +0000 (06:10 +0000)
committerIan Lance Taylor <ian@airs.com>
Sat, 1 Mar 1997 06:10:58 +0000 (06:10 +0000)
can rely on the frag address to determine whether a frag is
earlier or later.

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

index adcd663589f9d4df3de41b90b219d329dd60ef10..90cde168a9c8b34a28ea3bff974b4ebae7f6a8d2 100644 (file)
@@ -1,3 +1,9 @@
+Sat Mar  1 01:04:04 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * config/tc-mips.c (mips16_extended_frag): Don't assume that we
+       can rely on the frag address to determine whether a frag is
+       earlier or later.
+
 Fri Feb 28 14:40:00 1997  Ian Lance Taylor  <ian@cygnus.com>
 
        * write.h (LOCAL_LABEL): Only define if not BFD_ASSEMBLER.
index 31b5d1f352899f305105c357eae2b50599b34323..5290f3b9d68a984f5369ce94b3bf9d456e788dcc 100644 (file)
@@ -9787,12 +9787,16 @@ mips16_extended_frag (fragp, sec, stretch)
        {
          fragS *f;
 
-         /* Adjust stretch for any alignment frag.  FIXME: This
-             doesn't handle the fr_subtype field, which specifies a
-             maximum number of bytes to skip when doing an alignment.  */
-         for (f = fragp; f != fragp->fr_symbol->sy_frag; f = f->fr_next)
+         /* Adjust stretch for any alignment frag.  Note that if have
+             been expanding the earlier code, the symbol may be
+             defined in what appears to be an earlier frag.  FIXME:
+             This doesn't handle the fr_subtype field, which specifies
+             a maximum number of bytes to skip when doing an
+             alignment.  */
+         for (f = fragp;
+              f != NULL && f != fragp->fr_symbol->sy_frag;
+              f = f->fr_next)
            {
-             assert (f != NULL);
              if (f->fr_type == rs_align || f->fr_type == rs_align_code)
                {
                  if (stretch < 0)
@@ -9804,7 +9808,8 @@ mips16_extended_frag (fragp, sec, stretch)
                    break;
                }
            }
-         val += stretch;
+         if (f != NULL)
+           val += stretch;
        }
 
       addr = fragp->fr_address + fragp->fr_fix;