From 20a90f314c776b2f708361bbacee0ad0ab7dcbb1 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Fri, 23 Mar 2012 06:41:20 +0000 Subject: PR binutils/13894 * elf64-ppc.c (opd_entry_value): Read full symbol table when sym hashes unavailable. --- bfd/ChangeLog | 6 ++++++ bfd/elf64-ppc.c | 9 ++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index da9f409dc8..854beee0a5 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2012-03-23 Alan Modra + + PR binutils/13894 + * elf64-ppc.c (opd_entry_value): Read full symbol table when + sym hashes unavailable. + 2012-03-21 Eliot Dresselhaus * elf32-tic6x.c (elf32_tic6x_merge_private_bfd_data): Return TRUE diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index f4f5d0b0f6..e7a01c2215 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; -- cgit v1.2.1