From: Mark Wielaard Date: Fri, 28 Aug 2020 21:19:26 +0000 (+0200) Subject: backends: Implement aarch64_dynamic_tag_name and aarch64_dynamic_tag_check X-Git-Tag: elfutils-0.181~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d0f3b596fd9bc262c6bcd2da571436165d734222;p=thirdparty%2Felfutils.git backends: Implement aarch64_dynamic_tag_name and aarch64_dynamic_tag_check Signed-off-by: Mark Wielaard --- diff --git a/backends/ChangeLog b/backends/ChangeLog index c85dfd2ae..ce4c971e5 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 66bfae942..bed929548 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 e30c409d7..464a5695c 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); +}