From bd17c7e5a80c21b8b7dd6be8cd24a6f89dd63bf0 Mon Sep 17 00:00:00 2001 From: Tim Newsome Date: Wed, 9 Mar 2016 17:16:26 -0800 Subject: [PATCH] Add -H to start halted. --- riscv/gdbserver.cc | 1 + riscv/sim.cc | 6 ++++-- riscv/sim.h | 2 +- spike_main/spike.cc | 7 +++++-- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/riscv/gdbserver.cc b/riscv/gdbserver.cc index d188f9239a..ea8b7d7e22 100644 --- a/riscv/gdbserver.cc +++ b/riscv/gdbserver.cc @@ -15,6 +15,7 @@ #include "disasm.h" #include "sim.h" #include "gdbserver.h" +#include "mmu.h" template unsigned int circular_buffer_t::size() const diff --git a/riscv/sim.cc b/riscv/sim.cc index f8564fbd0d..09c8b44024 100644 --- a/riscv/sim.cc +++ b/riscv/sim.cc @@ -20,7 +20,7 @@ static void handle_signal(int sig) signal(sig, &handle_signal); } -sim_t::sim_t(const char* isa, size_t nprocs, size_t mem_mb, +sim_t::sim_t(const char* isa, size_t nprocs, size_t mem_mb, bool halted, const std::vector& args) : htif(new htif_isasim_t(this, args)), procs(std::max(nprocs, size_t(1))), current_step(0), current_proc(0), debug(false) @@ -43,8 +43,10 @@ sim_t::sim_t(const char* isa, size_t nprocs, size_t mem_mb, debug_mmu = new mmu_t(this, NULL); - for (size_t i = 0; i < procs.size(); i++) + for (size_t i = 0; i < procs.size(); i++) { procs[i] = new processor_t(isa, this, i); + procs[i]->set_halted(halted); + } rtc.reset(new rtc_t(procs)); make_config_string(); diff --git a/riscv/sim.h b/riscv/sim.h index 7ee4020e20..dad32ef493 100644 --- a/riscv/sim.h +++ b/riscv/sim.h @@ -17,7 +17,7 @@ class mmu_t; class sim_t { public: - sim_t(const char* isa, size_t _nprocs, size_t mem_mb, + sim_t(const char* isa, size_t _nprocs, size_t mem_mb, bool halted, const std::vector& htif_args); ~sim_t(); diff --git a/spike_main/spike.cc b/spike_main/spike.cc index b0a9a3e5a6..8896bc770c 100644 --- a/spike_main/spike.cc +++ b/spike_main/spike.cc @@ -10,7 +10,6 @@ #include #include #include -#include #include #include #include @@ -25,6 +24,7 @@ static void help() fprintf(stderr, " -g Track histogram of PCs\n"); fprintf(stderr, " -l Generate a log of execution\n"); fprintf(stderr, " -h Print this help message\n"); + fprintf(stderr, " -H Start halted, allowing a debugger to connect\n"); fprintf(stderr, " --isa= RISC-V ISA string [default %s]\n", DEFAULT_ISA); fprintf(stderr, " --ic=:: Instantiate a cache model with S sets,\n"); fprintf(stderr, " --dc=:: W ways, and B-byte blocks (with S and\n"); @@ -38,6 +38,7 @@ static void help() int main(int argc, char** argv) { bool debug = false; + bool halted = false; bool histogram = false; bool log = false; bool dump_config_string = false; @@ -70,10 +71,12 @@ int main(int argc, char** argv) exit(-1); } }); + // I wanted to use --halted, but for some reason that doesn't work. + parser.option('H', 0, 0, [&](const char* s){halted = true;}); auto argv1 = parser.parse(argv); std::vector htif_args(argv1, (const char*const*)argv + argc); - sim_t s(isa, nprocs, mem_mb, htif_args); + sim_t s(isa, nprocs, mem_mb, halted, htif_args); gdbserver_t gdbserver(9824, &s); s.set_gdbserver(&gdbserver);