From: Alan Modra Date: Mon, 22 Dec 2014 04:13:49 +0000 (+1030) Subject: Correct logic for "defined by object" X-Git-Tag: gdb-7.9-branchpoint~162 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cd8e2bcf0d51e91ab8da72ec63048790e3720b03;p=thirdparty%2Fbinutils-gdb.git Correct logic for "defined by object" The old code missed testing bfd_link_hash_undefweak, and wrongly excluded bfd_link_hash_common symbols. It is also clearer to invert the set of enum bfd_link_hash_type values tested. bfd_link_hash_indirect and bfd_link_hash_warning will never appear here. * ldexp.c (update_definedness): Correct logic setting by_object. --- diff --git a/ld/ChangeLog b/ld/ChangeLog index 1492b8d9f19..43ce92432ea 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,7 @@ +2014-12-23 Alan Modra + + * ldexp.c (update_definedness): Correct logic setting by_object. + 2014-12-23 Alan Modra * ldexp.c (struct definedness_hash_entry, definedness_table) diff --git a/ld/ldexp.c b/ld/ldexp.c index 28289338dec..e9e95f9ddeb 100644 --- a/ld/ldexp.c +++ b/ld/ldexp.c @@ -304,11 +304,11 @@ update_definedness (const char *name, struct bfd_link_hash_entry *h) einfo (_("%P%F: bfd_hash_lookup failed creating symbol %s\n"), name); /* If the symbol was already defined, and not by a script, then it - must be defined by an object file. */ + must be defined by an object file or by the linker target code. */ if (!defentry->by_script - && h->type != bfd_link_hash_undefined - && h->type != bfd_link_hash_common - && h->type != bfd_link_hash_new) + && (h->type == bfd_link_hash_defined + || h->type == bfd_link_hash_defweak + || h->type == bfd_link_hash_common)) defentry->by_object = 1; defentry->by_script = 1;