diff options
author | Alan Modra <amodra@gmail.com> | 2012-03-23 06:41:21 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2012-03-23 06:41:21 +0000 |
commit | 62599110be4d6baae772ce8022801f06137495b9 (patch) | |
tree | 59b9b440f984f57d753854740cec790eba5b421d | |
parent | 8fe8b60120a48c2b516c60a7929bcee694235bd6 (diff) | |
download | gdb-62599110be4d6baae772ce8022801f06137495b9.zip gdb-62599110be4d6baae772ce8022801f06137495b9.tar.gz gdb-62599110be4d6baae772ce8022801f06137495b9.tar.bz2 |
PR binutils/13894
* elf64-ppc.c (opd_entry_value): Read full symbol table when
sym hashes unavailable.
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/elf64-ppc.c | 9 |
2 files changed, 12 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index da9f409..854beee 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2012-03-23 Alan Modra <amodra@gmail.com> + + PR binutils/13894 + * elf64-ppc.c (opd_entry_value): Read full symbol table when + sym hashes unavailable. + 2012-03-21 Eliot Dresselhaus <eliot@sonic.net> * elf32-tic6x.c (elf32_tic6x_merge_private_bfd_data): Return TRUE diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index f4f5d0b..e7a01c2 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -5585,15 +5585,18 @@ opd_entry_value (asection *opd_sec, unsigned long symndx = ELF64_R_SYM (look->r_info); asection *sec; - if (symndx < symtab_hdr->sh_info) + if (symndx < symtab_hdr->sh_info + || elf_sym_hashes (opd_bfd) == NULL) { Elf_Internal_Sym *sym; sym = (Elf_Internal_Sym *) symtab_hdr->contents; if (sym == NULL) { - sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr, - symtab_hdr->sh_info, + size_t symcnt = symtab_hdr->sh_info; + if (elf_sym_hashes (opd_bfd) == NULL) + symcnt = symtab_hdr->sh_size / symtab_hdr->sh_entsize; + sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr, symcnt, 0, NULL, NULL, NULL); if (sym == NULL) break; |