PR27259, SHF_LINK_ORDER self-link
This stops ld from endless looping on SHF_LINK_ORDER sh_link loops. bfd/ PR 27259 * elflink.c (_bfd_elf_gc_mark_extra_sections): Use linker_mark to prevent endless looping of linked-to sections. ld/ PR 27259 * ldelf.c (ldelf_before_place_orphans): Use linker_mark to prevent endless looping of linked-to sections.
This commit is contained in:
parent
2f985dd1ac
commit
def97fb945
4 changed files with 42 additions and 15 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2021-01-28 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
PR 27259
|
||||||
|
* elflink.c (_bfd_elf_gc_mark_extra_sections): Use linker_mark to
|
||||||
|
prevent endless looping of linked-to sections.
|
||||||
|
|
||||||
2020-12-17 Mihails Strasuns <mihails.strasuns@intel.com>
|
2020-12-17 Mihails Strasuns <mihails.strasuns@intel.com>
|
||||||
|
|
||||||
* bfd-elf.h (elfcore_write_file_note): New function.
|
* bfd-elf.h (elfcore_write_file_note): New function.
|
||||||
|
|
|
@ -13631,15 +13631,23 @@ _bfd_elf_gc_mark_extra_sections (struct bfd_link_info *info,
|
||||||
/* Since all sections, except for backend specific ones,
|
/* Since all sections, except for backend specific ones,
|
||||||
have been garbage collected, call mark_hook on this
|
have been garbage collected, call mark_hook on this
|
||||||
section if any of its linked-to sections is marked. */
|
section if any of its linked-to sections is marked. */
|
||||||
asection *linked_to_sec = elf_linked_to_section (isec);
|
asection *linked_to_sec;
|
||||||
for (; linked_to_sec != NULL;
|
for (linked_to_sec = elf_linked_to_section (isec);
|
||||||
|
linked_to_sec != NULL && !linked_to_sec->linker_mark;
|
||||||
linked_to_sec = elf_linked_to_section (linked_to_sec))
|
linked_to_sec = elf_linked_to_section (linked_to_sec))
|
||||||
|
{
|
||||||
if (linked_to_sec->gc_mark)
|
if (linked_to_sec->gc_mark)
|
||||||
{
|
{
|
||||||
if (!_bfd_elf_gc_mark (info, isec, mark_hook))
|
if (!_bfd_elf_gc_mark (info, isec, mark_hook))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
linked_to_sec->linker_mark = 1;
|
||||||
|
}
|
||||||
|
for (linked_to_sec = elf_linked_to_section (isec);
|
||||||
|
linked_to_sec != NULL && linked_to_sec->linker_mark;
|
||||||
|
linked_to_sec = elf_linked_to_section (linked_to_sec))
|
||||||
|
linked_to_sec->linker_mark = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!debug_frag_seen
|
if (!debug_frag_seen
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2021-01-28 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
PR 27259
|
||||||
|
* ldelf.c (ldelf_before_place_orphans): Use linker_mark to
|
||||||
|
prevent endless looping of linked-to sections.
|
||||||
|
|
||||||
2021-01-26 H.J. Lu <hongjiu.lu@intel.com>
|
2021-01-26 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* testsuite/ld-x86-64/bnd-plt-1.d: Fix a typo.
|
* testsuite/ld-x86-64/bnd-plt-1.d: Fix a typo.
|
||||||
|
|
|
@ -2188,14 +2188,21 @@ ldelf_before_place_orphans (void)
|
||||||
been discarded. */
|
been discarded. */
|
||||||
asection *linked_to_sec;
|
asection *linked_to_sec;
|
||||||
for (linked_to_sec = elf_linked_to_section (isec);
|
for (linked_to_sec = elf_linked_to_section (isec);
|
||||||
linked_to_sec != NULL;
|
linked_to_sec != NULL && !linked_to_sec->linker_mark;
|
||||||
linked_to_sec = elf_linked_to_section (linked_to_sec))
|
linked_to_sec = elf_linked_to_section (linked_to_sec))
|
||||||
|
{
|
||||||
if (discarded_section (linked_to_sec))
|
if (discarded_section (linked_to_sec))
|
||||||
{
|
{
|
||||||
isec->output_section = bfd_abs_section_ptr;
|
isec->output_section = bfd_abs_section_ptr;
|
||||||
isec->flags |= SEC_EXCLUDE;
|
isec->flags |= SEC_EXCLUDE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
linked_to_sec->linker_mark = 1;
|
||||||
|
}
|
||||||
|
for (linked_to_sec = elf_linked_to_section (isec);
|
||||||
|
linked_to_sec != NULL && linked_to_sec->linker_mark;
|
||||||
|
linked_to_sec = elf_linked_to_section (linked_to_sec))
|
||||||
|
linked_to_sec->linker_mark = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue