RFC: AVR interrupt handling issue
Ian Molton
gcc_help-ian@mnementh.co.uk
Sat Dec 18 17:47:37 GMT 2021
On 18/12/2021 16:31, Henri Cloetens wrote:
> Dear Sir,
>
> To customize the stack/unstacking, you need to modify the code of
> your backend port.
I can see that - but thats a very invasive thing to change solely for
the use of my project.
I'd prefer to make a more generic change to the backend (I already found
the location), but I dont want to base an entire project off a change
that has no hope of ever being merged into gcc, as would be the case if
I pushed my entire custom IRQ handling into gcc. Theres just no way.
I want to get gcc to either emit modifiable code that I can then
reassemble, or get gcc to understand how to insert custom
"pro-prologues" and "epi-epilogues", as I would have thought such
changes would have more chance of being accepted into the gcc codebase.
> I mean, the emitting of the stack/unstacking for the normal case (no
> interrupt, but function call), is in the backend part, NOT in the
> 'main' files, that are not intended to be modified. I would recommend
> you look there, and also in other backends, to find out how to do
> this.
I have, as I mentioned in my previous email.
I could modify gcc/config/avr/avr.c here (below), in order to generate
ISR prologues with some register saves omitted (the ones performed in my
own pro-prologue).
This would cause gcc to output trivially modifiable code, which could be
fed to a script that can insert the pro-prologue and epi-epilogue
assembler fragments.
/* Output function prologue. */
void
avr_expand_prologue (void)
{
HARD_REG_SET set;
HOST_WIDE_INT size;
size = get_frame_size() + avr_outgoing_args_size();
cfun->machine->stack_usage = 0;
/* Prologue: naked. */
if (cfun->machine->is_naked)
{
return;
}
/// MODIFY HERE
if (no-save-isr-prologue)
{
// FIXME Remove registers my custom prologue saves from the set
...
}
/// END MODIFICATION
avr_regs_to_save (&set);
if (cfun->machine->is_interrupt || cfun->machine->is_signal)
More information about the Gcc-help
mailing list