Add the start of a test harness binary

This commit is contained in:
Wesley Moore 2025-03-04 21:57:01 +10:00
parent 63e79b8bb6
commit 51ee97064b
No known key found for this signature in database
2 changed files with 60 additions and 0 deletions

View file

@ -57,6 +57,9 @@ tests/btohex.elf: mem.o hex.o debug.o tests/btohex.o
tests/tohex.elf: hex.o tests/tohex.o
$(LD) -m elf32lriscv -T link.ld $^ -o $@
tests/harness.elf: tests/harness.o
$(LD) -m elf32lriscv -T link.ld $^ -o $@
%.o : %.s
$(AS) $(ASFLAGS) $< -o $@

57
tests/harness.s Normal file
View file

@ -0,0 +1,57 @@
# Unit tests harness
# Read suite name from stdin, then run that suite
.org 0
# Provide program starting address to linker
.global _start
# .extern fmt_decimal
/* newlib system calls */
.set SYSEXIT, 93
.set SYSREAD, 63
.set SYSWRITE, 64
.section .rodata
inputs:
.word 0, 1, 2, 3, 9, 10, 100, 0x80000000
inputs_end:
.section .bss
buf: .skip 11
inbuf: .skip 80
.text
_start:
la a0, inbuf
li a1, 80
jal read
mv a2, a0 # move bytes read to a2
li t0, SYSWRITE # "write" syscall
li a0, 1 # 1 = standard output (stdout)
la a1, inbuf # load address of buffer
ecall # invoke syscall to print the string
li t0, SYSEXIT # "exit" syscall
la a0, 0 # Use 0 return code
ecall # invoke syscall to terminate the program
# Read from stdin
# arguments:
# a0: address of buffer to read into
# a1: number of bytes to read
# return:
# a0: count of bytes read, or error if < 0
read:
li t0, SYSREAD # "read" syscall
mv a2, a1 # bytes to read
mv a1, a0 # buffer address
li a0, 0 # 0 = standard input (stdin)
ecall # invoke syscall
ret