mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-20 09:58:19 +08:00
Set sh_link for reloc sections created as normal sections
binutils-all/strip-13 and binutils-all/strip-14 tests create SHT_REL/SHT_RELA sections by hand. These don't have sh_link set to the .symtab section as they should, leading to readelf warnings if you happen to be looking at the object files. * elf.c (assign_section_numbers): Formatting. Set sh_link for reloc sections created as normal sections in relocatable objects.
This commit is contained in:
14
bfd/elf.c
14
bfd/elf.c
@ -3935,11 +3935,17 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
|
|||||||
section. sh_link is the section index of the symbol
|
section. sh_link is the section index of the symbol
|
||||||
table. sh_info is the section index of the section to
|
table. sh_info is the section index of the section to
|
||||||
which the relocation entries apply. We assume that an
|
which the relocation entries apply. We assume that an
|
||||||
allocated reloc section uses the dynamic symbol table.
|
allocated reloc section uses the dynamic symbol table
|
||||||
FIXME: How can we be sure? */
|
if there is one. Otherwise we guess the normal symbol
|
||||||
|
table. FIXME: How can we be sure? */
|
||||||
|
if (d->this_hdr.sh_link == 0 && (sec->flags & SEC_ALLOC) != 0)
|
||||||
|
{
|
||||||
s = bfd_get_section_by_name (abfd, ".dynsym");
|
s = bfd_get_section_by_name (abfd, ".dynsym");
|
||||||
if (s != NULL)
|
if (s != NULL)
|
||||||
d->this_hdr.sh_link = elf_section_data (s)->this_idx;
|
d->this_hdr.sh_link = elf_section_data (s)->this_idx;
|
||||||
|
}
|
||||||
|
if (d->this_hdr.sh_link == 0)
|
||||||
|
d->this_hdr.sh_link = elf_onesymtab (abfd);
|
||||||
|
|
||||||
s = elf_get_reloc_section (sec);
|
s = elf_get_reloc_section (sec);
|
||||||
if (s != NULL)
|
if (s != NULL)
|
||||||
@ -3994,8 +4000,8 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
|
|||||||
/* sh_link is the section header index of the prelink library
|
/* sh_link is the section header index of the prelink library
|
||||||
list used for the dynamic entries, or the symbol table, or
|
list used for the dynamic entries, or the symbol table, or
|
||||||
the version strings. */
|
the version strings. */
|
||||||
s = bfd_get_section_by_name (abfd, (sec->flags & SEC_ALLOC)
|
s = bfd_get_section_by_name (abfd, ((sec->flags & SEC_ALLOC)
|
||||||
? ".dynstr" : ".gnu.libstr");
|
? ".dynstr" : ".gnu.libstr"));
|
||||||
if (s != NULL)
|
if (s != NULL)
|
||||||
d->this_hdr.sh_link = elf_section_data (s)->this_idx;
|
d->this_hdr.sh_link = elf_section_data (s)->this_idx;
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user