https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81968
--- Comment #14 from Richard Biener <rguenth at gcc dot gnu.org> ---
Thanks for the detailed analysis. Indeed
/* Mark sections as preserved that are required by to be preserved
sections. */
for (i = 1; i < shnum; ++i)
{
...
if (sh_type == SHT_SYMTAB)
{
/* Mark strings sections of copied symtabs. */
if (pfnret[i - 1] == 0)
pfnret[sh_link - 1] = 0;
}
}
so it conditionally preserves sh_link of SHT_SYMTAB.
I think we need to iterate this loop. And maybe always preserve the symtab
since we keep exported symbols of preserved sections, we're currently lucky
here because .debug_info always contains a relocation to .debug_abbrev.
Probably good enough...