Backport 22782 fix to 2.30 branch?

Roland McGrath via binutils binutils@sourceware.org
Sat Apr 21 02:18:00 GMT 2018


https://sourceware.org/bugzilla/show_bug.cgi?id=22782 is biting me in
trying to update to 2.30.

In my case (which I'm not sure how to reproduce in a small case off
hand), this bug was not present in 2.27 or 2.28 but is present in 2.29
and 2.30, and fixed on trunk.

commit cd04836359da82ae1dc67e5a05565536f4427b51 is HJ's fix on trunk.
An unattended cherry-pick onto 2.30 branch applied cleanly and fixed
the regression for me.
It caused no check-ld failures for --target=x86_64-elf.  The log entry
is below for reference.

Can we put this onto the 2.30 branch?


Thanks,
Roland


commit cd04836359da82ae1dc67e5a05565536f4427b51
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Mon Feb 5 08:38:16 2018 -0800

    x86: Remove the unused _GLOBAL_OFFSET_TABLE_

    Since _GLOBAL_OFFSET_TABLE_ may be referenced implicitly on x86,
    checking ref_regular_nonweak leaves the unused _GLOBAL_OFFSET_TABLE_
    in output.  This patch checks explicit GOT references instead.

    ld-i386/discarded1.s and ld-x86-64/discarded1.s are updated to avoid
    linker optimization which removes GOT references.

    bfd/

            PR ld/22782
            * elf32-i386.c (elf_i386_check_relocs): Set got_referenced if
            _GLOBAL_OFFSET_TABLE_ is referenced or GOT is needed to resolve
            undefined weak symbol to 0.
            * elf64-x86-64.c (elf_x86_64_check_relocs): Set got_referenced
            if _GLOBAL_OFFSET_TABLE_ is referenced.
            * elfxx-x86.c (_bfd_x86_elf_size_dynamic_sections): Check
            got_referenced instead of ref_regular_nonweak.  Remove the
            unused _GLOBAL_OFFSET_TABLE_ from symbol table.
            * elfxx-x86.h (elf_x86_link_hash_table): Add got_referenced.

    ld/

            PR ld/22782
            * testsuite/ld-i386/discarded1.s: Replace mov with div.
            * testsuite/ld-x86-64/discarded1.s: Likewise.
            * testsuite/ld-i386/i386.exp: Run pr22782.
            * testsuite/ld-i386/load1-nacl.d: Updated for removing
            _GLOBAL_OFFSET_TABLE_ from output.
            * testsuite/ld-i386/load1.d: Likewise.
            * testsuite/ld-x86-64/load1a-nacl.d: Likewise.
            * testsuite/ld-x86-64/load1a.d: Likewise.
            * testsuite/ld-x86-64/load1b-nacl.d: Likewise.
            * testsuite/ld-x86-64/load1b.d: Likewise.
            * testsuite/ld-i386/pr22782.d: New file.
            * testsuite/ld-i386/pr22782.s: Likewise.
            * testsuite/ld-x86-64/pr22782.s: Likewise.
            * testsuite/ld-x86-64/pr22782a.d: Likewise.
            * testsuite/ld-x86-64/pr22782b.d: Likewise.
            * testsuite/ld-x86-64/x86-64.exp: Run pr22782a and pr22782b.



More information about the Binutils mailing list