From: H.J. Lu Date: Sat, 11 Aug 2018 13:41:33 +0000 (-0700) Subject: x86: Properly add X86_ISA_1_NEEDED property X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ab9e342807d132182892de1be1a92d6e91a5c1da;p=binutils-gdb.git x86: Properly add X86_ISA_1_NEEDED property Existing properties may be removed during property merging. We avoid adding X86_ISA_1_NEEDED property only if existing properties won't be removed. bfd/ PR ld/23428 * elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Don't add X86_ISA_1_NEEDED property only if existing properties won't be removed. ld/ PR ld/23428 * testsuite/ld-elf/dummy.s: New file. * testsuite/ld-elf/linux-x86.S: Add X86_FEATURE_1_AND property. * testsuite/ld-elf/linux-x86.exp: Add dummy.s to pr23428. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 8c2c6cc5eb6..8d8f0a69146 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2018-08-11 H.J. Lu + + PR ld/23428 + * elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Don't + add X86_ISA_1_NEEDED property only if existing properties won't + be removed. + 2018-08-11 Alan Modra * reloc.c (bfd_get_reloc_size): Sort switch. diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c index 7ccfd258152..2d8f7b640b5 100644 --- a/bfd/elfxx-x86.c +++ b/bfd/elfxx-x86.c @@ -2588,7 +2588,6 @@ _bfd_x86_elf_link_setup_gnu_properties prop->pr_kind = property_number; } else if (has_text - && elf_properties (ebfd) == NULL && elf_tdata (info->output_bfd)->o->build_id.sec == NULL && !htab->elf.dynamic_sections_created && !info->traditional_format @@ -2598,11 +2597,28 @@ _bfd_x86_elf_link_setup_gnu_properties /* If the separate code program header is needed, make sure that the first read-only PT_LOAD segment has no code by adding a GNU_PROPERTY_X86_ISA_1_NEEDED note. */ - prop = _bfd_elf_get_property (ebfd, - GNU_PROPERTY_X86_ISA_1_NEEDED, - 4); - prop->u.number = GNU_PROPERTY_X86_ISA_1_486; - prop->pr_kind = property_number; + elf_property_list *list; + bfd_boolean need_property = TRUE; + + for (list = elf_properties (ebfd); list; list = list->next) + switch (list->property.pr_type) + { + case GNU_PROPERTY_STACK_SIZE: + case GNU_PROPERTY_NO_COPY_ON_PROTECTED: + case GNU_PROPERTY_X86_ISA_1_NEEDED: + /* These properties won't be removed during merging. */ + need_property = FALSE; + break; + } + + if (need_property) + { + prop = _bfd_elf_get_property (ebfd, + GNU_PROPERTY_X86_ISA_1_NEEDED, + 4); + prop->u.number = GNU_PROPERTY_X86_ISA_1_486; + prop->pr_kind = property_number; + } } /* Create the GNU property note section if needed. */ diff --git a/ld/ChangeLog b/ld/ChangeLog index 78d371e25fb..79b89125f38 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,10 @@ +2018-08-11 H.J. Lu + + PR ld/23428 + * testsuite/ld-elf/dummy.s: New file. + * testsuite/ld-elf/linux-x86.S: Add X86_FEATURE_1_AND property. + * testsuite/ld-elf/linux-x86.exp: Add dummy.s to pr23428. + 2018-08-08 H.J. Lu PR ld/23486 diff --git a/ld/testsuite/ld-elf/dummy.s b/ld/testsuite/ld-elf/dummy.s new file mode 100644 index 00000000000..403f98000d9 --- /dev/null +++ b/ld/testsuite/ld-elf/dummy.s @@ -0,0 +1 @@ +# Dummy diff --git a/ld/testsuite/ld-elf/linux-x86.S b/ld/testsuite/ld-elf/linux-x86.S index bdf40c6e01e..d94abc11068 100644 --- a/ld/testsuite/ld-elf/linux-x86.S +++ b/ld/testsuite/ld-elf/linux-x86.S @@ -61,3 +61,31 @@ syscall: ret /* Return to caller. */ .size syscall, .-syscall .section .note.GNU-stack,"",@progbits + + .section ".note.gnu.property", "a" +#ifdef __LP64__ + .p2align 3 +#else + .p2align 2 +#endif + .long 1f - 0f /* name length */ + .long 5f - 2f /* data length */ + .long 5 /* note type */ +0: .asciz "GNU" /* vendor name */ +1: +#ifdef __LP64__ + .p2align 3 +#else + .p2align 2 +#endif +2: .long 0xc0000002 /* pr_type. */ + .long 4f - 3f /* pr_datasz. */ +3: + .long 0x2 +4: +#ifdef __LP64__ + .p2align 3 +#else + .p2align 2 +#endif +5: diff --git a/ld/testsuite/ld-elf/linux-x86.exp b/ld/testsuite/ld-elf/linux-x86.exp index 36217c6fb40..f6f5a80853f 100644 --- a/ld/testsuite/ld-elf/linux-x86.exp +++ b/ld/testsuite/ld-elf/linux-x86.exp @@ -37,7 +37,7 @@ run_ld_link_exec_tests [list \ "Run PR ld/23428 test" \ "--no-dynamic-linker -z separate-code" \ "" \ - { linux-x86.S pr23428.c } \ + { linux-x86.S pr23428.c dummy.s } \ "pr23428" \ "pass.out" \ "$NOPIE_CFLAGS -fno-asynchronous-unwind-tables" \