* elf64-ppc.c (opd_entry_value): Handle case where symbol

hashes are not available.
This commit is contained in:
Alan Modra 2013-05-06 09:32:55 +00:00
parent f45794cb51
commit 128205bb36
2 changed files with 29 additions and 5 deletions

View File

@ -1,3 +1,8 @@
2013-05-06 Alan Modra <amodra@gmail.com>
* elf64-ppc.c (opd_entry_value): Handle case where symbol
hashes are not available.
2013-05-06 Alan Modra <amodra@gmail.com>
* elflink.c (elf_link_add_object_symbols): Don't save symbol

View File

@ -5665,11 +5665,30 @@ opd_entry_value (asection *opd_sec,
sym_hashes = elf_sym_hashes (opd_bfd);
rh = sym_hashes[symndx - symtab_hdr->sh_info];
rh = elf_follow_link (rh);
BFD_ASSERT (rh->root.type == bfd_link_hash_defined
|| rh->root.type == bfd_link_hash_defweak);
val = rh->root.u.def.value;
sec = rh->root.u.def.section;
if (rh != NULL)
{
rh = elf_follow_link (rh);
BFD_ASSERT (rh->root.type == bfd_link_hash_defined
|| rh->root.type == bfd_link_hash_defweak);
val = rh->root.u.def.value;
sec = rh->root.u.def.section;
}
else
{
/* Handle the odd case where we can be called
during bfd_elf_link_add_symbols before the
symbol hashes have been fully populated. */
Elf_Internal_Sym *sym;
sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr, 1,
symndx, NULL, NULL, NULL);
if (sym == NULL)
break;
val = sym->st_value;
sec = bfd_section_from_elf_index (opd_bfd, sym->st_shndx);
free (sym);
}
}
val += look->r_addend;
if (code_off != NULL)