This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] xtensa: fix gas segfault with --text-section-literals


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=4de0562a4c69fef4952aa7e19d7bda359f02e8b4

commit 4de0562a4c69fef4952aa7e19d7bda359f02e8b4
Author: Max Filippov <jcmvbkbc@gmail.com>
Date:   Sun May 17 06:46:15 2015 +0300

    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.

Diff:
---
 gas/ChangeLog          |  6 ++++++
 gas/config/tc-xtensa.c | 10 +++++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

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);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]