https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99618
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to H.J. Lu from comment #3) > This is what GCC generates: > > hjl@gnu-cfl-2 pr27590]$ cat bad.s > .section .gnu.debuglto_.debug_macro,"e",@progbits > .Ldebug_macro0: > .long .Ldebug_macro2 > .section .gnu.debuglto_.debug_macro,"eG",@progbits,wm4,comdat > .Ldebug_macro2: > .value 0x4 > [hjl@gnu-cfl-2 pr27590]$ gcc -c bad.s > [hjl@gnu-cfl-2 pr27590]$ ld -r bad.o bad.o > `.gnu.debuglto_.debug_macro' referenced in section > `.gnu.debuglto_.debug_macro' of bad.o: defined in discarded section > `.gnu.debuglto_.debug_macro[wm4]' of bad.o > [hjl@gnu-cfl-2 pr27590]$ what's wrong with it? All sections are marked as to be Excluded, that the excluded sections reference each other should be irrelevant? I suppose that one s comdat confuses the linker?