diff options
-rw-r--r-- | gas/ChangeLog | 7 | ||||
-rw-r--r-- | gas/config/tc-xtensa.c | 14 | ||||
-rw-r--r-- | gas/config/tc-xtensa.h | 7 |
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; }; |