From 47fc6e36e3863545a6225034d97f64760fffae05 Mon Sep 17 00:00:00 2001 From: Will Newton Date: Fri, 4 Apr 2014 10:07:06 +0100 Subject: [PATCH] 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 * config/tc-arm.c (s_ltorg): Call make_mapping_symbol directly instead of mapping_state. gas/testsuite/ChangeLog: 2014-04-23 Will Newton * gas/arm/mapmisc.d: Check literal pool mapping with a trailing .align statement. * gas/arm/mapmisc.s: Likewise. --- gas/ChangeLog | 5 +++++ gas/config/tc-arm.c | 5 +++-- gas/testsuite/ChangeLog | 6 ++++++ gas/testsuite/gas/arm/mapmisc.d | 10 ++++++++++ gas/testsuite/gas/arm/mapmisc.s | 6 ++++++ 5 files changed, 30 insertions(+), 2 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 5c5137a..1270f3c 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2014-04-23 Will Newton + + * config/tc-arm.c (s_ltorg): Call make_mapping_symbol + directly instead of mapping_state. + 2014-04-23 Andrew Bennett * config/tc-mips.c (options): Add OPTION_XPA and OPTION_NO_XPA. diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index 9ccacbc..43e58b0 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -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, diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 492450b..8f53daa 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2014-04-23 Will Newton + + * gas/arm/mapmisc.d: Check literal pool mapping with + a trailing .align statement. + * gas/arm/mapmisc.s: Likewise. + 2014-04-23 Andrew Bennett * gas/mips/mips.exp: Add xpa tests. diff --git a/gas/testsuite/gas/arm/mapmisc.d b/gas/testsuite/gas/arm/mapmisc.d index f5b7039..0e1d046 100644 --- a/gas/testsuite/gas/arm/mapmisc.d +++ b/gas/testsuite/gas/arm/mapmisc.d @@ -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 +000000b0 : + b0: 6261 .short 0x6261 + b2: 63 .byte 0x63 + b3: 00 .byte 0x00 + b4: 000000b0 .word 0x000000b0 diff --git a/gas/testsuite/gas/arm/mapmisc.s b/gas/testsuite/gas/arm/mapmisc.s index 1625515..c203e74 100644 --- a/gas/testsuite/gas/arm/mapmisc.s +++ b/gas/testsuite/gas/arm/mapmisc.s @@ -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 -- 2.7.4