[PATCH] Add -fgnu-retain/-fno-gnu-retain

Jozef Lawrynowicz jozef.l@mittosystems.com
Thu Feb 18 15:10:37 GMT 2021


On Thu, Feb 18, 2021 at 03:38:46PM +0100, Jakub Jelinek via Gcc-patches wrote:
> On Thu, Feb 18, 2021 at 02:22:35PM +0000, Jozef Lawrynowicz wrote:
> > I think it is a enhancement, and true to the spirit of the attribute,
> > for "used" to save a symbol from linker garbage collection.
> > 
> > Why should "used" mean:
> >   Save this symbol from compiler optimization, but allow the linker to
> >   remove it.
> > 
> > I can't currently think of a use case where a "used" symbol should be
> > kept by the compiler but removed by the linker.
> > 
> > Often we see KEEP directives in linker scripts accompanying
> > "used" in the source code. libgcc/crtstuff.c is a good example. GNU
> > linker scripts need many specific KEEP directives to handle all the
> > "used" symbols.
> > 
> > If a developer marks a symbol as "used" in the source code, I think the
> > intuitive thing is for that symbol to be present in the linked output
> > file.
> 
> There are many reasons why a symbol is marked "used", one of the very often
> seen ones is e.g. that the symbol is referenced from inline asm.
> You don't need to guard such symbols against GC.

I suppose, for the cases where you cannot use extended ASM and therefore
cannot specify the symbol as an operand to the asm statement. I wonder
if that really could not be worked around though, since it would only be
required for statics, and if it would even have a negative impact in
practice.

I am just conflicted because when I first proposed this new
functionality, (as a separate "retain" attribute in fact), the feedback
from a few different people was that it would be better to leverage
"used" instead of creating a separate attribute. It seemed like a good
idea to me.

At this point, a separate "retain" attribute seems like an OK
compromise.

Thanks,
Jozef


More information about the Binutils mailing list