Skip to content

Commit c70fdd8

Browse files
committed
Use enum instead of string
Fix riscv#1370 (comment) Signed-off-by: Ariel Xiong <[email protected]>
1 parent 507cb76 commit c70fdd8

12 files changed

+34
-35
lines changed

c_emulator/riscv_callbacks.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ unit ptw_success_callback(uint64_t final_ppn, sail_int level)
142142
return UNIT;
143143
}
144144

145-
unit ptw_fail_callback(const char *error_type, sail_int level, sbits pte_addr)
145+
unit ptw_fail_callback(struct zPTW_Error error_type, sail_int level, sbits pte_addr)
146146
{
147147
for (auto c : callbacks) {
148148
c->ptw_fail_callback(error_type, level, pte_addr);

c_emulator/riscv_callbacks.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ unit trap_callback(bool is_interrupt, fbits cause);
3030
unit ptw_start_callback(uint64_t vpn, struct zMemoryAccessTypezIuzK access_type,enum zPrivilege privilege);
3131
unit ptw_step_callback(sail_int level, sbits pte_addr, uint64_t pte);
3232
unit ptw_success_callback(uint64_t final_ppn, sail_int level);
33-
unit ptw_fail_callback(const char *error_type, sail_int level, sbits pte_addr);
33+
unit ptw_fail_callback(struct zPTW_Error error_type, sail_int level, sbits pte_addr);
3434

3535
#ifdef __cplusplus
3636
}

c_emulator/riscv_callbacks_if.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,7 @@ class callbacks_if {
4040
virtual void ptw_step_callback(sail_int level, sbits pte_addr, uint64_t pte)
4141
= 0;
4242
virtual void ptw_success_callback(uint64_t final_ppn, sail_int level) = 0;
43-
virtual void ptw_fail_callback(const char *error_type, sail_int level,
44-
sbits pte_addr)
45-
= 0;
43+
virtual void ptw_fail_callback(struct zPTW_Error error_type, sail_int level, sbits pte_addr)= 0;
4644
};
4745

4846
void register_callback(callbacks_if *cb);

c_emulator/riscv_callbacks_log.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -154,12 +154,12 @@ void log_callbacks::ptw_success_callback(uint64_t final_ppn, sail_int /*level*/)
154154
}
155155
}
156156

157-
void log_callbacks::ptw_fail_callback(const char *error_type,
158-
sail_int /*level*/, sbits pte_addr)
157+
void log_callbacks::ptw_fail_callback(struct zPTW_Error error_type, sail_int /*level*/, sbits pte_addr)
159158
{
160159
// failed trace is always available
161160
if (trace_log != nullptr) {
162-
fprintf(trace_log, "PTW: failed, error=%s, pte_addr=0x%" PRIX64 "\n",
163-
error_type, pte_addr.bits);
161+
sail_string str_et;
162+
zptw_error_to_str(&str_et,error_type);
163+
fprintf(trace_log, "PTW: failed, error=%s, pte_addr=0x%" PRIX64 "\n", str_et, pte_addr.bits);
164164
}
165165
}

c_emulator/riscv_callbacks_log.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ class log_callbacks : public callbacks_if {
3232
void ptw_start_callback(uint64_t vpn, struct zMemoryAccessTypezIuzK access_type,enum zPrivilege privilege) override;
3333
void ptw_step_callback(sail_int level, sbits pte_addr, uint64_t pte) override;
3434
void ptw_success_callback(uint64_t final_ppn, sail_int level) override;
35-
void ptw_fail_callback(const char *error_type, sail_int level,
36-
sbits pte_addr) override;
35+
void ptw_fail_callback(struct zPTW_Error error_type, sail_int /*level*/, sbits pte_addr) override;
3736

3837
private:
3938
bool config_print_reg;

c_emulator/riscv_callbacks_rvfi.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ void rvfi_callbacks::trap_callback(bool is_interrupt, fbits cause)
8080

8181
// Page table walk callback
8282

83-
void rvfi_callbacks::ptw_start_callback(uint64_t vpn, struct zMemoryAccessTypezIuzK access_type,enum zPrivilege privilege)
83+
void rvfi_callbacks::ptw_start_callback(uint64_t /*vpn*/, struct zMemoryAccessTypezIuzK /*access_type*/,enum zPrivilege /*privilege*/)
8484
{
8585
}
8686

@@ -94,7 +94,6 @@ void rvfi_callbacks::ptw_success_callback(uint64_t /*final_ppn*/,
9494
{
9595
}
9696

97-
void rvfi_callbacks::ptw_fail_callback(const char * /*error_type*/,
98-
sail_int /*level*/, sbits /*pte_addr*/)
97+
void rvfi_callbacks::ptw_fail_callback(struct zPTW_Error /*error_type*/, sail_int /*level*/, sbits /*pte_addr*/)
9998
{
10099
}

c_emulator/riscv_callbacks_rvfi.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ class rvfi_callbacks : public callbacks_if {
2727
void ptw_start_callback(uint64_t vpn, struct zMemoryAccessTypezIuzK access_type,enum zPrivilege privilege) override;
2828
void ptw_step_callback(sail_int level, sbits pte_addr, uint64_t pte) override;
2929
void ptw_success_callback(uint64_t final_ppn, sail_int level) override;
30-
void ptw_fail_callback(const char *error_type, sail_int level,
31-
sbits pte_addr) override;
30+
void ptw_fail_callback(struct zPTW_Error error_type, sail_int /*level*/, sbits pte_addr) override;
3231
};
3332

3433
extern "C" {

model/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ add_custom_command(
118118
--c-preserve rvfi_mem_exception
119119
--c-preserve rvfi_wX
120120
--c-preserve rvfi_trap
121+
--c-preserve ptw_error_to_str
121122
# Input files.
122123
${SAIL_MODULES}
123124
${project_file}

model/core/callbacks.sail

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -83,16 +83,3 @@ function long_csr_write_callback(name : string, name_high : string, value : bits
8383
if xlen == 32
8484
then csr_write_callback(name_high, value[63 .. 32]);
8585
}
86-
87-
// Page table walk callback
88-
val ptw_start_callback = pure {c: "ptw_start_callback"} : (/* vpn */ bits(64), /* access type */ MemoryAccessType(ext_access_type), /* privilege */ Privilege) -> unit
89-
function ptw_start_callback(_) = ()
90-
91-
val ptw_step_callback = pure {c: "ptw_step_callback"} : (/* level */ int, /* pte_addr */ physaddrbits, /* pte */ bits(64)) -> unit
92-
function ptw_step_callback(_) = ()
93-
94-
val ptw_success_callback = pure {c: "ptw_success_callback"} : (/* final_ppn */ bits(64), /* level */ int) -> unit
95-
function ptw_success_callback(_) = ()
96-
97-
val ptw_fail_callback = pure {c: "ptw_fail_callback"} : (/* error_type */ string, /* level */ int, /* pte_addr */ physaddrbits) -> unit
98-
function ptw_fail_callback(_) = ()

model/riscv.sail_project

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,11 @@ sys {
6464
sys/inst_retire.sail,
6565
sys/vmem_pte.sail,
6666
sys/vmem_ptw.sail,
67+
sys/callbacks.sail,
6768
sys/vmem_tlb.sail,
6869
sys/vmem.sail,
6970
sys/vmem_utils.sail,
70-
sys/insts_begin.sail,
71+
sys/insts_begin.sail,
7172
}
7273

7374
extensions {

0 commit comments

Comments
 (0)