* 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:
parent
88f7da0511
commit
a78777489b
|
@ -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.
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue