From 47fc6e36e3863545a6225034d97f64760fffae05 Mon Sep 17 00:00:00 2001 From: Will Newton Date: Fri, 4 Apr 2014 10:07:06 +0100 Subject: 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/config/tc-arm.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'gas/config') 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, -- cgit v1.1