Add a regression test to verify that MEPC properly masks the lower bits when an address with mode bits is written to it, as required by the RISC-V Privileged Architecture specification. The test sets STVEC to an address with bit 0 set (vectored mode), triggers an illegal instruction exception, copies STVEC to MEPC in the trap handler, and verifies that MEPC masks bits [1:0] correctly for IALIGN=32. Without the fix, MEPC retains the mode bits (returns non-zero/FAIL). With the fix, MEPC clears bits [1:0] (returns 0/PASS). Signed-off-by: Charalampos Mitrodimas <charmitro@posteo.net> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Message-ID: <20250703182157.281320-3-charmitro@posteo.net> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
28 lines
655 B
Text
28 lines
655 B
Text
#
|
|
# RISC-V system tests
|
|
#
|
|
|
|
TEST_SRC = $(SRC_PATH)/tests/tcg/riscv64
|
|
VPATH += $(TEST_SRC)
|
|
|
|
LINK_SCRIPT = $(TEST_SRC)/semihost.ld
|
|
LDFLAGS = -T $(LINK_SCRIPT)
|
|
CFLAGS += -g -Og
|
|
|
|
%.o: %.S
|
|
$(CC) $(CFLAGS) $< -Wa,--noexecstack -c -o $@
|
|
%: %.o $(LINK_SCRIPT)
|
|
$(LD) $(LDFLAGS) $< -o $@
|
|
|
|
QEMU_OPTS += -M virt -display none -semihosting -device loader,file=
|
|
|
|
EXTRA_RUNS += run-issue1060
|
|
run-issue1060: issue1060
|
|
$(call run-test, $<, $(QEMU) $(QEMU_OPTS)$<)
|
|
|
|
EXTRA_RUNS += run-test-mepc-masking
|
|
run-test-mepc-masking: test-mepc-masking
|
|
$(call run-test, $<, $(QEMU) $(QEMU_OPTS)$<)
|
|
|
|
# We don't currently support the multiarch system tests
|
|
undefine MULTIARCH_TESTS
|