aboutsummaryrefslogtreecommitdiff
path: root/ld/ldexp.c
diff options
context:
space:
mode:
Diffstat (limited to 'ld/ldexp.c')
-rw-r--r--ld/ldexp.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/ld/ldexp.c b/ld/ldexp.c
index 6c4937d..8e3ea63 100644
--- a/ld/ldexp.c
+++ b/ld/ldexp.c
@@ -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