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 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.


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