Blame SOURCES/binutils-PT_GNU_PROPERTY-segment.patch

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