From e9cc29547026456d517bc5fc4ed7763b1e571a5a Mon Sep 17 00:00:00 2001 From: vhaudiquet Date: Fri, 3 Nov 2023 16:35:08 +0100 Subject: [PATCH] Fixed tests using sbi shutdown --- src/devices/sbi/sbi.c | 2 +- tests/Makefile | 2 +- tests/addi.s | 4 +++- tests/beq.s | 10 ++++++---- tests/blt.s | 10 ++++++---- tests/exit_return.s | 4 ++++ tests/jal.s | 8 +++++--- tests/jalr.s | 14 ++++++++------ tests/mv.s | 4 +++- tests/swlw.s | 8 +++++--- 10 files changed, 42 insertions(+), 24 deletions(-) create mode 100644 tests/exit_return.s diff --git a/src/devices/sbi/sbi.c b/src/devices/sbi/sbi.c index 04cb57d..37485e3 100644 --- a/src/devices/sbi/sbi.c +++ b/src/devices/sbi/sbi.c @@ -75,7 +75,7 @@ void sbi_call(rv32_cpu_t* cpu, uint32_t extension_id, uint32_t func_id) case SBI_EXTENSION_LEGACY_SHUTDOWN: { printf("sbi_call: shutdown, goodbye !\n"); - cpu->sim_ticks_left = 1; + exit(cpu->regs.a0); break; } default: diff --git a/tests/Makefile b/tests/Makefile index 552ee30..54adfbc 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -2,7 +2,7 @@ AS=riscv32-elf-as LD=riscv32-elf-ld BUILD_DIR=../build/tests/ -S_FILES := $(shell find ./ -name '*.s') +S_FILES := $(shell find ./ -name '*.s' -not -name 'exit_return.s') NAMES = $(basename $(S_FILES)) OBJECTS=$(patsubst %, $(BUILD_DIR)/%, $(NAMES)) diff --git a/tests/addi.s b/tests/addi.s index 6d852f1..7e9410c 100644 --- a/tests/addi.s +++ b/tests/addi.s @@ -1,4 +1,6 @@ +.include "exit_return.s" + .global _start _start: addi a0, zero, 0xBA - ebreak + exret diff --git a/tests/beq.s b/tests/beq.s index 4cb9287..18ac5ca 100644 --- a/tests/beq.s +++ b/tests/beq.s @@ -1,3 +1,5 @@ +.include "exit_return.s" + .global _start _start: # Set base value of a0 to 'test failed' @@ -14,18 +16,18 @@ _start: beq t0, t1, eq1 # On failure, return - ebreak + exret eqNeg: # All passed addi a0, zero, 0 - ebreak + exret eq0: # Inequality failed - ebreak + exret eq1: # Equality passed ; now try to test a negative offset case beq t0, t1, eqNeg - ebreak + exret diff --git a/tests/blt.s b/tests/blt.s index 94ed4af..76f4b89 100644 --- a/tests/blt.s +++ b/tests/blt.s @@ -1,3 +1,5 @@ +.include "exit_return.s" + .global _start _start: # Set base value of a0 to 'test failed' @@ -12,20 +14,20 @@ _start: blt t0, t1, lt1 # On failure, return - ebreak + exret ltNeg: # All passed addi a0, zero, 0 - ebreak + exret lt0: # Inequality failed - ebreak + exret lt1: # Inequality passed ; now try with negative numbers addi t0, zero, -1 addi t1, zero, -2 blt t1, t0, ltNeg - ebreak + exret diff --git a/tests/exit_return.s b/tests/exit_return.s new file mode 100644 index 0000000..74845f9 --- /dev/null +++ b/tests/exit_return.s @@ -0,0 +1,4 @@ +.macro exret +addi a7, zero, 0x8 +ecall +.endm diff --git a/tests/jal.s b/tests/jal.s index 4d57401..b5229bd 100644 --- a/tests/jal.s +++ b/tests/jal.s @@ -1,3 +1,5 @@ +.include "exit_return.s" + .global _start _start: # Set base value of a0 to 'test failed' @@ -8,17 +10,17 @@ _start: addi t0, t0, 12 # Jump and link jal ra, fn0 - ebreak + exret fnNeg: # All good addi a0, zero, 0 - ebreak + exret fn0: # Check ra value with our t0 construct beq t0, ra, eq0 - ebreak + exret eq0: # Try to jump back to a negative offset diff --git a/tests/jalr.s b/tests/jalr.s index 8a7564f..bc145fe 100644 --- a/tests/jalr.s +++ b/tests/jalr.s @@ -1,3 +1,5 @@ +.include "exit_return.s" + .global _start _start: # Set base value of a0 to 'test failed' @@ -19,13 +21,13 @@ _start: # Jump far to test jalr with negative offset jal fnfar - ebreak + exret # just_after : address is 16 bytes after auipc just_after: # ra must still be the old address ret - ebreak + exret # fn0 : function that calls fn1 and returns fn0: @@ -42,18 +44,18 @@ fn0: addi sp, sp, 4 ret - ebreak + exret # fn1 : just return fn1: ret - ebreak + exret fnneg: addi a0, zero, 0 - ebreak + exret fnfar: auipc ra, 0 jalr -8(ra) - ebreak + exret diff --git a/tests/mv.s b/tests/mv.s index 07b207e..49a78a8 100644 --- a/tests/mv.s +++ b/tests/mv.s @@ -1,5 +1,7 @@ +.include "exit_return.s" + .global _start _start: addi a1, zero, 0xBA mv a0, a1 - ebreak + exret diff --git a/tests/swlw.s b/tests/swlw.s index 5b8f287..d396697 100644 --- a/tests/swlw.s +++ b/tests/swlw.s @@ -1,3 +1,5 @@ +.include "exit_return.s" + .global _start _start: # Set base value of a0 to 'test failed' @@ -16,12 +18,12 @@ _start: # Compare beq t0, t1, good - ebreak + exret good: beq t0, t2, xtragood - ebreak + exret xtragood: addi a0, zero, 0 - ebreak + exret