bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug ld/25593] --as-needed breaks DT_NEEDED order with linker plugin


From: cvs-commit at gcc dot gnu.org
Subject: [Bug ld/25593] --as-needed breaks DT_NEEDED order with linker plugin
Date: Wed, 26 Feb 2020 00:08:31 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=25593

--- Comment #11 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot 
gnu.org> ---
The master branch has been updated by Alan Modra <address@hidden>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=e310298cf3fc02112ac0018260748828affa4061

commit e310298cf3fc02112ac0018260748828affa4061
Author: Alan Modra <address@hidden>
Date:   Tue Feb 25 12:50:10 2020 +1030

    PR25593, --as-needed breaks DT_NEEDED order with linker plugin

    This patch delays setting up DT_NEEDED dynamic tags until all object
    files and libraries have been opened and their symbols processed,
    rather than adding the tags while processing symbols.  Tags are
    ordered according to the position of the associated library on the
    command line and linker scripts.  It is still possible with
    --as-needed libs that are mentioned more than once for tags to be
    ordered according to which mention was needed.  For example with
    "--as-needed a.so b.so c.so b.so" when b.so is not needed by a.so or
    any other prior object file but is needed by c.so, the order of tags
    will be "A C B".

    bfd/
        PR 25593
        * elf-bfd.h (struct elf_link_hash_table): Rename "loaded" to
        "dyn_loaded".
        (bfd_elf_add_dt_needed_tag): Declare.
        * elf-strtab.c (_bfd_elf_strtab_restore): Handle NULL buf.
        * elflink.c (bfd_elf_add_dt_needed_tag): Make global and rename
        from elf_add_dt_needed_tag.  Remove soname and doit param.
        (elf_link_add_object_symbols): Don't use elf_add_dt_needed_tag
        to see whether as-needed lib is already loaded, use dyn_loaded
        list instead.  When saving and restoring around as-needed lib
        handle possibility that dynstr has not been initialised.  Don't
        add DT_NEEDED tags here.  Limit dyn_loaded list to dynamic libs.
        Mark libs loaded via DT_NEEDED entries of other libs with
        DYN_NO_NEEDED if they should not be mentioned in DT_NEEDED of
        the output.
        (elf_link_check_versioned_symbol): Remove now unneccesary
        DYNAMIC check when traversing dyn_loaded list.
    ld/
        PR 25593
        * ldelf.c (ldelf_try_needed): Add DT_NEEDED lib to input_bfds.
        (ldelf_after_open): Save state of input_bfds list before loading
        DT_NEEDED libs.  Traverse input_bfds list adding DT_NEEDED tags.
        Restore input_bfds list.
        * testsuite/ld-cris/gotplt1.d: Adjust for changed .dynstr order.

-- 
You are receiving this mail because:
You are on the CC list for the bug.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]