Guillaume D
Guillaume D

Reputation: 2346

is there any use of __attribute__ ((interrupt)) for riscv compilers?

we can read here that the interrupt attribute keyword is use for ARM, AVR, CR16, Epiphany, M32C, M32R/D, m68k, MeP, MIPS, RL78, RX and Xstormy16.

does it have any impact on riscv compilation using riscv32-***-elf-gcc compilers?

Upvotes: 1

Views: 1246

Answers (2)

Luis Colorado
Luis Colorado

Reputation: 12698

Normally, an interrupt handler requires a different entry/exit sequence than a normal function. The differences focus in the saving of all registers in the interrupt (normally, only some registers are preserved in a normal function call) and the return instruction is normally different (e.g. in the ARM it has to change processor mode of operation, probably this is also true in the RISCV processor)

The interrupt attribute informs the compiler of the routine properties, so it can generate the correct code for it.

Upvotes: 0

msaw328
msaw328

Reputation: 1569

There is a separate page for RISC-V which claims it works. You can find it here. Also you could probably verify it by compiling code with and without the attribute set.

I don't have riscv32 toolchain installed, but i managed to verify it using the riscv64 toolchain. You should reproduce the same steps using the riscv32 toolchain to make sure it works.

Using a simple test.c file:

__attribute__((interrupt))
void test() {}

Compiling it with riscv64-linux-gnu-gcc -c -o test.o test.c and disassembling with riscv64-linux-gnu-objdump -D -j.text test.o we can see it generates mret instruction at the end of the function:

   0:   1141                    addi    sp,sp,-16
   2:   e422                    sd  s0,8(sp)
   4:   0800                    addi    s0,sp,16
   6:   0001                    nop
   8:   6422                    ld  s0,8(sp)
   a:   0141                    addi    sp,sp,16
   c:   30200073                mret

After removing the interrupt attribute the instruction changes to regular ret. According to this SO answer this seems like correct behaviour.

Upvotes: 2

Related Questions