You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I've detected a bug in Kronos, which complements #7 .
Brief bug description
Writing non-existent CSR does not raise an illegal instruction exception.
The RISC-V specification says:
Attempts to access a non-existent CSR raise an illegal instruction exception.
Example snippet
Here is an example snippet, given that, as specified by the RISC-V specification:
In systems without S-mode, the medeleg and mideleg registers should not exist.
In the snippet below, the program should take the exception, store 1 into address 0x0 and then take infinite_loop1.
Instead, it hangs after fetching 4 instructions after the CSR instruction.
Remark that the nops here matter, because the CPU does not immediately hang.
.section ".text.init","ax",@progbits
.globl _start
.align 2
_start:
la a0, 0x0
la t1, .trap_handler
csrrw zero, mtvec, t1
csrw medeleg, zero
nop
li t0, 0
sw t0, (a0)
infinite_loop0:
j infinite_loop0
.section ".trap_handler","ax",@progbits
trap_handler:
li t0, 1
sw t0, (a0)
infinite_loop1:
j infinite_loop1
Thanks!
Flavien
The text was updated successfully, but these errors were encountered:
Hi there!
I've detected a bug in Kronos, which complements #7 .
Brief bug description
Writing non-existent CSR does not raise an illegal instruction exception.
The RISC-V specification says:
Example snippet
Here is an example snippet, given that, as specified by the RISC-V specification:
In the snippet below, the program should take the exception, store 1 into address 0x0 and then take infinite_loop1.
Instead, it hangs after fetching 4 instructions after the CSR instruction.
Remark that the nops here matter, because the CPU does not immediately hang.
Thanks!
Flavien
The text was updated successfully, but these errors were encountered: