kronos icon indicating copy to clipboard operation
kronos copied to clipboard

[Bug report] Processor does not throw an exception when writing to a non-existent CSR

Open flaviens opened this issue 1 year ago • 0 comments

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:

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

flaviens avatar Apr 30 '23 10:04 flaviens