diff options
Diffstat (limited to 'ld/ldexp.c')
-rw-r--r-- | ld/ldexp.c | 24 |
1 files changed, 13 insertions, 11 deletions
@@ -726,20 +726,22 @@ exp_fold_tree (tree, current_section, allocation_done, dot, dotp) if (tree->type.node_class == etree_assign) create = true; else - create = false; + create = false; h = bfd_link_hash_lookup (link_info.hash, tree->assign.dst, create, false, false); - - if (tree->type.node_class == etree_provide - && (h == NULL - || h->type == bfd_link_hash_undefined - || h->type == bfd_link_hash_common)) - h = bfd_link_hash_lookup (link_info.hash, tree->assign.dst, - true, false, false); - if (h == (struct bfd_link_hash_entry *) NULL) - einfo (_("%P%F:%s: hash creation failed\n"), - tree->assign.dst); + { + if (tree->type.node_class == etree_assign) + einfo (_("%P%F:%s: hash creation failed\n"), + tree->assign.dst); + } + else if (tree->type.node_class == etree_provide + && h->type != bfd_link_hash_undefined + && h->type != bfd_link_hash_common) + { + /* Do nothing. The symbol was defined by some + object. */ + } else { /* FIXME: Should we worry if the symbol is already |