[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