Skip to content

Commit d518013

Browse files
Merge pull request riscv#528 from Alasdair/step_delimit_trace
Add an option to delimit instructions in the trace
2 parents e199a2e + 461c275 commit d518013

8 files changed

+33
-2
lines changed

c_emulator/riscv_config.h

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include <stdbool.h>
33

44
extern bool config_print_instr;
5+
extern bool config_print_step;
56
extern bool config_print_reg;
67
extern bool config_print_mem_access;
78
extern bool config_print_platform;

c_emulator/riscv_prelude.c

+7
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ unit print_instr(sail_string s)
1515
return UNIT;
1616
}
1717

18+
unit print_step(unit u)
19+
{
20+
if (config_print_step)
21+
fprintf(trace_log, "\n");
22+
return UNIT;
23+
}
24+
1825
unit print_reg(sail_string s)
1926
{
2027
if (config_print_reg)

c_emulator/riscv_prelude.h

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
unit print_string(sail_string prefix, sail_string msg);
77

88
unit print_instr(sail_string s);
9+
unit print_step(unit u);
910
unit print_reg(sail_string s);
1011
unit print_mem_access(sail_string s);
1112
unit print_platform(sail_string s);

c_emulator/riscv_sim.c

+8-2
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ bool config_print_reg = true;
9292
bool config_print_mem_access = true;
9393
bool config_print_platform = true;
9494
bool config_print_rvfi = false;
95+
bool config_print_step = false;
9596

9697
void set_config_print(char *var, bool val)
9798
{
@@ -111,9 +112,11 @@ void set_config_print(char *var, bool val)
111112
config_print_rvfi = val;
112113
} else if (strcmp("platform", var) == 0) {
113114
config_print_platform = val;
115+
} else if (strcmp("step", var) == 0) {
116+
config_print_step = val;
114117
} else {
115-
fprintf(stderr, "Unknown trace category: '%s' (should be %s)\n",
116-
"instr|reg|mem|platform|all", var);
118+
fprintf(stderr, "Unknown trace category: '%s' (should be %s)\n", var,
119+
"instr|reg|mem|rvfi|platform|step|all");
117120
exit(1);
118121
}
119122
}
@@ -1027,6 +1030,9 @@ void run_sail(void)
10271030
KILL(sail_int)(&sail_step);
10281031
}
10291032
if (stepped) {
1033+
if (config_print_step) {
1034+
fprintf(trace_log, "\n");
1035+
}
10301036
step_no++;
10311037
insn_cnt++;
10321038
total_insns++;

model/prelude.sail

+4
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ val print_reg = {ocaml: "Platform.print_reg", interpreter: "print_endline",
7575
val print_mem = {ocaml: "Platform.print_mem_access", interpreter: "print_endline", c: "print_mem_access", lem: "print_dbg", _: "print_endline"} : string -> unit
7676
val print_platform = {ocaml: "Platform.print_platform", interpreter: "print_endline", c: "print_platform", lem: "print_dbg", _: "print_endline"} : string -> unit
7777

78+
val print_step = {ocaml: "Platform.print_step", c: "print_step"} : unit -> unit
79+
80+
function print_step() = ()
81+
7882
val get_config_print_instr = {ocaml: "Platform.get_config_print_instr", c:"get_config_print_instr"} : unit -> bool
7983
val get_config_print_reg = {ocaml: "Platform.get_config_print_reg", c:"get_config_print_reg"} : unit -> bool
8084
val get_config_print_mem = {ocaml: "Platform.get_config_print_mem", c:"get_config_print_mem"} : unit -> bool

model/riscv_step.sail

+3
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ function loop () : unit -> unit = {
9999
let stepped = step(step_no);
100100
if stepped then {
101101
step_no = step_no + 1;
102+
if get_config_print_instr() then {
103+
print_step()
104+
};
102105
sail_end_cycle()
103106
};
104107

ocaml_emulator/platform.ml

+6
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ let platform_arch = ref P.RV64
2828
(* logging *)
2929

3030
let config_print_instr = ref true
31+
let config_print_step = ref false
3132
let config_print_reg = ref true
3233
let config_print_mem_access = ref true
3334
let config_print_platform = ref true
@@ -37,6 +38,11 @@ let print_instr s =
3738
then print_endline s
3839
else ()
3940

41+
let print_step () =
42+
if !config_print_step
43+
then print_endline ""
44+
else ()
45+
4046
let print_reg s =
4147
if !config_print_reg
4248
then print_endline s

ocaml_emulator/riscv_ocaml_sim.ml

+3
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@ let options = Arg.align ([("-dump-dts",
9595
("-signature-granularity",
9696
Arg.Int set_signature_granularity,
9797
" test signature granularity (in bytes)");
98+
("-trace-delimit-step",
99+
Arg.Set P.config_print_step,
100+
" delimit instructions in the trace output");
98101
("-isa",
99102
Arg.String (fun s -> opt_isa := Some s),
100103
" requested isa");

0 commit comments

Comments
 (0)