aboutsummaryrefslogtreecommitdiff
path: root/riscv/interactive.cc
diff options
context:
space:
mode:
authoremelcher <elmar@dsc.ufcg.edu.br>2021-08-24 17:03:42 -0300
committerGitHub <noreply@github.com>2021-08-24 13:03:42 -0700
commitea5d76121bef5e3d54bbaba21cce75d0299c461e (patch)
tree372bf993e773b2493dad9e9eda5ba4a56d35f0dc /riscv/interactive.cc
parent01be71430cadc4b6df7ed16a4d32dd7c57c9bb34 (diff)
downloadspike-ea5d76121bef5e3d54bbaba21cce75d0299c461e.zip
spike-ea5d76121bef5e3d54bbaba21cce75d0299c461e.tar.gz
spike-ea5d76121bef5e3d54bbaba21cce75d0299c461e.tar.bz2
error message for bad command argument (#777)
Diffstat (limited to 'riscv/interactive.cc')
-rw-r--r--riscv/interactive.cc21
1 files changed, 16 insertions, 5 deletions
diff --git a/riscv/interactive.cc b/riscv/interactive.cc
index faf3763..8bc30d7 100644
--- a/riscv/interactive.cc
+++ b/riscv/interactive.cc
@@ -184,7 +184,9 @@ void sim_t::interactive()
else
sout << "Unknown command " << cmd << endl;
}
- catch(trap_t& t) {}
+ catch(trap_t& t) {
+ sout << "Bad or missing arguments for command " << cmd << endl;
+ }
#ifdef HAVE_BOOST_ASIO
wout(&bout); // socket output, if required
#endif
@@ -309,6 +311,9 @@ freg_t sim_t::get_freg(const std::vector<std::string>& args)
void sim_t::interactive_vreg(const std::string& cmd, const std::vector<std::string>& args)
{
+ if (args.size() < 1)
+ throw trap_interactive();
+
int rstart = 0;
int rend = NVPR;
if (args.size() >= 2) {
@@ -497,11 +502,17 @@ void sim_t::interactive_until(const std::string& cmd, const std::vector<std::str
bool cmd_until = cmd == "until" || cmd == "untiln";
if (args.size() < 3)
- return;
+ throw trap_interactive();
+
+ if (args.size() == 3)
+ get_core(args[1]); // make sure that argument is a valid core number
- reg_t val = strtol(args[args.size()-1].c_str(),NULL,16);
+ char *end;
+ reg_t val = strtol(args[args.size()-1].c_str(),&end,16);
if (val == LONG_MAX)
- val = strtoul(args[args.size()-1].c_str(),NULL,16);
+ val = strtoul(args[args.size()-1].c_str(),&end,16);
+ if (args[args.size()-1].c_str() == end) // not a valid number
+ throw trap_interactive();
// mask bits above max_xlen
int max_xlen = procs[strtol(args[1].c_str(),NULL,10)]->get_max_xlen();
@@ -516,7 +527,7 @@ void sim_t::interactive_until(const std::string& cmd, const std::vector<std::str
NULL;
if (func == NULL)
- return;
+ throw trap_interactive();
ctrlc_pressed = false;