mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-19 17:18:24 +08:00
* 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:
@ -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>
|
2002-07-02 Martin Schwidefsky <schwidefsky@de.ibm.com>
|
||||||
|
|
||||||
* elf64-s390.c (create_got_section): Set .got section alignment to
|
* 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;
|
return true;
|
||||||
|
|
||||||
case SHT_PROGBITS: /* Normal section with contents. */
|
case SHT_PROGBITS: /* Normal section with contents. */
|
||||||
case SHT_DYNAMIC: /* Dynamic linking information. */
|
|
||||||
case SHT_NOBITS: /* .bss section. */
|
case SHT_NOBITS: /* .bss section. */
|
||||||
case SHT_HASH: /* .hash section. */
|
case SHT_HASH: /* .hash section. */
|
||||||
case SHT_NOTE: /* .note section. */
|
case SHT_NOTE: /* .note section. */
|
||||||
@ -1670,6 +1669,39 @@ bfd_section_from_shdr (abfd, shindex)
|
|||||||
case SHT_PREINIT_ARRAY: /* .preinit_array section. */
|
case SHT_PREINIT_ARRAY: /* .preinit_array section. */
|
||||||
return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
|
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 */
|
case SHT_SYMTAB: /* A symbol table */
|
||||||
if (elf_onesymtab (abfd) == shindex)
|
if (elf_onesymtab (abfd) == shindex)
|
||||||
return true;
|
return true;
|
||||||
|
@ -1451,23 +1451,6 @@ elf_link_add_object_symbols (abfd, info)
|
|||||||
goto error_return;
|
goto error_return;
|
||||||
shlink = elf_elfsections (abfd)[elfsec]->sh_link;
|
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;
|
extdyn = dynbuf;
|
||||||
extdynend = extdyn + s->_raw_size / sizeof (Elf_External_Dyn);
|
extdynend = extdyn + s->_raw_size / sizeof (Elf_External_Dyn);
|
||||||
rpath = 0;
|
rpath = 0;
|
||||||
|
Reference in New Issue
Block a user