[PATCH 2/2] backends: Implement aarch64_dynamic_tag_name and aarch64_dynamic_tag_check

Mark Wielaard mark@klomp.org
Fri Aug 28 22:42:02 GMT 2020


Signed-off-by: Mark Wielaard <mark@klomp.org>
---
 backends/ChangeLog        |  7 +++++++
 backends/aarch64_init.c   |  2 ++
 backends/aarch64_symbol.c | 26 ++++++++++++++++++++++++++
 3 files changed, 35 insertions(+)

diff --git a/backends/ChangeLog b/backends/ChangeLog
index c85dfd2a..ce4c971e 100644
--- a/backends/ChangeLog
+++ b/backends/ChangeLog
@@ -1,3 +1,10 @@
+2020-08-28  Mark Wielard  <mark@klomp.org>
+
+	* aarch64_init.c (aarch64_init): Hook dynamic_tag_name and
+	dynamic_tag_check.
+	* aarch64_symbol.c (aarch64_dynamic_tag_name): New function.
+	(aarch64_dynamic_tag_check): Likewise.
+
 2020-06-16  Mark Wielard  <mark@klomp.org>
 
 	* common-reloc.c (reloc_nametable): Make zero a 1 char array.
diff --git a/backends/aarch64_init.c b/backends/aarch64_init.c
index 66bfae94..bed92954 100644
--- a/backends/aarch64_init.c
+++ b/backends/aarch64_init.c
@@ -50,6 +50,8 @@ aarch64_init (Elf *elf __attribute__ ((unused)),
   HOOK (eh, reloc_simple_type);
   HOOK (eh, return_value_location);
   HOOK (eh, check_special_symbol);
+  HOOK (eh, dynamic_tag_name);
+  HOOK (eh, dynamic_tag_check);
   HOOK (eh, data_marker_symbol);
   HOOK (eh, abi_cfi);
 
diff --git a/backends/aarch64_symbol.c b/backends/aarch64_symbol.c
index e30c409d..464a5695 100644
--- a/backends/aarch64_symbol.c
+++ b/backends/aarch64_symbol.c
@@ -106,3 +106,29 @@ aarch64_data_marker_symbol (const GElf_Sym *sym, const char *sname)
 	  && GELF_ST_TYPE (sym->st_info) == STT_NOTYPE
 	  && (strcmp (sname, "$d") == 0 || strncmp (sname, "$d.", 3) == 0));
 }
+
+const char *
+aarch64_dynamic_tag_name (int64_t tag, char *buf __attribute__ ((unused)),
+			  size_t len __attribute__ ((unused)))
+{
+  switch (tag)
+    {
+    case DT_AARCH64_BTI_PLT:
+      return "AARCH64_BTI_PLT";
+    case DT_AARCH64_PAC_PLT:
+      return "AARCH64_PAC_PLT";
+    case DT_AARCH64_VARIANT_PCS:
+      return "AARCH64_VARIANT_PCS";
+    default:
+      break;
+    }
+  return NULL;
+}
+
+bool
+aarch64_dynamic_tag_check (int64_t tag)
+{
+  return (tag == DT_AARCH64_BTI_PLT
+	  || tag == DT_AARCH64_PAC_PLT
+	  || tag == DT_AARCH64_VARIANT_PCS);
+}
-- 
2.18.4



More information about the Elfutils-devel mailing list