aboutsummaryrefslogtreecommitdiff
path: root/c_emulator
diff options
context:
space:
mode:
authorPrashanth Mundkur <prashanth.mundkur@gmail.com>2019-06-26 12:59:30 -0700
committerPrashanth Mundkur <prashanth.mundkur@gmail.com>2019-06-26 12:59:30 -0700
commit895ab9b3ba2398feb5cf21abdda2dc890ffe4845 (patch)
tree4457a09a13c460e3cd1c39d46d7ba97b0d880680 /c_emulator
parent33f1ad127a866b7caa4fb3eb0d2cd2985b60ac01 (diff)
parent57694dc5a53d84a0d9299b59c45676eacf121bc7 (diff)
downloadsail-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.c20
-rw-r--r--c_emulator/riscv_prelude.h5
-rw-r--r--c_emulator/riscv_sim.c40
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