- 
                Notifications
    You must be signed in to change notification settings 
- Fork 21
Open
Description
After an ECALL instruction is issued and sets the SCAUSE exception flag, Rev continues to decode instructions after the ECALL. If an instruction decoding fails, the program does not complete correctly even if the ECALL were to exit the program or change the PC.
Decoding errors during the execution of an ECALL need to be deferred.
.global _start
.section .text
_start:
        li a0, 2
        li a7, 93   # exit
        ecall
RevCPU[cpu:RevCPU:0]: Initialization of RevCPUs complete.
RevCPU[cpu:clockTick:1000]: Cycle: 1
RevCPU[cpu:clockTick:2000]: Cycle: 2
RevCPU[cpu:FetchAndDecodeInst:2000]: Core 0; Hart 0; Thread 1; PC:InstPayload = 0x100b0:0x00200513
RevCPU[cpu:Render:2000]: Core 0; Hart 0; Thread 1; *I 0x100b0:00200513  + addi %rd, %rs1, $imm   0x0<-x0 x10<-0x2
RevCPU[cpu:clockTick:3000]: Cycle: 3
RevCPU[cpu:FetchAndDecodeInst:3000]: Core 0; Hart 0; Thread 1; PC:InstPayload = 0x100b4:0x05d00893
RevCPU[cpu:Render:3000]: Core 0; Hart 0; Thread 1; *I 0x100b4:05d00893    addi %rd, %rs1, $imm   0x0<-x0 x17<-0x5d
RevCPU[cpu:clockTick:4000]: Cycle: 4
RevCPU[cpu:FetchAndDecodeInst:4000]: Core 0; Hart 0; Thread 1; PC:InstPayload = 0x100b8:0x00000073
RevCPU[cpu:Render:4000]: Core 0; Hart 0; Thread 1; *I 0x100b8:00000073    ecall
RevCPU[cpu:clockTick:5000]: Cycle: 5
FATAL: RevCPU[cpu:FetchAndDecodeInst:5000]: Error: Core 0 failed to decode instruction at PC=0x100bc; Inst=0
$RVOBJDUMP -d simple_syscall.exe
simple_syscall.exe:     file format elf64-littleriscv
Disassembly of section .text:
00000000000100b0 <_start>:
   100b0:       00200513                li      a0,2
   100b4:       05d00893                li      a7,93
   100b8:       00000073                ecall
Adding a nop makes the ECALL work:
.global _start
.section .text
_start:
        li a0, 2
        li a7, 93
        ecall
        nop
ct-clmsn
Metadata
Metadata
Assignees
Labels
No labels