bug-binutils
[Top][All Lists]
Advanced

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

[Bug ld/23900] Can't detect GNU program property generated by older link


From: cvs-commit at gcc dot gnu.org
Subject: [Bug ld/23900] Can't detect GNU program property generated by older linkers
Date: Fri, 14 Dec 2018 12:56:37 +0000

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

--- 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=0a59decbb81676ac30deede1bb6b6e241cd75502

commit 0a59decbb81676ac30deede1bb6b6e241cd75502
Author: H.J. Lu <address@hidden>
Date:   Fri Dec 14 04:55:08 2018 -0800

    elf: Add PT_GNU_PROPERTY segment type

    Linkers group input note sections with the same name into one output
    note section with the same name.  One output note section is placed in
    one PT_NOTE segment.  New linkers merge all input .note.gnu.property
    sections into one output .note.gnu.property section with a single
    NT_GNU_PROPERTY_TYPE_0 note in a single PT_NOTE segment.  Since older
    linkers treat input .note.gnu.property section as a generic note section
    and just concatenate all input .note.gnu.property sections into one
    output .note.gnu.property section without merging them, we may
    see one or more NT_GNU_PROPERTY_TYPE_0 notes in PT_NOTE segment, which
    are invalid.

    GNU_PROPERTY_X86_UINT32_VALID was defined to address this issue such
    that linker sets the bit for non-relocatable outputs.  But it isn't
    sufficient:

    1. It doesn't cover generic properties.
    2. When -mx86-used-note=yes is passed to x86 assembler, the
    GNU_PROPERTY_X86_UINT32_VALID bit is set in GNU_PROPERTY_X86_ISA_1_USED
    property in object file and older linkers generate invalid
    NT_GNU_PROPERTY_TYPE_0 notes with the GNU_PROPERTY_X86_UINT32_VALID bit
    set.

    I am proposing the following changes:

    1. Add PT_GNU_PROPERTY segment type:

     # define PT_GNU_PROPERTY (PT_LOOS + 0x474e553)

    which covers .note.gnu.property section.
    2. Remove GNU_PROPERTY_X86_UINT32_VALID.

    bfd/

        PR ld/23900
        * elf.c (get_program_header_size): Add a PT_GNU_PROPERTY
        segment for NOTE_GNU_PROPERTY_SECTION_NAME.
        (_bfd_elf_map_sections_to_segments): Create a PT_GNU_PROPERTY
        segment for NOTE_GNU_PROPERTY_SECTION_NAME.
        * elfxx-x86.c (_bfd_elf_link_setup_gnu_properties): Don't set
        GNU_PROPERTY_X86_UINT32_VALID.

    binutils/

        PR ld/23900
        * readelf.c (get_segment_type): Support PT_GNU_PROPERTY.
        (decode_x86_isa): Don't check GNU_PROPERTY_X86_UINT32_VALID.
        (decode_x86_feature_1): Likewise.
        (decode_x86_feature_2): Likewise.
        (print_gnu_property_note): Remove GNU_PROPERTY_X86_UINT32_VALID
        check.
        * testsuite/binutils-all/i386/empty.d: Updated.
        * testsuite/binutils-all/x86-64/empty-x32.d: Likewise.
        * testsuite/binutils-all/x86-64/empty.d: Likewise.
        * testsuite/binutils-all/i386/pr21231b.s: Change
        GNU_PROPERTY_X86_ISA_1_USED bits to 0x7fffffff.
        * testsuite/binutils-all/x86-64/pr21231b.s: Likewise.

    gas/

        PR ld/23900
        * config/tc-i386.c (x86_cleanup): Don't set
        GNU_PROPERTY_X86_UINT32_VALID.
        * testsuite/gas/i386/property-1.s: Change
        GNU_PROPERTY_X86_ISA_1_USED bits to 0.

    include/

        PR ld/23900
        * elf/common.h (PT_GNU_PROPERTY): New.
        (GNU_PROPERTY_X86_UINT32_VALID): Removed.

    ld/

        PR ld/23900
        * testsuite/ld-elf/elf.exp: Run PR ld/23900 test.
        * testsuite/ld-elf/pr23900-1-32.rd: New file.
        * testsuite/ld-elf/pr23900-1-64.rd: Likewise.
        * testsuite/ld-elf/pr23900-1.d: Likewise.
        * testsuite/ld-elf/pr23900-1.s: Likewise.
        * testsuite/ld-elf/pr23900-2.s: Likewise.
        * testsuite/ld-elf/pr23900-2a.d: Likewise.
        * testsuite/ld-elf/pr23900-2b.d: Likewise.
        * testsuite/ld-i386/ibt-plt-1.d: Adjusted.
        * testsuite/ld-i386/ibt-plt-2c.d: Likewise.
        * testsuite/ld-i386/ibt-plt-2d.d: Likewise.
        * testsuite/ld-i386/ibt-plt-3d.d: Likewise.
        * testsuite/ld-x86-64/ibt-plt-1-x32.d: Likewise.
        * testsuite/ld-x86-64/ibt-plt-1.d: Likewise.
        * testsuite/ld-x86-64/ibt-plt-2c-x32.d: Likewise.
        * testsuite/ld-x86-64/ibt-plt-2c.d: Likewise.
        * testsuite/ld-x86-64/ibt-plt-2d-x32.d: Likewise.
        * testsuite/ld-x86-64/ibt-plt-2c.d: Likewise.
        * testsuite/ld-x86-64/ibt-plt-3c-x32.d: Likewise.
        * testsuite/ld-x86-64/ibt-plt-3c.d: Likewise.
        * testsuite/ld-x86-64/ibt-plt-3d-x32.d: Likewise.
        * testsuite/ld-x86-64/ibt-plt-3d.d: Likewise.
        * testsuite/ld-i386/pr23372c.d: Expect <None>
        for GNU_PROPERTY_X86_ISA_1_USED.
        * testsuite/ld-x86-64/pr23372c-x32.d: Likewise.
        * testsuite/ld-x86-64/pr23372c.d: Likewise.
        * testsuite/ld-x86-64/pr23372d-x32.d: Likewise.
        * testsuite/ld-x86-64/pr23372d.d: Likewise.
        * testsuite/ld-x86-64/property-x86-5a.s: Change
        GNU_PROPERTY_X86_ISA_1_USED bits to 0.
        * testsuite/ld-x86-64/property-x86-5b.s: Likewise.

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