aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--riscv/execute.cc4
-rw-r--r--riscv/processor.cc13
-rw-r--r--riscv/processor.h3
-rw-r--r--riscv/sim.cc11
-rw-r--r--riscv/sim.h2
-rw-r--r--spike_main/spike.cc3
6 files changed, 34 insertions, 2 deletions
diff --git a/riscv/execute.cc b/riscv/execute.cc
index ac9294d..78483ea 100644
--- a/riscv/execute.cc
+++ b/riscv/execute.cc
@@ -77,7 +77,9 @@ static reg_t execute_insn(processor_t* p, reg_t pc, insn_fetch_t fetch)
commit_log_stash_privilege(p);
reg_t npc = fetch.func(p, fetch.insn, pc);
if (npc != PC_SERIALIZE_BEFORE) {
- commit_log_print_insn(p->get_state(), pc, fetch.insn);
+ if (p->get_log_commits()) {
+ commit_log_print_insn(p->get_state(), pc, fetch.insn);
+ }
p->update_histogram(pc);
}
return npc;
diff --git a/riscv/processor.cc b/riscv/processor.cc
index 4edf44c..515dfaa 100644
--- a/riscv/processor.cc
+++ b/riscv/processor.cc
@@ -1017,6 +1017,19 @@ void processor_t::set_histogram(bool value)
if (value) {
fprintf(stderr, "PC Histogram support has not been properly enabled;");
fprintf(stderr, " please re-build the riscv-isa-sim project using \"configure --enable-histogram\".\n");
+ abort();
+ }
+#endif
+}
+
+void processor_t::set_log_commits(bool value)
+{
+ log_commits_enabled = value;
+#ifndef RISCV_ENABLE_COMMITLOG
+ if (value) {
+ fprintf(stderr, "Commit logging support has not been properly enabled;");
+ fprintf(stderr, " please re-build the riscv-isa-sim project using \"configure --enable-commitlog\".\n");
+ abort();
}
#endif
}
diff --git a/riscv/processor.h b/riscv/processor.h
index 688b3a1..99fbd37 100644
--- a/riscv/processor.h
+++ b/riscv/processor.h
@@ -300,6 +300,8 @@ public:
void set_debug(bool value);
void set_histogram(bool value);
+ void set_log_commits(bool value);
+ bool get_log_commits() { return log_commits_enabled; }
void reset();
void step(size_t n); // run for n cycles
void set_csr(int which, reg_t val);
@@ -439,6 +441,7 @@ private:
reg_t max_isa;
std::string isa_string;
bool histogram_enabled;
+ bool log_commits_enabled;
bool halt_on_reset;
std::vector<insn_desc_t> instructions;
diff --git a/riscv/sim.cc b/riscv/sim.cc
index bbbc2d7..64332c3 100644
--- a/riscv/sim.cc
+++ b/riscv/sim.cc
@@ -38,7 +38,8 @@ sim_t::sim_t(const char* isa, const char* varch, size_t nprocs, bool halted,
const debug_module_config_t &dm_config)
: htif_t(args), mems(mems), plugin_devices(plugin_devices),
procs(std::max(nprocs, size_t(1))), start_pc(start_pc), current_step(0),
- current_proc(0), debug(false), histogram_enabled(false), dtb_enabled(true),
+ current_proc(0), debug(false), histogram_enabled(false),
+ log_commits_enabled(false), dtb_enabled(true),
remote_bitbang(NULL), debug_module(this, dm_config)
{
signal(SIGINT, &handle_signal);
@@ -148,6 +149,14 @@ void sim_t::set_histogram(bool value)
}
}
+void sim_t::set_log_commits(bool value)
+{
+ log_commits_enabled = value;
+ for (size_t i = 0; i < procs.size(); i++) {
+ procs[i]->set_log_commits(log_commits_enabled);
+ }
+}
+
void sim_t::set_procs_debug(bool value)
{
for (size_t i=0; i< procs.size(); i++)
diff --git a/riscv/sim.h b/riscv/sim.h
index 57d1148..0720ce4 100644
--- a/riscv/sim.h
+++ b/riscv/sim.h
@@ -33,6 +33,7 @@ public:
void set_debug(bool value);
void set_log(bool value);
void set_histogram(bool value);
+ void set_log_commits(bool value);
void set_procs_debug(bool value);
void set_dtb_enabled(bool value) {
this->dtb_enabled = value;
@@ -68,6 +69,7 @@ private:
bool debug;
bool log;
bool histogram_enabled; // provide a histogram of PCs
+ bool log_commits_enabled;
bool dtb_enabled;
remote_bitbang_t* remote_bitbang;
diff --git a/spike_main/spike.cc b/spike_main/spike.cc
index cf3c649..e25db74 100644
--- a/spike_main/spike.cc
+++ b/spike_main/spike.cc
@@ -131,6 +131,7 @@ int main(int argc, char** argv)
std::unique_ptr<dcache_sim_t> dc;
std::unique_ptr<cache_sim_t> l2;
bool log_cache = false;
+ bool log_commits = false;
std::function<extension_t*()> extension;
const char* isa = DEFAULT_ISA;
const char* varch = DEFAULT_VARCH;
@@ -265,6 +266,7 @@ int main(int argc, char** argv)
[&](const char* s){dm_config.support_abstract_csr_access = false;});
parser.option(0, "dm-no-halt-groups", 0,
[&](const char* s){dm_config.support_haltgroups = false;});
+ parser.option(0, "log-commits", 0, [&](const char* s){log_commits = true;});
auto argv1 = parser.parse(argv);
std::vector<std::string> htif_args(argv1, (const char*const*)argv + argc);
@@ -308,6 +310,7 @@ int main(int argc, char** argv)
s.set_debug(debug);
s.set_log(log);
s.set_histogram(histogram);
+ s.set_log_commits(log_commits);
auto return_code = s.run();