diff options
author | Prashanth Mundkur <prashanth.mundkur@gmail.com> | 2019-06-26 12:59:30 -0700 |
---|---|---|
committer | Prashanth Mundkur <prashanth.mundkur@gmail.com> | 2019-06-26 12:59:30 -0700 |
commit | 895ab9b3ba2398feb5cf21abdda2dc890ffe4845 (patch) | |
tree | 4457a09a13c460e3cd1c39d46d7ba97b0d880680 /c_emulator | |
parent | 33f1ad127a866b7caa4fb3eb0d2cd2985b60ac01 (diff) | |
parent | 57694dc5a53d84a0d9299b59c45676eacf121bc7 (diff) | |
download | sail-riscv-895ab9b3ba2398feb5cf21abdda2dc890ffe4845.zip sail-riscv-895ab9b3ba2398feb5cf21abdda2dc890ffe4845.tar.gz sail-riscv-895ab9b3ba2398feb5cf21abdda2dc890ffe4845.tar.bz2 |
Merge branch 'master-cleanup' into pmp
Diffstat (limited to 'c_emulator')
-rw-r--r-- | c_emulator/riscv_prelude.c | 20 | ||||
-rw-r--r-- | c_emulator/riscv_prelude.h | 5 | ||||
-rw-r--r-- | c_emulator/riscv_sim.c | 40 |
3 files changed, 60 insertions, 5 deletions
diff --git a/c_emulator/riscv_prelude.c b/c_emulator/riscv_prelude.c index 1621913..92f8415 100644 --- a/c_emulator/riscv_prelude.c +++ b/c_emulator/riscv_prelude.c @@ -30,3 +30,23 @@ unit print_platform(sail_string s) if (config_print_platform) printf("%s\n", s); return UNIT; } + +bool get_config_print_instr(unit u) +{ + return (config_print_instr) ? true : false; +} + +bool get_config_print_reg(unit u) +{ + return (config_print_reg) ? true : false; +} + +bool get_config_print_mem(unit u) +{ + return (config_print_mem_access) ? true : false; +} + +bool get_config_print_platform(unit u) +{ + return (config_print_platform) ? true : false; +} diff --git a/c_emulator/riscv_prelude.h b/c_emulator/riscv_prelude.h index a296c7e..da292fe 100644 --- a/c_emulator/riscv_prelude.h +++ b/c_emulator/riscv_prelude.h @@ -8,3 +8,8 @@ unit print_instr(sail_string s); unit print_reg(sail_string s); unit print_mem_access(sail_string s); unit print_platform(sail_string s); + +bool get_config_print_instr(unit u); +bool get_config_print_reg(unit u); +bool get_config_print_mem(unit u); +bool get_config_print_platform(unit u); diff --git a/c_emulator/riscv_sim.c b/c_emulator/riscv_sim.c index af0df02..12c82ce 100644 --- a/c_emulator/riscv_sim.c +++ b/c_emulator/riscv_sim.c @@ -69,6 +69,26 @@ bool config_print_reg = true; bool config_print_mem_access = true; bool config_print_platform = true; +void set_config_print(char *var, bool val) { + if (strcmp("instr", optarg) == 0) { + config_print_instr = val; + } else if (strcmp("reg", optarg) == 0) { + config_print_reg = val; + } else if (strcmp("mem", optarg) == 0) { + config_print_mem_access = val; + } else if (strcmp("platform", optarg) == 0) { + config_print_platform = val; + } else if (strcmp("all", optarg) == 0) { + config_print_instr = val; + config_print_mem_access = val; + config_print_reg = val; + config_print_platform = val; + } else { + fprintf(stderr, "Unknown trace category: %s (should be instr|reg|mem|platform|all)\n", var); + exit(1); + } +} + struct timeval init_start, init_end, run_end; int total_insns = 0; @@ -89,6 +109,8 @@ static struct option options[] = { {"rvfi-dii", required_argument, 0, 'r'}, #endif {"help", no_argument, 0, 'h'}, + {"trace", required_argument, 0, 'v'}, + {"no-trace", required_argument, 0, 'V'}, {0, 0, 0, 0} }; @@ -172,7 +194,7 @@ char *process_args(int argc, char **argv) int c, idx = 1; uint64_t ram_size = 0; while(true) { - c = getopt_long(argc, argv, "admCIispz:b:t:v:hr:T:", options, &idx); + c = getopt_long(argc, argv, "admCIispz:b:t:v:hr:T:V:v:", options, &idx); if (c == -1) break; switch (c) { case 'a': @@ -241,6 +263,12 @@ char *process_args(int argc, char **argv) fprintf(stderr, "using %d as RVFI port.\n", rvfi_dii_port); break; #endif + case 'V': + set_config_print(optarg, false); + break; + case 'v': + set_config_print(optarg, true); + break; } } if (do_dump_dts) dump_dts(); @@ -582,10 +610,12 @@ int compare_states(struct tv_spike_t *s) void flush_logs(void) { - fprintf(stderr, "\n"); - fflush(stderr); - fprintf(stdout, "\n"); - fflush(stdout); + if(config_print_instr) { + fprintf(stderr, "\n"); + fflush(stderr); + fprintf(stdout, "\n"); + fflush(stdout); + } } #ifdef RVFI_DII |