gas/arm: Force output of a data mapping symbol for literal pools
authorWill Newton <will.newton@linaro.org>
Fri, 4 Apr 2014 09:07:06 +0000 (10:07 +0100)
committerWill Newton <will.newton@linaro.org>
Wed, 23 Apr 2014 12:54:59 +0000 (13:54 +0100)
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.

gas/ChangeLog
gas/config/tc-arm.c
gas/testsuite/ChangeLog
gas/testsuite/gas/arm/mapmisc.d
gas/testsuite/gas/arm/mapmisc.s

index 5c5137a..1270f3c 100644 (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.
index 9ccacbc..43e58b0 100644 (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,
index 492450b..8f53daa 100644 (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.
index f5b7039..0e1d046 100644 (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
index 1625515..c203e74 100644 (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