bug-binutils
[Top][All Lists]
Advanced

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

[Bug ld/18900] Unnecessary PLT entry for function pointer initialization


From: cvs-commit at gcc dot gnu.org
Subject: [Bug ld/18900] Unnecessary PLT entry for function pointer initialization
Date: Tue, 01 Sep 2015 12:19:06 +0000

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

--- Comment #1 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot 
gnu.org> ---
The master branch has been updated by H.J. Lu <address@hidden>:

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

commit 04ebc307f9601168c165fb63aa39a676e45454b7
Author: H.J. Lu <address@hidden>
Date:   Tue Sep 1 05:06:16 2015 -0700

    Skip PLT for function pointer initialization

    We use its PLT entry to initialize function pointer at run-time.  If
    there is no other usage for the PLT entry, we can generate run-time
    function pointer relocations in read-write section, which can be
    resolved by dynamic linker, to initialize function pointers.  It avoids
    the extra indirect branch overhead in PLT.

    bfd/

        PR ld/18900
        * elf32-i386.c (elf_i386_link_hash_entry): Add
        func_pointer_refcount.
        (elf_i386_link_hash_newfunc): Clear func_pointer_refcount.
        (elf_i386_get_local_sym_hash): Likewise.
        (elf_i386_copy_indirect_symbol): Also copy
        func_pointer_refcount.
        (elf_i386_check_relocs): Increment func_pointer_refcount.
        (elf_i386_gc_sweep_hook): Decrement func_pointer_refcount.
        (elf_i386_allocate_dynrelocs): Don't create the PLT entry if
        there are only function pointer relocations which can be
        resolved at run-time.  Keep dynanamic relocations for run-time
        function pointer initialization.
        (elf_i386_relocate_section): Copy dynamic function pointer
        relocations.
        * elf64-x86-64.c (elf_x86_64_link_hash_entry): Add
        func_pointer_refcount.
        (elf_x86_64_link_hash_newfunc): Clear func_pointer_refcount.
        (elf_x86_64_get_local_sym_hash): Likewise.
        (elf_x86_64_copy_indirect_symbol): Also copy
        func_pointer_refcount.
        (elf_x86_64_check_relocs): Increment func_pointer_refcount.
        (elf_x86_64_gc_sweep_hook): Decrement func_pointer_refcount.
        (elf_x86_64_allocate_dynrelocs): Don't create the PLT entry if
        there are only function pointer relocations which can be
        resolved at run-time.  Keep dynanamic relocations for run-time
        function pointer initialization.
        (elf_x86_64_relocate_section): Copy dynamic function pointer
        relocations.

    ld/testsuite/

        PR ld/18900
        * ld-i386/i386.exp: Run tests for PR ld/18900.
        * ld-x86-64/x86-64.exp: Likewise.
        * ld-i386/pr18900.out: New file.
        * ld-i386/pr18900a.c: Likewise.
        * ld-i386/pr18900a.c: Likewise.
        * ld-i386/pr18900a.rd: Likewise.
        * ld-i386/pr18900b.c: Likewise.
        * ld-i386/pr18900b.rd: Likewise.
        * ld-i386/pr18900c.c: Likewise.
        * ld-x86-64/pr18900.out: Likewise.
        * ld-x86-64/pr18900a.c: Likewise.
        * ld-x86-64/pr18900a.rd: Likewise.
        * ld-x86-64/pr18900b.c: Likewise.
        * ld-x86-64/pr18900b.rd: Likewise.
        * ld-x86-64/pr18900c.c: Likewise.
        * ld-x86-64/mpx3.dd: Updated.

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