aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2007-06-29 01:51:55 +0000
committerAlan Modra <amodra@gmail.com>2007-06-29 01:51:55 +0000
commit375de94a5e426b8277598a5f4d9e036b4b5d8b30 (patch)
tree43ac96883805f71d7db6ab467a18340583635798 /bfd
parent7d3287cb717540c60f0491587c29d523b4e38dfd (diff)
downloadgdb-375de94a5e426b8277598a5f4d9e036b4b5d8b30.zip
gdb-375de94a5e426b8277598a5f4d9e036b4b5d8b30.tar.gz
gdb-375de94a5e426b8277598a5f4d9e036b4b5d8b30.tar.bz2
* elf32-ppc.c (ppc_elf_info_to_howto): Check for invalid relocation
types.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf32-ppc.c11
2 files changed, 16 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index e89264f..9cf09df 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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.
diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c
index 0e36be6..b84f0af 100644
--- a/bfd/elf32-ppc.c
+++ b/bfd/elf32-ppc.c
@@ -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. */