From d0f3b596fd9bc262c6bcd2da571436165d734222 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 28 Aug 2020 23:19:26 +0200 Subject: backends: Implement aarch64_dynamic_tag_name and aarch64_dynamic_tag_check Signed-off-by: Mark Wielaard --- backends/ChangeLog | 7 +++++++ backends/aarch64_init.c | 2 ++ backends/aarch64_symbol.c | 26 ++++++++++++++++++++++++++ 3 files changed, 35 insertions(+) (limited to 'backends') 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 + + * 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 * 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); +} -- cgit v1.2.1