* write.c (relax_segment): Correct address on frag added to stop
authorAlan Modra <amodra@gmail.com>
Tue, 19 Oct 2010 12:14:23 +0000 (12:14 +0000)
committerAlan Modra <amodra@gmail.com>
Tue, 19 Oct 2010 12:14:23 +0000 (12:14 +0000)
leb128/align frags bouncing.

gas/ChangeLog
gas/write.c

index 905ba0d3471a29d78e250949c019011d80aa9d35..0bd94f18d9969934d75f314ec7857f1c3f1bc291 100644 (file)
@@ -1,3 +1,8 @@
+2010-10-19  Alan Modra  <amodra@gmail.com>
+
+       * write.c (relax_segment): Correct address on frag added to stop
+       leb128/align frags bouncing.
+
 2010-10-19  Alan Modra  <amodra@gmail.com>
 
        PR gas/12049
index 62f196c0de556f2d66d7d837346cb09d6aa936f2..080216a24097f57e30d3fb69a0991c420f83540f 100644 (file)
@@ -2525,6 +2525,7 @@ relax_segment (struct frag *segment_frag_root, segT segment, int pass)
                              fragP->fr_literal + fragP->fr_fix,
                              fragP->fr_var);
                      newf->fr_type = rs_fill;
+                     newf->fr_address = address + fragP->fr_fix + newoff;
                      newf->fr_fix = 0;
                      newf->fr_offset = (((offsetT) 1 << fragP->fr_offset)
                                         / fragP->fr_var);
@@ -2534,13 +2535,11 @@ relax_segment (struct frag *segment_frag_root, segT segment, int pass)
                          newf->fr_offset = (offsetT) 1 << fragP->fr_offset;
                          newf->fr_var = 1;
                        }
-                     /* Include growth of new frag, because rs_fill
-                        frags don't normally grow.  */
+                     /* Include size of new frag in GROWTH.  */
                      growth += newf->fr_offset * newf->fr_var;
-                     /* The new frag address is newoff.  Adjust this
-                        for the amount we'll add when we process the
-                        new frag.  */
-                     newf->fr_address = newoff - stretch - growth;
+                     /* Adjust the new frag address for the amount
+                        we'll add when we process the new frag.  */
+                     newf->fr_address -= stretch + growth;
                      newf->relax_marker ^= 1;
                      fragP->fr_next = newf;
 #ifdef DEBUG