[BFD,AArch64] Define elf_backend_fixup_gnu_properties in AArch64

Message ID 1fc38dcb-6f3f-7fc6-dc39-06c4dddb60b0@arm.com
State New
Headers show
Series
  • [BFD,AArch64] Define elf_backend_fixup_gnu_properties in AArch64
Related show

Commit Message

Sudakshina Das March 20, 2019, 1:25 p.m.
Hi

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" by moving the head of the list forward.

Builds and regression tested on aarch64-none-linux-gnu.

Is this ok for trunk?

Sudi

*** bfd/ChangeLog ***

2019-xx-xx  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.

Comments

Nick Clifton March 20, 2019, 3 p.m. | #1
Hi Sudi,

> *** bfd/ChangeLog ***

> 

> 2019-xx-xx  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.

> 


Approved - please apply.

Cheers
  Nick
Sudakshina Das March 20, 2019, 6:03 p.m. | #2
Hi Nick

On 20/03/2019 15:00, Nick Clifton wrote:
> Hi Sudi,

> 

>> *** bfd/ChangeLog ***

>>

>> 2019-xx-xx  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.

>>

> 

> Approved - please apply.


Thanks for the approval. Committed as 
acde6c6b431a8c38ab18a47bb56f65f515448195.

Sudi
> 

> Cheers

>    Nick

>

Patch

diff --git a/bfd/elfxx-aarch64.h b/bfd/elfxx-aarch64.h
index a6d1792687cf39a68beb3235f5875d50bfc3ad4e..9ab13bb865bc3e31c35f6d00c83e074a72f0ff55 100644
--- a/bfd/elfxx-aarch64.h
+++ b/bfd/elfxx-aarch64.h
@@ -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
diff --git a/bfd/elfxx-aarch64.c b/bfd/elfxx-aarch64.c
index cae94d03e8453de0cceee1619668fff71a609edf..040814097f98071db09564392ed972e2e9f29692 100644
--- a/bfd/elfxx-aarch64.c
+++ b/bfd/elfxx-aarch64.c
@@ -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;
+	}
+    }
+}