From 983f90e37dcf119d17395f5bc0a9173e7235e505 Mon Sep 17 00:00:00 2001 From: Sterling Augustine Date: Wed, 19 Aug 2009 16:10:46 +0000 Subject: [PATCH] 2009-08-19 Sterling Augustine * 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. --- gas/ChangeLog | 7 +++++++ gas/config/tc-xtensa.c | 14 +++++++++++--- gas/config/tc-xtensa.h | 7 ++++--- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 00b093b3dff..2292534214b 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2009-08-19 Sterling Augustine + + * 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 * config/obj-coff-seh.c: Add copyright notice. diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c index caea25c4829..645af97be85 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 91607aff61a..ba613e4ed1b 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; }; -- 2.30.2