This is the mail archive of the binutils@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]

Re: ARM mapping symbols and --strip-unneeded


Hi Guys,

On 27/06/16 15:06, Richard Earnshaw (lists) wrote:
> And potentially for little-endian binaries as well.  For example, they
> might sometimes be needed to insert correct interworking veneers.

Agreed - so this is what I have checked in.  It makes sure that "strip
--strip-unneeded" will not remove mapping symbols from any ARM object
file (little endian or big endian), whilst still allowing them to be
removed from executables and shared libraries.

Cheers
  Nick

bfd/ChangeLog
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.

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]