+ if (p->property.pr_kind != property_remove)
+ {
+ if (p->property.pr_kind == property_number)
+ {
+ number_p = TRUE;
+ number = p->property.u.number;
+ }
+ else
+ number_p = FALSE;
+ pr = elf_find_and_remove_property (listp, p->property.pr_type,
+ TRUE);
+ /* Pass NULL to elf_merge_gnu_properties for the property which
+ isn't on *LISTP. */
+ elf_merge_gnu_properties (info, first_pbfd, abfd, &p->property, pr);
+ if (p->property.pr_kind == property_remove)
+ {
+ if (info->has_map_file)
+ {
+ if (number_p)
+ {
+ if (pr != NULL)
+ info->callbacks->minfo
+ (_("Removed property %W to merge %pB (0x%v) "
+ "and %pB (0x%v)\n"),
+ (bfd_vma) p->property.pr_type, first_pbfd,
+ number, abfd, pr->u.number);
+ else
+ info->callbacks->minfo
+ (_("Removed property %W to merge %pB (0x%v) "
+ "and %pB (not found)\n"),
+ (bfd_vma) p->property.pr_type, first_pbfd,
+ number, abfd);
+ }
+ else
+ {
+ if (pr != NULL)
+ info->callbacks->minfo
+ (_("Removed property %W to merge %pB and %pB\n"),
+ (bfd_vma) p->property.pr_type, first_pbfd, abfd);
+ else
+ info->callbacks->minfo
+ (_("Removed property %W to merge %pB and %pB "
+ "(not found)\n"),
+ (bfd_vma) p->property.pr_type, first_pbfd, abfd);
+ }
+ }
+
+ /* Remove this property. */
+ *lastp = p->next;
+ continue;
+ }
+ else if (number_p)
+ {
+ if (pr != NULL)
+ {
+ if (p->property.u.number != number
+ || p->property.u.number != pr->u.number)
+ info->callbacks->minfo
+ (_("Updated property %W (0x%v) to merge %pB (0x%v) "
+ "and %pB (0x%v)\n"),
+ (bfd_vma) p->property.pr_type, p->property.u.number,
+ first_pbfd, number, abfd, pr->u.number);
+ }
+ else
+ {
+ if (p->property.u.number != number)
+ info->callbacks->minfo
+ (_("Updated property %W (%v) to merge %pB (0x%v) "
+ "and %pB (not found)\n"),
+ (bfd_vma) p->property.pr_type, p->property.u.number,
+ first_pbfd, number, abfd);
+ }
+ }
+ lastp = &p->next;
+ }
+
+ /* Merge the remaining properties on *LISTP with FIRST_PBFD. */
+ for (p = *listp; p != NULL; p = p->next)