Fix ARM linker segfaults in VFP erratum fix code

Joseph S. Myers joseph@codesourcery.com
Thu Jan 29 13:48:00 GMT 2009


This patch fixes ARM linker segfaults in the VFP erratum fix code.
This code should only process normal relocatable objects being linked,
not executables, shared libraries or objects being used with -R.  (The
original observed problem was linking klibc, which involves -R.)

Tested with no regressions with cross to arm-none-eabi.  OK to commit?

2009-01-29  Julian Brown  <julian@codesourcery.com>

	* elf32-arm.c (bfd_elf32_arm_vfp11_erratum_scan): Skip BFDs with
	EXEC_P or DYNAMIC flags, and skip sections which are being linked
	with --just-symbols (-R).

Index: bfd/elf32-arm.c
===================================================================
RCS file: /cvs/src/src/bfd/elf32-arm.c,v
retrieving revision 1.169
diff -u -r1.169 elf32-arm.c
--- bfd/elf32-arm.c	28 Jan 2009 16:35:12 -0000	1.169
+++ bfd/elf32-arm.c	29 Jan 2009 13:42:14 -0000
@@ -4998,6 +4998,10 @@
   if (globals->vfp11_fix == BFD_ARM_VFP11_FIX_NONE)
     return TRUE;
 
+  /* Skip this BFD if it corresponds to an executable or dynamic object.  */
+  if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
+    return TRUE;
+
   for (sec = abfd->sections; sec != NULL; sec = sec->next)
     {
       unsigned int i, span, first_fmac = 0, veneer_of_insn = 0;
@@ -5008,6 +5012,8 @@
       if (elf_section_type (sec) != SHT_PROGBITS
           || (elf_section_flags (sec) & SHF_EXECINSTR) == 0
           || (sec->flags & SEC_EXCLUDE) != 0
+	  || sec->sec_info_type == ELF_INFO_TYPE_JUST_SYMS
+	  || sec->output_section == bfd_abs_section_ptr
           || strcmp (sec->name, VFP11_ERRATUM_VENEER_SECTION_NAME) == 0)
         continue;
 

-- 
Joseph S. Myers
joseph@codesourcery.com



More information about the Binutils mailing list