diff --git a/.github/workflows/emu.yml b/.github/workflows/emu.yml index 326ccff73b2c0af2d4c0eace27494b52764e4869..68f7c783bd7c1261abb6fa0d573f650a5c8d9ce5 100644 --- a/.github/workflows/emu.yml +++ b/.github/workflows/emu.yml @@ -36,7 +36,7 @@ jobs: t=${test%.c} echo $t make -C $CPU_TEST_DIR ALL=$t ARCH=riscv64-noop AM_HOME=$AM_HOME NEMU_HOME=$NEMU_HOME NOOP_HOME=$NOOP_HOME run 2>/dev/null | grep "HIT GOOD TRAP" - if [[ $? == 1 ]]; + if [[ $? != 0 ]]; then echo $t fail ret=1 diff --git a/debug/cputest.sh b/debug/cputest.sh index 5510d73acde11dc1fc7b94c3c5fdbb2104111d84..79e89a1edae647d155bf632f504187420014c09a 100755 --- a/debug/cputest.sh +++ b/debug/cputest.sh @@ -7,8 +7,8 @@ do t=${test%.c} echo -n -e "\x1b[0m $t: " make -C $TEST_HOME ARCH=riscv64-noop E=0 ALL=$t run 2>/dev/null | grep -E "HIT GOOD TRAP|IPC" - if [[ $? == 1 ]]; + if [[ $? != 0 ]]; then - echo -e "\x1b[31mfail" + echo -e "\x1b[31mfail: trap code $?" fi done diff --git a/src/test/csrc/emu.h b/src/test/csrc/emu.h index bb53c8871962f0bcbda1da407248ce7e4d47fa4e..60ec241a5ab7a9bcd6a07c6cf5c4d0ea93981bf3 100644 --- a/src/test/csrc/emu.h +++ b/src/test/csrc/emu.h @@ -40,9 +40,9 @@ class Emulator { enum { STATE_GOODTRAP = 0, - STATE_BADTRAP, - STATE_ABORT, - STATE_LIMIT_EXCEEDED, + STATE_BADTRAP = 1, + STATE_ABORT = 2, + STATE_LIMIT_EXCEEDED = 3, STATE_RUNNING = -1 }; @@ -74,4 +74,5 @@ public: uint64_t get_cycles() const { return cycles; } EmuArgs get_args() const { return args; } bool is_good_trap() { return trapCode == STATE_GOODTRAP; }; + int get_trapcode() { return trapCode; } }; diff --git a/src/test/csrc/main.cpp b/src/test/csrc/main.cpp index 1d9299ac96d2e053544d9f98eca46bf7f7eec416..a471c91f2dba3a4070a63836d0cdf11fd364148e 100644 --- a/src/test/csrc/main.cpp +++ b/src/test/csrc/main.cpp @@ -21,6 +21,7 @@ int main(int argc, const char** argv) { auto args = emu->get_args(); uint64_t cycles = emu->execute(args.max_cycles, args.max_instr); bool is_good_trap = emu->is_good_trap(); + int trapcode = emu->get_trapcode(); delete emu; extern uint32_t uptime(void); @@ -30,5 +31,6 @@ int main(int argc, const char** argv) { " (this will be different from cycleCnt if emu loads a snapshot)\n" ANSI_COLOR_RESET, args.seed, cycles); eprintf(ANSI_COLOR_BLUE "Host time spent: %dms\n" ANSI_COLOR_RESET, ms); - return !is_good_trap; + // return !is_good_trap; + return trapcode; } diff --git a/src/test/csrc/ram.h b/src/test/csrc/ram.h index c2d59f0864057885574b86ab2462cca0f7fccc47..342036085c1b7dc361f3291b7783ffe4dd37b2ec 100644 --- a/src/test/csrc/ram.h +++ b/src/test/csrc/ram.h @@ -4,6 +4,7 @@ #include "common.h" #define EMU_RAM_SIZE (256 * 1024 * 1024UL) +// #define EMU_RAM_SIZE (8 * 1024 * 1024 * 1024UL) void init_ram(const char *img); void ram_finish();