OSDN Git Service

* elf-m10300.c (mn10300_elf_relax_delete_bytes): Do not look for align
authornickc <nickc>
Wed, 31 Oct 2007 11:33:27 +0000 (11:33 +0000)
committernickc <nickc>
Wed, 31 Oct 2007 11:33:27 +0000 (11:33 +0000)
  relocs when there are no relocs attached to the section.

bfd/ChangeLog
bfd/elf-m10300.c

index 6647eae..7543f62 100644 (file)
@@ -1,3 +1,8 @@
+2007-10-31  Nick Clifton  <nickc@redhat.com>
+
+       * elf-m10300.c (mn10300_elf_relax_delete_bytes): Do not look for
+       align relocs when there are no relocs attached to the section.
+
 2007-10-31  Alan Modra  <amodra@bigpond.net.au>
 
        * elf-bfd.h (bfd_elf_match_symbols_in_sections): Don't declare.
index db8114e..7c51498 100644 (file)
@@ -1847,24 +1847,27 @@ mn10300_elf_relax_delete_bytes (bfd *abfd,
   irel = elf_section_data (sec)->relocs;
   irelend = irel + sec->reloc_count;
 
-  /* If there is an align reloc at the end of the section ignore it.
-     GAS creates these relocs for reasons of its own, and they just
-     serve to keep the section artifically inflated.  */
-  if (ELF32_R_TYPE ((irelend - 1)->r_info) == (int) R_MN10300_ALIGN)
-    --irelend;
+  if (sec->reloc_count > 0)
+    {
+      /* If there is an align reloc at the end of the section ignore it.
+        GAS creates these relocs for reasons of its own, and they just
+        serve to keep the section artifically inflated.  */
+      if (ELF32_R_TYPE ((irelend - 1)->r_info) == (int) R_MN10300_ALIGN)
+       --irelend;
       
-  /* The deletion must stop at the next ALIGN reloc for an aligment
-     power larger than the number of bytes we are deleting.  */
-  for (; irel < irelend; irel++)
-    if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_ALIGN
-       && irel->r_offset > addr
-       && irel->r_offset < toaddr
-       && count < (1 << irel->r_addend))
-      {
-       irelalign = irel;
-       toaddr = irel->r_offset;
-       break;
-      }
+      /* The deletion must stop at the next ALIGN reloc for an aligment
+        power larger than the number of bytes we are deleting.  */
+      for (; irel < irelend; irel++)
+       if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_ALIGN
+           && irel->r_offset > addr
+           && irel->r_offset < toaddr
+           && count < (1 << irel->r_addend))
+         {
+           irelalign = irel;
+           toaddr = irel->r_offset;
+           break;
+         }
+    }
 
   /* Actually delete the bytes.  */
   memmove (contents + addr, contents + addr + count,