diff options
author | Alan Modra <amodra@gmail.com> | 2009-05-21 13:49:11 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2009-05-21 13:49:11 +0000 |
commit | 5ef11c0214f8a01a6bc0a5dd9c51383012c372c5 (patch) | |
tree | faa4613138b95856a2e423ef9c513a274d095e14 /bfd/elf64-ppc.c | |
parent | ebf12fbedc251319fa94bf3dab35992f01f6a8b3 (diff) | |
download | gdb-5ef11c0214f8a01a6bc0a5dd9c51383012c372c5.zip gdb-5ef11c0214f8a01a6bc0a5dd9c51383012c372c5.tar.gz gdb-5ef11c0214f8a01a6bc0a5dd9c51383012c372c5.tar.bz2 |
* elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Don't segfault on
out of range .opd symbols.
Diffstat (limited to 'bfd/elf64-ppc.c')
-rw-r--r-- | bfd/elf64-ppc.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index ce82e16..ae3c3b9 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -3033,6 +3033,10 @@ ppc64_elf_get_synthetic_symtab (bfd *abfd, { bfd_vma ent; + /* Ignore bogus symbols. */ + if (syms[i]->value > opd->size - 8) + continue; + ent = bfd_get_64 (abfd, contents + syms[i]->value); if (!sym_exists_at (syms, opdsymend, symcount, -1, ent)) { @@ -3126,6 +3130,9 @@ ppc64_elf_get_synthetic_symtab (bfd *abfd, { bfd_vma ent; + if (syms[i]->value > opd->size - 8) + continue; + ent = bfd_get_64 (abfd, contents + syms[i]->value); if (!sym_exists_at (syms, opdsymend, symcount, -1, ent)) { |