On Tue, May 5, 2026 at 8:16 PM Georg-Johann Lay <[email protected]> wrote:
>
> Am 05.05.26 um 19:05 schrieb Richard Biener:
> > On Tue, May 5, 2026 at 5:41 PM Georg-Johann Lay via Gcc <[email protected]> 
> > wrote:
> >>
> >> In the avr backend there is a static variable avr_no_call_main_p that
> >> is set in TARGET_INSERT_ATTRIBUTES and used in TARGET_ASM_FILE_END.
> >>
> >> This works as expected in non-LTO compilations, with LTO however,
> >> TARGET_INSERT_ATTRIBUTES runs in cc1[plus] but TARGET_ASM_FILE_END
> >> is run by lto1, hence the variable is not set as expected.
> >>
> >> What's the recommended way to handle such a situation?
> >
> > Without looking too closely I assume there's an actual attribute somewhere
> > (on the main function decl?).  Instead of using a global variable you'd
> > check for the presence of the attribute.  Now - the question is whether
> > the TARGET_ASM_FILE_END behavior is only required in the TU with
> > the main() definition?  In that case this should work.
>
> What works is to attach a new attribute to main when the conditions are
> right, then check for that attribute in, say,
> TARGET_DECLARE_FUNCTION_NAME and set a variable accordingly, and then
> check for that var in TARGET_ASM_FILE_END.

It's not technically required to be handled from TARGET_ASM_FILE_END,
correct?  It should work to emit the symbol from ASM_OUTPUT_FUNCTION_LABEL?
(not sure if there's sth more appropriate for 'before function' or
'after function')  You'd
at least have access to the functions decl there.

> What's a bit ugly is that it requires a new target attribute that's only
> for internal usage and should not to be set by the user.  Maybe not
> document it is okay then.

As Sam says, an attribute with a space cannot be used by users.  Like
"avr no_call_main".

But also see the PR iff the only way for the user to get the behavior
with -mno-call-main

>
> Is there some policy for such internal-use-only function attributes?
>
> Johann
>
> > I see you emit a special symbol conditional so what you can also do is
> > create that as a global variable in the symbol table and rely on the 
> > middle-end
> > to output it.
>

Reply via email to