diff options
author | Max Filippov <jcmvbkbc@gmail.com> | 2015-05-17 06:46:15 +0300 |
---|---|---|
committer | Max Filippov <jcmvbkbc@gmail.com> | 2015-05-26 10:14:17 +0300 |
commit | 4de0562a4c69fef4952aa7e19d7bda359f02e8b4 (patch) | |
tree | b93a12cbcb93a315df61a6a77323529eca5ce13c /gas | |
parent | 8f2fd309e013e4e230df46d2dee03c5ca2228836 (diff) | |
download | gdb-4de0562a4c69fef4952aa7e19d7bda359f02e8b4.zip gdb-4de0562a4c69fef4952aa7e19d7bda359f02e8b4.tar.gz gdb-4de0562a4c69fef4952aa7e19d7bda359f02e8b4.tar.bz2 |
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.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 6 | ||||
-rw-r--r-- | gas/config/tc-xtensa.c | 10 |
2 files changed, 15 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index f3a30d2..a0ab897 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -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 diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c index 31c0b6b..18307c1 100644 --- a/gas/config/tc-xtensa.c +++ b/gas/config/tc-xtensa.c @@ -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); |