aboutsummaryrefslogtreecommitdiff
path: root/gas/write.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2010-10-19 12:14:23 +0000
committerAlan Modra <amodra@gmail.com>2010-10-19 12:14:23 +0000
commit20f5cfbdeace664dca0f967e4f20fa45e37947d5 (patch)
tree635e0d6bfad34f66de467886cddc33d731c28c10 /gas/write.c
parente35a414d3cd7c422e39db2611a063664cee3be70 (diff)
downloadfsf-binutils-gdb-20f5cfbdeace664dca0f967e4f20fa45e37947d5.zip
fsf-binutils-gdb-20f5cfbdeace664dca0f967e4f20fa45e37947d5.tar.gz
fsf-binutils-gdb-20f5cfbdeace664dca0f967e4f20fa45e37947d5.tar.bz2
* write.c (relax_segment): Correct address on frag added to stop
leb128/align frags bouncing.
Diffstat (limited to 'gas/write.c')
-rw-r--r--gas/write.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/gas/write.c b/gas/write.c
index 62f196c..080216a 100644
--- a/gas/write.c
+++ b/gas/write.c
@@ -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