From: Scott Beamer Date: Wed, 16 Sep 2015 00:43:37 +0000 (-0700) Subject: commit log now correctly prints privilege X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7959893ef66cce47b92f73d797d9ee5144d16f60;p=riscv-isa-sim.git commit log now correctly prints privilege adopting convention of privilege at time of commit, not after commit --- diff --git a/riscv/execute.cc b/riscv/execute.cc index 42d59cb..249d6ae 100644 --- a/riscv/execute.cc +++ b/riscv/execute.cc @@ -4,10 +4,18 @@ #include "mmu.h" #include -static void commit_log(state_t* state, reg_t pc, insn_t insn) + +static void commit_log_stash_privilege(state_t* state) +{ +#ifdef RISCV_ENABLE_COMMITLOG + state->last_inst_priv = get_field(state->mstatus, MSTATUS_PRV); +#endif +} + +static void commit_log_print_insn(state_t* state, reg_t pc, insn_t insn) { #ifdef RISCV_ENABLE_COMMITLOG - int32_t priv = get_field(state->mstatus, MSTATUS_PRV); + int32_t priv = state->last_inst_priv; uint64_t mask = (insn.length() == 8 ? uint64_t(0) : (uint64_t(1) << (insn.length() * 8))) - 1; if (state->log_reg_write.addr) { fprintf(stderr, "%1d 0x%016" PRIx64 " (0x%08" PRIx64 ") %c%2" PRIu64 " 0x%016" PRIx64 "\n", @@ -34,9 +42,10 @@ inline void processor_t::update_histogram(size_t pc) static reg_t execute_insn(processor_t* p, reg_t pc, insn_fetch_t fetch) { + commit_log_stash_privilege(p->get_state()); reg_t npc = fetch.func(p, fetch.insn, pc); if (npc != PC_SERIALIZE) { - commit_log(p->get_state(), pc, fetch.insn); + commit_log_print_insn(p->get_state(), pc, fetch.insn); p->update_histogram(pc); } return npc; diff --git a/riscv/processor.h b/riscv/processor.h index d117ff1..f1de05e 100644 --- a/riscv/processor.h +++ b/riscv/processor.h @@ -67,6 +67,7 @@ struct state_t #ifdef RISCV_ENABLE_COMMITLOG commit_log_reg_t log_reg_write; + reg_t last_inst_priv; #endif };