Skip to content

Commit 2f948ab

Browse files
rmn30nwf-msr
authored andcommitted
Add a new 'exception' trace option that prints only on interrupts and exceptions.
1 parent 037c835 commit 2f948ab

File tree

6 files changed

+17
-3
lines changed

6 files changed

+17
-3
lines changed

c_emulator/riscv_config.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ extern bool config_print_instr;
55
extern bool config_print_reg;
66
extern bool config_print_mem_access;
77
extern bool config_print_platform;
8+
extern bool config_print_exception;

c_emulator/riscv_prelude.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,8 @@ bool get_config_print_platform(unit u)
5555
{
5656
return (config_print_platform) ? true : false;
5757
}
58+
59+
bool get_config_print_exception(unit u)
60+
{
61+
return (config_print_exception) ? true : false;
62+
}

c_emulator/riscv_prelude.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ unit print_instr(sail_string s);
99
unit print_reg(sail_string s);
1010
unit print_mem_access(sail_string s);
1111
unit print_platform(sail_string s);
12+
unit print_exception(sail_string s);
1213

1314
bool get_config_print_instr(unit u);
1415
bool get_config_print_reg(unit u);
1516
bool get_config_print_mem(unit u);
1617
bool get_config_print_platform(unit u);
18+
bool get_config_print_exception(unit u);

c_emulator/riscv_sim.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ bool config_print_reg = true;
8585
bool config_print_mem_access = true;
8686
bool config_print_platform = true;
8787
bool config_print_rvfi = false;
88+
bool config_print_exception = true;
8889
int config_use_boot_rom =
8990
#ifdef NO_BOOT_ROM
9091
false
@@ -101,6 +102,7 @@ void set_config_print(char *var, bool val)
101102
config_print_reg = val;
102103
config_print_platform = val;
103104
config_print_rvfi = val;
105+
config_print_exception = val;
104106
} else if (strcmp("instr", var) == 0) {
105107
config_print_instr = val;
106108
} else if (strcmp("reg", var) == 0) {
@@ -111,9 +113,11 @@ void set_config_print(char *var, bool val)
111113
config_print_rvfi = val;
112114
} else if (strcmp("platform", var) == 0) {
113115
config_print_platform = val;
116+
} else if (strcmp("exception", var) == 0) {
117+
config_print_exception = val;
114118
} else {
115119
fprintf(stderr, "Unknown trace category: '%s' (should be %s)\n",
116-
"instr|reg|mem|platform|all", var);
120+
"instr|reg|mem|exception|platform|all", var);
117121
exit(1);
118122
}
119123
}

model/prelude.sail

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,15 @@ val print_platform = {ocaml: "Platform.print_platform", interpreter: "print_endl
7979
val get_config_print_instr = {ocaml: "Platform.get_config_print_instr", c:"get_config_print_instr"} : unit -> bool
8080
val get_config_print_reg = {ocaml: "Platform.get_config_print_reg", c:"get_config_print_reg"} : unit -> bool
8181
val get_config_print_mem = {ocaml: "Platform.get_config_print_mem", c:"get_config_print_mem"} : unit -> bool
82+
val get_config_print_exception = {ocaml: "Platform.get_config_print_exception", c:"get_config_print_exception"} : unit -> bool
8283

8384
val get_config_print_platform = {ocaml: "Platform.get_config_print_platform", c:"get_config_print_platform"} : unit -> bool
8485
// defaults for other backends
8586
function get_config_print_instr () = false
8687
function get_config_print_reg () = false
8788
function get_config_print_mem () = false
8889
function get_config_print_platform () = false
90+
function get_config_print_exception () = false
8991

9092
val sign_extend : forall 'n 'm, 'm >= 'n. (implicit('m), bits('n)) -> bits('m)
9193
val zero_extend : forall 'n 'm, 'm >= 'n. (implicit('m), bits('n)) -> bits('m)

model/riscv_step.sail

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ function step(step_no : int) -> bool = {
3535
let (retired, stepped) : (Retired, bool) =
3636
match dispatchInterrupt(cur_privilege) {
3737
Some(intr, priv) => {
38-
if get_config_print_instr()
39-
then print_bits("Handling interrupt: ", interruptType_to_bits(intr));
38+
if get_config_print_instr() | get_config_print_exception()
39+
then print("Handling interrupt PC=" ^ BitStr(PC) ^ " IRQ=" ^ BitStr(interruptType_to_bits(intr)));
4040
handle_interrupt(intr, priv);
4141
(RETIRE_FAIL, false)
4242
},

0 commit comments

Comments
 (0)