* elflink.h (elf_link_add_object_symbols): Revert 1999-09-02 hpux

fudge.
	* elf.c (bfd_section_from_shdr): Work around broken hpux shared
	libs here instead.
This commit is contained in:
Alan Modra
2002-07-04 13:26:30 +00:00
parent 9b4f1ba7ed
commit 797fc050a0
3 changed files with 40 additions and 18 deletions

View File

@@ -1661,7 +1661,6 @@ bfd_section_from_shdr (abfd, shindex)
return true;
case SHT_PROGBITS: /* Normal section with contents. */
case SHT_DYNAMIC: /* Dynamic linking information. */
case SHT_NOBITS: /* .bss section. */
case SHT_HASH: /* .hash section. */
case SHT_NOTE: /* .note section. */
@@ -1670,6 +1669,39 @@ bfd_section_from_shdr (abfd, shindex)
case SHT_PREINIT_ARRAY: /* .preinit_array section. */
return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
case SHT_DYNAMIC: /* Dynamic linking information. */
if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
return false;
if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_STRTAB)
{
Elf_Internal_Shdr *dynsymhdr;
/* The shared libraries distributed with hpux11 have a bogus
sh_link field for the ".dynamic" section. Find the
string table for the ".dynsym" section instead. */
if (elf_dynsymtab (abfd) != 0)
{
dynsymhdr = elf_elfsections (abfd)[elf_dynsymtab (abfd)];
hdr->sh_link = dynsymhdr->sh_link;
}
else
{
unsigned int i, num_sec;
num_sec = elf_numsections (abfd);
for (i = 1; i < num_sec; i++)
{
dynsymhdr = elf_elfsections (abfd)[i];
if (dynsymhdr->sh_type == SHT_DYNSYM)
{
hdr->sh_link = dynsymhdr->sh_link;
break;
}
}
}
}
break;
case SHT_SYMTAB: /* A symbol table */
if (elf_onesymtab (abfd) == shindex)
return true;