* 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:
parent
9b4f1ba7ed
commit
797fc050a0
3 changed files with 40 additions and 18 deletions
|
@ -1,3 +1,10 @@
|
|||
2002-07-04 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* 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.
|
||||
|
||||
2002-07-02 Martin Schwidefsky <schwidefsky@de.ibm.com>
|
||||
|
||||
* elf64-s390.c (create_got_section): Set .got section alignment to
|
||||
|
|
34
bfd/elf.c
34
bfd/elf.c
|
@ -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;
|
||||
|
|
|
@ -1451,23 +1451,6 @@ elf_link_add_object_symbols (abfd, info)
|
|||
goto error_return;
|
||||
shlink = elf_elfsections (abfd)[elfsec]->sh_link;
|
||||
|
||||
{
|
||||
/* The shared libraries distributed with hpux11 have a bogus
|
||||
sh_link field for the ".dynamic" section. This code detects
|
||||
when SHLINK refers to a section that is not a string table
|
||||
and tries to find the string table for the ".dynsym" section
|
||||
instead. */
|
||||
Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[shlink];
|
||||
if (shdr->sh_type != SHT_STRTAB)
|
||||
{
|
||||
asection *ds = bfd_get_section_by_name (abfd, ".dynsym");
|
||||
int elfdsec = _bfd_elf_section_from_bfd_section (abfd, ds);
|
||||
if (elfdsec == -1)
|
||||
goto error_return;
|
||||
shlink = elf_elfsections (abfd)[elfdsec]->sh_link;
|
||||
}
|
||||
}
|
||||
|
||||
extdyn = dynbuf;
|
||||
extdynend = extdyn + s->_raw_size / sizeof (Elf_External_Dyn);
|
||||
rpath = 0;
|
||||
|
|
Loading…
Reference in a new issue