Index: config/tc-xtensa.c =================================================================== RCS file: /cvs/src/src/gas/config/tc-xtensa.c,v retrieving revision 1.7 diff -u -p -r1.7 tc-xtensa.c --- config/tc-xtensa.c 19 Nov 2003 23:55:06 -0000 1.7 +++ config/tc-xtensa.c 19 Mar 2004 17:46:57 -0000 @@ -638,6 +638,8 @@ static void xtensa_move_seg_list_to_begi PARAMS ((seg_list *)); static void xtensa_move_literals PARAMS ((void)); +static void mark_literal_frags + PARAMS ((seg_list *)); static void xtensa_reorder_seg_list PARAMS ((seg_list *, segT)); static void xtensa_reorder_segments @@ -7485,21 +7487,9 @@ xtensa_move_literals () fixS *fix, *next_fix, **fix_splice; sym_list *lit; - /* As clunky as this is, we can't rely on frag_var - and frag_variant to get called in all situations. */ - - segment = literal_head->next; - while (segment) - { - frchain_from = seg_info (segment->seg)->frchainP; - search_frag = frchain_from->frch_root; - while (search_frag) - { - search_frag->tc_frag_data.is_literal = TRUE; - search_frag = search_frag->fr_next; - } - segment = segment->next; - } + mark_literal_frags (literal_head->next); + mark_literal_frags (init_literal_head->next); + mark_literal_frags (fini_literal_head->next); if (use_literal_section) return; @@ -7603,6 +7593,31 @@ xtensa_move_literals () } +/* Walk over all the frags for segments in a list and mark them as + containing literals. As clunky as this is, we can't rely on frag_var + and frag_variant to get called in all situations. */ + +static void +mark_literal_frags (segment) + seg_list *segment; +{ + frchainS *frchain_from; + fragS *search_frag; + + while (segment) + { + frchain_from = seg_info (segment->seg)->frchainP; + search_frag = frchain_from->frch_root; + while (search_frag) + { + search_frag->tc_frag_data.is_literal = TRUE; + search_frag = search_frag->fr_next; + } + segment = segment->next; + } +} + + static void xtensa_reorder_seg_list (head, after) seg_list *head; @@ -7872,11 +7887,11 @@ xtensa_post_relax_hook () xtensa_create_property_segments (get_frag_is_insn, XTENSA_INSN_SEC_NAME, - xt_literal_sec); + xt_insn_sec); if (use_literal_section) xtensa_create_property_segments (get_frag_is_literal, XTENSA_LIT_SEC_NAME, - xt_insn_sec); + xt_literal_sec); }