--- Comment #18 from cvs-commit at gcc dot <cvs-commit at gcc dot> ---
The master branch has been updated by H.J. Lu <>:;h=bd7ab16b4537788ad53521c45469a1bdae84ad4a

commit bd7ab16b4537788ad53521c45469a1bdae84ad4a
Author: H.J. Lu <>
Date:   Tue Feb 13 07:34:22 2018 -0800

    x86-64: Generate branch with PLT32 relocation

    Since there is no need to prepare for PLT branch on x86-64, generate
    R_X86_64_PLT32, instead of R_X86_64_PC32, if possible, which can be
    used as a marker for 32-bit PC-relative branches.

    To compile Linux kernel, this patch:

    From: "H.J. Lu" <>
    Subject: [PATCH] x86: Treat R_X86_64_PLT32 as R_X86_64_PC32

    On i386, there are 2 types of PLTs, PIC and non-PIC.  PIE and shared
    objects must use PIC PLT.  To use PIC PLT, you need to load
    _GLOBAL_OFFSET_TABLE_ into EBX first.  There is no need for that on
    x86-64 since x86-64 uses PC-relative PLT.

    On x86-64, for 32-bit PC-relative branches, we can generate PLT32
    relocation, instead of PC32 relocation, which can also be used as
    a marker for 32-bit PC-relative branches.  Linker can always reduce
    PLT32 relocation to PC32 if function is defined locally.   Local
    functions should use PC32 relocation.  As far as Linux kernel is
    concerned, R_X86_64_PLT32 can be treated the same as R_X86_64_PC32
    since Linux kernel doesn't use PLT.

    is needed.  It is available on hjl/plt32/master branch at


        PR gas/22791
        * elf64-x86-64.c (is_32bit_relative_branch): Removed.
        (elf_x86_64_relocate_section): Check PIC relocations in PIE.
        Remove is_32bit_relative_branch usage.  Disallow PC32 reloc
        against protected function in shared object.


        PR gas/22791
        * config/tc-i386.c (need_plt32_p): New function.
        (output_jump): Generate BFD_RELOC_X86_64_PLT32 if possible.
        (md_estimate_size_before_relax): Likewise.
        * testsuite/gas/i386/reloc64.d: Updated.
        * testsuite/gas/i386/x86-64-jump.d: Likewise.
        * testsuite/gas/i386/x86-64-mpx-branch-1.d: Likewise.
        * testsuite/gas/i386/x86-64-mpx-branch-2.d: Likewise.
        * testsuite/gas/i386/x86-64-relax-2.d: Likewise.
        * testsuite/gas/i386/x86-64-relax-3.d: Likewise.
        * testsuite/gas/i386/ilp32/reloc64.d: Likewise.
        * testsuite/gas/i386/ilp32/x86-64-branch.d: Likewise.


        PR gas/22791
        * testsuite/ld-x86-64/mpx1c.rd: Updated.
        * testsuite/ld-x86-64/pr22791-1.err: New file.
        * testsuite/ld-x86-64/pr22791-1a.c: Likewise.
        * testsuite/ld-x86-64/pr22791-1b.s: Likewise.
        * testsuite/ld-x86-64/pr22791-2.rd: Likewise.
        * testsuite/ld-x86-64/pr22791-2a.s: Likewise.
        * testsuite/ld-x86-64/pr22791-2b.c: Likewise.
        * testsuite/ld-x86-64/pr22791-2c.s: Likewise.
        * testsuite/ld-x86-64/x86-64.exp: Run PR ld/22791 tests.

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

Reply via email to