This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: PATCH: PR ld/15149: Weak reference leads to DT_NEEDED entry
On Thu, Feb 14, 2013 at 06:13:20PM -0800, H.J. Lu wrote:
> 2013-02-14 H.J. Lu <hongjiu.lu@intel.com>
>
> PR ld/15149
> * elflink.c (elf_link_add_object_symbols): Also track weak
> references.
OK.
> diff --git a/bfd/elflink.c b/bfd/elflink.c
> index a92ff60..617c505 100644
> --- a/bfd/elflink.c
> +++ b/bfd/elflink.c
> @@ -4002,15 +4002,17 @@ error_free_dyn:
> bfd_boolean skip;
>
> /* If this is a definition of a symbol which was previously
> - referenced in a non-weak manner then make a note of the bfd
> - that contained the reference. This is used if we need to
> - refer to the source of the reference later on. */
> + referenced, then make a note of the bfd that contained the
> + reference. This is used if we need to refer to the source
> + of the reference later on. */
> if (! bfd_is_und_section (sec))
> {
> - h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE,
> FALSE, FALSE);
> + h = elf_link_hash_lookup (elf_hash_table (info), name,
> + FALSE, FALSE, FALSE);
>
> if (h != NULL
> - && h->root.type == bfd_link_hash_undefined
> + && (h->root.type == bfd_link_hash_undefined
> + || h->root.type == bfd_link_hash_undefweak)
> && h->root.u.undef.abfd)
> undef_bfd = h->root.u.undef.abfd;
> }
> @@ -4123,14 +4125,15 @@ error_free_dyn:
> }
>
> /* If necessary, make a second attempt to locate the bfd
> - containing an unresolved, non-weak reference to the
> - current symbol. */
> + containing an unresolved reference to the current symbol. */
> if (! bfd_is_und_section (sec) && undef_bfd == NULL)
> {
> - h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE,
> FALSE, FALSE);
> + h = elf_link_hash_lookup (elf_hash_table (info), name,
> + FALSE, FALSE, FALSE);
>
> if (h != NULL
> - && h->root.type == bfd_link_hash_undefined
> + && (h->root.type == bfd_link_hash_undefined
> + || h->root.type == bfd_link_hash_undefweak)
> && h->root.u.undef.abfd)
> undef_bfd = h->root.u.undef.abfd;
> }
--
Alan Modra
Australia Development Lab, IBM