Quentin Forcioli has submitted this change. (
https://gem5-review.googlesource.com/c/public/gem5/+/63537?usp=email )
(
9 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the
submitted one.
)Change subject: base: query now works the same way normal command worked
......................................................................
base: query now works the same way normal command worked
Query can now return true or false like normal command, to interrupt
execution, it might be needed if a query need to wait for another event.
Change-Id: Ic463287ecd88e6b63a53f2cb9a46c83d3419618c
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/63537
Reviewed-by: Bobby Bruce <bbr...@ucdavis.edu>
Tested-by: kokoro <noreply+kok...@google.com>
Maintainer: Bobby Bruce <bbr...@ucdavis.edu>
---
M src/base/remote_gdb.cc
M src/base/remote_gdb.hh
2 files changed, 41 insertions(+), 20 deletions(-)
Approvals:
kokoro: Regressions pass
Bobby Bruce: Looks good to me, approved; Looks good to me, approved
diff --git a/src/base/remote_gdb.cc b/src/base/remote_gdb.cc
index da3f113..c19dede 100644
--- a/src/base/remote_gdb.cc
+++ b/src/base/remote_gdb.cc
@@ -1333,13 +1333,14 @@
{ "sThreadInfo", { &BaseRemoteGDB::querySThreadInfo } },
};
-void
+bool
BaseRemoteGDB::queryC(QuerySetCommand::Context &ctx)
{
send("QC%x", encodeThreadId(tc->contextId()));
+ return true;
}
-void
+bool
BaseRemoteGDB::querySupported(QuerySetCommand::Context &ctx)
{
std::ostringstream oss;
@@ -1350,9 +1351,10 @@
for (const auto& feature : availableFeatures())
oss << ';' << feature;
send(oss.str());
+ return true;
}
-void
+bool
BaseRemoteGDB::queryXfer(QuerySetCommand::Context &ctx)
{
auto split = splitAt(ctx.args.at(0), ":");
@@ -1391,15 +1393,16 @@
std::string encoded;
encodeXferResponse(content, encoded, offset, length);
send(encoded);
+ return true;
}
-void
+bool
BaseRemoteGDB::querySymbol(QuerySetCommand::Context &ctx)
{
//The target does not need to look up any (more) symbols.
send("OK");
+ return true;
}
-
-void
+bool
BaseRemoteGDB::queryAttached(QuerySetCommand::Context &ctx)
{
std::string pid="";
@@ -1409,17 +1412,19 @@
DPRINTF(GDBMisc, "QAttached : pid=%s\n",pid);
//The remote server is attached to an existing process.
send("1");
+ return true;
}
-void
+bool
BaseRemoteGDB::queryFThreadInfo(QuerySetCommand::Context &ctx)
{
threadInfoIdx = 0;
querySThreadInfo(ctx);
+ return true;
}
-void
+bool
BaseRemoteGDB::querySThreadInfo(QuerySetCommand::Context &ctx)
{
if (threadInfoIdx >= threads.size()) {
@@ -1430,6 +1435,7 @@
std::advance(it, threadInfoIdx++);
send("m%x", encodeThreadId(it->second->contextId()));
}
+ return true;
}
bool
@@ -1461,10 +1467,9 @@
remaining = std::move(arg_split.second);
}
}
-
- (this->*(query.func))(qctx);
-
- return true;
+ //returning true if the query want to pursue GDB command processing
+ //false means that the command processing stop until it's trigger
again.
+ return (this->*(query.func))(qctx);
}
std::vector<std::string>
diff --git a/src/base/remote_gdb.hh b/src/base/remote_gdb.hh
index ad64bc7..4da1dcc 100644
--- a/src/base/remote_gdb.hh
+++ b/src/base/remote_gdb.hh
@@ -416,7 +416,7 @@
Context(const std::string &_name) : name(_name) {}
};
- using Func = void (BaseRemoteGDB::*)(Context &ctx);
+ using Func = bool (BaseRemoteGDB::*)(Context &ctx);
const char * const argSep;
const Func func;
@@ -428,15 +428,15 @@
static std::map<std::string, QuerySetCommand> queryMap;
- void queryC(QuerySetCommand::Context &ctx);
- void querySupported(QuerySetCommand::Context &ctx);
- void queryXfer(QuerySetCommand::Context &ctx);
- void querySymbol(QuerySetCommand::Context &ctx);
- void queryAttached(QuerySetCommand::Context &ctx);
+ bool queryC(QuerySetCommand::Context &ctx);
+ bool querySupported(QuerySetCommand::Context &ctx);
+ bool queryXfer(QuerySetCommand::Context &ctx);
+ bool querySymbol(QuerySetCommand::Context &ctx);
+ bool queryAttached(QuerySetCommand::Context &ctx);
size_t threadInfoIdx = 0;
- void queryFThreadInfo(QuerySetCommand::Context &ctx);
- void querySThreadInfo(QuerySetCommand::Context &ctx);
+ bool queryFThreadInfo(QuerySetCommand::Context &ctx);
+ bool querySThreadInfo(QuerySetCommand::Context &ctx);
protected:
ThreadContext *context() { return tc; }
--
To view, visit
https://gem5-review.googlesource.com/c/public/gem5/+/63537?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Ic463287ecd88e6b63a53f2cb9a46c83d3419618c
Gerrit-Change-Number: 63537
Gerrit-PatchSet: 12
Gerrit-Owner: Quentin Forcioli <quentin.forci...@telecom-paris.fr>
Gerrit-Reviewer: Bobby Bruce <bbr...@ucdavis.edu>
Gerrit-Reviewer: Daniel Carvalho <oda...@yahoo.com.br>
Gerrit-Reviewer: Quentin Forcioli <quentin.forci...@telecom-paris.fr>
Gerrit-Reviewer: kokoro <noreply+kok...@google.com>
Gerrit-MessageType: merged
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org