gas/arm: Force output of a data mapping symbol for literal pools

If there is a a trailing align statement in a code section we may
output data padding with a data mapping followed by a code alignment
with a code mapping. The literal pool may then be output with a code
mapping symbol which will cause it to be endian swapped in a big-endian
configuration. When outputting a literal pool make sure that a data
mapping symbol is output in all cases.

gas/ChangeLog:

2014-04-23  Will Newton  <will.newton@linaro.org>

	* config/tc-arm.c (s_ltorg): Call make_mapping_symbol
	directly instead of mapping_state.

gas/testsuite/ChangeLog:

2014-04-23  Will Newton  <will.newton@linaro.org>

	* gas/arm/mapmisc.d: Check literal pool mapping with
	a trailing .align statement.
	* gas/arm/mapmisc.s: Likewise.
This commit is contained in:
Will Newton
2014-04-04 10:07:06 +01:00
parent 7d64c587c1
commit 47fc6e36e3
5 changed files with 30 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2014-04-23 Will Newton <will.newton@linaro.org>
* config/tc-arm.c (s_ltorg): Call make_mapping_symbol
directly instead of mapping_state.
2014-04-23 Andrew Bennett <andrew.bennett@imgtec.com>
* config/tc-mips.c (options): Add OPTION_XPA and OPTION_NO_XPA.

View File

@ -3328,8 +3328,6 @@ s_ltorg (int ignored ATTRIBUTE_UNUSED)
|| pool->next_free_entry == 0)
return;
mapping_state (MAP_DATA);
/* Align pool as you have word accesses.
Only make a frag if we have to. */
if (!need_pass_2)
@ -3337,6 +3335,9 @@ s_ltorg (int ignored ATTRIBUTE_UNUSED)
record_alignment (now_seg, 2);
seg_info (now_seg)->tc_segment_info_data.mapstate = MAP_DATA;
make_mapping_symbol (MAP_DATA, (valueT) frag_now_fix (), frag_now);
sprintf (sym_name, "$$lit_\002%x", pool->id);
symbol_locate (pool->symbol, sym_name, now_seg,

View File

@ -1,3 +1,9 @@
2014-04-23 Will Newton <will.newton@linaro.org>
* gas/arm/mapmisc.d: Check literal pool mapping with
a trailing .align statement.
* gas/arm/mapmisc.s: Likewise.
2014-04-23 Andrew Bennett <andrew.bennett@imgtec.com>
* gas/mips/mips.exp: Add xpa tests.

View File

@ -47,6 +47,10 @@ SYMBOL TABLE:
0+a0 l .text 00000000 \$d
0+a4 l .text 00000000 \$a
0+a8 l .text 00000000 \$a
0+b0 l .text 00000000 string
0+b0 l .text 00000000 \$d
0+b4 l .text 00000000 \$d
0+b3 l .text 00000000 \$d
0+00 l d .ARM.attributes 00000000 .ARM.attributes
@ -95,3 +99,9 @@ Disassembly of section .text:
a0: 7778797a .word 0x7778797a
a4: e1a00000 nop ; \(mov r0, r0\)
a8: e1a00000 nop ; \(mov r0, r0\)
ac: e51f0000 ldr r0, \[pc, #-0\] ; b4 <string\+0x4>
000000b0 <string>:
b0: 6261 .short 0x6261
b2: 63 .byte 0x63
b3: 00 .byte 0x00
b4: 000000b0 .word 0x000000b0

View File

@ -38,3 +38,9 @@ foo:
nop
.fill 0, 0, 0
nop
# This test should always be at the end. Check that a trailing align does
# not cause the literal pool to be emitted with a code mapping symbol.
ldr r0,=string
string:
.ascii "abc"
.align 2