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]

RL78: Ski0p dynamic section checks if the sections have not been created


Hi DJ,

  The patch below fixes a couple of problems with the
  el78_elf_finish_dynamic_sections functions.  The first was that the
  check was being run even if the dynamic sections had not been
  created.  The second was that the checks were being run only when
  relaxation had been run, instead of only when relaxation had not been
  run.

  OK to apply ?

Cheers
  Nick

bfd/ChangeLog
2013-06-10  Nick Clifton  <nickc@redhat.com>

	* elf32-rl78.c (rl78_elf_finish_dynamic_sections): Only run if the
	dynamic sections have been created and relaxation has not been run.

Index: bfd/elf32-rl78.c
===================================================================
RCS file: /cvs/src/src/bfd/elf32-rl78.c,v
retrieving revision 1.14
diff -u -3 -p -r1.14 elf32-rl78.c
--- bfd/elf32-rl78.c	2 Apr 2013 23:29:51 -0000	1.14
+++ bfd/elf32-rl78.c	10 Jun 2013 11:51:35 -0000
@@ -1270,24 +1270,28 @@ rl78_elf_finish_dynamic_sections (bfd *a
   bfd *dynobj;
   asection *splt;
 
+  if (!elf_hash_table (info)->dynamic_sections_created)
+    return TRUE;
+
   /* As an extra sanity check, verify that all plt entries have been
      filled in.  However, relaxing might have changed the relocs so
      that some plt entries don't get filled in, so we have to skip
      this check if we're relaxing.  Unfortunately, check_relocs is
      called before relaxation.  */
 
-  if (info->relax_trip > 0)
+  if (info->relax_trip > 0) 
+    return TRUE;
+
+  if ((dynobj = elf_hash_table (info)->dynobj) != NULL
+      && (splt = bfd_get_linker_section (dynobj, ".plt")) != NULL)
     {
-      if ((dynobj = elf_hash_table (info)->dynobj) != NULL
-	  && (splt = bfd_get_linker_section (dynobj, ".plt")) != NULL)
+      bfd_byte *contents = splt->contents;
+      unsigned int i, size = splt->size;
+
+      for (i = 0; i < size; i += 4)
 	{
-	  bfd_byte *contents = splt->contents;
-	  unsigned int i, size = splt->size;
-	  for (i = 0; i < size; i += 4)
-	    {
-	      unsigned int x = bfd_get_32 (dynobj, contents + i);
-	      BFD_ASSERT (x != 0);
-	    }
+	  unsigned int x = bfd_get_32 (dynobj, contents + i);
+	  BFD_ASSERT (x != 0);
 	}
     }
 


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