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.
This commit is contained in:
H.J. Lu 2018-08-11 06:41:33 -07:00
parent 1dc9e2d63e
commit ab9e342807
6 changed files with 66 additions and 7 deletions

View File

@ -1,3 +1,10 @@
2018-08-11 H.J. Lu <hongjiu.lu@intel.com>
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 <amodra@gmail.com>
* reloc.c (bfd_get_reloc_size): Sort switch.

View File

@ -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. */

View File

@ -1,3 +1,10 @@
2018-08-11 H.J. Lu <hongjiu.lu@intel.com>
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 <hongjiu.lu@intel.com>
PR ld/23486

View File

@ -0,0 +1 @@
# Dummy

View File

@ -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:

View File

@ -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" \