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
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Binutils <binutils at sourceware dot org>
- Date: Thu, 14 Feb 2013 17:46:10 -0800
- Subject: Re: PATCH: PR ld/15149: Weak reference leads to DT_NEEDED entry
- References: <20130214231632.GA21207@intel.com>
On Thu, Feb 14, 2013 at 3:16 PM, H.J. Lu <hongjiu.lu@intel.com> wrote:
> We shouldn't add DT_NEEDED for weak references unless asked. This
> patch implements it. OK to install?
>
> Thanks.
>
>
> H.J.
> ---
> bfd/
>
> 2013-02-14 H.J. Lu <hongjiu.lu@intel.com>
>
> PR ld/15149
> * elflink.c (elf_link_add_object_symbols): Don't add DT_NEEDED for
> weak references, unless the dynamic object is specified on the
> command line.
>
> ld/testsuite/
>
> 2013-02-14 H.J. Lu <hongjiu.lu@intel.com>
>
> PR ld/15149
> * ld/testsuite/ld-elf/dummy.s: New file.
> * ld/testsuite/ld-elf/pr15149.rd: Likewise.
> * ld/testsuite/ld-elf/pr15149a.s: Likewise.
> * ld/testsuite/ld-elf/pr15149b.s: Likewise.
>
> * ld-elf/elf.exp: Add PR ld/15149 test.
>
> diff --git a/bfd/elflink.c b/bfd/elflink.c
> index d423ca4..05d5746 100644
> --- a/bfd/elflink.c
> +++ b/bfd/elflink.c
> @@ -4477,10 +4477,14 @@ error_free_dyn:
> break;
> }
>
> + /* Don't add DT_NEEDED for weak references, unless the dynamic
> + object is specified on the command line. */
> if (!add_needed
> && definition
> && ((dynsym
> - && h->ref_regular)
> + && (h->ref_regular_nonweak
> + || (h->ref_regular
> + && (elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) == 0)))
> || (h->ref_dynamic
> && (elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0
> && !on_needed_list (elf_dt_name (abfd), htab->needed))))
This isn't consistent with bfd ld behavior. --no-copy-dt-needed-entries
is ignored when creating executable. We try to emulate run-time linker.
In this case, we should issue an error, instead of silently adding DT_NEEDED.
--
H.J.