* config/tc-xtensa.c (mark_literal_frags): New function.

(xtensa_move_literals): Call mark_literal_frags for all literal
	segments, including init and fini literal segments.
	(xtensa_post_relax_hook): Swap use of xt_insn_sec and xt_literal_sec.
This commit is contained in:
Bob Wilson 2004-03-19 22:35:32 +00:00
parent 88f7da0511
commit a78777489b
2 changed files with 39 additions and 17 deletions

View File

@ -1,3 +1,10 @@
2004-03-19 Bob Wilson <bob.wilson@acm.org>
* config/tc-xtensa.c (mark_literal_frags): New function.
(xtensa_move_literals): Call mark_literal_frags for all literal
segments, including init and fini literal segments.
(xtensa_post_relax_hook): Swap use of xt_insn_sec and xt_literal_sec.
2004-03-19 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* tc-hppa.c (cons_fix_new_hppa): Check for PC relative base type.

View File

@ -638,6 +638,8 @@ static void xtensa_move_seg_list_to_beginning
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);
}