xtensa: fix gas segfault with --text-section-literals

When --text-section-literals is used and code in the .init or .fini
emits literal in the absence of .literal_position, xtensa_move_literals
segfaults.

Check that search_frag is non-NULL in the xtensa_move_literals and
report error otherwise.

2015-05-26  Max Filippov  <jcmvbkbc@gmail.com>
gas/
	* config/tc-xtensa.c (xtensa_move_literals): Check that
	search_frag is non-NULL. Report error if literal frag is not
	found.
This commit is contained in:
Max Filippov 2015-05-17 06:46:15 +03:00
parent 8f2fd309e0
commit 4de0562a4c
2 changed files with 15 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2015-05-26 Max Filippov <jcmvbkbc@gmail.com>
* config/tc-xtensa.c (xtensa_move_literals): Check that
search_frag is non-NULL. Report error if literal frag is not
found.
2015-05-22 Nick Clifton <nickc@redhat.com>
PR gas/18446

View File

@ -10808,13 +10808,21 @@ xtensa_move_literals (void)
frchain_to = NULL;
frag_splice = &(frchain_from->frch_root);
while (!search_frag->tc_frag_data.literal_frag)
while (search_frag && !search_frag->tc_frag_data.literal_frag)
{
gas_assert (search_frag->fr_fix == 0
|| search_frag->fr_type == rs_align);
search_frag = search_frag->fr_next;
}
if (!search_frag)
{
search_frag = frchain_from->frch_root;
as_bad_where (search_frag->fr_file, search_frag->fr_line,
_("literal pool location required for text-section-literals; specify with .literal_position"));
continue;
}
gas_assert (search_frag->tc_frag_data.literal_frag->fr_subtype
== RELAX_LITERAL_POOL_BEGIN);
xtensa_switch_section_emit_state (&state, segment->seg, 0);