[BFD, AArch64] Define elf_backend_fixup_gnu_properties in AArch64
authorSudakshina Das <sudi.das@arm.com>
Wed, 20 Mar 2019 18:00:07 +0000 (18:00 +0000)
committerSudakshina Das <sudi.das@arm.com>
Wed, 20 Mar 2019 18:00:07 +0000 (18:00 +0000)
This patch add support for elf_backend_fixup_gnu_properties for GNU
property support for AArch64. The new AArch64 specific definition
_bfd_aarch64_elf_link_fixup_gnu_properties goes through the property
list to find AArch64 type properties and removes the properties that
are marked as "property_remove".

*** bfd/ChangeLog ***

2019-03-20  Sudakshina Das  <sudi.das@arm.com>

* elfxx-aarch64.c (_bfd_aarch64_elf_link_fixup_gnu_properties): Define.
* elfxx-aarch64.h (_bfd_aarch64_elf_link_fixup_gnu_properties): Declare.
(elf_backend_fixup_gnu_properties): Define for AArch64.

bfd/ChangeLog
bfd/elfxx-aarch64.c
bfd/elfxx-aarch64.h

index 9cdd4fe176728c448d1ec9a3dcc20424531af544..d0daa375fc1bff625e3b96647c158b3626798252 100644 (file)
@@ -1,3 +1,9 @@
+2019-03-20  Sudakshina Das  <sudi.das@arm.com>
+
+       * elfxx-aarch64.c (_bfd_aarch64_elf_link_fixup_gnu_properties): Define.
+       * elfxx-aarch64.h (_bfd_aarch64_elf_link_fixup_gnu_properties): Declare.
+       (elf_backend_fixup_gnu_properties): Define for AArch64.
+
 2019-03-18  Alan Modra  <amodra@gmail.com>
 
        PR 24355
index cae94d03e8453de0cceee1619668fff71a609edf..040814097f98071db09564392ed972e2e9f29692 100644 (file)
@@ -863,3 +863,38 @@ _bfd_aarch64_elf_merge_gnu_properties (struct bfd_link_info *info
 
   return updated;
 }
+
+/* Fix up AArch64 GNU properties.  */
+void
+_bfd_aarch64_elf_link_fixup_gnu_properties
+  (struct bfd_link_info *info ATTRIBUTE_UNUSED,
+   elf_property_list **listp)
+{
+  elf_property_list *p, *prev;
+
+  for (p = *listp, prev = *listp; p; p = p->next)
+    {
+      unsigned int type = p->property.pr_type;
+      if (type == GNU_PROPERTY_AARCH64_FEATURE_1_AND)
+       {
+         if (p->property.pr_kind == property_remove)
+           {
+             /* Remove empty property.  */
+             if (prev == p)
+               {
+                 *listp = p->next;
+                 prev = *listp;
+               }
+             else
+                 prev->next = p->next;
+             continue;
+           }
+         prev = p;
+       }
+      else if (type > GNU_PROPERTY_HIPROC)
+       {
+         /* The property list is sorted in order of type.  */
+         break;
+       }
+    }
+}
index a6d1792687cf39a68beb3235f5875d50bfc3ad4e..9ab13bb865bc3e31c35f6d00c83e074a72f0ff55 100644 (file)
@@ -69,5 +69,12 @@ _bfd_aarch64_elf_merge_gnu_properties (struct bfd_link_info *, bfd *,
                                       elf_property *, elf_property *,
                                       uint32_t);
 
+extern void
+_bfd_aarch64_elf_link_fixup_gnu_properties (struct bfd_link_info *,
+                                           elf_property_list **);
+
 #define elf_backend_parse_gnu_properties       \
   _bfd_aarch64_elf_parse_gnu_properties
+
+#define elf_backend_fixup_gnu_properties       \
+  _bfd_aarch64_elf_link_fixup_gnu_properties