LLD: question about debug_info relocs with emit-relocs + gc-sections.


I have been looking in to what relocs are emitted when --emit-relcos and --gc-sections flags are set.
Seems like relocs sections for .debug_* are not emitted.
Looking into it the debug sections are marked live in MarkLive.cpp:MarkLive on first pass through all the inputSections, but their dependendSections are not marked as live.
It then goes to rest of the algorithm that handles some special sections, but mainly deals with sections based on defined symbols in symtab.

As the result when -gc-sections flag is set relocations for debug_* would not be in output. Is that intentional, or oversight?

Thank You

+Fangrui Song

Yeah, that sounds like a bug to me.

Thanks for the report! The bug can be generalized to all non-SHF_ALLOC
SHT_REL[A] (due to --emit-relocs) and SHF_LINK_ORDER.

⚙ D89841 [ELF] --gc-sections: retain dependent sections of non-SHF_ALLOC sections will fix it.