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.
This commit is contained in:
Alan Modra
2014-12-22 14:43:49 +10:30
parent 18d6a79d35
commit cd8e2bcf0d
2 changed files with 8 additions and 4 deletions

View File

@ -1,3 +1,7 @@
2014-12-23 Alan Modra <amodra@gmail.com>
* ldexp.c (update_definedness): Correct logic setting by_object.
2014-12-23 Alan Modra <amodra@gmail.com>
* ldexp.c (struct definedness_hash_entry, definedness_table)

View File

@ -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;