aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/config/tc-xtensa.c14
-rw-r--r--gas/config/tc-xtensa.h7
3 files changed, 22 insertions, 6 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 00b093b..2292534 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,10 @@
+2009-08-19 Sterling Augustine <sterling@tensilica.com>
+
+ * config/tc-xtensa.h (xtensa_frag_data): Rename unused field fr_prev
+ to no_transform_end.
+ * config/tc-xtensa.c (xtensa_mark_difference_of_two_symbols): Set
+ and use no_transform_end.
+
2009-08-18 Kai Tietz <kai.tietz@onevision.com>
* config/obj-coff-seh.c: Add copyright notice.
diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c
index caea25c..645af97 100644
--- a/gas/config/tc-xtensa.c
+++ b/gas/config/tc-xtensa.c
@@ -7460,6 +7460,7 @@ xtensa_mark_difference_of_two_symbols (void)
{
fragS *start;
fragS *end;
+ fragS *walk;
if (symbol_get_frag (left)->fr_address
<= symbol_get_frag (right)->fr_address)
@@ -7472,12 +7473,19 @@ xtensa_mark_difference_of_two_symbols (void)
start = symbol_get_frag (right);
end = symbol_get_frag (left);
}
+
+ if (start->tc_frag_data.no_transform_end != NULL)
+ walk = start->tc_frag_data.no_transform_end;
+ else
+ walk = start;
do
{
- start->tc_frag_data.is_no_transform = 1;
- start = start->fr_next;
+ walk->tc_frag_data.is_no_transform = 1;
+ walk = walk->fr_next;
}
- while (start && start->fr_address < end->fr_address);
+ while (walk && walk->fr_address < end->fr_address);
+
+ start->tc_frag_data.no_transform_end = walk;
}
}
}
diff --git a/gas/config/tc-xtensa.h b/gas/config/tc-xtensa.h
index 91607af..ba613e4 100644
--- a/gas/config/tc-xtensa.h
+++ b/gas/config/tc-xtensa.h
@@ -263,9 +263,10 @@ struct xtensa_frag_type
symbolS *slot_symbols[MAX_SLOTS];
offsetT slot_offsets[MAX_SLOTS];
- /* The global aligner needs to walk backward through the list of
- frags. This field is only valid after xtensa_end. */
- fragS *fr_prev;
+ /* When marking frags after this one in the chain as no transform,
+ cache the last one in the chain, so that we can skip to the
+ end of the chain. */
+ fragS *no_transform_end;
};