[superh-gnu-discuss] SH interrupt_handler function attribute register saving
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[superh-gnu-discuss] SH interrupt_handler function attribute register saving



Hi all,
I am currently implementing some interrupt routines for a SH2A device.

The interrupt function is defined like this:
void __attribute__ ((interrupt_handler)) INT_CMT1_CMI1(void)
{
    //do something
}

Unfortunately the programm crashes after the first interrupt. When looking
into the generated function entry/exit code by gcc, I noticed a mismatch
between the saved and rescued registers from stack:

00002180 2F06              MOV.L     R0,@-R15
00002182 2F16              MOV.L     R1,@-R15
00002184 2F26              MOV.L     R2,@-R15
00002186 2F36              MOV.L     R3,@-R15
....
000021A4 67F6              MOV.L     @R15+,R7
000021A6 66F6              MOV.L     @R15+,R6
000021A8 65F6              MOV.L     @R15+,R5
000021AA 64F6              MOV.L     @R15+,R4
000021AC 002B              RTE
000021AE 0009              NOP


Now, several questions arise:
Is this a bug? Did I do something wrong? Is there any way around (except
writing the routine in assembler by hand...)?

--
Best regards
Benjamin Heyne