diff options
author | Rupert Swarbrick <rswarbrick@gmail.com> | 2020-03-27 10:25:20 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-27 03:25:20 -0700 |
commit | bf296ca0643fa445b83d8bd45eefa3fca02d9921 (patch) | |
tree | 69222028c8870f885e7207959cafa8a83e4cbfce /spike_main/spike.cc | |
parent | 66b44bfbedda562a32e4a2cd0716afbf731b69cd (diff) | |
download | spike-bf296ca0643fa445b83d8bd45eefa3fca02d9921.zip spike-bf296ca0643fa445b83d8bd45eefa3fca02d9921.tar.gz spike-bf296ca0643fa445b83d8bd45eefa3fca02d9921.tar.bz2 |
Write execution logs to a named log file (#409)
This patch adds a --log argument to spike. If not given, the behaviour
is unchanged: messages logging execution of instructions and (if
commit logging is enabled) commits go to stderr.
If --log=P is given, Spike now writes these messages to a log file at
the path P. This is nice, because they are no longer tangled up with
other errors and warnings.
The code is mostly plumbing: passing a FILE* object through to the
functions that were using stderr. I've written a simple "log_file_t"
class, which opens a log file if necessary and yields it or stderr.
Diffstat (limited to 'spike_main/spike.cc')
-rw-r--r-- | spike_main/spike.cc | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/spike_main/spike.cc b/spike_main/spike.cc index 1474a4c..31c0cd7 100644 --- a/spike_main/spike.cc +++ b/spike_main/spike.cc @@ -144,6 +144,7 @@ int main(int argc, char** argv) std::unique_ptr<cache_sim_t> l2; bool log_cache = false; bool log_commits = false; + const char *log_path = nullptr; std::function<extension_t*()> extension; const char* initrd = NULL; const char* isa = DEFAULT_ISA; @@ -267,7 +268,10 @@ 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;}); + parser.option(0, "log-commits", 0, + [&](const char* s){log_commits = true;}); + parser.option(0, "log", 1, + [&](const char* s){log_path = s;}); auto argv1 = parser.parse(argv); std::vector<std::string> htif_args(argv1, (const char*const*)argv + argc); @@ -291,7 +295,7 @@ int main(int argc, char** argv) sim_t s(isa, priv, varch, nprocs, halted, real_time_clint, initrd_start, initrd_end, start_pc, mems, plugin_devices, htif_args, - std::move(hartids), dm_config); + std::move(hartids), dm_config, log_path); std::unique_ptr<remote_bitbang_t> remote_bitbang((remote_bitbang_t *) NULL); std::unique_ptr<jtag_dtm_t> jtag_dtm( new jtag_dtm_t(&s.debug_module, dmi_rti)); @@ -318,9 +322,8 @@ int main(int argc, char** argv) } s.set_debug(debug); - s.set_log(log); + s.configure_log(log, log_commits); s.set_histogram(histogram); - s.set_log_commits(log_commits); auto return_code = s.run(); |