Skip to content
  • Max Filippov's avatar
    gas: xtensa: fix literal movement · d0ad159d
    Max Filippov authored
    Not all literals need to be moved in the presence of
    --text-section-literals or --auto-litpools, but only those created by
    .literal pseudo op or generated as a result of relaxation. Attempts to
    move other literals may result in abnormal termination of the assembler
    due to the following assertion failure:
    
      Internal error in xg_find_litpool at gas/config/tc-xtensa.c:11209.
    
    The same assertion may also be triggered by attempting to assign literal
    pools to literals in .init and .fini sections; don't try to do that.
    
    gas/
    2018-05-09  Max Filippov  <jcmvbkbc@gmail.com>
    
    	* config/tc-xtensa.c (xtensa_is_init_fini): New function.
    	(xtensa_move_literals): Only attempt to assign literal pool to
    	literals with tc_frag_data.is_literal mark and not in .init or
    	.fini sections.
    	Join nested 'if' conditions to simplify function structure.
    	(xtensa_switch_to_non_abs_literal_fragment): Use
    	xtensa_is_init_fini to test for .init/.fini sections.
    	* testsuite/gas/xtensa/all.exp (auto-litpools-3)
    	(auto-litpools-4, text-section-literals-1): New tests.
    	* testsuite/gas/xtensa/auto-litpools-3.d: New test results.
    	* testsuite/gas/xtensa/auto-litpools-3.s: New test source.
    	* testsuite/gas/xtensa/auto-litpools-4.d: New test results.
    	* testsuite/gas/xtensa/auto-litpools-4.s: New test source.
    	* testsuite/gas/xtensa/text-section-literals-1.d: New test results.
    	* testsuite/gas/xtensa/text-section-literals-1.s: New test source.
    d0ad159d