aboutsummaryrefslogtreecommitdiff
path: root/gas/config
diff options
context:
space:
mode:
authorJie Zhang <jie.zhang@analog.com>2010-04-07 10:39:06 +0000
committerJie Zhang <jie.zhang@analog.com>2010-04-07 10:39:06 +0000
commit2de7820f275d96335a4749e2239aace063e1087d (patch)
tree24d59ff4c60f9a228fd4a566433768fa989c236d /gas/config
parent397841b5aed514e848c022e64ef1cfc5fa68afcc (diff)
downloadfsf-binutils-gdb-2de7820f275d96335a4749e2239aace063e1087d.zip
fsf-binutils-gdb-2de7820f275d96335a4749e2239aace063e1087d.tar.gz
fsf-binutils-gdb-2de7820f275d96335a4749e2239aace063e1087d.tar.bz2
* config/tc-arm.c (make_mapping_symbol): Handle the case
that multiple mapping symbols have the same value 0. testsuite/ * gas/arm/mapmisc.s: Test multiple mapping symbols have the same value 0.
Diffstat (limited to 'gas/config')
-rw-r--r--gas/config/tc-arm.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 117812d..3a160c1 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -2493,19 +2493,24 @@ make_mapping_symbol (enum mstate state, valueT value, fragS *frag)
/* Save the mapping symbols for future reference. Also check that
we do not place two mapping symbols at the same offset within a
frag. We'll handle overlap between frags in
- check_mapping_symbols. */
+ check_mapping_symbols.
+
+ 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 (value == 0)
{
- know (frag->tc_frag_data.first_map == NULL);
+ if (frag->tc_frag_data.first_map != NULL)
+ {
+ know (S_GET_VALUE (frag->tc_frag_data.first_map) == 0);
+ symbol_remove (frag->tc_frag_data.first_map, &symbol_rootP, &symbol_lastP);
+ }
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));
- /* 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);
}