X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=spike_main%2Fspike.cc;h=f63f14faa1704345770f66c24c3a9b431e2a8d42;hb=d1d8863086c57f04236418f21ef8a7fbfc184b0b;hp=8896bc770c822525b40ef46e83a3903d57d9c9af;hpb=c57bdaa03373688f76703d20d6df5e0dc4a21eb5;p=riscv-isa-sim.git diff --git a/spike_main/spike.cc b/spike_main/spike.cc index 8896bc7..f63f14f 100644 --- a/spike_main/spike.cc +++ b/spike_main/spike.cc @@ -31,6 +31,7 @@ static void help() fprintf(stderr, " --l2=:: B both powers of 2).\n"); fprintf(stderr, " --extension= Specify RoCC Extension\n"); fprintf(stderr, " --extlib= Shared library to load\n"); + fprintf(stderr, " --gdb-port= Listen on for gdb to connect\n"); fprintf(stderr, " --dump-config-string Print platform configuration string and exit\n"); exit(1); } @@ -49,6 +50,7 @@ int main(int argc, char** argv) std::unique_ptr l2; std::function extension; const char* isa = DEFAULT_ISA; + uint16_t gdb_port = 0; option_parser_t parser; parser.help(&help); @@ -58,6 +60,9 @@ int main(int argc, char** argv) parser.option('l', 0, 0, [&](const char* s){log = true;}); parser.option('p', 0, 1, [&](const char* s){nprocs = atoi(s);}); parser.option('m', 0, 1, [&](const char* s){mem_mb = atoi(s);}); + // I wanted to use --halted, but for some reason that doesn't work. + parser.option('H', 0, 0, [&](const char* s){halted = true;}); + parser.option(0, "gdb-port", 1, [&](const char* s){gdb_port = atoi(s);}); parser.option(0, "ic", 1, [&](const char* s){ic.reset(new icache_sim_t(s));}); parser.option(0, "dc", 1, [&](const char* s){dc.reset(new dcache_sim_t(s));}); parser.option(0, "l2", 1, [&](const char* s){l2.reset(cache_sim_t::construct(s, "L2$"));}); @@ -71,14 +76,15 @@ 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, halted, htif_args); - gdbserver_t gdbserver(9824, &s); - s.set_gdbserver(&gdbserver); + std::unique_ptr gdbserver; + if (gdb_port) { + gdbserver = std::unique_ptr(new gdbserver_t(gdb_port, &s)); + s.set_gdbserver(&(*gdbserver)); + } if (dump_config_string) { printf("%s", s.get_config_string());