This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: Correct logic for "defined by object"
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Binutils <binutils at sourceware dot org>
- Date: Tue, 23 Dec 2014 04:46:29 -0800
- Subject: Re: Correct logic for "defined by object"
- Authentication-results: sourceware.org; auth=none
- References: <20141223124131 dot GB4313 at bubble dot grove dot modra dot org>
On Tue, Dec 23, 2014 at 4:41 AM, Alan Modra <amodra@gmail.com> wrote:
> 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/ldexp.c b/ld/ldexp.c
> index 2828933..e9e95f9 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;
>
No testcase?
--
H.J.