Mark ARM mapping symbols in object files are precious, so that strip will not remove...
authorNick Clifton <nickc@redhat.com>
Tue, 28 Jun 2016 12:22:49 +0000 (13:22 +0100)
committerNick Clifton <nickc@redhat.com>
Tue, 28 Jun 2016 12:22:49 +0000 (13:22 +0100)
* elf32-arm.c (elf32_arm_backend_symbol_processing): New
function.  Marks mapping symbols in object files as precious, so
that strip will not remove them.
(elf_backend_symbol_processing): Define.

bfd/ChangeLog
bfd/elf32-arm.c

index 52b26fcd5936fb86a82d0c77c8c9b3b272f51e3a..68d81c04b722b622773f3685df4c531fb65a98e8 100644 (file)
@@ -1,3 +1,10 @@
+2016-06-28  Nick Clifton  <nickc@redhat.com>
+
+       * elf32-arm.c (elf32_arm_backend_symbol_processing): New
+       function.  Marks mapping symbols in object files as precious, so
+       that strip will not remove them.
+       (elf_backend_symbol_processing): Define.
+
 2016-06-28  James Clarke  <jrtc27@jrtc27.com>
 
        * elfxx-sparc.c (_bfd_sparc_elf_relocate_section): Don't convert
index a7964c12b928789f43c9b83085fad49d35a42a15..04e776c99f7b193686f80d13662bcc4c9959872d 100644 (file)
@@ -18266,6 +18266,24 @@ elf32_arm_copy_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUSED,
   return FALSE;
 }
 
+/* Make sure that mapping symbols in object files are not removed via the
+   "strip --strip-unneeded" tool.  These symbols are needed in order to
+   correctly generate interworking veneers, and for byte swapping code
+   regions.  Once an object file has been linked, it is safe to remove the
+   symbols as they will no longer be needed.  */
+
+static void
+elf32_arm_backend_symbol_processing (bfd *abfd, asymbol *sym)
+{
+  if (((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
+      && sym->name != NULL
+      && sym->section != bfd_abs_section_ptr
+      && (strcmp (sym->name, "$a") == 0
+         || strcmp (sym->name, "$t") == 0
+         || strcmp (sym->name, "$d") == 0))
+    sym->flags |= BSF_KEEP;
+}
+
 #undef  elf_backend_copy_special_section_fields
 #define elf_backend_copy_special_section_fields elf32_arm_copy_special_section_fields
 
@@ -18324,6 +18342,7 @@ elf32_arm_copy_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUSED,
 #define elf_backend_begin_write_processing      elf32_arm_begin_write_processing
 #define elf_backend_add_symbol_hook            elf32_arm_add_symbol_hook
 #define elf_backend_count_additional_relocs    elf32_arm_count_additional_relocs
+#define elf_backend_symbol_processing          elf32_arm_backend_symbol_processing
 
 #define elf_backend_can_refcount       1
 #define elf_backend_can_gc_sections    1