From 20e29382fd8835fc5fb13ad0e501e52f53f2932d Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Thu, 2 Sep 1999 23:44:54 +0000 Subject: [PATCH] * elflink.h (elf_link_add_object_symbols): Work around bogus SH_LINK field in hpux11 shared libraries. --- bfd/ChangeLog | 5 +++++ bfd/elflink.h | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index c23850f53a..f45eafc8f7 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +Thu Sep 2 17:41:20 1999 Jeffrey A Law (law@cygnus.com) + + * elflink.h (elf_link_add_object_symbols): Work around bogus SH_LINK + field in hpux11 shared libraries. + 1999-09-02 Nick Clifton * elflink.h (elf_gc_record_vtentry): Fix memory leak. diff --git a/bfd/elflink.h b/bfd/elflink.h index 35bf885d82..b7b5b23998 100644 --- a/bfd/elflink.h +++ b/bfd/elflink.h @@ -954,6 +954,23 @@ elf_link_add_object_symbols (abfd, info) goto error_return; link = 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 LINK 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 *hdr = elf_elfsections (abfd)[link]; + if (hdr->sh_type != SHT_STRTAB) + { + asection *s = bfd_get_section_by_name (abfd, ".dynsym"); + int elfsec = _bfd_elf_section_from_bfd_section (abfd, s); + if (elfsec == -1) + goto error_return; + link = elf_elfsections (abfd)[elfsec]->sh_link; + } + } + extdyn = dynbuf; extdynend = extdyn + s->_raw_size / sizeof (Elf_External_Dyn); for (; extdyn < extdynend; extdyn++) -- 2.34.1