* elf32-ppc.c (ppc_elf_info_to_howto): Check for invalid relocation
authorAlan Modra <amodra@gmail.com>
Fri, 29 Jun 2007 01:51:55 +0000 (01:51 +0000)
committerAlan Modra <amodra@gmail.com>
Fri, 29 Jun 2007 01:51:55 +0000 (01:51 +0000)
types.

bfd/ChangeLog
bfd/elf32-ppc.c

index e89264fec1cffff281209135a1d690a5a7f08432..9cf09dfea8935e54c8b7e8b08460971995199eec 100644 (file)
@@ -1,3 +1,8 @@
+2007-06-29  Nathan Froyd  <froydnj@codesourcery.com>
+
+       * elf32-ppc.c (ppc_elf_info_to_howto): Check for invalid relocation
+       types.
+
 2007-06-29  Alan Modra  <amodra@bigpond.net.au>
 
        * elf32-spu.c (spu_elf_fake_sections): New function.
index 0e36be65ad830d5418df265193469b132f4dd04e..b84f0af2ad8171253195a4a506ad9e6a1eb87511 100644 (file)
@@ -1607,6 +1607,17 @@ ppc_elf_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
 
   BFD_ASSERT (ELF32_R_TYPE (dst->r_info) < (unsigned int) R_PPC_max);
   cache_ptr->howto = ppc_elf_howto_table[ELF32_R_TYPE (dst->r_info)];
+
+  /* Just because the above assert didn't trigger doesn't mean that
+     ELF32_R_TYPE (dst->r_info) is necessarily a valid relocation.  */
+  if (!cache_ptr->howto)
+    {
+      (*_bfd_error_handler) (_("%B: invalid relocation type %d"),
+                             abfd, ELF32_R_TYPE (dst->r_info));
+      bfd_set_error (bfd_error_bad_value);
+
+      cache_ptr->howto = ppc_elf_howto_table[R_PPC_NONE];
+    }
 }
 
 /* Handle the R_PPC_ADDR16_HA and R_PPC_REL16_HA relocs.  */
This page took 0.02971 seconds and 4 git commands to generate.