This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]