csky: fix annobin test fails
authorAlan Modra <amodra@gmail.com>
Sun, 2 May 2021 22:27:39 +0000 (07:57 +0930)
committerAlan Modra <amodra@gmail.com>
Mon, 3 May 2021 06:04:17 +0000 (15:34 +0930)
* elf32-csky.c (is_mapping_symbol_name): New function.
(csky_elf_is_target_special_symbol): Likewise.
(csky_elf_maybe_function_sym): Likewise.
(bfd_elf32_bfd_is_target_special_symbol): Define.
(elf_backend_maybe_function_sym): Define.

bfd/ChangeLog
bfd/elf32-csky.c

index c5a617cef97c0a36f887c0e102ea9ede0ae2ceaf..3a23a18bb9ef806e9af124d7076d43239795dba6 100644 (file)
@@ -1,3 +1,11 @@
+2021-05-03  Alan Modra  <amodra@gmail.com>
+
+       * elf32-csky.c (is_mapping_symbol_name): New function.
+       (csky_elf_is_target_special_symbol): Likewise.
+       (csky_elf_maybe_function_sym): Likewise.
+       (bfd_elf32_bfd_is_target_special_symbol): Define.
+       (elf_backend_maybe_function_sym): Define.
+
 2021-04-30  Nick Clifton  <nickc@redhat.com>
 
        PR 27801
index 3ab4639cbae92933890cd6e91b9aad64a62ac298..927fb90390e6ac3dad9e85e7fcc56f52ffb0327e 100644 (file)
@@ -2432,6 +2432,38 @@ csky_elf_gc_mark_hook (asection *sec,
   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
 }
 
+/* Match symbol names created by tc-csky.c:make_mapping_symbol.  */
+
+static bool
+is_mapping_symbol_name (const char *name)
+{
+  return (name && name[0] == '$'
+         && (name[1] == 't' || name[1] == 'd')
+         && name[2] == 0);
+}
+
+/* Treat mapping symbols as special target symbols.  */
+
+static bool
+csky_elf_is_target_special_symbol (bfd *abfd ATTRIBUTE_UNUSED, asymbol *sym)
+{
+  return is_mapping_symbol_name (sym->name);
+}
+
+/* Exclude mapping symbols from being treated as function symbols by
+   objdump and nm.  */
+
+static bfd_size_type
+csky_elf_maybe_function_sym (const asymbol *sym, asection *sec,
+                            bfd_vma *code_off)
+{
+  if ((sym->flags & BSF_LOCAL) != 0
+      && is_mapping_symbol_name (sym->name))
+    return 0;
+
+  return _bfd_elf_maybe_function_sym (sym, sec, code_off);
+}
+
 /* Look through the relocs for a section during the first phase.
    Since we don't do .gots or .plts, we just need to consider the
    virtual table relocs for gc.  */
@@ -5293,6 +5325,8 @@ elf32_csky_obj_attrs_handle_unknown (bfd *abfd ATTRIBUTE_UNUSED,
 #define bfd_elf32_bfd_merge_private_bfd_data  csky_elf_merge_private_bfd_data
 #define bfd_elf32_bfd_set_private_flags       csky_elf_set_private_flags
 #define elf_backend_copy_indirect_symbol      csky_elf_copy_indirect_symbol
+#define bfd_elf32_bfd_is_target_special_symbol csky_elf_is_target_special_symbol
+#define elf_backend_maybe_function_sym       csky_elf_maybe_function_sym
 
 /* GC section related API.  */
 #define elf_backend_can_gc_sections           1