diff -rup binutils.orig/bfd/elf-bfd.h binutils-2.30/bfd/elf-bfd.h --- binutils.orig/bfd/elf-bfd.h 2020-04-07 11:32:17.269776457 +0100 +++ binutils-2.30/bfd/elf-bfd.h 2020-04-07 13:34:03.897784103 +0100 @@ -1467,12 +1467,16 @@ struct elf_backend_data unsigned int); /* Merge GNU properties. Return TRUE if property is updated. */ - bfd_boolean (*merge_gnu_properties) (struct bfd_link_info *, bfd *, + bfd_boolean (*merge_gnu_properties) (struct bfd_link_info *, bfd *, bfd *, elf_property *, elf_property *); /* Set up GNU properties. */ bfd *(*setup_gnu_properties) (struct bfd_link_info *); + /* Fix up GNU properties. */ + void (*fixup_gnu_properties) (struct bfd_link_info *, + elf_property_list **); + /* Encoding used for compact EH tables. */ int (*compact_eh_encoding) (struct bfd_link_info *); @@ -2673,6 +2677,10 @@ extern elf_property * _bfd_elf_get_prope (bfd *, unsigned int, unsigned int); extern bfd *_bfd_elf_link_setup_gnu_properties (struct bfd_link_info *); +extern bfd_size_type _bfd_elf_convert_gnu_property_size + (bfd *, bfd *); +extern bfd_boolean _bfd_elf_convert_gnu_properties + (bfd *, asection *, bfd *, bfd_byte **, bfd_size_type *); /* The linker may need to keep track of the number of relocs that it decides to copy as dynamic relocs in check_relocs for each symbol. diff -rup binutils.orig/bfd/elf-properties.c binutils-2.30/bfd/elf-properties.c --- binutils.orig/bfd/elf-properties.c 2020-04-07 11:32:17.280776377 +0100 +++ binutils-2.30/bfd/elf-properties.c 2020-04-07 13:34:03.899784089 +0100 @@ -198,7 +198,7 @@ next: with ABFD. */ static bfd_boolean -elf_merge_gnu_properties (struct bfd_link_info *info, bfd *abfd, +elf_merge_gnu_properties (struct bfd_link_info *info, bfd *abfd, bfd *bbfd, elf_property *aprop, elf_property *bprop) { const struct elf_backend_data *bed = get_elf_backend_data (abfd); @@ -207,7 +207,7 @@ elf_merge_gnu_properties (struct bfd_lin if (bed->merge_gnu_properties != NULL && pr_type >= GNU_PROPERTY_LOPROC && pr_type < GNU_PROPERTY_LOUSER) - return bed->merge_gnu_properties (info, abfd, aprop, bprop); + return bed->merge_gnu_properties (info, abfd, bbfd, aprop, bprop); switch (pr_type) { @@ -241,7 +241,7 @@ elf_merge_gnu_properties (struct bfd_lin static elf_property * elf_find_and_remove_property (elf_property_list **listp, - unsigned int type) + unsigned int type, bfd_boolean remove) { elf_property_list *list; @@ -250,7 +250,8 @@ elf_find_and_remove_property (elf_proper if (type == list->property.pr_type) { /* Remove this property. */ - *listp = list->next; + if (remove) + *listp = list->next; return &list->property; } else if (type < list->property.pr_type) @@ -261,47 +262,241 @@ elf_find_and_remove_property (elf_proper return NULL; } -/* Merge GNU property list *LISTP with ABFD. */ +/* Merge GNU property list *LISTP in ABFD with FIRST_PBFD. */ static void -elf_merge_gnu_property_list (struct bfd_link_info *info, bfd *abfd, - elf_property_list **listp) +elf_merge_gnu_property_list (struct bfd_link_info *info, bfd *first_pbfd, + bfd *abfd, elf_property_list **listp) { elf_property_list *p, **lastp; elf_property *pr; + bfd_boolean number_p; + bfd_vma number = 0; - /* Merge each GNU property in ABFD with the one on *LISTP. */ - lastp = &elf_properties (abfd); + /* Merge each GNU property in FIRST_PBFD with the one on *LISTP. */ + lastp = &elf_properties (first_pbfd); for (p = *lastp; p; p = p->next) + if (p->property.pr_kind != property_remove) + { + if (p->property.pr_kind == property_number) + { + number_p = TRUE; + number = p->property.u.number; + } + else + number_p = FALSE; + pr = elf_find_and_remove_property (listp, p->property.pr_type, + TRUE); + /* Pass NULL to elf_merge_gnu_properties for the property which + isn't on *LISTP. */ + elf_merge_gnu_properties (info, first_pbfd, abfd, &p->property, pr); + if (p->property.pr_kind == property_remove) + { + if (number_p) + { + if (pr != NULL) + info->callbacks->minfo + (_("Removed property %W to merge %pB (0x%v) " + "and %pB (0x%v)\n"), + (bfd_vma) p->property.pr_type, first_pbfd, + number, abfd, pr->u.number); + else + info->callbacks->minfo + (_("Removed property %W to merge %pB (0x%v) " + "and %pB (not found)\n"), + (bfd_vma) p->property.pr_type, first_pbfd, + number, abfd); + } + else + { + if (pr != NULL) + info->callbacks->minfo + (_("Removed property %W to merge %pB and %pB\n"), + (bfd_vma) p->property.pr_type, first_pbfd, abfd); + else + info->callbacks->minfo + (_("Removed property %W to merge %pB and %pB " + "(not found)\n"), + (bfd_vma) p->property.pr_type, first_pbfd, abfd); + } + + /* Remove this property. */ + *lastp = p->next; + continue; + } + else if (number_p) + { + if (pr != NULL) + { + if (p->property.u.number != number + || p->property.u.number != pr->u.number) + info->callbacks->minfo + (_("Updated property %W (0x%v) to merge %pB (0x%v) " + "and %pB (0x%v)\n"), + (bfd_vma) p->property.pr_type, p->property.u.number, + first_pbfd, number, abfd, pr->u.number); + } + else + { + if (p->property.u.number != number) + info->callbacks->minfo + (_("Updated property %W (%v) to merge %pB (0x%v) " + "and %pB (not found)\n"), + (bfd_vma) p->property.pr_type, p->property.u.number, + first_pbfd, number, abfd); + } + } + lastp = &p->next; + } + + /* Merge the remaining properties on *LISTP with FIRST_PBFD. */ + for (p = *listp; p != NULL; p = p->next) { - pr = elf_find_and_remove_property (listp, p->property.pr_type); - /* Pass NULL to elf_merge_gnu_properties for the property which - isn't on *LISTP. */ - elf_merge_gnu_properties (info, abfd, &p->property, pr); - if (p->property.pr_kind == property_remove) + if (p->property.pr_kind == property_number) { - /* Remove this property. */ - *lastp = p->next; - continue; + number_p = TRUE; + number = p->property.u.number; + } + else + number_p = FALSE; + + if (elf_merge_gnu_properties (info, first_pbfd, abfd, NULL, &p->property)) + { + if (p->property.pr_type == GNU_PROPERTY_NO_COPY_ON_PROTECTED) + elf_has_no_copy_on_protected (first_pbfd) = TRUE; + + pr = _bfd_elf_get_property (first_pbfd, p->property.pr_type, + p->property.pr_datasz); + /* It must be a new property. */ + if (pr->pr_kind != property_unknown) + abort (); + /* Add a new property. */ + *pr = p->property; + } + else + { + pr = elf_find_and_remove_property (&elf_properties (first_pbfd), + p->property.pr_type, + FALSE); + if (pr == NULL) + { + if (number_p) + info->callbacks->minfo + (_("Removed property %W to merge %pB (not found) and " + "%pB (0x%v)\n"), + (bfd_vma) p->property.pr_type, first_pbfd, abfd, + number); + else + info->callbacks->minfo + (_("Removed property %W to merge %pB and %pB\n"), + (bfd_vma) p->property.pr_type, first_pbfd, abfd); + } + else if (pr->pr_kind != property_remove) + abort (); } - lastp = &p->next; } +} - /* Merge the remaining properties on *LISTP with ABFD. */ - for (p = *listp; p != NULL; p = p->next) - if (elf_merge_gnu_properties (info, abfd, NULL, &p->property)) - { - if (p->property.pr_type == GNU_PROPERTY_NO_COPY_ON_PROTECTED) - elf_has_no_copy_on_protected (abfd) = TRUE; +/* Get GNU property section size. */ + +static bfd_size_type +elf_get_gnu_property_section_size (elf_property_list *list, + unsigned int align_size) +{ + bfd_size_type size; + unsigned int descsz; + + /* Compute the output section size. */ + descsz = offsetof (Elf_External_Note, name[sizeof "GNU"]); + descsz = (descsz + 3) & -(unsigned int) 4; + size = descsz; + for (; list != NULL; list = list->next) + { + unsigned int datasz; + /* Check if this property should be skipped. */ + if (list->property.pr_kind == property_remove) + continue; + /* There are 4 byte type + 4 byte datasz for each property. */ + if (list->property.pr_type == GNU_PROPERTY_STACK_SIZE) + datasz = align_size; + else + datasz = list->property.pr_datasz; + size += 4 + 4 + datasz; + /* Align each property. */ + size = (size + (align_size - 1)) & ~(align_size - 1); + } + + return size; +} + +/* Write GNU properties. */ + +static void +elf_write_gnu_properties (bfd *abfd, bfd_byte *contents, + elf_property_list *list, unsigned int size, + unsigned int align_size) +{ + unsigned int descsz; + unsigned int datasz; + Elf_External_Note *e_note; + + e_note = (Elf_External_Note *) contents; + descsz = offsetof (Elf_External_Note, name[sizeof "GNU"]); + descsz = (descsz + 3) & -(unsigned int) 4; + bfd_h_put_32 (abfd, sizeof "GNU", &e_note->namesz); + bfd_h_put_32 (abfd, size - descsz, &e_note->descsz); + bfd_h_put_32 (abfd, NT_GNU_PROPERTY_TYPE_0, &e_note->type); + memcpy (e_note->name, "GNU", sizeof "GNU"); + + size = descsz; + for (; list != NULL; list = list->next) + { + /* Check if this property should be skipped. */ + if (list->property.pr_kind == property_remove) + continue; + /* There are 4 byte type + 4 byte datasz for each property. */ + if (list->property.pr_type == GNU_PROPERTY_STACK_SIZE) + datasz = align_size; + else + datasz = list->property.pr_datasz; + bfd_h_put_32 (abfd, list->property.pr_type, contents + size); + bfd_h_put_32 (abfd, datasz, contents + size + 4); + size += 4 + 4; + + /* Write out property value. */ + switch (list->property.pr_kind) + { + case property_number: + switch (datasz) + { + default: + /* Never should happen. */ + abort (); + + case 0: + break; + + case 4: + bfd_h_put_32 (abfd, list->property.u.number, + contents + size); + break; - pr = _bfd_elf_get_property (abfd, p->property.pr_type, - p->property.pr_datasz); - /* It must be a new property. */ - if (pr->pr_kind != property_unknown) + case 8: + bfd_h_put_64 (abfd, list->property.u.number, + contents + size); + break; + } + break; + + default: + /* Never should happen. */ abort (); - /* Add a new property. */ - *pr = p->property; - } + } + size += datasz; + + /* Align each property. */ + size = (size + (align_size - 1)) & ~ (align_size - 1); + } } /* Set up GNU properties. Return the first relocatable ELF input with @@ -349,8 +544,13 @@ _bfd_elf_link_setup_gnu_properties (stru return NULL; /* Merge .note.gnu.property sections. */ + info->callbacks->minfo (_("\n")); + info->callbacks->minfo (_("Merging program properties\n")); + info->callbacks->minfo (_("\n")); + for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link.next) - if (abfd != first_pbfd && (abfd->flags & DYNAMIC) == 0) + if (abfd != first_pbfd + && (abfd->flags & (DYNAMIC | BFD_PLUGIN | BFD_LINKER_CREATED)) == 0) { elf_property_list *null_ptr = NULL; elf_property_list **listp = &null_ptr; @@ -374,7 +574,7 @@ _bfd_elf_link_setup_gnu_properties (stru when all properties are from ELF objects with different machine code or class. */ if (first_pbfd != NULL) - elf_merge_gnu_property_list (info, first_pbfd, listp); + elf_merge_gnu_property_list (info, first_pbfd, abfd, listp); if (list != NULL) { @@ -390,11 +590,9 @@ _bfd_elf_link_setup_gnu_properties (stru always sorted by type even if input GNU properties aren't sorted. */ if (first_pbfd != NULL) { - unsigned int size; - unsigned int descsz; + bfd_size_type size; bfd_byte *contents; - Elf_External_Note *e_note; - unsigned int align_size = bed->s->elfclass == ELFCLASS64 ? 8 : 4; + unsigned int align_size = elfclass == ELFCLASS64 ? 8 : 4; sec = bfd_get_section_by_name (first_pbfd, NOTE_GNU_PROPERTY_SECTION_NAME); @@ -426,76 +624,28 @@ _bfd_elf_link_setup_gnu_properties (stru return NULL; } - /* Compute the section size. */ - descsz = offsetof (Elf_External_Note, name[sizeof "GNU"]); - descsz = (descsz + 3) & -(unsigned int) 4; - size = descsz; - for (list = elf_properties (first_pbfd); - list != NULL; - list = list->next) + /* Fix up GNU properties. */ + if (bed->fixup_gnu_properties) + bed->fixup_gnu_properties (info, &elf_properties (first_pbfd)); + + if (elf_properties (first_pbfd) == NULL) { - /* There are 4 byte type + 4 byte datasz for each property. */ - size += 4 + 4 + list->property.pr_datasz; - /* Align each property. */ - size = (size + (align_size - 1)) & ~(align_size - 1); + /* Discard .note.gnu.property section if all properties have + been removed. */ + sec->output_section = bfd_abs_section_ptr; + return NULL; } + /* Compute the section size. */ + list = elf_properties (first_pbfd); + size = elf_get_gnu_property_section_size (list, align_size); + /* Update .note.gnu.property section now. */ sec->size = size; contents = (bfd_byte *) bfd_zalloc (first_pbfd, size); - e_note = (Elf_External_Note *) contents; - bfd_h_put_32 (first_pbfd, sizeof "GNU", &e_note->namesz); - bfd_h_put_32 (first_pbfd, size - descsz, &e_note->descsz); - bfd_h_put_32 (first_pbfd, NT_GNU_PROPERTY_TYPE_0, &e_note->type); - memcpy (e_note->name, "GNU", sizeof "GNU"); - - size = descsz; - for (list = elf_properties (first_pbfd); - list != NULL; - list = list->next) - { - /* There are 4 byte type + 4 byte datasz for each property. */ - bfd_h_put_32 (first_pbfd, list->property.pr_type, - contents + size); - bfd_h_put_32 (first_pbfd, list->property.pr_datasz, - contents + size + 4); - size += 4 + 4; - - /* Write out property value. */ - switch (list->property.pr_kind) - { - case property_number: - switch (list->property.pr_datasz) - { - default: - /* Never should happen. */ - abort (); - - case 0: - break; - - case 4: - bfd_h_put_32 (first_pbfd, list->property.u.number, - contents + size); - break; - - case 8: - bfd_h_put_64 (first_pbfd, list->property.u.number, - contents + size); - break; - } - break; - - default: - /* Never should happen. */ - abort (); - } - size += list->property.pr_datasz; - - /* Align each property. */ - size = (size + (align_size - 1)) & ~ (align_size - 1); - } + elf_write_gnu_properties (first_pbfd, contents, list, size, + align_size); /* Cache the section contents for elf_link_input_bfd. */ elf_section_data (sec)->this_hdr.contents = contents; @@ -508,3 +658,58 @@ _bfd_elf_link_setup_gnu_properties (stru return first_pbfd; } + +/* Convert GNU property size. */ + +bfd_size_type +_bfd_elf_convert_gnu_property_size (bfd *ibfd, bfd *obfd) +{ + unsigned int align_size; + const struct elf_backend_data *bed; + elf_property_list *list = elf_properties (ibfd); + + bed = get_elf_backend_data (obfd); + align_size = bed->s->elfclass == ELFCLASS64 ? 8 : 4; + + /* Get the output .note.gnu.property section size. */ + return elf_get_gnu_property_section_size (list, align_size); +} + +/* Convert GNU properties. */ + +bfd_boolean +_bfd_elf_convert_gnu_properties (bfd *ibfd, asection *isec, + bfd *obfd, bfd_byte **ptr, + bfd_size_type *ptr_size) +{ + unsigned int size; + bfd_byte *contents; + unsigned int align_shift; + const struct elf_backend_data *bed; + elf_property_list *list = elf_properties (ibfd); + + bed = get_elf_backend_data (obfd); + align_shift = bed->s->elfclass == ELFCLASS64 ? 3 : 2; + + /* Get the output .note.gnu.property section size. */ + size = bfd_get_section_size (isec->output_section); + + /* Update the output .note.gnu.property section alignment. */ + bfd_set_section_alignment (obfd, isec->output_section, align_shift); + + if (size > bfd_get_section_size (isec)) + { + contents = (bfd_byte *) bfd_malloc (size); + free (*ptr); + *ptr = contents; + } + else + contents = *ptr; + + *ptr_size = size; + + /* Generate the output .note.gnu.property section. */ + elf_write_gnu_properties (ibfd, contents, list, size, 1 << align_shift); + + return TRUE; +} diff -rup binutils.orig/bfd/elf.c binutils-2.30/bfd/elf.c --- binutils.orig/bfd/elf.c 2020-04-07 11:32:17.260776522 +0100 +++ binutils-2.30/bfd/elf.c 2020-04-07 13:34:03.898784096 +0100 @@ -4376,6 +4376,14 @@ get_program_header_size (bfd *abfd, stru ++segs; } + s = bfd_get_section_by_name (abfd, + NOTE_GNU_PROPERTY_SECTION_NAME); + if (s != NULL && s->size != 0) + { + /* We need a PT_GNU_PROPERTY segment. */ + ++segs; + } + for (s = abfd->sections; s != NULL; s = s->next) { if ((s->flags & SEC_LOAD) != 0 @@ -5028,6 +5036,24 @@ _bfd_elf_map_sections_to_segments (bfd * pm = &m->next; } + s = bfd_get_section_by_name (abfd, + NOTE_GNU_PROPERTY_SECTION_NAME); + if (s != NULL && s->size != 0) + { + amt = sizeof (struct elf_segment_map) + sizeof (asection *); + m = bfd_zalloc (abfd, amt); + if (m == NULL) + goto error_return; + m->next = NULL; + m->p_type = PT_GNU_PROPERTY; + m->count = 1; + m->p_flags_valid = 1; + m->sections[0] = s; + m->p_flags = PF_R; + *pm = m; + pm = &m->next; + } + /* If there is a .eh_frame_hdr section, throw in a PT_GNU_EH_FRAME segment. */ eh_frame_hdr = elf_eh_frame_hdr (abfd); diff -rup binutils.orig/bfd/elfxx-target.h binutils-2.30/bfd/elfxx-target.h --- binutils.orig/bfd/elfxx-target.h 2020-04-07 11:32:17.267776472 +0100 +++ binutils-2.30/bfd/elfxx-target.h 2020-04-07 13:34:03.899784089 +0100 @@ -543,6 +543,9 @@ #ifndef elf_backend_setup_gnu_properties #define elf_backend_setup_gnu_properties _bfd_elf_link_setup_gnu_properties #endif +#ifndef elf_backend_fixup_gnu_properties +#define elf_backend_fixup_gnu_properties NULL +#endif #ifndef elf_backend_static_tls_alignment #define elf_backend_static_tls_alignment 1 #endif @@ -884,6 +887,7 @@ static struct elf_backend_data elfNN_bed elf_backend_parse_gnu_properties, elf_backend_merge_gnu_properties, elf_backend_setup_gnu_properties, + elf_backend_fixup_gnu_properties, elf_backend_compact_eh_encoding, elf_backend_cant_unwind_opcode, elf_backend_init_secondary_reloc_section, diff -rup binutils.orig/bfd/elfxx-x86.c binutils-2.30/bfd/elfxx-x86.c --- binutils.orig/bfd/elfxx-x86.c 2020-04-07 11:32:17.271776442 +0100 +++ binutils-2.30/bfd/elfxx-x86.c 2020-04-07 13:34:03.899784089 +0100 @@ -2271,33 +2271,29 @@ _bfd_x86_elf_parse_gnu_properties (bfd * { elf_property *prop; - switch (type) + if (type == GNU_PROPERTY_X86_COMPAT_ISA_1_USED + || type == GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED + || (type >= GNU_PROPERTY_X86_UINT32_AND_LO + && type <= GNU_PROPERTY_X86_UINT32_AND_HI) + || (type >= GNU_PROPERTY_X86_UINT32_OR_LO + && type <= GNU_PROPERTY_X86_UINT32_OR_HI) + || (type >= GNU_PROPERTY_X86_UINT32_OR_AND_LO + && type <= GNU_PROPERTY_X86_UINT32_OR_AND_HI)) { - case GNU_PROPERTY_X86_ISA_1_USED: - case GNU_PROPERTY_X86_ISA_1_NEEDED: - case GNU_PROPERTY_X86_FEATURE_1_AND: if (datasz != 4) { _bfd_error_handler - ((type == GNU_PROPERTY_X86_ISA_1_USED - ? _("error: %B: ") - : (type == GNU_PROPERTY_X86_ISA_1_NEEDED - ? _("error: %B: ") - : _("error: %B: "))), - abfd, datasz); + (_("error: %pB: "), + abfd, type, datasz); return property_corrupt; } prop = _bfd_elf_get_property (abfd, type, datasz); - /* Combine properties of the same type. */ prop->u.number |= bfd_h_get_32 (abfd, ptr); prop->pr_kind = property_number; - break; - - default: - return property_ignored; + return property_number; } - return property_number; + return property_ignored; } /* Merge x86 GNU property BPROP with APROP. If APROP isn't NULL, @@ -2307,6 +2303,7 @@ _bfd_x86_elf_parse_gnu_properties (bfd * bfd_boolean _bfd_x86_elf_merge_gnu_properties (struct bfd_link_info *info, bfd *abfd ATTRIBUTE_UNUSED, + bfd *bbfd ATTRIBUTE_UNUSED, elf_property *aprop, elf_property *bprop) { @@ -2314,15 +2311,38 @@ _bfd_x86_elf_merge_gnu_properties (struc bfd_boolean updated = FALSE; unsigned int pr_type = aprop != NULL ? aprop->pr_type : bprop->pr_type; - switch (pr_type) + if (pr_type == GNU_PROPERTY_X86_COMPAT_ISA_1_USED + || (pr_type >= GNU_PROPERTY_X86_UINT32_OR_AND_LO + && pr_type <= GNU_PROPERTY_X86_UINT32_OR_AND_HI)) + { + if (aprop == NULL || bprop == NULL) + { + /* Only one of APROP and BPROP can be NULL. */ + if (aprop != NULL) + { + /* Remove this property since the other input file doesn't + have it. */ + aprop->pr_kind = property_remove; + updated = TRUE; + } + } + else + { + number = aprop->u.number; + aprop->u.number = number | bprop->u.number; + updated = number != (unsigned int) aprop->u.number; + } + return updated; + } + else if (pr_type == GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED + || (pr_type >= GNU_PROPERTY_X86_UINT32_OR_LO + && pr_type <= GNU_PROPERTY_X86_UINT32_OR_HI)) { - case GNU_PROPERTY_X86_ISA_1_USED: - case GNU_PROPERTY_X86_ISA_1_NEEDED: if (aprop != NULL && bprop != NULL) { number = aprop->u.number; aprop->u.number = number | bprop->u.number; - /* Remove the property if ISA bits are empty. */ + /* Remove the property if all bits are empty. */ if (aprop->u.number == 0) { aprop->pr_kind = property_remove; @@ -2338,27 +2358,35 @@ _bfd_x86_elf_merge_gnu_properties (struc { if (aprop->u.number == 0) { - /* Remove APROP if ISA bits are empty. */ + /* Remove APROP if all bits are empty. */ aprop->pr_kind = property_remove; updated = TRUE; } } else { - /* Return TRUE if APROP is NULL and ISA bits of BPROP + /* Return TRUE if APROP is NULL and all bits of BPROP aren't empty to indicate that BPROP should be added to ABFD. */ updated = bprop->u.number != 0; } } - break; - - case GNU_PROPERTY_X86_FEATURE_1_AND: + return updated; + } + else if (pr_type >= GNU_PROPERTY_X86_UINT32_AND_LO + && pr_type <= GNU_PROPERTY_X86_UINT32_AND_HI) + { /* Only one of APROP and BPROP can be NULL: 1. APROP & BPROP when both APROP and BPROP aren't NULL. 2. If APROP is NULL, remove x86 feature. 3. Otherwise, do nothing. */ + const struct elf_backend_data *bed + = get_elf_backend_data (info->output_bfd); + struct elf_x86_link_hash_table *htab + = elf_x86_hash_table (info, bed->target_id); + if (!htab) + abort (); if (aprop != NULL && bprop != NULL) { features = 0; @@ -2404,9 +2432,10 @@ _bfd_x86_elf_merge_gnu_properties (struc updated = TRUE; } } - break; - - default: + return updated; + } + else + { /* Never should happen. */ abort (); } @@ -2434,12 +2463,12 @@ _bfd_x86_elf_link_setup_gnu_properties const struct elf_backend_data *bed; unsigned int class_align = ABI_64_P (info->output_bfd) ? 3 : 2; unsigned int got_align; - - features = 0; - if (info->ibt) - features = GNU_PROPERTY_X86_FEATURE_1_IBT; - if (info->shstk) - features |= GNU_PROPERTY_X86_FEATURE_1_SHSTK; + enum report + { + report_none = 0, /* Do nothing. */ + report_ibt = 1 << 2, /* Report missing IBT property. */ + report_shstk = 1 << 3 /* Report missing SHSTK property. */ + } report; /* Find a normal input file with GNU property note. */ for (pbfd = info->input_bfds; @@ -2454,18 +2483,46 @@ _bfd_x86_elf_link_setup_gnu_properties break; } - if (ebfd != NULL && features) + bed = get_elf_backend_data (info->output_bfd); + + htab = elf_x86_hash_table (info, bed->target_id); + if (htab == NULL) + return pbfd; + + features = 0; + report = report_ibt | report_shstk; + + if (info->ibt) { - /* If features is set, add GNU_PROPERTY_X86_FEATURE_1_IBT and - GNU_PROPERTY_X86_FEATURE_1_SHSTK. */ - prop = _bfd_elf_get_property (ebfd, - GNU_PROPERTY_X86_FEATURE_1_AND, - 4); - prop->u.number |= features; - prop->pr_kind = property_number; + features = GNU_PROPERTY_X86_FEATURE_1_IBT; + report &= ~ report_ibt; + } + + if (info->shstk) + { + features |= GNU_PROPERTY_X86_FEATURE_1_SHSTK; + report &= ~ report_shstk; + } + + if (report == 0) + info->cet_report = 0; + + if (ebfd != NULL) + { + prop = NULL; + if (features) + { + /* If features is set, add GNU_PROPERTY_X86_FEATURE_1_IBT and + GNU_PROPERTY_X86_FEATURE_1_SHSTK. */ + prop = _bfd_elf_get_property (ebfd, + GNU_PROPERTY_X86_FEATURE_1_AND, + 4); + prop->u.number |= features; + prop->pr_kind = property_number; + } /* Create the GNU property note section if needed. */ - if (pbfd == NULL) + if (prop != NULL && pbfd == NULL) { sec = bfd_make_section_with_flags (ebfd, NOTE_GNU_PROPERTY_SECTION_NAME, @@ -2481,7 +2538,7 @@ _bfd_x86_elf_link_setup_gnu_properties if (!bfd_set_section_alignment (ebfd, sec, class_align)) { error_alignment: - info->callbacks->einfo (_("%F%A: failed to align section\n"), + info->callbacks->einfo (_("%F%pA: failed to align section\n"), sec); } @@ -2489,13 +2546,53 @@ error_alignment: } } - pbfd = _bfd_elf_link_setup_gnu_properties (info); + if (info->cet_report) + { + /* Report missing IBT and SHSTK properties. */ + bfd *abfd; + const char *msg; + elf_property_list *p; + bfd_boolean missing_ibt, missing_shstk; + bfd_boolean check_ibt = !!(report & report_ibt); + bfd_boolean check_shstk = !!(report & report_shstk); - bed = get_elf_backend_data (info->output_bfd); + if (info->cet_report == 1) + msg = _("%P: %B: warning: missing %s\n"); + else + msg = _("%X%P: %B: error: missing %s\n"); - htab = elf_x86_hash_table (info, bed->target_id); - if (htab == NULL) - return pbfd; + for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link.next) + if (!(abfd->flags & (DYNAMIC | BFD_PLUGIN | BFD_LINKER_CREATED)) + && bfd_get_flavour (abfd) == bfd_target_elf_flavour) + { + for (p = elf_properties (abfd); p; p = p->next) + if (p->property.pr_type == GNU_PROPERTY_X86_FEATURE_1_AND) + break; + + missing_ibt = check_ibt; + missing_shstk = check_shstk; + if (p) + { + missing_ibt &= !(p->property.u.number + & GNU_PROPERTY_X86_FEATURE_1_IBT); + missing_shstk &= !(p->property.u.number + & GNU_PROPERTY_X86_FEATURE_1_SHSTK); + } + if (missing_ibt || missing_shstk) + { + const char *missing; + if (missing_ibt && missing_shstk) + missing = _("IBT and SHSTK properties"); + else if (missing_ibt) + missing = _("IBT property"); + else + missing = _("SHSTK property"); + info->callbacks->einfo (msg, abfd, missing); + } + } + } + + pbfd = _bfd_elf_link_setup_gnu_properties (info); htab->r_info = init_table->r_info; htab->r_sym = init_table->r_sym; @@ -2806,3 +2903,47 @@ error_alignment: return pbfd; } + +/* Fix up x86 GNU properties. */ + +void +_bfd_x86_elf_link_fixup_gnu_properties + (struct bfd_link_info *info ATTRIBUTE_UNUSED, + elf_property_list **listp) +{ + elf_property_list *p; + + for (p = *listp; p; p = p->next) + { + unsigned int type = p->property.pr_type; + + if (type == GNU_PROPERTY_X86_COMPAT_ISA_1_USED + || type == GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED + || (type >= GNU_PROPERTY_X86_UINT32_AND_LO + && type <= GNU_PROPERTY_X86_UINT32_AND_HI) + || (type >= GNU_PROPERTY_X86_UINT32_OR_LO + && type <= GNU_PROPERTY_X86_UINT32_OR_HI) + || (type >= GNU_PROPERTY_X86_UINT32_OR_AND_LO + && type <= GNU_PROPERTY_X86_UINT32_OR_AND_HI)) + { + if (p->property.u.number == 0 + && (type == GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED + || (type >= GNU_PROPERTY_X86_UINT32_AND_LO + && type <= GNU_PROPERTY_X86_UINT32_AND_HI) + || (type >= GNU_PROPERTY_X86_UINT32_OR_LO + && type <= GNU_PROPERTY_X86_UINT32_OR_HI))) + { + /* Remove empty property. */ + *listp = p->next; + continue; + } + + listp = &p->next; + } + else if (type > GNU_PROPERTY_HIPROC) + { + /* The property list is sorted in order of type. */ + break; + } + } +} diff -rup binutils.orig/bfd/elfxx-x86.h binutils-2.30/bfd/elfxx-x86.h --- binutils.orig/bfd/elfxx-x86.h 2020-04-07 11:32:17.280776377 +0100 +++ binutils-2.30/bfd/elfxx-x86.h 2020-04-07 13:34:03.900784082 +0100 @@ -653,11 +653,14 @@ extern enum elf_property_kind _bfd_x86_e (bfd *, unsigned int, bfd_byte *, unsigned int); extern bfd_boolean _bfd_x86_elf_merge_gnu_properties - (struct bfd_link_info *, bfd *, elf_property *, elf_property *); + (struct bfd_link_info *, bfd *, bfd *, elf_property *, elf_property *); extern bfd * _bfd_x86_elf_link_setup_gnu_properties (struct bfd_link_info *, struct elf_x86_init_table *); +extern void _bfd_x86_elf_link_fixup_gnu_properties + (struct bfd_link_info *, elf_property_list **); + #define bfd_elf64_mkobject \ _bfd_x86_elf_mkobject #define bfd_elf32_mkobject \ @@ -693,3 +696,5 @@ extern bfd * _bfd_x86_elf_link_setup_gnu _bfd_x86_elf_parse_gnu_properties #define elf_backend_merge_gnu_properties \ _bfd_x86_elf_merge_gnu_properties +#define elf_backend_fixup_gnu_properties \ + _bfd_x86_elf_link_fixup_gnu_properties diff -rup binutils.orig/binutils/readelf.c binutils-2.30/binutils/readelf.c --- binutils.orig/binutils/readelf.c 2020-04-07 11:32:17.244776638 +0100 +++ binutils-2.30/binutils/readelf.c 2020-04-07 13:34:03.901784074 +0100 @@ -3910,6 +3910,7 @@ get_segment_type (Filedata * filedata, u case PT_GNU_EH_FRAME: return "GNU_EH_FRAME"; case PT_GNU_STACK: return "GNU_STACK"; case PT_GNU_RELRO: return "GNU_RELRO"; + case PT_GNU_PROPERTY: return "GNU_PROPERTY"; default: if (p_type >= PT_GNU_MBIND_LO && p_type <= PT_GNU_MBIND_HI) @@ -16843,8 +16844,87 @@ get_gnu_elf_note_type (unsigned e_type) } static void +decode_x86_compat_isa (unsigned int bitmask) +{ + while (bitmask) + { + unsigned int bit = bitmask & (- bitmask); + + bitmask &= ~ bit; + switch (bit) + { + case GNU_PROPERTY_X86_COMPAT_ISA_1_486: + printf ("i486"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_586: + printf ("586"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_686: + printf ("686"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_SSE: + printf ("SSE"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_SSE2: + printf ("SSE2"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_SSE3: + printf ("SSE3"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_SSSE3: + printf ("SSSE3"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_SSE4_1: + printf ("SSE4_1"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_SSE4_2: + printf ("SSE4_2"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_AVX: + printf ("AVX"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_AVX2: + printf ("AVX2"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512F: + printf ("AVX512F"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512CD: + printf ("AVX512CD"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512ER: + printf ("AVX512ER"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512PF: + printf ("AVX512PF"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512VL: + printf ("AVX512VL"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512DQ: + printf ("AVX512DQ"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512BW: + printf ("AVX512BW"); + break; + default: + printf (_(""), bit); + break; + } + if (bitmask) + printf (", "); + } +} + +static void decode_x86_isa (unsigned int bitmask) { + if (!bitmask) + { + printf (_("")); + return; + } + while (bitmask) { unsigned int bit = bitmask & (- bitmask); @@ -16852,25 +16932,84 @@ decode_x86_isa (unsigned int bitmask) bitmask &= ~ bit; switch (bit) { - case GNU_PROPERTY_X86_ISA_1_486: printf ("i486"); break; - case GNU_PROPERTY_X86_ISA_1_586: printf ("586"); break; - case GNU_PROPERTY_X86_ISA_1_686: printf ("686"); break; - case GNU_PROPERTY_X86_ISA_1_SSE: printf ("SSE"); break; - case GNU_PROPERTY_X86_ISA_1_SSE2: printf ("SSE2"); break; - case GNU_PROPERTY_X86_ISA_1_SSE3: printf ("SSE3"); break; - case GNU_PROPERTY_X86_ISA_1_SSSE3: printf ("SSSE3"); break; - case GNU_PROPERTY_X86_ISA_1_SSE4_1: printf ("SSE4_1"); break; - case GNU_PROPERTY_X86_ISA_1_SSE4_2: printf ("SSE4_2"); break; - case GNU_PROPERTY_X86_ISA_1_AVX: printf ("AVX"); break; - case GNU_PROPERTY_X86_ISA_1_AVX2: printf ("AVX2"); break; - case GNU_PROPERTY_X86_ISA_1_AVX512F: printf ("AVX512F"); break; - case GNU_PROPERTY_X86_ISA_1_AVX512CD: printf ("AVX512CD"); break; - case GNU_PROPERTY_X86_ISA_1_AVX512ER: printf ("AVX512ER"); break; - case GNU_PROPERTY_X86_ISA_1_AVX512PF: printf ("AVX512PF"); break; - case GNU_PROPERTY_X86_ISA_1_AVX512VL: printf ("AVX512VL"); break; - case GNU_PROPERTY_X86_ISA_1_AVX512DQ: printf ("AVX512DQ"); break; - case GNU_PROPERTY_X86_ISA_1_AVX512BW: printf ("AVX512BW"); break; - default: printf (_(""), bit); break; + case GNU_PROPERTY_X86_ISA_1_CMOV: + printf ("CMOV"); + break; + case GNU_PROPERTY_X86_ISA_1_SSE: + printf ("SSE"); + break; + case GNU_PROPERTY_X86_ISA_1_SSE2: + printf ("SSE2"); + break; + case GNU_PROPERTY_X86_ISA_1_SSE3: + printf ("SSE3"); + break; + case GNU_PROPERTY_X86_ISA_1_SSSE3: + printf ("SSSE3"); + break; + case GNU_PROPERTY_X86_ISA_1_SSE4_1: + printf ("SSE4_1"); + break; + case GNU_PROPERTY_X86_ISA_1_SSE4_2: + printf ("SSE4_2"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX: + printf ("AVX"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX2: + printf ("AVX2"); + break; + case GNU_PROPERTY_X86_ISA_1_FMA: + printf ("FMA"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512F: + printf ("AVX512F"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512CD: + printf ("AVX512CD"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512ER: + printf ("AVX512ER"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512PF: + printf ("AVX512PF"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512VL: + printf ("AVX512VL"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512DQ: + printf ("AVX512DQ"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512BW: + printf ("AVX512BW"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512_4FMAPS: + printf ("AVX512_4FMAPS"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512_4VNNIW: + printf ("AVX512_4VNNIW"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512_BITALG: + printf ("AVX512_BITALG"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512_IFMA: + printf ("AVX512_IFMA"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512_VBMI: + printf ("AVX512_VBMI"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512_VBMI2: + printf ("AVX512_VBMI2"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512_VNNI: + printf ("AVX512_VNNI"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512_BF16: + printf ("AVX512_BF16"); + break; + default: + printf (_(""), bit); + break; } if (bitmask) printf (", "); @@ -16878,8 +17017,14 @@ decode_x86_isa (unsigned int bitmask) } static void -decode_x86_feature (unsigned int type, unsigned int bitmask) +decode_x86_feature_1 (unsigned int bitmask) { + if (!bitmask) + { + printf (_("")); + return; + } + while (bitmask) { unsigned int bit = bitmask & (- bitmask); @@ -16888,26 +17033,65 @@ decode_x86_feature (unsigned int type, u switch (bit) { case GNU_PROPERTY_X86_FEATURE_1_IBT: - switch (type) - { - case GNU_PROPERTY_X86_FEATURE_1_AND: - printf ("IBT"); - break; - default: - /* This should never happen. */ - abort (); - } + printf ("IBT"); break; case GNU_PROPERTY_X86_FEATURE_1_SHSTK: - switch (type) - { - case GNU_PROPERTY_X86_FEATURE_1_AND: - printf ("SHSTK"); - break; - default: - /* This should never happen. */ - abort (); - } + printf ("SHSTK"); + break; + default: + printf (_(""), bit); + break; + } + if (bitmask) + printf (", "); + } +} + +static void +decode_x86_feature_2 (unsigned int bitmask) +{ + if (!bitmask) + { + printf (_("")); + return; + } + + while (bitmask) + { + unsigned int bit = bitmask & (- bitmask); + + bitmask &= ~ bit; + switch (bit) + { + case GNU_PROPERTY_X86_FEATURE_2_X86: + printf ("x86"); + break; + case GNU_PROPERTY_X86_FEATURE_2_X87: + printf ("x87"); + break; + case GNU_PROPERTY_X86_FEATURE_2_MMX: + printf ("MMX"); + break; + case GNU_PROPERTY_X86_FEATURE_2_XMM: + printf ("XMM"); + break; + case GNU_PROPERTY_X86_FEATURE_2_YMM: + printf ("YMM"); + break; + case GNU_PROPERTY_X86_FEATURE_2_ZMM: + printf ("ZMM"); + break; + case GNU_PROPERTY_X86_FEATURE_2_FXSR: + printf ("FXSR"); + break; + case GNU_PROPERTY_X86_FEATURE_2_XSAVE: + printf ("XSAVE"); + break; + case GNU_PROPERTY_X86_FEATURE_2_XSAVEOPT: + printf ("XSAVEOPT"); + break; + case GNU_PROPERTY_X86_FEATURE_2_XSAVEC: + printf ("XSAVEC"); break; default: printf (_(""), bit); @@ -16963,30 +17147,89 @@ print_gnu_property_note (Filedata * file || filedata->file_header.e_machine == EM_IAMCU || filedata->file_header.e_machine == EM_386) { + unsigned int bitmask; + + if (datasz == 4) + bitmask = byte_get (ptr, 4); + else + bitmask = 0; + switch (type) { case GNU_PROPERTY_X86_ISA_1_USED: - printf ("x86 ISA used: "); if (datasz != 4) - printf (_(" "), datasz); + printf (_("x86 ISA used: "), + datasz); else - decode_x86_isa (byte_get (ptr, 4)); + { + printf ("x86 ISA used: "); + decode_x86_isa (bitmask); + } goto next; case GNU_PROPERTY_X86_ISA_1_NEEDED: - printf ("x86 ISA needed: "); if (datasz != 4) - printf (_(" "), datasz); + printf (_("x86 ISA needed: "), + datasz); else - decode_x86_isa (byte_get (ptr, 4)); + { + printf ("x86 ISA needed: "); + decode_x86_isa (bitmask); + } goto next; case GNU_PROPERTY_X86_FEATURE_1_AND: - printf ("x86 feature: "); if (datasz != 4) - printf (_(" "), datasz); + printf (_("x86 feature: "), + datasz); else - decode_x86_feature (type, byte_get (ptr, 4)); + { + printf ("x86 feature: "); + decode_x86_feature_1 (bitmask); + } + goto next; + + case GNU_PROPERTY_X86_FEATURE_2_USED: + if (datasz != 4) + printf (_("x86 feature used: "), + datasz); + else + { + printf ("x86 feature used: "); + decode_x86_feature_2 (bitmask); + } + goto next; + + case GNU_PROPERTY_X86_FEATURE_2_NEEDED: + if (datasz != 4) + printf (_("x86 feature needed: "), datasz); + else + { + printf ("x86 feature needed: "); + decode_x86_feature_2 (bitmask); + } + goto next; + + case GNU_PROPERTY_X86_COMPAT_ISA_1_USED: + if (datasz != 4) + printf (_("x86 ISA used: "), + datasz); + else + { + printf ("x86 ISA used: "); + decode_x86_compat_isa (bitmask); + } + goto next; + + case GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED: + if (datasz != 4) + printf (_("x86 ISA needed: "), + datasz); + else + { + printf ("x86 ISA needed: "); + decode_x86_compat_isa (bitmask); + } goto next; default: @@ -17144,7 +17387,7 @@ print_gnu_note (Filedata * filedata, Elf case NT_GNU_PROPERTY_TYPE_0: print_gnu_property_note (filedata, pnote); break; - + default: /* Handle unrecognised types. An error message should have already been created by get_gnu_elf_note_type(), so all that we need to do is to diff -rup binutils.orig/binutils/testsuite/binutils-all/i386/empty.d binutils-2.30/binutils/testsuite/binutils-all/i386/empty.d --- binutils.orig/binutils/testsuite/binutils-all/i386/empty.d 2020-04-07 11:32:17.248776609 +0100 +++ binutils-2.30/binutils/testsuite/binutils-all/i386/empty.d 2020-04-07 13:34:03.901784074 +0100 @@ -6,4 +6,4 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 - Properties: x86 feature: + Properties: x86 feature: diff -rup binutils.orig/binutils/testsuite/binutils-all/i386/pr21231b.d binutils-2.30/binutils/testsuite/binutils-all/i386/pr21231b.d --- binutils.orig/binutils/testsuite/binutils-all/i386/pr21231b.d 2020-04-07 11:32:17.248776609 +0100 +++ binutils-2.30/binutils/testsuite/binutils-all/i386/pr21231b.d 2020-04-07 13:34:03.901784074 +0100 @@ -1,5 +1,5 @@ #PROG: objcopy -#as: --32 +#as: --32 -mx86-used-note=yes #objcopy: #readelf: -n @@ -8,5 +8,8 @@ Displaying notes found in: .note.gnu.pro GNU 0x0000002c NT_GNU_PROPERTY_TYPE_0 Properties: stack size: 0x800000 no copy on protected - x86 ISA used: i486, 586, 686, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, AVX, AVX2, AVX512F, AVX512CD, AVX512ER, AVX512PF, AVX512VL, AVX512DQ, AVX512BW, , , , , , , , , , , , , , - x86 ISA needed: i486, 586, 686, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, AVX, AVX2, AVX512F, AVX512CD, AVX512ER, AVX512PF, AVX512VL + x86 ISA used: CMOV, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, AVX, AVX2, FMA, AVX512F, AVX512CD, AVX512ER, AVX512PF, AVX512VL, AVX512DQ, AVX512BW, AVX512_4FMAPS, AVX512_4VNNIW, AVX512_BITALG, AVX512_IFMA, AVX512_VBMI, AVX512_VBMI2, AVX512_VNNI, AVX512_BF16, , , , , , + x86 ISA needed: CMOV, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, AVX, AVX2, FMA, AVX512F, AVX512CD, AVX512ER, AVX512PF, AVX512VL, AVX512DQ + GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0 + Properties: x86 ISA used: + x86 feature used: x86 diff -rup binutils.orig/binutils/testsuite/binutils-all/i386/pr21231b.s binutils-2.30/binutils/testsuite/binutils-all/i386/pr21231b.s --- binutils.orig/binutils/testsuite/binutils-all/i386/pr21231b.s 2020-04-07 11:32:17.248776609 +0100 +++ binutils-2.30/binutils/testsuite/binutils-all/i386/pr21231b.s 2020-04-07 13:34:03.902784067 +0100 @@ -19,14 +19,14 @@ .long 0 /* pr_datasz. */ .p2align 2 /* GNU_PROPERTY_X86_ISA_1_USED */ - .long 0xc0000000 /* pr_type. */ + .long 0xc0010000 /* pr_type. */ .long 4f - 3f /* pr_datasz. */ 3: - .long -1 + .long 0x7fffffff 4: .p2align 2 /* GNU_PROPERTY_X86_ISA_1_NEEDED */ - .long 0xc0000001 /* pr_type. */ + .long 0xc0008000 /* pr_type. */ .long 4f - 3f /* pr_datasz. */ 3: .long 0xffff diff -rup binutils.orig/binutils/testsuite/binutils-all/x86-64/empty-x32.d binutils-2.30/binutils/testsuite/binutils-all/x86-64/empty-x32.d --- binutils.orig/binutils/testsuite/binutils-all/x86-64/empty-x32.d 2020-04-07 11:32:17.250776595 +0100 +++ binutils-2.30/binutils/testsuite/binutils-all/x86-64/empty-x32.d 2020-04-07 13:34:03.902784067 +0100 @@ -7,4 +7,4 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 - Properties: x86 feature: + Properties: x86 feature: diff -rup binutils.orig/binutils/testsuite/binutils-all/x86-64/empty.d binutils-2.30/binutils/testsuite/binutils-all/x86-64/empty.d --- binutils.orig/binutils/testsuite/binutils-all/x86-64/empty.d 2020-04-07 11:32:17.250776595 +0100 +++ binutils-2.30/binutils/testsuite/binutils-all/x86-64/empty.d 2020-04-07 13:34:03.902784067 +0100 @@ -6,4 +6,4 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 - Properties: x86 feature: + Properties: x86 feature: diff -rup binutils.orig/binutils/testsuite/binutils-all/x86-64/pr21231b.d binutils-2.30/binutils/testsuite/binutils-all/x86-64/pr21231b.d --- binutils.orig/binutils/testsuite/binutils-all/x86-64/pr21231b.d 2020-04-07 11:32:17.250776595 +0100 +++ binutils-2.30/binutils/testsuite/binutils-all/x86-64/pr21231b.d 2020-04-07 13:34:03.902784067 +0100 @@ -1,5 +1,5 @@ #PROG: objcopy -#as: --64 +#as: --64 -mx86-used-note=yes #objcopy: #readelf: -n @@ -8,5 +8,8 @@ Displaying notes found in: .note.gnu.pro GNU 0x00000038 NT_GNU_PROPERTY_TYPE_0 Properties: stack size: 0x800000 no copy on protected - x86 ISA used: i486, 586, 686, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, AVX, AVX2, AVX512F, AVX512CD, AVX512ER, AVX512PF, AVX512VL, AVX512DQ, AVX512BW, , , , , , , , , , , , , , - x86 ISA needed: i486, 586, 686, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, AVX, AVX2, AVX512F, AVX512CD, AVX512ER, AVX512PF, AVX512VL + x86 ISA used: CMOV, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, AVX, AVX2, FMA, AVX512F, AVX512CD, AVX512ER, AVX512PF, AVX512VL, AVX512DQ, AVX512BW, AVX512_4FMAPS, AVX512_4VNNIW, AVX512_BITALG, AVX512_IFMA, AVX512_VBMI, AVX512_VBMI2, AVX512_VNNI, AVX512_BF16, , , , , , + x86 ISA needed: CMOV, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, AVX, AVX2, FMA, AVX512F, AVX512CD, AVX512ER, AVX512PF, AVX512VL, AVX512DQ + GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0 + Properties: x86 ISA used: + x86 feature used: x86 diff -rup binutils.orig/binutils/testsuite/binutils-all/x86-64/pr21231b.s binutils-2.30/binutils/testsuite/binutils-all/x86-64/pr21231b.s --- binutils.orig/binutils/testsuite/binutils-all/x86-64/pr21231b.s 2020-04-07 11:32:17.250776595 +0100 +++ binutils-2.30/binutils/testsuite/binutils-all/x86-64/pr21231b.s 2020-04-07 13:34:03.902784067 +0100 @@ -19,14 +19,14 @@ .long 0 /* pr_datasz. */ .p2align 3 /* GNU_PROPERTY_X86_ISA_1_USED */ - .long 0xc0000000 /* pr_type. */ + .long 0xc0010000 /* pr_type. */ .long 4f - 3f /* pr_datasz. */ 3: - .long -1 + .long 0x7fffffff 4: .p2align 3 /* GNU_PROPERTY_X86_ISA_1_NEEDED */ - .long 0xc0000001 /* pr_type. */ + .long 0xc0008000 /* pr_type. */ .long 4f - 3f /* pr_datasz. */ 3: .long 0xffff diff -rup binutils.orig/gas/config/tc-i386.c binutils-2.30/gas/config/tc-i386.c --- binutils.orig/gas/config/tc-i386.c 2020-04-07 11:32:17.528774573 +0100 +++ binutils-2.30/gas/config/tc-i386.c 2020-04-07 13:36:05.123911315 +0100 @@ -191,6 +191,13 @@ static void s_bss (int); #endif #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) static void handle_large_common (int small ATTRIBUTE_UNUSED); + +/* GNU_PROPERTY_X86_ISA_1_USED. */ +static unsigned int x86_isa_1_used; +/* GNU_PROPERTY_X86_FEATURE_2_USED. */ +static unsigned int x86_feature_2_used; +/* Generate x86 used ISA and feature properties. */ +static unsigned int x86_used_note = DEFAULT_X86_USED_NOTE; #endif static const char *default_arch = DEFAULT_ARCH; @@ -7421,6 +7428,127 @@ encoding_length (const fragS *start_frag return len - start_off + (frag_now_ptr - frag_now->fr_literal); } +#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) +void +x86_cleanup (void) +{ + char *p; + asection *seg = now_seg; + subsegT subseg = now_subseg; + asection *sec; + unsigned int alignment, align_size_1; + unsigned int isa_1_descsz, feature_2_descsz, descsz; + unsigned int isa_1_descsz_raw, feature_2_descsz_raw; + unsigned int padding; + + if (!IS_ELF || !x86_used_note) + return; + + x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_X86; + + /* The .note.gnu.property section layout: + + Field Length Contents + ---- ---- ---- + n_namsz 4 4 + n_descsz 4 The note descriptor size + n_type 4 NT_GNU_PROPERTY_TYPE_0 + n_name 4 "GNU" + n_desc n_descsz The program property array + .... .... .... + */ + + /* Create the .note.gnu.property section. */ + sec = subseg_new (NOTE_GNU_PROPERTY_SECTION_NAME, 0); + bfd_set_section_flags (stdoutput, sec, + (SEC_ALLOC + | SEC_LOAD + | SEC_DATA + | SEC_HAS_CONTENTS + | SEC_READONLY)); + + if (get_elf_backend_data (stdoutput)->s->elfclass == ELFCLASS64) + { + align_size_1 = 7; + alignment = 3; + } + else + { + align_size_1 = 3; + alignment = 2; + } + + bfd_set_section_alignment (stdoutput, sec, alignment); + elf_section_type (sec) = SHT_NOTE; + + /* GNU_PROPERTY_X86_ISA_1_USED: 4-byte type + 4-byte data size + + 4-byte data */ + isa_1_descsz_raw = 4 + 4 + 4; + /* Align GNU_PROPERTY_X86_ISA_1_USED. */ + isa_1_descsz = (isa_1_descsz_raw + align_size_1) & ~align_size_1; + + feature_2_descsz_raw = isa_1_descsz; + /* GNU_PROPERTY_X86_FEATURE_2_USED: 4-byte type + 4-byte data size + + 4-byte data */ + feature_2_descsz_raw += 4 + 4 + 4; + /* Align GNU_PROPERTY_X86_FEATURE_2_USED. */ + feature_2_descsz = ((feature_2_descsz_raw + align_size_1) + & ~align_size_1); + + descsz = feature_2_descsz; + /* Section size: n_namsz + n_descsz + n_type + n_name + n_descsz. */ + p = frag_more (4 + 4 + 4 + 4 + descsz); + + /* Write n_namsz. */ + md_number_to_chars (p, (valueT) 4, 4); + + /* Write n_descsz. */ + md_number_to_chars (p + 4, (valueT) descsz, 4); + + /* Write n_type. */ + md_number_to_chars (p + 4 * 2, (valueT) NT_GNU_PROPERTY_TYPE_0, 4); + + /* Write n_name. */ + memcpy (p + 4 * 3, "GNU", 4); + + /* Write 4-byte type. */ + md_number_to_chars (p + 4 * 4, + (valueT) GNU_PROPERTY_X86_ISA_1_USED, 4); + + /* Write 4-byte data size. */ + md_number_to_chars (p + 4 * 5, (valueT) 4, 4); + + /* Write 4-byte data. */ + md_number_to_chars (p + 4 * 6, (valueT) x86_isa_1_used, 4); + + /* Zero out paddings. */ + padding = isa_1_descsz - isa_1_descsz_raw; + if (padding) + memset (p + 4 * 7, 0, padding); + + /* Write 4-byte type. */ + md_number_to_chars (p + isa_1_descsz + 4 * 4, + (valueT) GNU_PROPERTY_X86_FEATURE_2_USED, 4); + + /* Write 4-byte data size. */ + md_number_to_chars (p + isa_1_descsz + 4 * 5, (valueT) 4, 4); + + /* Write 4-byte data. */ + md_number_to_chars (p + isa_1_descsz + 4 * 6, + (valueT) x86_feature_2_used, 4); + + /* Zero out paddings. */ + padding = feature_2_descsz - feature_2_descsz_raw; + if (padding) + memset (p + isa_1_descsz + 4 * 7, 0, padding); + + /* We probably can't restore the current segment, for there likely + isn't one yet... */ + if (seg && subseg) + subseg_set (seg, subseg); +} +#endif + static void output_insn (void) { @@ -7429,6 +7557,99 @@ output_insn (void) fragS *fragP = NULL; enum align_branch_kind branch = align_branch_none; +#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) + if (IS_ELF && x86_used_note) + { +#if 0 + if (i.tm.cpu_flags.bitfield.cpucmov) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_CMOV; +#endif + if (i.tm.cpu_flags.bitfield.cpusse) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_SSE; + if (i.tm.cpu_flags.bitfield.cpusse2) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_SSE2; + if (i.tm.cpu_flags.bitfield.cpusse3) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_SSE3; + if (i.tm.cpu_flags.bitfield.cpussse3) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_SSSE3; + if (i.tm.cpu_flags.bitfield.cpusse4_1) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_SSE4_1; + if (i.tm.cpu_flags.bitfield.cpusse4_2) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_SSE4_2; + if (i.tm.cpu_flags.bitfield.cpuavx) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX; + if (i.tm.cpu_flags.bitfield.cpuavx2) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX2; + if (i.tm.cpu_flags.bitfield.cpufma) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_FMA; + if (i.tm.cpu_flags.bitfield.cpuavx512f) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512F; + if (i.tm.cpu_flags.bitfield.cpuavx512cd) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512CD; + if (i.tm.cpu_flags.bitfield.cpuavx512er) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512ER; + if (i.tm.cpu_flags.bitfield.cpuavx512pf) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512PF; + if (i.tm.cpu_flags.bitfield.cpuavx512vl) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512VL; + if (i.tm.cpu_flags.bitfield.cpuavx512dq) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512DQ; + if (i.tm.cpu_flags.bitfield.cpuavx512bw) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512BW; + if (i.tm.cpu_flags.bitfield.cpuavx512_4fmaps) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512_4FMAPS; + if (i.tm.cpu_flags.bitfield.cpuavx512_4vnniw) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512_4VNNIW; + if (i.tm.cpu_flags.bitfield.cpuavx512_bitalg) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512_BITALG; + if (i.tm.cpu_flags.bitfield.cpuavx512ifma) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512_IFMA; + if (i.tm.cpu_flags.bitfield.cpuavx512vbmi) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512_VBMI; + if (i.tm.cpu_flags.bitfield.cpuavx512_vbmi2) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512_VBMI2; + if (i.tm.cpu_flags.bitfield.cpuavx512_vnni) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512_VNNI; +#if 0 + if (i.tm.cpu_flags.bitfield.cpuavx512_bf16) + x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512_BF16; +#endif + + if (i.tm.cpu_flags.bitfield.cpu8087 + || i.tm.cpu_flags.bitfield.cpu287 + || i.tm.cpu_flags.bitfield.cpu387 + || i.tm.cpu_flags.bitfield.cpu687 + || i.tm.cpu_flags.bitfield.cpufisttp) + x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_X87; +#if 0 + /* Don't set GNU_PROPERTY_X86_FEATURE_2_MMX for prefetchtXXX nor + Xfence instructions. */ + if (i.tm.base_opcode != 0xf18 + && i.tm.base_opcode != 0xf0d + && i.tm.base_opcode != 0xfae + && (i.has_regmmx + || i.tm.cpu_flags.bitfield.cpummx + || i.tm.cpu_flags.bitfield.cpua3dnow + || i.tm.cpu_flags.bitfield.cpua3dnowa)) + x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_MMX; + if (i.has_regxmm) + x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_XMM; + if (i.has_regymm) + x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_YMM; + if (i.has_regzmm) + x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_ZMM; + if (i.tm.cpu_flags.bitfield.cpufxsr) + x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_FXSR; +#endif + if (i.tm.cpu_flags.bitfield.cpuxsave) + x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_XSAVE; + if (i.tm.cpu_flags.bitfield.cpuxsaveopt) + x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_XSAVEOPT; + if (i.tm.cpu_flags.bitfield.cpuxsavec) + x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_XSAVEC; + } +#endif + /* Tie dwarf2 debug info to the address at the start of the insn. We can't do this after the insn has been output as the current frag may have been closed off. eg. by frag_var. */ @@ -10829,6 +11050,7 @@ const char *md_shortopts = "qn"; #define OPTION_MALIGN_BRANCH_PREFIX_SIZE (OPTION_MD_BASE + 28) #define OPTION_MALIGN_BRANCH (OPTION_MD_BASE + 29) #define OPTION_MBRANCHES_WITH_32B_BOUNDARIES (OPTION_MD_BASE + 30) +#define OPTION_X86_USED_NOTE (OPTION_MD_BASE + 31) struct option md_longopts[] = { @@ -10840,6 +11062,7 @@ struct option md_longopts[] = #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) {"x32", no_argument, NULL, OPTION_X32}, {"mshared", no_argument, NULL, OPTION_MSHARED}, + {"mx86-used-note", required_argument, NULL, OPTION_X86_USED_NOTE}, #endif {"divide", no_argument, NULL, OPTION_DIVIDE}, {"march", required_argument, NULL, OPTION_MARCH}, @@ -10957,6 +11180,15 @@ md_parse_option (int c, const char *arg) else as_fatal (_("32bit x86_64 is only supported for ELF")); break; + + case OPTION_X86_USED_NOTE: + if (strcasecmp (arg, "yes") == 0) + x86_used_note = 1; + else if (strcasecmp (arg, "no") == 0) + x86_used_note = 0; + else + as_fatal (_("invalid -mx86-used-note= option: `%s'"), arg); + break; #endif case OPTION_32: @@ -11448,6 +11680,14 @@ md_show_usage (FILE *stream) #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) fprintf (stream, _("\ -s ignored\n")); + fprintf (stream, _("\ + -mx86-used-note=[no|yes] ")); + if (DEFAULT_X86_USED_NOTE) + fprintf (stream, _("(default: yes)\n")); + else + fprintf (stream, _("(default: no)\n")); + fprintf (stream, _("\ + generate x86 used ISA and feature properties\n")); #endif #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \ || defined (TE_PE) || defined (TE_PEP)) diff -rup binutils.orig/gas/config/tc-i386.h binutils-2.30/gas/config/tc-i386.h --- binutils.orig/gas/config/tc-i386.h 2020-04-07 11:32:17.526774588 +0100 +++ binutils-2.30/gas/config/tc-i386.h 2020-04-07 13:34:03.904784053 +0100 @@ -346,6 +346,11 @@ extern bfd_vma x86_64_section_letter (in #define md_elf_section_letter(LETTER, PTR_MSG) x86_64_section_letter (LETTER, PTR_MSG) #define md_elf_section_word(STR, LEN) x86_64_section_word (STR, LEN) +#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) +extern void x86_cleanup (void); +#define md_cleanup() x86_cleanup () +#endif + #ifdef TE_PE #define O_secrel O_md1 diff -rup binutils.orig/gas/config.in binutils-2.30/gas/config.in --- binutils.orig/gas/config.in 2020-04-07 11:32:17.532774544 +0100 +++ binutils-2.30/gas/config.in 2020-04-07 13:34:03.904784053 +0100 @@ -50,6 +50,10 @@ /* Define to 1 if you want to generate x86 relax relocations by default. */ #undef DEFAULT_GENERATE_X86_RELAX_RELOCATIONS +/* Define to 1 if you want to generate GNU x86 used ISA and feature properties + by default. */ +#undef DEFAULT_X86_USED_NOTE + /* Supported emulations. */ #undef EMULATIONS diff -rup binutils.orig/gas/configure binutils-2.30/gas/configure --- binutils.orig/gas/configure 2020-04-07 11:32:17.519774639 +0100 +++ binutils-2.30/gas/configure 2020-04-07 13:34:03.905784046 +0100 @@ -772,6 +772,7 @@ enable_compressed_debug_sections enable_x86_relax_relocations enable_elf_stt_common enable_generate_build_notes +enable_x86_used_note enable_werror enable_build_warnings with_cpu @@ -11788,6 +11789,18 @@ if test "${enable_generate_build_notes+s esac fi +# Decide if the x86 ELF assembler should default to generating GNU x86 +# used ISA and feature properties. +ac_default_generate_x86_used_note=unset +# Provide a configuration option to override the default. +# Check whether --enable-x86-used-note was given. +if test "${enable_x86_used_note+set}" = set; then : + enableval=$enable_x86_used_note; case "${enableval}" in + yes) ac_default_generate_x86_used_note=1 ;; + no) ac_default_generate_x86_used_note=0 ;; +esac +fi + using_cgen=no @@ -12736,6 +12749,14 @@ cat >>confdefs.h <<_ACEOF #define DEFAULT_GENERATE_BUILD_NOTES $ac_default_generate_build_notes _ACEOF +if test ${ac_default_generate_x86_used_note} = unset; then + ac_default_generate_x86_used_note=0 +fi + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_X86_USED_NOTE $ac_default_generate_x86_used_note +_ACEOF + if test x$ac_default_compressed_debug_sections = xyes ; then diff -rup binutils.orig/gas/configure.ac binutils-2.30/gas/configure.ac --- binutils.orig/gas/configure.ac 2020-04-07 11:32:17.533774537 +0100 +++ binutils-2.30/gas/configure.ac 2020-04-07 13:34:03.905784046 +0100 @@ -113,6 +113,17 @@ AC_ARG_ENABLE(generate_build_notes, no) ac_default_generate_build_notes=0 ;; esac])dnl +# Decide if the x86 ELF assembler should default to generating GNU x86 +# used ISA and feature properties. +ac_default_generate_x86_used_note=unset +# Provide a configuration option to override the default. +AC_ARG_ENABLE(x86-used-note, + AS_HELP_STRING([--enable-x86-used-note], + [generate GNU x86 used ISA and feature properties]), +[case "${enableval}" in + yes) ac_default_generate_x86_used_note=1 ;; + no) ac_default_generate_x86_used_note=0 ;; +esac])dnl using_cgen=no @@ -629,6 +640,25 @@ AC_DEFINE_UNQUOTED(DEFAULT_GENERATE_BUIL [Define to 1 if you want to generate GNU Build attribute notes by default, if none are contained in the input.]) +if test ${ac_default_generate_x86_used_note} = unset; then + ac_default_generate_x86_used_note=0 +fi +AC_DEFINE_UNQUOTED(DEFAULT_X86_USED_NOTE, + $ac_default_generate_x86_used_note, + [Define to 1 if you want to generate GNU x86 used ISA and feature + properties by default.]) + +if test ${ac_default_generate_riscv_attr} = unset; then + case ${target_os} in + elf) + ac_default_generate_riscv_attr=1 + ;; + *) + ac_default_generate_riscv_attr=0 + ;; + esac +fi + if test x$ac_default_compressed_debug_sections = xyes ; then AC_DEFINE(DEFAULT_FLAG_COMPRESS_DEBUG, 1, [Define if you want compressed debug sections by default.]) fi diff -rup binutils.orig/gas/testsuite/gas/i386/i386.exp binutils-2.30/gas/testsuite/gas/i386/i386.exp --- binutils.orig/gas/testsuite/gas/i386/i386.exp 2020-04-07 11:32:17.596774079 +0100 +++ binutils-2.30/gas/testsuite/gas/i386/i386.exp 2020-04-07 13:34:03.906784038 +0100 @@ -507,6 +507,9 @@ if [expr ([istarget "i*86-*-*"] || [ist run_dump_test "align-branch-3" } + run_dump_test "property-1" + run_dump_test "property-2" + if { [gas_64_check] } then { run_dump_test "att-regs" run_dump_test "intel-regs" diff -rup binutils.orig/include/bfdlink.h binutils-2.30/include/bfdlink.h --- binutils.orig/include/bfdlink.h 2020-04-07 11:32:17.506774733 +0100 +++ binutils-2.30/include/bfdlink.h 2020-04-07 13:34:03.906784038 +0100 @@ -489,6 +489,9 @@ struct bfd_link_info /* TRUE if GNU_PROPERTY_X86_FEATURE_1_SHSTK should be generated. */ unsigned int shstk: 1; + /* 0 = > no report, 1 => warn, 2=> error. */ + unsigned int cet_report: 2; + /* TRUE if generation of .interp/PT_INTERP should be suppressed. */ unsigned int nointerp: 1; diff -rup binutils.orig/include/elf/common.h binutils-2.30/include/elf/common.h --- binutils.orig/include/elf/common.h 2020-04-07 11:32:17.511774697 +0100 +++ binutils-2.30/include/elf/common.h 2020-04-07 13:34:03.906784038 +0100 @@ -460,6 +460,7 @@ #define PT_SUNW_EH_FRAME PT_GNU_EH_FRAME /* Solaris uses the same value */ #define PT_GNU_STACK (PT_LOOS + 0x474e551) /* Stack flags */ #define PT_GNU_RELRO (PT_LOOS + 0x474e552) /* Read-only after relocation */ +#define PT_GNU_PROPERTY (PT_LOOS + 0x474e553) /* GNU property */ /* Mbind segments */ #define PT_GNU_MBIND_NUM 4096 @@ -740,31 +741,96 @@ /* Application-specific semantics, hi */ #define GNU_PROPERTY_HIUSER 0xffffffff -#define GNU_PROPERTY_X86_ISA_1_USED 0xc0000000 -#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0000001 -#define GNU_PROPERTY_X86_FEATURE_1_AND 0xc0000002 - -#define GNU_PROPERTY_X86_ISA_1_486 (1U << 0) -#define GNU_PROPERTY_X86_ISA_1_586 (1U << 1) -#define GNU_PROPERTY_X86_ISA_1_686 (1U << 2) -#define GNU_PROPERTY_X86_ISA_1_SSE (1U << 3) -#define GNU_PROPERTY_X86_ISA_1_SSE2 (1U << 4) -#define GNU_PROPERTY_X86_ISA_1_SSE3 (1U << 5) -#define GNU_PROPERTY_X86_ISA_1_SSSE3 (1U << 6) -#define GNU_PROPERTY_X86_ISA_1_SSE4_1 (1U << 7) -#define GNU_PROPERTY_X86_ISA_1_SSE4_2 (1U << 8) -#define GNU_PROPERTY_X86_ISA_1_AVX (1U << 9) -#define GNU_PROPERTY_X86_ISA_1_AVX2 (1U << 10) -#define GNU_PROPERTY_X86_ISA_1_AVX512F (1U << 11) -#define GNU_PROPERTY_X86_ISA_1_AVX512CD (1U << 12) -#define GNU_PROPERTY_X86_ISA_1_AVX512ER (1U << 13) -#define GNU_PROPERTY_X86_ISA_1_AVX512PF (1U << 14) -#define GNU_PROPERTY_X86_ISA_1_AVX512VL (1U << 15) -#define GNU_PROPERTY_X86_ISA_1_AVX512DQ (1U << 16) -#define GNU_PROPERTY_X86_ISA_1_AVX512BW (1U << 17) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_USED 0xc0000000 +#define GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED 0xc0000001 -#define GNU_PROPERTY_X86_FEATURE_1_IBT (1U << 0) -#define GNU_PROPERTY_X86_FEATURE_1_SHSTK (1U << 1) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_486 (1U << 0) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_586 (1U << 1) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_686 (1U << 2) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_SSE (1U << 3) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_SSE2 (1U << 4) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_SSE3 (1U << 5) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_SSSE3 (1U << 6) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_SSE4_1 (1U << 7) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_SSE4_2 (1U << 8) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_AVX (1U << 9) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_AVX2 (1U << 10) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512F (1U << 11) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512CD (1U << 12) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512ER (1U << 13) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512PF (1U << 14) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512VL (1U << 15) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512DQ (1U << 16) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512BW (1U << 17) + +/* A 4-byte unsigned integer property: A bit is set if it is set in all + relocatable inputs. */ +#define GNU_PROPERTY_X86_UINT32_AND_LO 0xc0000002 +#define GNU_PROPERTY_X86_UINT32_AND_HI 0xc0007fff + +/* A 4-byte unsigned integer property: A bit is set if it is set in any + relocatable inputs. */ +#define GNU_PROPERTY_X86_UINT32_OR_LO 0xc0008000 +#define GNU_PROPERTY_X86_UINT32_OR_HI 0xc000ffff + +/* A 4-byte unsigned integer property: A bit is set if it is set in any + relocatable inputs and the property is present in all relocatable + inputs. */ +#define GNU_PROPERTY_X86_UINT32_OR_AND_LO 0xc0010000 +#define GNU_PROPERTY_X86_UINT32_OR_AND_HI 0xc0017fff + +#define GNU_PROPERTY_X86_FEATURE_1_AND \ + (GNU_PROPERTY_X86_UINT32_AND_LO + 0) + +#define GNU_PROPERTY_X86_ISA_1_NEEDED \ + (GNU_PROPERTY_X86_UINT32_OR_LO + 0) +#define GNU_PROPERTY_X86_FEATURE_2_NEEDED \ + (GNU_PROPERTY_X86_UINT32_OR_LO + 1) + +#define GNU_PROPERTY_X86_ISA_1_USED \ + (GNU_PROPERTY_X86_UINT32_OR_AND_LO + 0) +#define GNU_PROPERTY_X86_FEATURE_2_USED \ + (GNU_PROPERTY_X86_UINT32_OR_AND_LO + 1) + +#define GNU_PROPERTY_X86_FEATURE_1_IBT (1U << 0) +#define GNU_PROPERTY_X86_FEATURE_1_SHSTK (1U << 1) + +#define GNU_PROPERTY_X86_ISA_1_CMOV (1U << 0) +#define GNU_PROPERTY_X86_ISA_1_SSE (1U << 1) +#define GNU_PROPERTY_X86_ISA_1_SSE2 (1U << 2) +#define GNU_PROPERTY_X86_ISA_1_SSE3 (1U << 3) +#define GNU_PROPERTY_X86_ISA_1_SSSE3 (1U << 4) +#define GNU_PROPERTY_X86_ISA_1_SSE4_1 (1U << 5) +#define GNU_PROPERTY_X86_ISA_1_SSE4_2 (1U << 6) +#define GNU_PROPERTY_X86_ISA_1_AVX (1U << 7) +#define GNU_PROPERTY_X86_ISA_1_AVX2 (1U << 8) +#define GNU_PROPERTY_X86_ISA_1_FMA (1U << 9) +#define GNU_PROPERTY_X86_ISA_1_AVX512F (1U << 10) +#define GNU_PROPERTY_X86_ISA_1_AVX512CD (1U << 11) +#define GNU_PROPERTY_X86_ISA_1_AVX512ER (1U << 12) +#define GNU_PROPERTY_X86_ISA_1_AVX512PF (1U << 13) +#define GNU_PROPERTY_X86_ISA_1_AVX512VL (1U << 14) +#define GNU_PROPERTY_X86_ISA_1_AVX512DQ (1U << 15) +#define GNU_PROPERTY_X86_ISA_1_AVX512BW (1U << 16) +#define GNU_PROPERTY_X86_ISA_1_AVX512_4FMAPS (1U << 17) +#define GNU_PROPERTY_X86_ISA_1_AVX512_4VNNIW (1U << 18) +#define GNU_PROPERTY_X86_ISA_1_AVX512_BITALG (1U << 19) +#define GNU_PROPERTY_X86_ISA_1_AVX512_IFMA (1U << 20) +#define GNU_PROPERTY_X86_ISA_1_AVX512_VBMI (1U << 21) +#define GNU_PROPERTY_X86_ISA_1_AVX512_VBMI2 (1U << 22) +#define GNU_PROPERTY_X86_ISA_1_AVX512_VNNI (1U << 23) +#define GNU_PROPERTY_X86_ISA_1_AVX512_BF16 (1U << 24) + +#define GNU_PROPERTY_X86_FEATURE_2_X86 (1U << 0) +#define GNU_PROPERTY_X86_FEATURE_2_X87 (1U << 1) +#define GNU_PROPERTY_X86_FEATURE_2_MMX (1U << 2) +#define GNU_PROPERTY_X86_FEATURE_2_XMM (1U << 3) +#define GNU_PROPERTY_X86_FEATURE_2_YMM (1U << 4) +#define GNU_PROPERTY_X86_FEATURE_2_ZMM (1U << 5) +#define GNU_PROPERTY_X86_FEATURE_2_FXSR (1U << 6) +#define GNU_PROPERTY_X86_FEATURE_2_XSAVE (1U << 7) +#define GNU_PROPERTY_X86_FEATURE_2_XSAVEOPT (1U << 8) +#define GNU_PROPERTY_X86_FEATURE_2_XSAVEC (1U << 9) /* Values used in GNU .note.ABI-tag notes (NT_GNU_ABI_TAG). */ #define GNU_ABI_TAG_LINUX 0 diff -rup binutils.orig/ld/emulparams/cet.sh binutils-2.30/ld/emulparams/cet.sh --- binutils.orig/ld/emulparams/cet.sh 2020-04-07 11:32:17.320776086 +0100 +++ binutils-2.30/ld/emulparams/cet.sh 2020-04-07 13:34:03.907784031 +0100 @@ -2,7 +2,8 @@ PARSE_AND_LIST_OPTIONS_CET=' fprintf (file, _("\ -z ibtplt Generate IBT-enabled PLT entries\n\ -z ibt Generate GNU_PROPERTY_X86_FEATURE_1_IBT\n\ - -z shstk Generate GNU_PROPERTY_X86_FEATURE_1_SHSTK\n")); + -z shstk Generate GNU_PROPERTY_X86_FEATURE_1_SHSTK\n\ + -z cet-report=[none|warning|error] (default: none)\n")); ' PARSE_AND_LIST_ARGS_CASE_Z_CET=' else if (strcmp (optarg, "ibtplt") == 0) @@ -11,6 +12,18 @@ PARSE_AND_LIST_ARGS_CASE_Z_CET=' link_info.ibt = TRUE; else if (strcmp (optarg, "shstk") == 0) link_info.shstk = TRUE; + else if (strncmp (optarg, "cet-report=", 11) == 0) + { + if (strcmp (optarg + 11, "none") == 0) + link_info.cet_report = 0; + else if (strcmp (optarg + 11, "warning") == 0) + link_info.cet_report = 1; + else if (strcmp (optarg + 11, "error") == 0) + link_info.cet_report = 2; + else + einfo (_("%F%P: invalid option for -z cet-report=: %s\n"), + optarg + 11); + } ' PARSE_AND_LIST_OPTIONS="$PARSE_AND_LIST_OPTIONS $PARSE_AND_LIST_OPTIONS_CET" diff -rup binutils.orig/ld/testsuite/ld-elf/elf.exp binutils-2.30/ld/testsuite/ld-elf/elf.exp --- binutils.orig/ld/testsuite/ld-elf/elf.exp 2020-04-07 11:32:17.454775112 +0100 +++ binutils-2.30/ld/testsuite/ld-elf/elf.exp 2020-04-07 13:34:03.907784031 +0100 @@ -101,8 +101,10 @@ proc is_elf64 { binary_file } { if [is_elf64 tmpdir/symbol3w.a] { set ASFLAGS "$ASFLAGS --defsym ALIGN=3" + set pr23900_1_exp "pr23900-1-64.rd" } else { set ASFLAGS "$ASFLAGS --defsym ALIGN=2" + set pr23900_1_exp "pr23900-1-32.rd" } @@ -317,12 +319,36 @@ if { [check_gc_sections_available] && ![ if { [istarget *-*-*linux*] || [istarget *-*-nacl*] || [istarget *-*-gnu*] } { - run_ld_link_tests { - {"stack exec" "-z execstack" "" "" {stack.s} - {{readelf {-Wl} stack-exec.rd}} "stack-exec.exe"} - {"stack size" "-z stack-size=0x123400" "" "" {stack.s} - {{readelf {-Wl} stack-size.rd}} "stack-size.exe"} - } + run_ld_link_tests [list \ + [list "stack exec" \ + "-z execstack" \ + "" \ + "" \ + {stack.s} \ + {{readelf {-Wl} stack-exec.rd}} \ + "stack-exec.exe"] \ + [list "stack noexec" \ + "-z noexecstack" \ + "" \ + "" \ + {stack.s} \ + {{readelf {-Wl} stack-noexec.rd}} \ + "stack-noexec.exe"] \ + [list "stack size" \ + "-z stack-size=0x123400" \ + "" \ + "" \ + {stack.s} \ + {{readelf {-Wl} stack-size.rd}} \ + "stack-size.exe"] \ + [list "PT_GNU_PROPERTY alignment" \ + "" \ + "" \ + "" \ + {pr23900-1.s} \ + [list [list "readelf" {-Wl} $pr23900_1_exp]] \ + "pr23900-1.exe"] \ + ] } set LDFLAGS $old_ldflags diff -rup binutils.orig/ld/testsuite/ld-i386/ibt-plt-1.d binutils-2.30/ld/testsuite/ld-i386/ibt-plt-1.d --- binutils.orig/ld/testsuite/ld-i386/ibt-plt-1.d 2020-04-07 11:32:17.358775810 +0100 +++ binutils-2.30/ld/testsuite/ld-i386/ibt-plt-1.d 2020-04-07 13:34:03.907784031 +0100 @@ -1,5 +1,5 @@ #as: --32 -#ld: -shared -m elf_i386 --hash-style=sysv +#ld: -shared -m elf_i386 --hash-style=sysv -z noseparate-code #objdump: -dw .*: +file format .* @@ -7,45 +7,45 @@ Disassembly of section .plt: -0+1b0 <.plt>: +[a-f0-9]+ <.plt>: +[a-f0-9]+: ff b3 04 00 00 00 pushl 0x4\(%ebx\) +[a-f0-9]+: ff a3 08 00 00 00 jmp \*0x8\(%ebx\) +[a-f0-9]+: 0f 1f 40 00 nopl 0x0\(%eax\) +[a-f0-9]+: f3 0f 1e fb endbr32 +[a-f0-9]+: 68 00 00 00 00 push \$0x0 - +[a-f0-9]+: e9 e2 ff ff ff jmp 1b0 <.plt> + +[a-f0-9]+: e9 e2 ff ff ff jmp [a-f0-9]+ <.plt> +[a-f0-9]+: 66 90 xchg %ax,%ax +[a-f0-9]+: f3 0f 1e fb endbr32 +[a-f0-9]+: 68 08 00 00 00 push \$0x8 - +[a-f0-9]+: e9 d2 ff ff ff jmp 1b0 <.plt> + +[a-f0-9]+: e9 d2 ff ff ff jmp [a-f0-9]+ <.plt> +[a-f0-9]+: 66 90 xchg %ax,%ax Disassembly of section .plt.sec: -0+1e0 : +[a-f0-9]+ : +[a-f0-9]+: f3 0f 1e fb endbr32 +[a-f0-9]+: ff a3 0c 00 00 00 jmp \*0xc\(%ebx\) +[a-f0-9]+: 66 0f 1f 44 00 00 nopw 0x0\(%eax,%eax,1\) -0+1f0 : +[a-f0-9]+ : +[a-f0-9]+: f3 0f 1e fb endbr32 +[a-f0-9]+: ff a3 10 00 00 00 jmp \*0x10\(%ebx\) +[a-f0-9]+: 66 0f 1f 44 00 00 nopw 0x0\(%eax,%eax,1\) Disassembly of section .text: -0+200 : +[a-f0-9]+ : +[a-f0-9]+: 53 push %ebx - +[a-f0-9]+: e8 18 00 00 00 call 21e <__x86.get_pc_thunk.bx> - +[a-f0-9]+: 81 c3 36 11 00 00 add \$0x1136,%ebx + +[a-f0-9]+: e8 18 00 00 00 call [a-f0-9]+ <__x86.get_pc_thunk.bx> + +[a-f0-9]+: 81 c3 ([0-9a-f]{2} ){4}[ ]+add \$0x[a-f0-9]+,%ebx +[a-f0-9]+: 83 ec 08 sub \$0x8,%esp - +[a-f0-9]+: e8 dc ff ff ff call 1f0 - +[a-f0-9]+: e8 c7 ff ff ff call 1e0 + +[a-f0-9]+: e8 dc ff ff ff call [a-f0-9]+ + +[a-f0-9]+: e8 c7 ff ff ff call [a-f0-9]+ +[a-f0-9]+: 83 c4 08 add \$0x8,%esp +[a-f0-9]+: 5b pop %ebx +[a-f0-9]+: c3 ret -0+21e <__x86.get_pc_thunk.bx>: +[a-f0-9]+ <__x86.get_pc_thunk.bx>: +[a-f0-9]+: 8b 1c 24 mov \(%esp\),%ebx +[a-f0-9]+: c3 ret #pass diff -rup binutils.orig/ld/testsuite/ld-i386/ibt-plt-2a.d binutils-2.30/ld/testsuite/ld-i386/ibt-plt-2a.d --- binutils.orig/ld/testsuite/ld-i386/ibt-plt-2a.d 2020-04-07 11:32:17.361775788 +0100 +++ binutils-2.30/ld/testsuite/ld-i386/ibt-plt-2a.d 2020-04-07 13:34:03.907784031 +0100 @@ -1,6 +1,6 @@ #source: ibt-plt-2.s #as: --32 -#ld: -shared -m elf_i386 -z ibtplt --hash-style=sysv +#ld: -shared -m elf_i386 -z ibtplt --hash-style=sysv -z noseparate-code #objdump: -dw .*: +file format .* @@ -8,45 +8,45 @@ Disassembly of section .plt: -0+1b0 <.plt>: +0+1.0 <.plt>: +[a-f0-9]+: ff b3 04 00 00 00 pushl 0x4\(%ebx\) +[a-f0-9]+: ff a3 08 00 00 00 jmp \*0x8\(%ebx\) +[a-f0-9]+: 0f 1f 40 00 nopl 0x0\(%eax\) +[a-f0-9]+: f3 0f 1e fb endbr32 +[a-f0-9]+: 68 00 00 00 00 push \$0x0 - +[a-f0-9]+: e9 e2 ff ff ff jmp 1b0 <.plt> + +[a-f0-9]+: e9 e2 ff ff ff jmp 1.0 <.plt> +[a-f0-9]+: 66 90 xchg %ax,%ax +[a-f0-9]+: f3 0f 1e fb endbr32 +[a-f0-9]+: 68 08 00 00 00 push \$0x8 - +[a-f0-9]+: e9 d2 ff ff ff jmp 1b0 <.plt> + +[a-f0-9]+: e9 d2 ff ff ff jmp 1.0 <.plt> +[a-f0-9]+: 66 90 xchg %ax,%ax Disassembly of section .plt.sec: -0+1e0 : +0+1.0 : +[a-f0-9]+: f3 0f 1e fb endbr32 +[a-f0-9]+: ff a3 0c 00 00 00 jmp \*0xc\(%ebx\) +[a-f0-9]+: 66 0f 1f 44 00 00 nopw 0x0\(%eax,%eax,1\) -0+1f0 : +0+1.0 : +[a-f0-9]+: f3 0f 1e fb endbr32 +[a-f0-9]+: ff a3 10 00 00 00 jmp \*0x10\(%ebx\) +[a-f0-9]+: 66 0f 1f 44 00 00 nopw 0x0\(%eax,%eax,1\) Disassembly of section .text: -0+200 : +0+1.0 : +[a-f0-9]+: 53 push %ebx - +[a-f0-9]+: e8 18 00 00 00 call 21e <__x86.get_pc_thunk.bx> - +[a-f0-9]+: 81 c3 36 11 00 00 add \$0x1136,%ebx + +[a-f0-9]+: e8 18 00 00 00 call 1.e <__x86.get_pc_thunk.bx> + +[a-f0-9]+: 81 c3 1a 11 00 00 add \$0x111a,%ebx +[a-f0-9]+: 83 ec 08 sub \$0x8,%esp - +[a-f0-9]+: e8 dc ff ff ff call 1f0 - +[a-f0-9]+: e8 c7 ff ff ff call 1e0 + +[a-f0-9]+: e8 dc ff ff ff call 1.0 + +[a-f0-9]+: e8 c7 ff ff ff call 1.0 +[a-f0-9]+: 83 c4 08 add \$0x8,%esp +[a-f0-9]+: 5b pop %ebx +[a-f0-9]+: c3 ret -0+21e <__x86.get_pc_thunk.bx>: +0+1.e <__x86.get_pc_thunk.bx>: +[a-f0-9]+: 8b 1c 24 mov \(%esp\),%ebx +[a-f0-9]+: c3 ret #pass diff -rup binutils.orig/ld/testsuite/ld-i386/ibt-plt-2b.d binutils-2.30/ld/testsuite/ld-i386/ibt-plt-2b.d --- binutils.orig/ld/testsuite/ld-i386/ibt-plt-2b.d 2020-04-07 11:32:17.355775832 +0100 +++ binutils-2.30/ld/testsuite/ld-i386/ibt-plt-2b.d 2020-04-07 13:34:03.907784031 +0100 @@ -1,6 +1,6 @@ #source: ibt-plt-2.s #as: --32 -#ld: -shared -m elf_i386 -z ibtplt --hash-style=sysv +#ld: -shared -m elf_i386 -z ibtplt --hash-style=sysv -z noseparate-code #readelf: -n -wf Contents of the .eh_frame section: @@ -18,37 +18,31 @@ Contents of the .eh_frame section: DW_CFA_nop DW_CFA_nop -0+18 0000001c 0000001c FDE cie=00000000 pc=00000200..0000021e - DW_CFA_advance_loc: 1 to 00000201 +0+18 0000001c 0000001c FDE cie=00000000 pc=000001.0..000001.e + DW_CFA_advance_loc: 1 to 000001.1 DW_CFA_def_cfa_offset: 8 DW_CFA_offset: r3 \(ebx\) at cfa-8 - DW_CFA_advance_loc: 14 to 0000020f + DW_CFA_advance_loc: 14 to 000001.f DW_CFA_def_cfa_offset: 16 - DW_CFA_advance_loc: 13 to 0000021c + DW_CFA_advance_loc: 13 to 000001.c DW_CFA_def_cfa_offset: 8 - DW_CFA_advance_loc: 1 to 0000021d + DW_CFA_advance_loc: 1 to 000001.d DW_CFA_restore: r3 \(ebx\) DW_CFA_def_cfa_offset: 4 -0+38 00000010 0000003c FDE cie=00000000 pc=0000021e..00000222 +0+38 00000010 0000003c FDE cie=00000000 pc=000001.e..00000..2 DW_CFA_nop DW_CFA_nop DW_CFA_nop -0+4c 00000020 00000050 FDE cie=00000000 pc=000001b0..000001e0 +0+4c 00000020 00000050 FDE cie=00000000 pc=000001.0..000001.0 DW_CFA_def_cfa_offset: 8 - DW_CFA_advance_loc: 6 to 000001b6 + DW_CFA_advance_loc: 6 to 000001.6 DW_CFA_def_cfa_offset: 12 - DW_CFA_advance_loc: 10 to 000001c0 + DW_CFA_advance_loc: 10 to 000001.0 DW_CFA_def_cfa_expression \(DW_OP_breg4 \(esp\): 4; DW_OP_breg8 \(eip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit9; DW_OP_ge; DW_OP_lit2; DW_OP_shl; DW_OP_plus\) -0+70 00000010 00000074 FDE cie=00000000 pc=000001e0..00000200 +0+70 00000010 00000074 FDE cie=00000000 pc=000001.0..000001.0 DW_CFA_nop DW_CFA_nop DW_CFA_nop - - -Displaying notes found in: .note.gnu.property - Owner Data size Description - GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 - Properties: x86 feature: diff -rup binutils.orig/ld/testsuite/ld-i386/ibt-plt-2c.d binutils-2.30/ld/testsuite/ld-i386/ibt-plt-2c.d --- binutils.orig/ld/testsuite/ld-i386/ibt-plt-2c.d 2020-04-07 11:32:17.357775817 +0100 +++ binutils-2.30/ld/testsuite/ld-i386/ibt-plt-2c.d 2020-04-07 13:34:03.907784031 +0100 @@ -1,6 +1,6 @@ #source: ibt-plt-2.s #as: --32 -#ld: -shared -m elf_i386 -z ibt --hash-style=sysv +#ld: -shared -m elf_i386 -z ibt --hash-style=sysv -z noseparate-code #objdump: -dw .*: +file format .* @@ -8,45 +8,45 @@ Disassembly of section .plt: -0+1b0 <.plt>: +[a-f0-9]+ <.plt>: +[a-f0-9]+: ff b3 04 00 00 00 pushl 0x4\(%ebx\) +[a-f0-9]+: ff a3 08 00 00 00 jmp \*0x8\(%ebx\) +[a-f0-9]+: 0f 1f 40 00 nopl 0x0\(%eax\) +[a-f0-9]+: f3 0f 1e fb endbr32 +[a-f0-9]+: 68 00 00 00 00 push \$0x0 - +[a-f0-9]+: e9 e2 ff ff ff jmp 1b0 <.plt> + +[a-f0-9]+: e9 e2 ff ff ff jmp [a-f0-9]+ <.plt> +[a-f0-9]+: 66 90 xchg %ax,%ax +[a-f0-9]+: f3 0f 1e fb endbr32 +[a-f0-9]+: 68 08 00 00 00 push \$0x8 - +[a-f0-9]+: e9 d2 ff ff ff jmp 1b0 <.plt> + +[a-f0-9]+: e9 d2 ff ff ff jmp [a-f0-9]+ <.plt> +[a-f0-9]+: 66 90 xchg %ax,%ax Disassembly of section .plt.sec: -0+1e0 : +[a-f0-9]+ : +[a-f0-9]+: f3 0f 1e fb endbr32 +[a-f0-9]+: ff a3 0c 00 00 00 jmp \*0xc\(%ebx\) +[a-f0-9]+: 66 0f 1f 44 00 00 nopw 0x0\(%eax,%eax,1\) -0+1f0 : +[a-f0-9]+ : +[a-f0-9]+: f3 0f 1e fb endbr32 +[a-f0-9]+: ff a3 10 00 00 00 jmp \*0x10\(%ebx\) +[a-f0-9]+: 66 0f 1f 44 00 00 nopw 0x0\(%eax,%eax,1\) Disassembly of section .text: -0+200 : +[a-f0-9]+ : +[a-f0-9]+: 53 push %ebx - +[a-f0-9]+: e8 18 00 00 00 call 21e <__x86.get_pc_thunk.bx> - +[a-f0-9]+: 81 c3 36 11 00 00 add \$0x1136,%ebx + +[a-f0-9]+: e8 18 00 00 00 call [0-9a-f]+ <__x86.get_pc_thunk.bx> + +[a-f0-9]+: 81 c3 ([0-9a-f]{2} ){4}[ ]+add \$0x[a-f0-9]+,%ebx +[a-f0-9]+: 83 ec 08 sub \$0x8,%esp - +[a-f0-9]+: e8 dc ff ff ff call 1f0 - +[a-f0-9]+: e8 c7 ff ff ff call 1e0 + +[a-f0-9]+: e8 dc ff ff ff call [a-f0-9]+ + +[a-f0-9]+: e8 c7 ff ff ff call [a-f0-9]+ +[a-f0-9]+: 83 c4 08 add \$0x8,%esp +[a-f0-9]+: 5b pop %ebx +[a-f0-9]+: c3 ret -0+21e <__x86.get_pc_thunk.bx>: +[a-f0-9]+ <__x86.get_pc_thunk.bx>: +[a-f0-9]+: 8b 1c 24 mov \(%esp\),%ebx +[a-f0-9]+: c3 ret #pass diff -rup binutils.orig/ld/testsuite/ld-i386/ibt-plt-2d.d binutils-2.30/ld/testsuite/ld-i386/ibt-plt-2d.d --- binutils.orig/ld/testsuite/ld-i386/ibt-plt-2d.d 2020-04-07 11:32:17.354775839 +0100 +++ binutils-2.30/ld/testsuite/ld-i386/ibt-plt-2d.d 2020-04-07 13:34:03.907784031 +0100 @@ -1,6 +1,6 @@ #source: ibt-plt-2.s #as: --32 -#ld: -shared -m elf_i386 -z ibt --hash-style=sysv +#ld: -shared -m elf_i386 -z ibt --hash-style=sysv -z noseparate-code #readelf: -n -wf Contents of the .eh_frame section: @@ -18,31 +18,31 @@ Contents of the .eh_frame section: DW_CFA_nop DW_CFA_nop -0+18 0000001c 0000001c FDE cie=00000000 pc=00000200..0000021e - DW_CFA_advance_loc: 1 to 00000201 +0+18 0000001c 0000001c FDE cie=00000000 pc=[a-f0-9]+\.\.[a-f0-9]+ + DW_CFA_advance_loc: 1 to [a-f0-9]+ DW_CFA_def_cfa_offset: 8 DW_CFA_offset: r3 \(ebx\) at cfa-8 - DW_CFA_advance_loc: 14 to 0000020f + DW_CFA_advance_loc: 14 to [a-f0-9]+ DW_CFA_def_cfa_offset: 16 - DW_CFA_advance_loc: 13 to 0000021c + DW_CFA_advance_loc: 13 to [a-f0-9]+ DW_CFA_def_cfa_offset: 8 - DW_CFA_advance_loc: 1 to 0000021d + DW_CFA_advance_loc: 1 to [a-f0-9]+ DW_CFA_restore: r3 \(ebx\) DW_CFA_def_cfa_offset: 4 -0+38 00000010 0000003c FDE cie=00000000 pc=0000021e..00000222 +0+38 00000010 0000003c FDE cie=00000000 pc=[a-f0-9]+\.\.[a-f0-9]+ DW_CFA_nop DW_CFA_nop DW_CFA_nop -0+4c 00000020 00000050 FDE cie=00000000 pc=000001b0..000001e0 +0+4c 00000020 00000050 FDE cie=00000000 pc=[a-f0-9]+\.\.[a-f0-9]+ DW_CFA_def_cfa_offset: 8 - DW_CFA_advance_loc: 6 to 000001b6 + DW_CFA_advance_loc: 6 to [a-f0-9]+ DW_CFA_def_cfa_offset: 12 - DW_CFA_advance_loc: 10 to 000001c0 + DW_CFA_advance_loc: 10 to [a-f0-9]+ DW_CFA_def_cfa_expression \(DW_OP_breg4 \(esp\): 4; DW_OP_breg8 \(eip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit9; DW_OP_ge; DW_OP_lit2; DW_OP_shl; DW_OP_plus\) -0+70 00000010 00000074 FDE cie=00000000 pc=000001e0..00000200 +0+70 00000010 00000074 FDE cie=00000000 pc=[a-f0-9]+\.\.[a-f0-9]+ DW_CFA_nop DW_CFA_nop DW_CFA_nop diff -rup binutils.orig/ld/testsuite/ld-i386/ibt-plt-3d.d binutils-2.30/ld/testsuite/ld-i386/ibt-plt-3d.d --- binutils.orig/ld/testsuite/ld-i386/ibt-plt-3d.d 2020-04-07 11:32:17.364775766 +0100 +++ binutils-2.30/ld/testsuite/ld-i386/ibt-plt-3d.d 2020-04-07 13:34:03.907784031 +0100 @@ -1,6 +1,6 @@ #source: ibt-plt-3.s #as: --32 -#ld: -shared -m elf_i386 -z ibt --hash-style=sysv +#ld: -shared -m elf_i386 -z ibt --hash-style=sysv -z noseparate-code #readelf: -wf -n Contents of the .eh_frame section: @@ -18,31 +18,31 @@ Contents of the .eh_frame section: DW_CFA_nop DW_CFA_nop -0+18 0000001c 0000001c FDE cie=00000000 pc=00000200..0000021e - DW_CFA_advance_loc: 1 to 00000201 +0+18 0000001c 0000001c FDE cie=00000000 pc=[a-f0-9]+\.\.[a-f0-9]+ + DW_CFA_advance_loc: 1 to [a-f0-9]+ DW_CFA_def_cfa_offset: 8 DW_CFA_offset: r3 \(ebx\) at cfa-8 - DW_CFA_advance_loc: 14 to 0000020f + DW_CFA_advance_loc: 14 to [a-f0-9]+ DW_CFA_def_cfa_offset: 16 - DW_CFA_advance_loc: 13 to 0000021c + DW_CFA_advance_loc: 13 to [a-f0-9]+ DW_CFA_def_cfa_offset: 8 - DW_CFA_advance_loc: 1 to 0000021d + DW_CFA_advance_loc: 1 to [a-f0-9]+ DW_CFA_restore: r3 \(ebx\) DW_CFA_def_cfa_offset: 4 -0+38 00000010 0000003c FDE cie=00000000 pc=0000021e..00000222 +0+38 00000010 0000003c FDE cie=00000000 pc=[a-f0-9]+\.\.[a-f0-9]+ DW_CFA_nop DW_CFA_nop DW_CFA_nop -0+4c 00000020 00000050 FDE cie=00000000 pc=000001b0..000001e0 +0+4c 00000020 00000050 FDE cie=00000000 pc=[a-f0-9]+\.\.[a-f0-9]+ DW_CFA_def_cfa_offset: 8 - DW_CFA_advance_loc: 6 to 000001b6 + DW_CFA_advance_loc: 6 to [a-f0-9]+ DW_CFA_def_cfa_offset: 12 - DW_CFA_advance_loc: 10 to 000001c0 + DW_CFA_advance_loc: 10 to [a-f0-9]+ DW_CFA_def_cfa_expression \(DW_OP_breg4 \(esp\): 4; DW_OP_breg8 \(eip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit9; DW_OP_ge; DW_OP_lit2; DW_OP_shl; DW_OP_plus\) -0+70 00000010 00000074 FDE cie=00000000 pc=000001e0..00000200 +0+70 00000010 00000074 FDE cie=00000000 pc=[a-f0-9]+\.\.[a-f0-9]+ DW_CFA_nop DW_CFA_nop DW_CFA_nop diff -rup binutils.orig/ld/testsuite/ld-i386/pr23372a.d binutils-2.30/ld/testsuite/ld-i386/pr23372a.d --- binutils.orig/ld/testsuite/ld-i386/pr23372a.d 2020-04-07 11:32:17.357775817 +0100 +++ binutils-2.30/ld/testsuite/ld-i386/pr23372a.d 2020-04-07 13:34:03.907784031 +0100 @@ -3,3 +3,8 @@ #as: --32 #ld: -r -m elf_i386 #readelf: -n + +Displaying notes found in: .note.gnu.property + Owner Data size Description + GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0 + Properties: x86 ISA used: diff -rup binutils.orig/ld/testsuite/ld-i386/property-x86-ibt3a.d binutils-2.30/ld/testsuite/ld-i386/property-x86-ibt3a.d --- binutils.orig/ld/testsuite/ld-i386/property-x86-ibt3a.d 2020-04-07 11:32:17.358775810 +0100 +++ binutils-2.30/ld/testsuite/ld-i386/property-x86-ibt3a.d 2020-04-07 13:34:03.907784031 +0100 @@ -6,6 +6,5 @@ Displaying notes found in: .note.gnu.property Owner Data size Description - GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA used: i486, 586, SSE2, SSE3 - x86 ISA needed: 586, SSE, SSE3, SSE4_1 + GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 + Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1 diff -rup binutils.orig/ld/testsuite/ld-i386/property-x86-ibt3b.d binutils-2.30/ld/testsuite/ld-i386/property-x86-ibt3b.d --- binutils.orig/ld/testsuite/ld-i386/property-x86-ibt3b.d 2020-04-07 11:32:17.353775846 +0100 +++ binutils-2.30/ld/testsuite/ld-i386/property-x86-ibt3b.d 2020-04-07 13:34:03.908784024 +0100 @@ -6,6 +6,5 @@ Displaying notes found in: .note.gnu.property Owner Data size Description - GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA used: i486, 586, SSE2, SSE3 - x86 ISA needed: 586, SSE, SSE3, SSE4_1 + GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 + Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1 diff -rup binutils.orig/ld/testsuite/ld-i386/property-x86-shstk3a.d binutils-2.30/ld/testsuite/ld-i386/property-x86-shstk3a.d --- binutils.orig/ld/testsuite/ld-i386/property-x86-shstk3a.d 2020-04-07 11:32:17.355775832 +0100 +++ binutils-2.30/ld/testsuite/ld-i386/property-x86-shstk3a.d 2020-04-07 13:34:03.908784024 +0100 @@ -6,6 +6,5 @@ Displaying notes found in: .note.gnu.property Owner Data size Description - GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA used: i486, 586, SSE2, SSE3 - x86 ISA needed: 586, SSE, SSE3, SSE4_1 + GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 + Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1 diff -rup binutils.orig/ld/testsuite/ld-i386/property-x86-shstk3b.d binutils-2.30/ld/testsuite/ld-i386/property-x86-shstk3b.d --- binutils.orig/ld/testsuite/ld-i386/property-x86-shstk3b.d 2020-04-07 11:32:17.362775781 +0100 +++ binutils-2.30/ld/testsuite/ld-i386/property-x86-shstk3b.d 2020-04-07 13:34:03.908784024 +0100 @@ -6,6 +6,5 @@ Displaying notes found in: .note.gnu.property Owner Data size Description - GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA used: i486, 586, SSE2, SSE3 - x86 ISA needed: 586, SSE, SSE3, SSE4_1 + GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 + Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1 diff -rup binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-1-x32.d binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-1-x32.d --- binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-1-x32.d 2020-04-07 11:32:17.432775271 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-1-x32.d 2020-04-07 13:34:03.908784024 +0100 @@ -1,6 +1,6 @@ #source: ibt-plt-1.s #as: --x32 -#ld: -shared -m elf32_x86_64 --hash-style=sysv +#ld: -shared -m elf32_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code #objdump: -dw .*: +file format .* @@ -8,36 +8,36 @@ Disassembly of section .plt: -0+1c0 <.plt>: - +[a-f0-9]+: ff 35 62 01 20 00 pushq 0x200162\(%rip\) # 200328 <_GLOBAL_OFFSET_TABLE_\+0x8> - +[a-f0-9]+: ff 25 64 01 20 00 jmpq \*0x200164\(%rip\) # 200330 <_GLOBAL_OFFSET_TABLE_\+0x10> +[a-f0-9]+ <.plt>: + +[a-f0-9]+: ff 35 ([0-9a-f]{2} ){4}[ ]+pushq 0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x8> + +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x10> +[a-f0-9]+: 0f 1f 40 00 nopl 0x0\(%rax\) +[a-f0-9]+: f3 0f 1e fa endbr64 +[a-f0-9]+: 68 00 00 00 00 pushq \$0x0 - +[a-f0-9]+: e9 e2 ff ff ff jmpq 1c0 <.plt> + +[a-f0-9]+: e9 e2 ff ff ff jmpq [a-f0-9]+ <.plt> +[a-f0-9]+: 66 90 xchg %ax,%ax +[a-f0-9]+: f3 0f 1e fa endbr64 +[a-f0-9]+: 68 01 00 00 00 pushq \$0x1 - +[a-f0-9]+: e9 d2 ff ff ff jmpq 1c0 <.plt> + +[a-f0-9]+: e9 d2 ff ff ff jmpq [a-f0-9]+ <.plt> +[a-f0-9]+: 66 90 xchg %ax,%ax Disassembly of section .plt.sec: -0+1f0 : +[a-f0-9]+ : +[a-f0-9]+: f3 0f 1e fa endbr64 - +[a-f0-9]+: ff 25 3e 01 20 00 jmpq \*0x20013e\(%rip\) # 200338 + +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ +[a-f0-9]+: 66 0f 1f 44 00 00 nopw 0x0\(%rax,%rax,1\) -0+200 : +[a-f0-9]+ : +[a-f0-9]+: f3 0f 1e fa endbr64 - +[a-f0-9]+: ff 25 36 01 20 00 jmpq \*0x200136\(%rip\) # 200340 + +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ +[a-f0-9]+: 66 0f 1f 44 00 00 nopw 0x0\(%rax,%rax,1\) Disassembly of section .text: -0+210 : +[a-f0-9]+ : +[a-f0-9]+: 48 83 ec 08 sub \$0x8,%rsp - +[a-f0-9]+: e8 e7 ff ff ff callq 200 + +[a-f0-9]+: e8 e7 ff ff ff callq [a-f0-9]+ +[a-f0-9]+: 48 83 c4 08 add \$0x8,%rsp - +[a-f0-9]+: e9 ce ff ff ff jmpq 1f0 + +[a-f0-9]+: e9 ce ff ff ff jmpq [a-f0-9]+ #pass diff -rup binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-1.d binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-1.d --- binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-1.d 2020-04-07 11:32:17.431775279 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-1.d 2020-04-07 13:34:03.908784024 +0100 @@ -1,6 +1,6 @@ #source: ibt-plt-1.s #as: --64 -defsym __64_bit__=1 -#ld: -shared -m elf_x86_64 --hash-style=sysv +#ld: -shared -m elf_x86_64 --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code #objdump: -dw .*: +file format .* @@ -8,36 +8,36 @@ Disassembly of section .plt: -0+290 <.plt>: - +[a-f0-9]+: ff 35 ea 01 20 00 pushq 0x2001ea\(%rip\) # 200480 <_GLOBAL_OFFSET_TABLE_\+0x8> - +[a-f0-9]+: f2 ff 25 eb 01 20 00 bnd jmpq \*0x2001eb\(%rip\) # 200488 <_GLOBAL_OFFSET_TABLE_\+0x10> +[a-f0-9]+ <.plt>: + +[a-f0-9]+: ff 35 ([0-9a-f]{2} ){4}[ ]+pushq 0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x8> + +[a-f0-9]+: f2 ff 25 ([0-9a-f]{2} ){4}[ ]+bnd jmpq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x10> +[a-f0-9]+: 0f 1f 00 nopl \(%rax\) +[a-f0-9]+: f3 0f 1e fa endbr64 +[a-f0-9]+: 68 00 00 00 00 pushq \$0x0 - +[a-f0-9]+: f2 e9 e1 ff ff ff bnd jmpq 290 <.plt> + +[a-f0-9]+: f2 e9 e1 ff ff ff bnd jmpq [a-f0-9]+ <.plt> +[a-f0-9]+: 90 nop +[a-f0-9]+: f3 0f 1e fa endbr64 +[a-f0-9]+: 68 01 00 00 00 pushq \$0x1 - +[a-f0-9]+: f2 e9 d1 ff ff ff bnd jmpq 290 <.plt> + +[a-f0-9]+: f2 e9 d1 ff ff ff bnd jmpq [a-f0-9]+ <.plt> +[a-f0-9]+: 90 nop Disassembly of section .plt.sec: -0+2c0 : +[a-f0-9]+ : +[a-f0-9]+: f3 0f 1e fa endbr64 - +[a-f0-9]+: f2 ff 25 c5 01 20 00 bnd jmpq \*0x2001c5\(%rip\) # 200490 + +[a-f0-9]+: f2 ff 25 ([0-9a-f]{2} ){4}[ ]+bnd jmpq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ +[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\) -0+2d0 : +[a-f0-9]+ : +[a-f0-9]+: f3 0f 1e fa endbr64 - +[a-f0-9]+: f2 ff 25 bd 01 20 00 bnd jmpq \*0x2001bd\(%rip\) # 200498 + +[a-f0-9]+: f2 ff 25 ([0-9a-f]{2} ){4}[ ]+bnd jmpq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ +[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\) Disassembly of section .text: -0+2e0 : +[a-f0-9]+ : +[a-f0-9]+: 48 83 ec 08 sub \$0x8,%rsp - +[a-f0-9]+: e8 e7 ff ff ff callq 2d0 + +[a-f0-9]+: e8 e7 ff ff ff callq [a-f0-9]+ +[a-f0-9]+: 48 83 c4 08 add \$0x8,%rsp - +[a-f0-9]+: e9 ce ff ff ff jmpq 2c0 + +[a-f0-9]+: e9 ce ff ff ff jmpq [a-f0-9]+ #pass diff -rup binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d --- binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d 2020-04-07 11:32:17.427775308 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d 2020-04-07 13:34:03.908784024 +0100 @@ -1,6 +1,6 @@ #source: ibt-plt-2.s #as: --x32 -#ld: -shared -m elf32_x86_64 -z ibtplt --hash-style=sysv +#ld: -shared -m elf32_x86_64 -z ibtplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code #objdump: -dw .*: +file format .* @@ -8,36 +8,36 @@ Disassembly of section .plt: -0+1c0 <.plt>: - +[a-f0-9]+: ff 35 62 01 20 00 pushq 0x200162\(%rip\) # 200328 <_GLOBAL_OFFSET_TABLE_\+0x8> - +[a-f0-9]+: ff 25 64 01 20 00 jmpq \*0x200164\(%rip\) # 200330 <_GLOBAL_OFFSET_TABLE_\+0x10> +0+1.0 <.plt>: + +[a-f0-9]+: ff 35 4a 01 20 00 pushq 0x20014a\(%rip\) # 200... <_GLOBAL_OFFSET_TABLE_\+0x8> + +[a-f0-9]+: ff 25 4c 01 20 00 jmpq \*0x20014c\(%rip\) # 200... <_GLOBAL_OFFSET_TABLE_\+0x10> +[a-f0-9]+: 0f 1f 40 00 nopl 0x0\(%rax\) +[a-f0-9]+: f3 0f 1e fa endbr64 +[a-f0-9]+: 68 00 00 00 00 pushq \$0x0 - +[a-f0-9]+: e9 e2 ff ff ff jmpq 1c0 <.plt> + +[a-f0-9]+: e9 e2 ff ff ff jmpq 1.0 <.plt> +[a-f0-9]+: 66 90 xchg %ax,%ax +[a-f0-9]+: f3 0f 1e fa endbr64 +[a-f0-9]+: 68 01 00 00 00 pushq \$0x1 - +[a-f0-9]+: e9 d2 ff ff ff jmpq 1c0 <.plt> + +[a-f0-9]+: e9 d2 ff ff ff jmpq 1.0 <.plt> +[a-f0-9]+: 66 90 xchg %ax,%ax Disassembly of section .plt.sec: -0+1f0 : +0+1.0 : +[a-f0-9]+: f3 0f 1e fa endbr64 - +[a-f0-9]+: ff 25 3e 01 20 00 jmpq \*0x20013e\(%rip\) # 200338 + +[a-f0-9]+: ff 25 26 01 20 00 jmpq \*0x200126\(%rip\) # 200... +[a-f0-9]+: 66 0f 1f 44 00 00 nopw 0x0\(%rax,%rax,1\) -0+200 : +0+1.0 : +[a-f0-9]+: f3 0f 1e fa endbr64 - +[a-f0-9]+: ff 25 36 01 20 00 jmpq \*0x200136\(%rip\) # 200340 + +[a-f0-9]+: ff 25 1e 01 20 00 jmpq \*0x20011e\(%rip\) # 200... +[a-f0-9]+: 66 0f 1f 44 00 00 nopw 0x0\(%rax,%rax,1\) Disassembly of section .text: -0+210 : +0+1.0 : +[a-f0-9]+: 48 83 ec 08 sub \$0x8,%rsp - +[a-f0-9]+: e8 e7 ff ff ff callq 200 + +[a-f0-9]+: e8 e7 ff ff ff callq 1.0 +[a-f0-9]+: 48 83 c4 08 add \$0x8,%rsp - +[a-f0-9]+: e9 ce ff ff ff jmpq 1f0 + +[a-f0-9]+: e9 ce ff ff ff jmpq 1.0 #pass diff -rup binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-2a.d binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-2a.d --- binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-2a.d 2020-04-07 11:32:17.434775257 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-2a.d 2020-04-07 13:34:03.908784024 +0100 @@ -1,6 +1,6 @@ #source: ibt-plt-2.s #as: --64 -defsym __64_bit__=1 -#ld: -shared -m elf_x86_64 -z ibtplt --hash-style=sysv +#ld: -shared -m elf_x86_64 -z ibtplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code #objdump: -dw .*: +file format .* @@ -8,36 +8,36 @@ Disassembly of section .plt: -0+290 <.plt>: - +[a-f0-9]+: ff 35 ea 01 20 00 pushq 0x2001ea\(%rip\) # 200480 <_GLOBAL_OFFSET_TABLE_\+0x8> - +[a-f0-9]+: f2 ff 25 eb 01 20 00 bnd jmpq \*0x2001eb\(%rip\) # 200488 <_GLOBAL_OFFSET_TABLE_\+0x10> +0+..0 <.plt>: + +[a-f0-9]+: ff 35 ca 01 20 00 pushq 0x2001ca\(%rip\) # 200... <_GLOBAL_OFFSET_TABLE_\+0x8> + +[a-f0-9]+: f2 ff 25 cb 01 20 00 bnd jmpq \*0x2001cb\(%rip\) # 200... <_GLOBAL_OFFSET_TABLE_\+0x10> +[a-f0-9]+: 0f 1f 00 nopl \(%rax\) +[a-f0-9]+: f3 0f 1e fa endbr64 +[a-f0-9]+: 68 00 00 00 00 pushq \$0x0 - +[a-f0-9]+: f2 e9 e1 ff ff ff bnd jmpq 290 <.plt> + +[a-f0-9]+: f2 e9 e1 ff ff ff bnd jmpq ..0 <.plt> +[a-f0-9]+: 90 nop +[a-f0-9]+: f3 0f 1e fa endbr64 +[a-f0-9]+: 68 01 00 00 00 pushq \$0x1 - +[a-f0-9]+: f2 e9 d1 ff ff ff bnd jmpq 290 <.plt> + +[a-f0-9]+: f2 e9 d1 ff ff ff bnd jmpq ..0 <.plt> +[a-f0-9]+: 90 nop Disassembly of section .plt.sec: -0+2c0 : +0+..0 : +[a-f0-9]+: f3 0f 1e fa endbr64 - +[a-f0-9]+: f2 ff 25 c5 01 20 00 bnd jmpq \*0x2001c5\(%rip\) # 200490 + +[a-f0-9]+: f2 ff 25 a5 01 20 00 bnd jmpq \*0x2001a5\(%rip\) # 200... +[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\) -0+2d0 : +0+..0 : +[a-f0-9]+: f3 0f 1e fa endbr64 - +[a-f0-9]+: f2 ff 25 bd 01 20 00 bnd jmpq \*0x2001bd\(%rip\) # 200498 + +[a-f0-9]+: f2 ff 25 9d 01 20 00 bnd jmpq \*0x20019d\(%rip\) # 200... +[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\) Disassembly of section .text: -0+2e0 : +0+..0 : +[a-f0-9]+: 48 83 ec 08 sub \$0x8,%rsp - +[a-f0-9]+: e8 e7 ff ff ff callq 2d0 + +[a-f0-9]+: e8 e7 ff ff ff callq ..0 +[a-f0-9]+: 48 83 c4 08 add \$0x8,%rsp - +[a-f0-9]+: e9 ce ff ff ff jmpq 2c0 + +[a-f0-9]+: e9 ce ff ff ff jmpq ..0 #pass diff -rup binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-2b-x32.d binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-2b-x32.d --- binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-2b-x32.d 2020-04-07 11:32:17.432775271 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-2b-x32.d 2020-04-07 13:34:03.908784024 +0100 @@ -1,6 +1,6 @@ #source: ibt-plt-2.s #as: --x32 -#ld: -shared -m elf32_x86_64 -z ibtplt --hash-style=sysv +#ld: -shared -m elf32_x86_64 -z ibtplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code #readelf: -n -wf Contents of the .eh_frame section: @@ -18,27 +18,21 @@ Contents of the .eh_frame section: DW_CFA_nop DW_CFA_nop -0+18 00000014 0000001c FDE cie=00000000 pc=00000210..00000222 - DW_CFA_advance_loc: 4 to 00000214 +0+18 00000014 0000001c FDE cie=00000000 pc=00000..0..00000..2 + DW_CFA_advance_loc: 4 to 00000..4 DW_CFA_def_cfa_offset: 16 - DW_CFA_advance_loc: 9 to 0000021d + DW_CFA_advance_loc: 9 to 00000..d DW_CFA_def_cfa_offset: 8 DW_CFA_nop -0+30 00000020 00000034 FDE cie=00000000 pc=000001c0..000001f0 +0+30 00000020 00000034 FDE cie=00000000 pc=00000..0..00000..0 DW_CFA_def_cfa_offset: 16 - DW_CFA_advance_loc: 6 to 000001c6 + DW_CFA_advance_loc: 6 to 00000..6 DW_CFA_def_cfa_offset: 24 - DW_CFA_advance_loc: 10 to 000001d0 + DW_CFA_advance_loc: 10 to 00000..0 DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit9; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\) -0+54 00000010 00000058 FDE cie=00000000 pc=000001f0..00000210 +0+54 00000010 00000058 FDE cie=00000000 pc=00000..0..00000..0 DW_CFA_nop DW_CFA_nop DW_CFA_nop - - -Displaying notes found in: .note.gnu.property - Owner Data size Description - GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 - Properties: x86 feature: diff -rup binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-2b.d binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-2b.d --- binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-2b.d 2020-04-07 11:32:17.427775308 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-2b.d 2020-04-07 13:34:03.908784024 +0100 @@ -1,6 +1,6 @@ #source: ibt-plt-2.s #as: --64 -defsym __64_bit__=1 -#ld: -shared -m elf_x86_64 -z ibtplt --hash-style=sysv +#ld: -shared -m elf_x86_64 -z ibtplt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code #readelf: -wf -n Contents of the .eh_frame section: @@ -18,31 +18,25 @@ Contents of the .eh_frame section: DW_CFA_nop DW_CFA_nop -0+18 0000000000000014 0000001c FDE cie=00000000 pc=00000000000002e0..00000000000002f2 - DW_CFA_advance_loc: 4 to 00000000000002e4 +0+18 0000000000000014 0000001c FDE cie=00000000 pc=0000000000000..0..0000000000000..2 + DW_CFA_advance_loc: 4 to 0000000000000..4 DW_CFA_def_cfa_offset: 16 - DW_CFA_advance_loc: 9 to 00000000000002ed + DW_CFA_advance_loc: 9 to 0000000000000..d DW_CFA_def_cfa_offset: 8 DW_CFA_nop -0+30 0000000000000024 00000034 FDE cie=00000000 pc=0000000000000290..00000000000002c0 +0+30 0000000000000024 00000034 FDE cie=00000000 pc=0000000000000..0..0000000000000..0 DW_CFA_def_cfa_offset: 16 - DW_CFA_advance_loc: 6 to 0000000000000296 + DW_CFA_advance_loc: 6 to 0000000000000..6 DW_CFA_def_cfa_offset: 24 - DW_CFA_advance_loc: 10 to 00000000000002a0 + DW_CFA_advance_loc: 10 to 0000000000000..0 DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit10; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\) DW_CFA_nop DW_CFA_nop DW_CFA_nop DW_CFA_nop -0+58 0000000000000010 0000005c FDE cie=00000000 pc=00000000000002c0..00000000000002e0 +0+58 0000000000000010 0000005c FDE cie=00000000 pc=0000000000000..0..0000000000000..0 DW_CFA_nop DW_CFA_nop DW_CFA_nop - - -Displaying notes found in: .note.gnu.property - Owner Data size Description - GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 - Properties: x86 feature: diff -rup binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-2c-x32.d binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-2c-x32.d --- binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-2c-x32.d 2020-04-07 11:32:17.429775293 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-2c-x32.d 2020-04-07 13:34:03.908784024 +0100 @@ -1,6 +1,6 @@ #source: ibt-plt-2.s #as: --x32 -#ld: -shared -m elf32_x86_64 -z ibt --hash-style=sysv +#ld: -shared -m elf32_x86_64 -z ibt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code #objdump: -dw .*: +file format .* @@ -8,36 +8,36 @@ Disassembly of section .plt: -0+1c0 <.plt>: - +[a-f0-9]+: ff 35 62 01 20 00 pushq 0x200162\(%rip\) # 200328 <_GLOBAL_OFFSET_TABLE_\+0x8> - +[a-f0-9]+: ff 25 64 01 20 00 jmpq \*0x200164\(%rip\) # 200330 <_GLOBAL_OFFSET_TABLE_\+0x10> +[a-f0-9]+ <.plt>: + +[a-f0-9]+: ff 35 ([0-9a-f]{2} ){4}[ ]+pushq 0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x8> + +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x10> +[a-f0-9]+: 0f 1f 40 00 nopl 0x0\(%rax\) +[a-f0-9]+: f3 0f 1e fa endbr64 +[a-f0-9]+: 68 00 00 00 00 pushq \$0x0 - +[a-f0-9]+: e9 e2 ff ff ff jmpq 1c0 <.plt> + +[a-f0-9]+: e9 e2 ff ff ff jmpq [a-f0-9]+ <.plt> +[a-f0-9]+: 66 90 xchg %ax,%ax +[a-f0-9]+: f3 0f 1e fa endbr64 +[a-f0-9]+: 68 01 00 00 00 pushq \$0x1 - +[a-f0-9]+: e9 d2 ff ff ff jmpq 1c0 <.plt> + +[a-f0-9]+: e9 d2 ff ff ff jmpq [a-f0-9]+ <.plt> +[a-f0-9]+: 66 90 xchg %ax,%ax Disassembly of section .plt.sec: -0+1f0 : +[a-f0-9]+ : +[a-f0-9]+: f3 0f 1e fa endbr64 - +[a-f0-9]+: ff 25 3e 01 20 00 jmpq \*0x20013e\(%rip\) # 200338 + +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ +[a-f0-9]+: 66 0f 1f 44 00 00 nopw 0x0\(%rax,%rax,1\) -0+200 : +[a-f0-9]+ : +[a-f0-9]+: f3 0f 1e fa endbr64 - +[a-f0-9]+: ff 25 36 01 20 00 jmpq \*0x200136\(%rip\) # 200340 + +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ +[a-f0-9]+: 66 0f 1f 44 00 00 nopw 0x0\(%rax,%rax,1\) Disassembly of section .text: -0+210 : +[a-f0-9]+ : +[a-f0-9]+: 48 83 ec 08 sub \$0x8,%rsp - +[a-f0-9]+: e8 e7 ff ff ff callq 200 + +[a-f0-9]+: e8 e7 ff ff ff callq [a-f0-9]+ +[a-f0-9]+: 48 83 c4 08 add \$0x8,%rsp - +[a-f0-9]+: e9 ce ff ff ff jmpq 1f0 + +[a-f0-9]+: e9 ce ff ff ff jmpq [a-f0-9]+ #pass diff -rup binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-2c.d binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-2c.d --- binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-2c.d 2020-04-07 11:32:17.429775293 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-2c.d 2020-04-07 13:34:03.908784024 +0100 @@ -1,6 +1,6 @@ #source: ibt-plt-2.s #as: --64 -defsym __64_bit__=1 -#ld: -shared -m elf_x86_64 -z ibt --hash-style=sysv +#ld: -shared -m elf_x86_64 -z ibt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code #objdump: -dw .*: +file format .* @@ -8,36 +8,36 @@ Disassembly of section .plt: -0+290 <.plt>: - +[a-f0-9]+: ff 35 ea 01 20 00 pushq 0x2001ea\(%rip\) # 200480 <_GLOBAL_OFFSET_TABLE_\+0x8> - +[a-f0-9]+: f2 ff 25 eb 01 20 00 bnd jmpq \*0x2001eb\(%rip\) # 200488 <_GLOBAL_OFFSET_TABLE_\+0x10> +[a-f0-9]+ <.plt>: + +[a-f0-9]+: ff 35 ([0-9a-f]{2} ){4}[ ]+pushq 0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x8> + +[a-f0-9]+: f2 ff 25 ([0-9a-f]{2} ){4}[ ]+bnd jmpq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x10> +[a-f0-9]+: 0f 1f 00 nopl \(%rax\) +[a-f0-9]+: f3 0f 1e fa endbr64 +[a-f0-9]+: 68 00 00 00 00 pushq \$0x0 - +[a-f0-9]+: f2 e9 e1 ff ff ff bnd jmpq 290 <.plt> + +[a-f0-9]+: f2 e9 e1 ff ff ff bnd jmpq [a-f0-9]+ <.plt> +[a-f0-9]+: 90 nop +[a-f0-9]+: f3 0f 1e fa endbr64 +[a-f0-9]+: 68 01 00 00 00 pushq \$0x1 - +[a-f0-9]+: f2 e9 d1 ff ff ff bnd jmpq 290 <.plt> + +[a-f0-9]+: f2 e9 d1 ff ff ff bnd jmpq [a-f0-9]+ <.plt> +[a-f0-9]+: 90 nop Disassembly of section .plt.sec: -0+2c0 : +[a-f0-9]+ : +[a-f0-9]+: f3 0f 1e fa endbr64 - +[a-f0-9]+: f2 ff 25 c5 01 20 00 bnd jmpq \*0x2001c5\(%rip\) # 200490 + +[a-f0-9]+: f2 ff 25 ([0-9a-f]{2} ){4}[ ]+bnd jmpq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ +[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\) -0+2d0 : +[a-f0-9]+ : +[a-f0-9]+: f3 0f 1e fa endbr64 - +[a-f0-9]+: f2 ff 25 bd 01 20 00 bnd jmpq \*0x2001bd\(%rip\) # 200498 + +[a-f0-9]+: f2 ff 25 ([0-9a-f]{2} ){4}[ ]+bnd jmpq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ +[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\) Disassembly of section .text: -0+2e0 : +[a-f0-9]+ : +[a-f0-9]+: 48 83 ec 08 sub \$0x8,%rsp - +[a-f0-9]+: e8 e7 ff ff ff callq 2d0 + +[a-f0-9]+: e8 e7 ff ff ff callq [a-f0-9]+ +[a-f0-9]+: 48 83 c4 08 add \$0x8,%rsp - +[a-f0-9]+: e9 ce ff ff ff jmpq 2c0 + +[a-f0-9]+: e9 ce ff ff ff jmpq [a-f0-9]+ #pass diff -rup binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-2d-x32.d binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-2d-x32.d --- binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-2d-x32.d 2020-04-07 11:32:17.423775337 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-2d-x32.d 2020-04-07 13:34:03.909784017 +0100 @@ -1,6 +1,6 @@ #source: ibt-plt-2.s #as: --x32 -#ld: -shared -m elf32_x86_64 -z ibt --hash-style=sysv +#ld: -shared -m elf32_x86_64 -z ibt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code #readelf: -n -wf Contents of the .eh_frame section: @@ -18,21 +18,21 @@ Contents of the .eh_frame section: DW_CFA_nop DW_CFA_nop -0+18 00000014 0000001c FDE cie=00000000 pc=00000210..00000222 - DW_CFA_advance_loc: 4 to 00000214 +0+18 00000014 0000001c FDE cie=00000000 pc=[a-f0-9]+\.\.[a-f0-9]+ + DW_CFA_advance_loc: 4 to [a-f0-9]+ DW_CFA_def_cfa_offset: 16 - DW_CFA_advance_loc: 9 to 0000021d + DW_CFA_advance_loc: 9 to [a-f0-9]+ DW_CFA_def_cfa_offset: 8 DW_CFA_nop -0+30 00000020 00000034 FDE cie=00000000 pc=000001c0..000001f0 +0+30 00000020 00000034 FDE cie=00000000 pc=[a-f0-9]+\.\.[a-f0-9]+ DW_CFA_def_cfa_offset: 16 - DW_CFA_advance_loc: 6 to 000001c6 + DW_CFA_advance_loc: 6 to [a-f0-9]+ DW_CFA_def_cfa_offset: 24 - DW_CFA_advance_loc: 10 to 000001d0 + DW_CFA_advance_loc: 10 to [a-f0-9]+ DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit9; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\) -0+54 00000010 00000058 FDE cie=00000000 pc=000001f0..00000210 +0+54 00000010 00000058 FDE cie=00000000 pc=[a-f0-9]+\.\.[a-f0-9]+ DW_CFA_nop DW_CFA_nop DW_CFA_nop diff -rup binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-2d.d binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-2d.d --- binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-2d.d 2020-04-07 11:32:17.425775323 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-2d.d 2020-04-07 13:34:03.909784017 +0100 @@ -1,6 +1,6 @@ #source: ibt-plt-2.s #as: --64 -defsym __64_bit__=1 -#ld: -shared -m elf_x86_64 -z ibt --hash-style=sysv +#ld: -shared -m elf_x86_64 -z ibt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code #readelf: -wf -n Contents of the .eh_frame section: @@ -18,25 +18,25 @@ Contents of the .eh_frame section: DW_CFA_nop DW_CFA_nop -0+18 0000000000000014 0000001c FDE cie=00000000 pc=00000000000002e0..00000000000002f2 - DW_CFA_advance_loc: 4 to 00000000000002e4 +0+18 0000000000000014 0000001c FDE cie=00000000 pc=[a-f0-9]+\.\.[a-f0-9]+ + DW_CFA_advance_loc: 4 to [a-f0-9]+ DW_CFA_def_cfa_offset: 16 - DW_CFA_advance_loc: 9 to 00000000000002ed + DW_CFA_advance_loc: 9 to [a-f0-9]+ DW_CFA_def_cfa_offset: 8 DW_CFA_nop -0+30 0000000000000024 00000034 FDE cie=00000000 pc=0000000000000290..00000000000002c0 +0+30 0000000000000024 00000034 FDE cie=00000000 pc=[a-f0-9]+\.\.[a-f0-9]+ DW_CFA_def_cfa_offset: 16 - DW_CFA_advance_loc: 6 to 0000000000000296 + DW_CFA_advance_loc: 6 to [a-f0-9]+ DW_CFA_def_cfa_offset: 24 - DW_CFA_advance_loc: 10 to 00000000000002a0 + DW_CFA_advance_loc: 10 to [a-f0-9]+ DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit10; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\) DW_CFA_nop DW_CFA_nop DW_CFA_nop DW_CFA_nop -0+58 0000000000000010 0000005c FDE cie=00000000 pc=00000000000002c0..00000000000002e0 +0+58 0000000000000010 0000005c FDE cie=00000000 pc=[a-f0-9]+\.\.[a-f0-9]+ DW_CFA_nop DW_CFA_nop DW_CFA_nop @@ -46,3 +46,4 @@ Displaying notes found in: .note.gnu.pro Owner Data size Description GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 Properties: x86 feature: IBT +#pass diff -rup binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-3c-x32.d binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-3c-x32.d --- binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-3c-x32.d 2020-04-07 11:32:17.428775301 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-3c-x32.d 2020-04-07 13:34:03.909784017 +0100 @@ -1,6 +1,6 @@ #source: ibt-plt-3.s #as: --x32 -#ld: -shared -m elf32_x86_64 -z ibt --hash-style=sysv +#ld: -shared -m elf32_x86_64 -z ibt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code #objdump: -dw .*: +file format .* @@ -8,36 +8,36 @@ Disassembly of section .plt: -0+1c0 <.plt>: - +[a-f0-9]+: ff 35 62 01 20 00 pushq 0x200162\(%rip\) # 200328 <_GLOBAL_OFFSET_TABLE_\+0x8> - +[a-f0-9]+: ff 25 64 01 20 00 jmpq \*0x200164\(%rip\) # 200330 <_GLOBAL_OFFSET_TABLE_\+0x10> +[a-f0-9]+ <.plt>: + +[a-f0-9]+: ff 35 ([0-9a-f]{2} ){4}[ ]+pushq 0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x8> + +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x10> +[a-f0-9]+: 0f 1f 40 00 nopl 0x0\(%rax\) +[a-f0-9]+: f3 0f 1e fa endbr64 +[a-f0-9]+: 68 00 00 00 00 pushq \$0x0 - +[a-f0-9]+: e9 e2 ff ff ff jmpq 1c0 <.plt> + +[a-f0-9]+: e9 e2 ff ff ff jmpq [a-f0-9]+ <.plt> +[a-f0-9]+: 66 90 xchg %ax,%ax +[a-f0-9]+: f3 0f 1e fa endbr64 +[a-f0-9]+: 68 01 00 00 00 pushq \$0x1 - +[a-f0-9]+: e9 d2 ff ff ff jmpq 1c0 <.plt> + +[a-f0-9]+: e9 d2 ff ff ff jmpq [a-f0-9]+ <.plt> +[a-f0-9]+: 66 90 xchg %ax,%ax Disassembly of section .plt.sec: -0+1f0 : +[a-f0-9]+ : +[a-f0-9]+: f3 0f 1e fa endbr64 - +[a-f0-9]+: ff 25 3e 01 20 00 jmpq \*0x20013e\(%rip\) # 200338 + +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ +[a-f0-9]+: 66 0f 1f 44 00 00 nopw 0x0\(%rax,%rax,1\) -0+200 : +[a-f0-9]+ : +[a-f0-9]+: f3 0f 1e fa endbr64 - +[a-f0-9]+: ff 25 36 01 20 00 jmpq \*0x200136\(%rip\) # 200340 + +[a-f0-9]+: ff 25 ([0-9a-f]{2} ){4}[ ]+jmpq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ +[a-f0-9]+: 66 0f 1f 44 00 00 nopw 0x0\(%rax,%rax,1\) Disassembly of section .text: -0+210 : +[a-f0-9]+ : +[a-f0-9]+: 48 83 ec 08 sub \$0x8,%rsp - +[a-f0-9]+: e8 e7 ff ff ff callq 200 + +[a-f0-9]+: e8 e7 ff ff ff callq [a-f0-9]+ +[a-f0-9]+: 48 83 c4 08 add \$0x8,%rsp - +[a-f0-9]+: e9 ce ff ff ff jmpq 1f0 + +[a-f0-9]+: e9 ce ff ff ff jmpq [a-f0-9]+ #pass diff -rup binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-3c.d binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-3c.d --- binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-3c.d 2020-04-07 11:32:17.435775250 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-3c.d 2020-04-07 13:34:03.909784017 +0100 @@ -1,6 +1,6 @@ #source: ibt-plt-3.s #as: --64 -defsym __64_bit__=1 -#ld: -shared -m elf_x86_64 -z ibt --hash-style=sysv +#ld: -shared -m elf_x86_64 -z ibt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code #objdump: -dw .*: +file format .* @@ -8,36 +8,36 @@ Disassembly of section .plt: -0+290 <.plt>: - +[a-f0-9]+: ff 35 ea 01 20 00 pushq 0x2001ea\(%rip\) # 200480 <_GLOBAL_OFFSET_TABLE_\+0x8> - +[a-f0-9]+: f2 ff 25 eb 01 20 00 bnd jmpq \*0x2001eb\(%rip\) # 200488 <_GLOBAL_OFFSET_TABLE_\+0x10> +[a-f0-9]+ <.plt>: + +[a-f0-9]+: ff 35 ([0-9a-f]{2} ){4}[ ]+pushq 0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x8> + +[a-f0-9]+: f2 ff 25 ([0-9a-f]{2} ){4}[ ]+bnd jmpq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ <_GLOBAL_OFFSET_TABLE_\+0x10> +[a-f0-9]+: 0f 1f 00 nopl \(%rax\) +[a-f0-9]+: f3 0f 1e fa endbr64 +[a-f0-9]+: 68 00 00 00 00 pushq \$0x0 - +[a-f0-9]+: f2 e9 e1 ff ff ff bnd jmpq 290 <.plt> + +[a-f0-9]+: f2 e9 e1 ff ff ff bnd jmpq [a-f0-9]+ <.plt> +[a-f0-9]+: 90 nop +[a-f0-9]+: f3 0f 1e fa endbr64 +[a-f0-9]+: 68 01 00 00 00 pushq \$0x1 - +[a-f0-9]+: f2 e9 d1 ff ff ff bnd jmpq 290 <.plt> + +[a-f0-9]+: f2 e9 d1 ff ff ff bnd jmpq [a-f0-9]+ <.plt> +[a-f0-9]+: 90 nop Disassembly of section .plt.sec: -0+2c0 : +[a-f0-9]+ : +[a-f0-9]+: f3 0f 1e fa endbr64 - +[a-f0-9]+: f2 ff 25 c5 01 20 00 bnd jmpq \*0x2001c5\(%rip\) # 200490 + +[a-f0-9]+: f2 ff 25 ([0-9a-f]{2} ){4}[ ]+bnd jmpq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ +[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\) -0+2d0 : +[a-f0-9]+ : +[a-f0-9]+: f3 0f 1e fa endbr64 - +[a-f0-9]+: f2 ff 25 bd 01 20 00 bnd jmpq \*0x2001bd\(%rip\) # 200498 + +[a-f0-9]+: f2 ff 25 ([0-9a-f]{2} ){4}[ ]+bnd jmpq \*0x[a-f0-9]+\(%rip\) # [a-f0-9]+ +[a-f0-9]+: 0f 1f 44 00 00 nopl 0x0\(%rax,%rax,1\) Disassembly of section .text: -0+2e0 : +[a-f0-9]+ : +[a-f0-9]+: 48 83 ec 08 sub \$0x8,%rsp - +[a-f0-9]+: e8 e7 ff ff ff callq 2d0 + +[a-f0-9]+: e8 e7 ff ff ff callq [a-f0-9]+ +[a-f0-9]+: 48 83 c4 08 add \$0x8,%rsp - +[a-f0-9]+: e9 ce ff ff ff jmpq 2c0 + +[a-f0-9]+: e9 ce ff ff ff jmpq [a-f0-9]+ #pass diff -rup binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-3d-x32.d binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-3d-x32.d --- binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-3d-x32.d 2020-04-07 11:32:17.433775264 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-3d-x32.d 2020-04-07 13:34:03.909784017 +0100 @@ -1,6 +1,6 @@ #source: ibt-plt-3.s #as: --x32 -#ld: -shared -m elf32_x86_64 -z ibt --hash-style=sysv +#ld: -shared -m elf32_x86_64 -z ibt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code #readelf: -wf -n Contents of the .eh_frame section: @@ -18,21 +18,21 @@ Contents of the .eh_frame section: DW_CFA_nop DW_CFA_nop -0+18 00000014 0000001c FDE cie=00000000 pc=00000210..00000222 - DW_CFA_advance_loc: 4 to 00000214 +0+18 00000014 0000001c FDE cie=00000000 pc=[a-f0-9]+\.\.[a-f0-9]+ + DW_CFA_advance_loc: 4 to [a-f0-9]+ DW_CFA_def_cfa_offset: 16 - DW_CFA_advance_loc: 9 to 0000021d + DW_CFA_advance_loc: 9 to [a-f0-9]+ DW_CFA_def_cfa_offset: 8 DW_CFA_nop -0+30 00000020 00000034 FDE cie=00000000 pc=000001c0..000001f0 +0+30 00000020 00000034 FDE cie=00000000 pc=[a-f0-9]+\.\.[a-f0-9]+ DW_CFA_def_cfa_offset: 16 - DW_CFA_advance_loc: 6 to 000001c6 + DW_CFA_advance_loc: 6 to [a-f0-9]+ DW_CFA_def_cfa_offset: 24 - DW_CFA_advance_loc: 10 to 000001d0 + DW_CFA_advance_loc: 10 to [a-f0-9]+ DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit9; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\) -0+54 00000010 00000058 FDE cie=00000000 pc=000001f0..00000210 +0+54 00000010 00000058 FDE cie=00000000 pc=[a-f0-9]+\.\.[a-f0-9]+ DW_CFA_nop DW_CFA_nop DW_CFA_nop diff -rup binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-3d.d binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-3d.d --- binutils.orig/ld/testsuite/ld-x86-64/ibt-plt-3d.d 2020-04-07 11:32:17.438775228 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/ibt-plt-3d.d 2020-04-07 13:34:03.909784017 +0100 @@ -1,6 +1,6 @@ #source: ibt-plt-3.s #as: --64 -defsym __64_bit__=1 -#ld: -shared -m elf_x86_64 -z ibt --hash-style=sysv +#ld: -shared -m elf_x86_64 -z ibt --hash-style=sysv -z max-page-size=0x200000 -z noseparate-code #readelf: -wf -n Contents of the .eh_frame section: @@ -18,25 +18,25 @@ Contents of the .eh_frame section: DW_CFA_nop DW_CFA_nop -0+18 0000000000000014 0000001c FDE cie=00000000 pc=00000000000002e0..00000000000002f2 - DW_CFA_advance_loc: 4 to 00000000000002e4 +0+18 0000000000000014 0000001c FDE cie=00000000 pc=[a-f0-9]+\.\.[a-f0-9]+ + DW_CFA_advance_loc: 4 to [a-f0-9]+ DW_CFA_def_cfa_offset: 16 - DW_CFA_advance_loc: 9 to 00000000000002ed + DW_CFA_advance_loc: 9 to [a-f0-9]+ DW_CFA_def_cfa_offset: 8 DW_CFA_nop -0+30 0000000000000024 00000034 FDE cie=00000000 pc=0000000000000290..00000000000002c0 +0+30 0000000000000024 00000034 FDE cie=00000000 pc=[a-f0-9]+\.\.[a-f0-9]+ DW_CFA_def_cfa_offset: 16 - DW_CFA_advance_loc: 6 to 0000000000000296 + DW_CFA_advance_loc: 6 to [a-f0-9]+ DW_CFA_def_cfa_offset: 24 - DW_CFA_advance_loc: 10 to 00000000000002a0 + DW_CFA_advance_loc: 10 to [a-f0-9]+ DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit10; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\) DW_CFA_nop DW_CFA_nop DW_CFA_nop DW_CFA_nop -0+58 0000000000000010 0000005c FDE cie=00000000 pc=00000000000002c0..00000000000002e0 +0+58 0000000000000010 0000005c FDE cie=00000000 pc=[a-f0-9]+\.\.[a-f0-9]+ DW_CFA_nop DW_CFA_nop DW_CFA_nop diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr23372a-x32.d binutils-2.30/ld/testsuite/ld-x86-64/pr23372a-x32.d --- binutils.orig/ld/testsuite/ld-x86-64/pr23372a-x32.d 2020-04-07 11:32:17.435775250 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/pr23372a-x32.d 2020-04-07 13:34:03.909784017 +0100 @@ -3,3 +3,8 @@ #as: --x32 #ld: -r -m elf32_x86_64 #readelf: -n + +Displaying notes found in: .note.gnu.property + Owner Data size Description + GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0 + Properties: x86 ISA used: diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr23372a.d binutils-2.30/ld/testsuite/ld-x86-64/pr23372a.d --- binutils.orig/ld/testsuite/ld-x86-64/pr23372a.d 2020-04-07 11:32:17.439775221 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/pr23372a.d 2020-04-07 13:34:03.909784017 +0100 @@ -3,3 +3,8 @@ #as: --64 -defsym __64_bit__=1 #ld: -r -m elf_x86_64 #readelf: -n + +Displaying notes found in: .note.gnu.property + Owner Data size Description + GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0 + Properties: x86 ISA used: diff -rup binutils.orig/ld/testsuite/ld-x86-64/property-3.r binutils-2.30/ld/testsuite/ld-x86-64/property-3.r --- binutils.orig/ld/testsuite/ld-x86-64/property-3.r 2020-04-07 11:32:17.423775337 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/property-3.r 2020-04-07 13:34:03.909784017 +0100 @@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.pro Owner Data size Description GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0 Properties: stack size: 0x800000 - x86 ISA used: 586, SSE x86 ISA needed: i486, 586 #pass diff -rup binutils.orig/ld/testsuite/ld-x86-64/property-4.r binutils-2.30/ld/testsuite/ld-x86-64/property-4.r --- binutils.orig/ld/testsuite/ld-x86-64/property-4.r 2020-04-07 11:32:17.427775308 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/property-4.r 2020-04-07 13:34:03.909784017 +0100 @@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.pro Owner Data size Description GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0 Properties: stack size: 0x800000 - x86 ISA used: i486, 586, SSE x86 ISA needed: i486, 586, SSE #pass diff -rup binutils.orig/ld/testsuite/ld-x86-64/property-5.r binutils-2.30/ld/testsuite/ld-x86-64/property-5.r --- binutils.orig/ld/testsuite/ld-x86-64/property-5.r 2020-04-07 11:32:17.437775235 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/property-5.r 2020-04-07 13:34:03.909784017 +0100 @@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.pro Owner Data size Description GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0 Properties: stack size: 0x900000 - x86 ISA used: i486, 586, SSE x86 ISA needed: i486, 586, SSE #pass diff -rup binutils.orig/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d binutils-2.30/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d --- binutils.orig/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d 2020-04-07 11:32:17.429775293 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d 2020-04-07 13:34:03.910784010 +0100 @@ -1,11 +1,12 @@ #source: property-x86-3.s #source: property-x86-ibt.s -#as: --x32 +#as: --x32 -mx86-used-note=yes #ld: -r -m elf32_x86_64 #readelf: -n Displaying notes found in: .note.gnu.property Owner Data size Description - GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1 - x86 ISA needed: i486, 586, SSE2, SSE3 + GNU 0x00000024 NT_GNU_PROPERTY_TYPE_0 + Properties: x86 ISA needed: i486, 586, SSE2, SSE3 + x86 ISA used: + x86 feature used: x86 diff -rup binutils.orig/ld/testsuite/ld-x86-64/property-x86-ibt3a.d binutils-2.30/ld/testsuite/ld-x86-64/property-x86-ibt3a.d --- binutils.orig/ld/testsuite/ld-x86-64/property-x86-ibt3a.d 2020-04-07 11:32:17.431775279 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/property-x86-ibt3a.d 2020-04-07 13:34:03.910784010 +0100 @@ -1,11 +1,12 @@ #source: property-x86-3.s #source: property-x86-ibt.s -#as: --64 -defsym __64_bit__=1 +#as: --64 -defsym __64_bit__=1 -mx86-used-note=yes #ld: -r -melf_x86_64 #readelf: -n Displaying notes found in: .note.gnu.property Owner Data size Description - GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1 - x86 ISA needed: i486, 586, SSE2, SSE3 + GNU 0x00000030 NT_GNU_PROPERTY_TYPE_0 + Properties: x86 ISA needed: i486, 586, SSE2, SSE3 + x86 ISA used: + x86 feature used: x86 diff -rup binutils.orig/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d binutils-2.30/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d --- binutils.orig/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d 2020-04-07 11:32:17.427775308 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d 2020-04-07 13:34:03.910784010 +0100 @@ -1,11 +1,12 @@ #source: property-x86-ibt.s #source: property-x86-3.s -#as: --x32 +#as: --x32 -mx86-used-note=yes #ld: -r -m elf32_x86_64 #readelf: -n Displaying notes found in: .note.gnu.property Owner Data size Description - GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1 - x86 ISA needed: i486, 586, SSE2, SSE3 + GNU 0x00000024 NT_GNU_PROPERTY_TYPE_0 + Properties: x86 ISA needed: i486, 586, SSE2, SSE3 + x86 ISA used: + x86 feature used: x86 diff -rup binutils.orig/ld/testsuite/ld-x86-64/property-x86-ibt3b.d binutils-2.30/ld/testsuite/ld-x86-64/property-x86-ibt3b.d --- binutils.orig/ld/testsuite/ld-x86-64/property-x86-ibt3b.d 2020-04-07 11:32:17.423775337 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/property-x86-ibt3b.d 2020-04-07 13:34:03.910784010 +0100 @@ -1,11 +1,12 @@ #source: property-x86-ibt.s #source: property-x86-3.s -#as: --64 -defsym __64_bit__=1 +#as: --64 -defsym __64_bit__=1 -mx86-used-note=yes #ld: -r -melf_x86_64 #readelf: -n Displaying notes found in: .note.gnu.property Owner Data size Description - GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1 - x86 ISA needed: i486, 586, SSE2, SSE3 + GNU 0x00000030 NT_GNU_PROPERTY_TYPE_0 + Properties: x86 ISA needed: i486, 586, SSE2, SSE3 + x86 ISA used: + x86 feature used: x86 diff -rup binutils.orig/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d binutils-2.30/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d --- binutils.orig/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d 2020-04-07 11:32:17.425775323 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d 2020-04-07 13:34:03.910784010 +0100 @@ -1,11 +1,12 @@ #source: property-x86-3.s #source: property-x86-shstk.s -#as: --x32 +#as: --x32 -mx86-used-note=yes #ld: -r -m elf32_x86_64 #readelf: -n Displaying notes found in: .note.gnu.property Owner Data size Description - GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1 - x86 ISA needed: i486, 586, SSE2, SSE3 + GNU 0x00000024 NT_GNU_PROPERTY_TYPE_0 + Properties: x86 ISA needed: i486, 586, SSE2, SSE3 + x86 ISA used: + x86 feature used: x86 diff -rup binutils.orig/ld/testsuite/ld-x86-64/property-x86-shstk3a.d binutils-2.30/ld/testsuite/ld-x86-64/property-x86-shstk3a.d --- binutils.orig/ld/testsuite/ld-x86-64/property-x86-shstk3a.d 2020-04-07 11:32:17.427775308 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/property-x86-shstk3a.d 2020-04-07 13:34:03.910784010 +0100 @@ -1,11 +1,12 @@ #source: property-x86-3.s #source: property-x86-shstk.s -#as: --64 -defsym __64_bit__=1 +#as: --64 -defsym __64_bit__=1 -mx86-used-note=yes #ld: -r -melf_x86_64 #readelf: -n Displaying notes found in: .note.gnu.property Owner Data size Description - GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1 - x86 ISA needed: i486, 586, SSE2, SSE3 + GNU 0x00000030 NT_GNU_PROPERTY_TYPE_0 + Properties: x86 ISA needed: i486, 586, SSE2, SSE3 + x86 ISA used: + x86 feature used: x86 diff -rup binutils.orig/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d binutils-2.30/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d --- binutils.orig/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d 2020-04-07 11:32:17.423775337 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d 2020-04-07 13:34:03.910784010 +0100 @@ -1,11 +1,12 @@ #source: property-x86-shstk.s #source: property-x86-3.s -#as: --x32 +#as: --x32 -mx86-used-note=yes #ld: -r -m elf32_x86_64 #readelf: -n Displaying notes found in: .note.gnu.property Owner Data size Description - GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1 - x86 ISA needed: i486, 586, SSE2, SSE3 + GNU 0x00000024 NT_GNU_PROPERTY_TYPE_0 + Properties: x86 ISA needed: i486, 586, SSE2, SSE3 + x86 ISA used: + x86 feature used: x86 diff -rup binutils.orig/ld/testsuite/ld-x86-64/property-x86-shstk3b.d binutils-2.30/ld/testsuite/ld-x86-64/property-x86-shstk3b.d --- binutils.orig/ld/testsuite/ld-x86-64/property-x86-shstk3b.d 2020-04-07 11:32:17.436775242 +0100 +++ binutils-2.30/ld/testsuite/ld-x86-64/property-x86-shstk3b.d 2020-04-07 13:34:03.910784010 +0100 @@ -1,11 +1,12 @@ #source: property-x86-shstk.s #source: property-x86-3.s -#as: --64 -defsym __64_bit__=1 +#as: --64 -defsym __64_bit__=1 -mx86-used-note=yes #ld: -r -melf_x86_64 #readelf: -n Displaying notes found in: .note.gnu.property Owner Data size Description - GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1 - x86 ISA needed: i486, 586, SSE2, SSE3 + GNU 0x00000030 NT_GNU_PROPERTY_TYPE_0 + Properties: x86 ISA needed: i486, 586, SSE2, SSE3 + x86 ISA used: + x86 feature used: x86 --- /dev/null 2020-08-20 07:54:24.260993139 +0100 +++ binutils-2.30/gas/testsuite/gas/i386/property-1.s 2020-08-20 15:44:27.696983474 +0100 @@ -0,0 +1,30 @@ + .section ".note.gnu.property", "a" +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif + .long 1f - 0f /* name length. */ + .long 3f - 1f /* data length. */ + /* NT_GNU_PROPERTY_TYPE_0 */ + .long 5 /* note type. */ +0: + .asciz "GNU" /* vendor name. */ +1: +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif + /* GNU_PROPERTY_X86_ISA_1_USED */ + .long 0xc0010000 /* pr_type. */ + .long 5f - 4f /* pr_datasz. */ +4: + .long 0 +5: +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif +3: --- /dev/null 2020-08-20 07:54:24.260993139 +0100 +++ binutils-2.30/gas/testsuite/gas/i386/property-1.d 2020-08-20 15:44:27.696983474 +0100 @@ -0,0 +1,8 @@ +#name: i386 property 1 +#as: -mx86-used-note=no --generate-missing-build-notes=no +#readelf: -n + +Displaying notes found in: .note.gnu.property +[ ]+Owner[ ]+Data size[ ]+Description + GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0 + Properties: x86 ISA used: --- /dev/null 2020-08-20 07:54:24.260993139 +0100 +++ binutils-2.30/gas/testsuite/gas/i386/property-2.d 2020-08-20 15:44:34.770964195 +0100 @@ -0,0 +1,9 @@ +#name: i386 property 2 +#as: -mx86-used-note=yes --generate-missing-build-notes=no +#readelf: -n + +Displaying notes found in: .note.gnu.property +[ ]+Owner[ ]+Data size[ ]+Description + GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0 + Properties: x86 ISA used: CMOV, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, AVX, AVX2, FMA, AVX512F, AVX512CD, AVX512ER, AVX512PF, AVX512VL, AVX512DQ, AVX512BW, AVX512_4FMAPS, AVX512_4VNNIW, AVX512_BITALG, AVX512_IFMA, AVX512_VBMI, AVX512_VBMI2, AVX512_VNNI, AVX512_BF16 + x86 feature used: x86, x87, MMX, XMM, YMM, ZMM, FXSR, XSAVE, XSAVEOPT, XSAVEC --- /dev/null 2020-08-20 07:54:24.260993139 +0100 +++ binutils-2.30/gas/testsuite/gas/i386/property-2.s 2020-08-20 15:44:34.770964195 +0100 @@ -0,0 +1,32 @@ + .text + fsin + movq %mm0, %mm1 + fxsave (%eax) + xsave (%eax) + xsaveopt (%eax) + xsavec (%eax) + cmove %eax,%ebx + movaps %xmm0, %xmm1 + movapd %xmm0, %xmm1 + mwait + psignb %xmm0, %xmm1 + blendvpd %xmm0, %xmm1 + pcmpgtq %xmm0, %xmm1 + vmovaps %xmm0, %xmm1 + vpabsb %ymm0, %ymm1 + vfmadd231ps %ymm0, %ymm1, %ymm1 + vmovaps %zmm0, %zmm1 + vplzcntd %zmm0, %zmm1 + vrsqrt28pd %zmm0, %zmm1 + vscatterpf0dpd (%eax,%ymm1){%k1} + {evex} vpmovzxdq %xmm0, %xmm1 + vandnpd %zmm0, %zmm0, %zmm1 + vpmaxuw %zmm0, %zmm0, %zmm1 + v4fnmaddss (%ecx), %xmm4, %xmm1 + vpopcntb %zmm0, %zmm1 + vp4dpwssd (%ecx), %zmm0, %zmm1 + vpmadd52luq (%ecx), %zmm0, %zmm1 + vpermt2b (%ecx), %zmm0, %zmm1 + vpcompressb %zmm0, %zmm1 + vpdpwssds (%ecx), %zmm0, %zmm1 + vcvtne2ps2bf16 (%ecx), %zmm0, %zmm1 --- /dev/null 2020-08-20 07:54:24.260993139 +0100 +++ binutils-2.30/ld/testsuite/ld-elf/pr23900-1-32.rd 2020-08-20 15:46:11.850699543 +0100 @@ -0,0 +1,14 @@ +#source: pr23900-1.s +#ld: +#readelf: -l --wide +#target: *-*-linux* *-*-gnu* *-*-nacl* + +#... + GNU_PROPERTY .* +0x4 +#... + +[0-9]+ +.*\ \.note\.gnu\.property .* +#... + +[0-9]+ +\.note\.gnu\.property +#... + +[0-9]+ +\.note\.gnu\.property +#... --- /dev/null 2020-08-20 07:54:24.260993139 +0100 +++ binutils-2.30/ld/testsuite/ld-elf/pr23900-1-64.rd 2020-08-20 15:46:16.968685596 +0100 @@ -0,0 +1,14 @@ +#source: pr23900-1.s +#ld: +#readelf: -l --wide +#target: *-*-linux* *-*-gnu* *-*-nacl* + +#... + GNU_PROPERTY .* +0x8 +#... + +[0-9]+ +.*\ \.note\.gnu\.property .* +#... + +[0-9]+ +\.note\.gnu\.property +#... + +[0-9]+ +\.note\.gnu\.property +#... --- /dev/null 2020-08-20 07:54:24.260993139 +0100 +++ binutils-2.30/ld/testsuite/ld-elf/pr23900-1.d 2020-08-20 15:46:26.546659490 +0100 @@ -0,0 +1,16 @@ +#ld: +#readelf: --notes --wide -l +#target: *-*-linux* *-*-gnu* *-*-nacl* + +#... + GNU_PROPERTY .* +#... + +[0-9]+ +.*\.note\.gnu\.property.* +#... + +[0-9]+ +\.note\.gnu\.property +#... + +[0-9]+ +\.note\.gnu\.property +#... +Displaying notes found in: \.note\.gnu\.property +[ ]+Owner[ ]+Data size[ ]+Description +[ ]+GNU[ ]+0x0+..[ ]+NT_GNU_PROPERTY_TYPE_0[ ]+Properties: no copy on protected --- /dev/null 2020-08-20 07:54:24.260993139 +0100 +++ binutils-2.30/ld/testsuite/ld-elf/pr23900-1.s 2020-08-20 15:46:30.072649878 +0100 @@ -0,0 +1,30 @@ + .text + .global start /* Used by SH targets. */ +start: + .global _start +_start: + .global __start +__start: + .global main /* Used by HPPA targets. */ +main: + .globl _main /* Used by LynxOS targets. */ +_main: + .dc.a 0 + + .section .note.gnu.property, "a" + .p2align ALIGN + .dc.l .L1 - .L0 /* name length. */ + .dc.l .L3 - .L1 /* data length. */ + /* NT_GNU_PROPERTY_TYPE_0 */ + .dc.l 5 /* note type. */ +.L0: + .asciz "GNU" /* vendor name. */ +.L1: + .p2align ALIGN + /* GNU_PROPERTY_NO_COPY_ON_PROTECTED */ + .dc.l 2 /* pr_type. */ + .dc.l .L5 - .L4 /* pr_datasz. */ +.L4: +.L5: + .p2align ALIGN +.L3: --- /dev/null 2020-08-20 07:54:24.260993139 +0100 +++ binutils-2.30/ld/testsuite/ld-elf/pr23900-2.s 2020-08-20 15:46:36.328632828 +0100 @@ -0,0 +1,32 @@ + .text + .global start /* Used by SH targets. */ +start: + .global _start +_start: + .global __start +__start: + .global main /* Used by HPPA targets. */ +main: + .globl _main /* Used by LynxOS targets. */ +_main: + .dc.a 0 + + /* NB: Deliberately incorrect section name. Should be + .note.gnu.property. */ + .section .note, "a" + .p2align ALIGN + .dc.l .L1 - .L0 /* name length. */ + .dc.l .L3 - .L1 /* data length. */ + /* NT_GNU_PROPERTY_TYPE_0 */ + .dc.l 5 /* note type. */ +.L0: + .asciz "GNU" /* vendor name. */ +.L1: + .p2align ALIGN + /* GNU_PROPERTY_NO_COPY_ON_PROTECTED */ + .dc.l 2 /* pr_type. */ + .dc.l .L5 - .L4 /* pr_datasz. */ +.L4: +.L5: + .p2align ALIGN +.L3: --- /dev/null 2020-08-20 07:54:24.260993139 +0100 +++ binutils-2.30/ld/testsuite/ld-elf/pr23900-2a.d 2020-08-20 15:46:42.642615623 +0100 @@ -0,0 +1,9 @@ +#source: pr23900-2.s +#ld: +#readelf: --notes --wide +#target: *-*-linux* *-*-gnu* *-*-nacl* + +#... +Displaying notes found in: \.note +[ ]+Owner[ ]+Data size[ ]+Description +[ ]+GNU[ ]+0x0+..[ ]+NT_GNU_PROPERTY_TYPE_0[ ]+Properties: no copy on protected --- /dev/null 2020-08-20 07:54:24.260993139 +0100 +++ binutils-2.30/ld/testsuite/ld-elf/pr23900-2b.d 2020-08-20 15:46:48.738599006 +0100 @@ -0,0 +1,9 @@ +#source: pr23900-2.s +#ld: +#readelf: -l --wide +#target: *-*-linux* *-*-gnu* *-*-nacl* + +#failif +#... + GNU_PROPERTY .* +#... --- /dev/null 2020-08-20 07:54:24.260993139 +0100 +++ binutils-2.30/ld/testsuite/ld-elf/stack-noexec.rd 2020-08-20 15:46:59.907568567 +0100 @@ -0,0 +1,3 @@ +#... + GNU_STACK 0x0+00000 0x0+000000 0x0+000000 0x0+000 0x.+0000 RW 0x[0-9a-f]+ +#pass