* write.c (relax_segment): Correct address on frag added to stop

leb128/align frags bouncing.
This commit is contained in:
Alan Modra 2010-10-19 12:14:23 +00:00
parent e35a414d3c
commit 20f5cfbdea
2 changed files with 10 additions and 6 deletions

View 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

View 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