summaryrefslogtreecommitdiff
path: root/backends
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2020-08-28 23:19:26 +0200
committerMark Wielaard <mark@klomp.org>2020-09-07 09:26:47 +0200
commitd0f3b596fd9bc262c6bcd2da571436165d734222 (patch)
treef7c7ed1b223f19db288fe753b9de5c3e3cccb632 /backends
parent1d8b10e02c1dc374c08deee3efaabf7814d16f92 (diff)
downloadelfutils-d0f3b596fd9bc262c6bcd2da571436165d734222.tar.gz
backends: Implement aarch64_dynamic_tag_name and aarch64_dynamic_tag_check
Signed-off-by: Mark Wielaard <mark@klomp.org>
Diffstat (limited to 'backends')
-rw-r--r--backends/ChangeLog7
-rw-r--r--backends/aarch64_init.c2
-rw-r--r--backends/aarch64_symbol.c26
3 files changed, 35 insertions, 0 deletions
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);
+}