mirror of
https://github.com/PiMaker/rvc.git
synced 2024-11-10 06:00:07 +00:00
fix riscv-tests and add flag for exit call
This commit is contained in:
parent
cb6d05178b
commit
30bd88dbbf
14
src/emu.h
14
src/emu.h
@ -10,6 +10,8 @@
|
||||
#include "trap.h"
|
||||
#include "csr.h"
|
||||
|
||||
static bool allow_ecall_exit = false;
|
||||
|
||||
#define AS_SIGNED(val) (*(int32_t*)&val)
|
||||
#define AS_UNSIGNED(val) (*(uint*)&val)
|
||||
const uint ZERO = 0;
|
||||
@ -203,12 +205,12 @@ DEF(ebreak, FormatEmpty, { // system
|
||||
SINGLE_STEP=1;
|
||||
})
|
||||
DEF(ecall, FormatEmpty, { // system
|
||||
/* if (cpu->xreg[17] == 93) { */
|
||||
/* // EXIT CALL */
|
||||
/* uint status = cpu->xreg[10] >> 1; */
|
||||
/* printf("ecall EXIT = %d (0x%x)\n", status, status); */
|
||||
/* exit(status); */
|
||||
/* } */
|
||||
if (allow_ecall_exit && cpu->xreg[17] == 93) {
|
||||
// EXIT CALL
|
||||
uint status = cpu->xreg[10] >> 1;
|
||||
printf("ecall EXIT = %d (0x%x)\n", status, status);
|
||||
exit(status);
|
||||
}
|
||||
|
||||
ret->trap.en = true;
|
||||
ret->trap.value = cpu->pc;
|
||||
|
19
src/main.c
19
src/main.c
@ -58,7 +58,7 @@ uint8_t* get_mmap_ptr(const char* filename) {
|
||||
}
|
||||
|
||||
void usage() {
|
||||
printf("Usage: rvc (-e <ELF binary>|-b <raw binary>) [-d <device tree binary>] [-i <initramfs>] [-v (0|1|2|3|4)] [-s] [-t]\n");
|
||||
printf("Usage: rvc (-e <ELF binary>|-b <raw binary>) [-d <device tree binary>] [-i <initramfs>] [-v (0|1|2|3|4)] [-s] [-t] [-x]\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
@ -92,9 +92,12 @@ int main(int argc, char *argv[]) {
|
||||
int c;
|
||||
bool trace = false;
|
||||
|
||||
while ((c = getopt (argc, argv, "e:b:d:v:i:st")) != -1) {
|
||||
while ((c = getopt (argc, argv, "e:b:d:v:i:stx")) != -1) {
|
||||
switch (c)
|
||||
{
|
||||
case 'x':
|
||||
allow_ecall_exit = true;
|
||||
break;
|
||||
case 'e':
|
||||
elf = optarg;
|
||||
break;
|
||||
@ -163,7 +166,7 @@ int main(int argc, char *argv[]) {
|
||||
setvbuf(stdin, NULL, _IONBF, 0);
|
||||
buf_off();
|
||||
|
||||
// LIMITER
|
||||
// LIMITER (set to high number to ignore)
|
||||
const unsigned long restr = 200000*1000;
|
||||
unsigned long cur = 0;
|
||||
unsigned long t = time(NULL);
|
||||
@ -204,13 +207,13 @@ int main(int argc, char *argv[]) {
|
||||
/* printf("else if (cpu.clock == %d && arb != 0x%08x) ARB_FAIL\n", cpu.clock, arb_f); */
|
||||
/* } */
|
||||
|
||||
if (cpu.pc == 0x80000118) {
|
||||
/* if (cpu.pc == 0x80000118) { */
|
||||
/* if (cpu.clock == 6350505) { // divergence: 6350908 */
|
||||
/* if (cpu.clock == 6400000) { */
|
||||
printf("BREAKPOINT HIT\n");
|
||||
SINGLE_STEP = 1;
|
||||
VERBOSE = 4;
|
||||
}
|
||||
/* printf("BREAKPOINT HIT\n"); */
|
||||
/* SINGLE_STEP = 1; */
|
||||
/* VERBOSE = 4; */
|
||||
/* } */
|
||||
|
||||
if (VERBOSE >= 4)
|
||||
cpu_dump(&cpu);
|
||||
|
4
test.sh
4
test.sh
@ -19,8 +19,8 @@ function run_test {
|
||||
|
||||
popd
|
||||
|
||||
echo "Running: ./rvc -e \"./riscv-tests/isa/$1\" -v 1"
|
||||
timeout 5s ./rvc -e "./riscv-tests/isa/$1" -v 1
|
||||
echo "Running: ./rvc -x -e \"./riscv-tests/isa/$1\" -v 1"
|
||||
./rvc -x -e "./riscv-tests/isa/$1" -v 1
|
||||
|
||||
if [ $? -gt 0 ]; then
|
||||
echo "Test failed!"
|
||||
|
Loading…
Reference in New Issue
Block a user