+2018-08-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * elfxx-x86.c (_bfd_x86_elf_parse_gnu_properties): Mask out the
+       GNU_PROPERTY_X86_UINT32_VALID bit.
+       (_bfd_x86_elf_link_fixup_gnu_properties): Set the
+       GNU_PROPERTY_X86_UINT32_VALID bit for non-relocatable output.
+
 2018-08-23  Zenith423  <zenith432@users.sourceforge.net>
 
        PR 23460
 
          return property_corrupt;
        }
       prop = _bfd_elf_get_property (abfd, type, datasz);
-      /* Combine properties of the same type.  */
-      prop->u.number |= bfd_h_get_32 (abfd, ptr);
+      /* Mask out GNU_PROPERTY_X86_UINT32_VALID and combine properties
+        of the same type.  */
+      prop->u.number |= (bfd_h_get_32 (abfd, ptr)
+                        & ~GNU_PROPERTY_X86_UINT32_VALID);
       prop->pr_kind = property_number;
       break;
 
 /* Fix up x86 GNU properties.  */
 
 void
-_bfd_x86_elf_link_fixup_gnu_properties
-  (struct bfd_link_info *info ATTRIBUTE_UNUSED,
-   elf_property_list **listp)
+_bfd_x86_elf_link_fixup_gnu_properties (struct bfd_link_info *info,
+                                       elf_property_list **listp)
 {
   elf_property_list *p;
 
            *listp = p->next;
            continue;
          }
+
+       /* Mark x86-specific properties with X86_UINT32_VALID for
+          non-relocatable output.  */
+       if (!(bfd_link_relocatable (info)))
+         p->property.u.number |= GNU_PROPERTY_X86_UINT32_VALID;
+
        listp = &p->next;
        break;
       default:
 
+2018-08-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * readelf.c (print_gnu_property_note): Check the
+       GNU_PROPERTY_X86_UINT32_VALID bit for invalid GNU property note.
+
 2018-08-23  Alan Modra  <amodra@gmail.com>
 
        * readelf.c (get_ppc64_symbol_other): Return NULL if st_other
 
              || filedata->file_header.e_machine == EM_IAMCU
              || filedata->file_header.e_machine == EM_386)
            {
+             unsigned int bitmask;
+
+             if (datasz == 4)
+               {
+                 bitmask = byte_get (ptr, 4);
+                 if (filedata->file_header.e_type == ET_EXEC
+                     || filedata->file_header.e_type == ET_DYN)
+                   {
+                     if ((bitmask & GNU_PROPERTY_X86_UINT32_VALID))
+                       bitmask &= ~GNU_PROPERTY_X86_UINT32_VALID;
+                     else
+                       printf ("Invalid ");
+                   }
+               }
+             else
+               bitmask = 0;
+
              switch (type)
                {
                case GNU_PROPERTY_X86_ISA_1_USED:
-                 printf ("x86 ISA used: ");
                  if (datasz != 4)
-                   printf (_("<corrupt length: %#x> "), datasz);
+                   printf (_("x86 ISA used: <corrupt length: %#x> "),
+                           datasz);
                  else
-                   decode_x86_isa (byte_get (ptr, 4));
+                   {
+                     printf ("x86 ISA used: ");
+                     decode_x86_isa (bitmask);
+                   }
                  goto next;
 
                case GNU_PROPERTY_X86_ISA_1_NEEDED:
-                 printf ("x86 ISA needed: ");
                  if (datasz != 4)
-                   printf (_("<corrupt length: %#x> "), datasz);
+                   printf (_("x86 ISA needed: <corrupt length: %#x> "),
+                           datasz);
                  else
-                   decode_x86_isa (byte_get (ptr, 4));
+                   {
+                     printf ("x86 ISA needed: ");
+                     decode_x86_isa (bitmask);
+                   }
                  goto next;
 
                case GNU_PROPERTY_X86_FEATURE_1_AND:
-                 printf ("x86 feature: ");
                  if (datasz != 4)
-                   printf (_("<corrupt length: %#x> "), datasz);
+                   printf (_("x86 feature: <corrupt length: %#x> "),
+                           datasz);
                  else
-                   decode_x86_feature (type, byte_get (ptr, 4));
+                   {
+                     printf ("x86 feature: ");
+                     decode_x86_feature (type, bitmask);
+                   }
                  goto next;
 
                default:
 
+2018-08-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * elf/common.h (GNU_PROPERTY_X86_UINT32_VALID): New.
+
 2018-08-21  John Darrington  <john@darrington.wattle.id.au>
 
        * elf/s12z.h: Rename R_S12Z_UKNWN_3 to R_S12Z_EXT18.
 
 #define GNU_PROPERTY_X86_ISA_1_NEEDED          0xc0000001
 #define GNU_PROPERTY_X86_FEATURE_1_AND         0xc0000002
 
+/* Set by linker to indicate that the property is valid.  */
+#define GNU_PROPERTY_X86_UINT32_VALID          (1U << 31)
+
 #define GNU_PROPERTY_X86_ISA_1_486           (1U << 0)
 #define GNU_PROPERTY_X86_ISA_1_586           (1U << 1)
 #define GNU_PROPERTY_X86_ISA_1_686           (1U << 2)