mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-24 20:28:28 +08:00
xtensa: gas: put .literal_position at section start
Provide literal position at the beginning of each section for literal space reserved by relaxations when text-section-literals or auto-litpools options are used. Remove code that adds fill frag to the literal section for every .literal_position directive to avoid creation of empty literal sections. Fix auto-litpools tests that got literal pool address changes. gas/ 2019-04-11 Max Filippov <jcmvbkbc@gmail.com> * config/tc-xtensa.c (xtensa_is_init_fini): Add declaration. (xtensa_mark_literal_pool_location): Don't add fill frag to literal section that records literal pool location. (md_begin): Call xtensa_mark_literal_pool_location when text section literals or auto litpools are used. (xtensa_elf_section_change_hook): Call xtensa_mark_literal_pool_location when text section literals or auto litpools are used, there's no literal pool location defined for the current section and it's not .init or .fini. * testsuite/gas/xtensa/auto-litpools-first1.d: Fix up addresses. * testsuite/gas/xtensa/auto-litpools-first2.d: Likewise. * testsuite/gas/xtensa/auto-litpools.d: Likewise.
This commit is contained in:
@ -1,3 +1,18 @@
|
||||
2019-04-11 Max Filippov <jcmvbkbc@gmail.com>
|
||||
|
||||
* config/tc-xtensa.c (xtensa_is_init_fini): Add declaration.
|
||||
(xtensa_mark_literal_pool_location): Don't add fill frag to literal
|
||||
section that records literal pool location.
|
||||
(md_begin): Call xtensa_mark_literal_pool_location when text
|
||||
section literals or auto litpools are used.
|
||||
(xtensa_elf_section_change_hook): Call
|
||||
xtensa_mark_literal_pool_location when text section literals or
|
||||
auto litpools are used, there's no literal pool location defined
|
||||
for the current section and it's not .init or .fini.
|
||||
* testsuite/gas/xtensa/auto-litpools-first1.d: Fix up addresses.
|
||||
* testsuite/gas/xtensa/auto-litpools-first2.d: Likewise.
|
||||
* testsuite/gas/xtensa/auto-litpools.d: Likewise.
|
||||
|
||||
2019-04-11 Sudakshina Das <sudi.das@arm.com>
|
||||
|
||||
* config/tc-aarch64.c (process_omitted_operand): Add case for
|
||||
|
@ -497,6 +497,7 @@ static fixS *xg_append_jump (fragS *fragP, symbolS *sym, offsetT offset);
|
||||
static void xtensa_maybe_create_literal_pool_frag (bfd_boolean, bfd_boolean);
|
||||
static bfd_boolean auto_litpools = FALSE;
|
||||
static int auto_litpool_limit = 0;
|
||||
static bfd_boolean xtensa_is_init_fini (segT seg);
|
||||
|
||||
/* Alignment Functions. */
|
||||
|
||||
@ -4797,7 +4798,6 @@ xtensa_mark_literal_pool_location (void)
|
||||
{
|
||||
/* Any labels pointing to the current location need
|
||||
to be adjusted to after the literal pool. */
|
||||
emit_state s;
|
||||
fragS *pool_location;
|
||||
|
||||
if (use_literal_section)
|
||||
@ -4818,19 +4818,7 @@ xtensa_mark_literal_pool_location (void)
|
||||
RELAX_LITERAL_POOL_END, NULL, 0, NULL);
|
||||
xtensa_set_frag_assembly_state (frag_now);
|
||||
|
||||
/* Now put a frag into the literal pool that points to this location. */
|
||||
set_literal_pool_location (now_seg, pool_location);
|
||||
xtensa_switch_to_non_abs_literal_fragment (&s);
|
||||
frag_align (2, 0, 0);
|
||||
record_alignment (now_seg, 2);
|
||||
|
||||
/* Close whatever frag is there. */
|
||||
frag_variant (rs_fill, 0, 0, 0, NULL, 0, NULL);
|
||||
xtensa_set_frag_assembly_state (frag_now);
|
||||
frag_now->tc_frag_data.literal_frag = pool_location;
|
||||
frag_variant (rs_fill, 0, 0, 0, NULL, 0, NULL);
|
||||
xtensa_restore_emit_state (&s);
|
||||
xtensa_set_frag_assembly_state (frag_now);
|
||||
}
|
||||
|
||||
|
||||
@ -5334,6 +5322,9 @@ md_begin (void)
|
||||
/* Set up the assembly state. */
|
||||
if (!frag_now->tc_frag_data.is_assembly_state_set)
|
||||
xtensa_set_frag_assembly_state (frag_now);
|
||||
|
||||
if (!use_literal_section)
|
||||
xtensa_mark_literal_pool_location ();
|
||||
}
|
||||
|
||||
|
||||
@ -5933,6 +5924,11 @@ xtensa_elf_section_change_hook (void)
|
||||
/* Set up the assembly state. */
|
||||
if (!frag_now->tc_frag_data.is_assembly_state_set)
|
||||
xtensa_set_frag_assembly_state (frag_now);
|
||||
|
||||
if (!use_literal_section
|
||||
&& seg_info (now_seg)->tc_segment_info_data.literal_pool_loc == NULL
|
||||
&& !xtensa_is_init_fini (now_seg))
|
||||
xtensa_mark_literal_pool_location ();
|
||||
}
|
||||
|
||||
|
||||
|
@ -5,8 +5,8 @@
|
||||
.*: +file format .*xtensa.*
|
||||
#...
|
||||
Contents of section .text:
|
||||
0000 ........ 20170331 .*
|
||||
0000 20170331 .*
|
||||
#...
|
||||
00000000 <f>:
|
||||
.*0:.*j.8 .*
|
||||
00000004 <f>:
|
||||
.*4:.*l32r.*a2, 0.*
|
||||
#...
|
||||
|
@ -5,11 +5,9 @@
|
||||
.*: +file format .*xtensa.*
|
||||
#...
|
||||
Contents of section .text:
|
||||
0000 ........ ........ 20170331 .*
|
||||
0000 20170331 .*
|
||||
#...
|
||||
00000000 <f>:
|
||||
0:.*addi.*a1.*
|
||||
3:.*j.*c.*
|
||||
#...
|
||||
c:.*l32r.*a2, 8.*
|
||||
00000004 <f>:
|
||||
4:.*addi.*a1.*
|
||||
7:.*l32r.*a2, 0.*
|
||||
#...
|
||||
|
@ -4,9 +4,9 @@
|
||||
|
||||
.*: +file format .*xtensa.*
|
||||
#...
|
||||
.*8:.*l32r.a2, 4 .*
|
||||
.*4:.*l32r.a2, 0 .*
|
||||
#...
|
||||
.*3f029:.*j.3f030 .*
|
||||
.*3f025:.*j.3f02c .*
|
||||
#...
|
||||
.*40752:.*l32r.a2, 3f02c .*
|
||||
.*4074e:.*l32r.a2, 3f028 .*
|
||||
#...
|
||||
|
Reference in New Issue
Block a user