aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2002-09-02 14:46:56 +0000
committerNick Clifton <nickc@redhat.com>2002-09-02 14:46:56 +0000
commit3e369e968e378f3025ec2a98382869b4d70f17fb (patch)
treedc62ab5b41a691374d3234aeddcebf33e64e05e2
parent5cec694196c356cd13c79df6a278e1773f22cb2d (diff)
downloadgdb-3e369e968e378f3025ec2a98382869b4d70f17fb.zip
gdb-3e369e968e378f3025ec2a98382869b4d70f17fb.tar.gz
gdb-3e369e968e378f3025ec2a98382869b4d70f17fb.tar.bz2
Fix PROVIDE
-rw-r--r--ld/ChangeLog6
-rw-r--r--ld/ldexp.c24
2 files changed, 17 insertions, 13 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 0fd8e85..f097310 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,9 @@
+2002-09-02 Nick Clifton <nickc@redhat.com>
+
+ * ldexp.c (exp_fold_tree): If the first attempt to lookup a
+ PROVIDEd symbol fails, look it up again, but this time with
+ the 'create' flag set.
+
2002-08-30 Nick Clifton <nickc@redhat.com>
* scripttempl/elfd10v.sc (MEMORY): Remove UNIFIED, it is not
diff --git a/ld/ldexp.c b/ld/ldexp.c
index 8e3ea63..6c4937d 100644
--- a/ld/ldexp.c
+++ b/ld/ldexp.c
@@ -726,22 +726,20 @@ 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)
- {
- 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. */
- }
+ einfo (_("%P%F:%s: hash creation failed\n"),
+ tree->assign.dst);
else
{
/* FIXME: Should we worry if the symbol is already