This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Mark ARM mapping symbols in object files are precious, so that strip will not remove them.


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=fca2a38fdb391f810e309a12d5279047d4edac34

commit fca2a38fdb391f810e309a12d5279047d4edac34
Author: Nick Clifton <nickc@redhat.com>
Date:   Tue Jun 28 13:22:49 2016 +0100

    Mark ARM mapping symbols in object files are precious, so that strip will not remove them.
    
    	* 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.

Diff:
---
 bfd/ChangeLog   |  7 +++++++
 bfd/elf32-arm.c | 19 +++++++++++++++++++
 2 files changed, 26 insertions(+)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 52b26fc..68d81c0 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index a7964c1..04e776c 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]