From 0f020cefaaafef23c09c563bb2f39794117a9748 Mon Sep 17 00:00:00 2001 From: Jie Zhang Date: Fri, 19 Mar 2010 14:43:09 +0000 Subject: * config/tc-arm.c (make_mapping_symbol): Hanle the case that two mapping symbols have the same value. testsuite/ * gas/arm/mapmisc.s: Add the test case for two mapping symbols having the same value. * gas/arm/mapmisc.d: Likewise. --- gas/config/tc-arm.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'gas/config') diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index 557b9f9..117812d 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -2500,7 +2500,15 @@ make_mapping_symbol (enum mstate state, valueT value, fragS *frag) frag->tc_frag_data.first_map = symbolP; } if (frag->tc_frag_data.last_map != NULL) - know (S_GET_VALUE (frag->tc_frag_data.last_map) < S_GET_VALUE (symbolP)); + { + know (S_GET_VALUE (frag->tc_frag_data.last_map) <= S_GET_VALUE (symbolP)); + /* If .fill or other data filling directive generates zero sized data, + the mapping symbol for the following code will have the same value + as the one generated for the data filling directive. In this case, + we replace the old symbol with the new one at the same address. */ + if (S_GET_VALUE (frag->tc_frag_data.last_map) == S_GET_VALUE (symbolP)) + symbol_remove (frag->tc_frag_data.last_map, &symbol_rootP, &symbol_lastP); + } frag->tc_frag_data.last_map = symbolP; } -- cgit v1.1