diff --git a/src/base/remote_gdb.cc b/src/base/remote_gdb.cc index 7aafa3d3db..e02ada025a 100644 --- a/src/base/remote_gdb.cc +++ b/src/base/remote_gdb.cc @@ -575,6 +575,16 @@ BaseRemoteGDB::trap(ContextID id, int signum,const std::string& stopReason) processCommands(signum); } +bool +BaseRemoteGDB::sendMessage(std::string message) +{ + if (!attached) + return false; + DPRINTF(GDBMisc, "passing message %s\n", message); + sendOPacket(message); + return true; +} + void BaseRemoteGDB::incomingConnection(int revent) { diff --git a/src/base/remote_gdb.hh b/src/base/remote_gdb.hh index 671ee51542..280f12c55f 100644 --- a/src/base/remote_gdb.hh +++ b/src/base/remote_gdb.hh @@ -172,6 +172,7 @@ class BaseRemoteGDB bool selectThreadContext(ContextID id); void trap(ContextID id, int signum,const std::string& stopReason=""); + bool sendMessage(std::string message); /** @} */ // end of api_remote_gdb diff --git a/src/sim/Workload.py b/src/sim/Workload.py index 3fd4f81cc9..b46c32fb48 100644 --- a/src/sim/Workload.py +++ b/src/sim/Workload.py @@ -24,7 +24,7 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from m5.params import * -from m5.SimObject import SimObject +from m5.SimObject import SimObject, cxxMethod from m5.objects.SimpleMemory import * @@ -37,6 +37,14 @@ class Workload(SimObject): wait_for_remote_gdb = Param.Bool(False, "Wait for a remote GDB connection") + @cxxMethod + def sendToGdb(self, message): + """send a message to the GDB client + Args: + message (str): message to send + """ + pass + class StubWorkload(Workload): type = "StubWorkload" diff --git a/src/sim/workload.cc b/src/sim/workload.cc index 1f6e0721d8..ca51bbdb73 100644 --- a/src/sim/workload.cc +++ b/src/sim/workload.cc @@ -80,6 +80,14 @@ Workload::trapToGdb(int signal, ContextID ctx_id) } return false; }; +bool +Workload::sendToGdb(std::string msg){ + if (gdb) + return gdb->sendMessage(msg); + else + return false; + } + void Workload::startup() diff --git a/src/sim/workload.hh b/src/sim/workload.hh index 9b3ef04fb7..f9bb8dba3c 100644 --- a/src/sim/workload.hh +++ b/src/sim/workload.hh @@ -92,6 +92,7 @@ class Workload : public SimObject // Once trapping into GDB is no longer a special case routed through the // system object, this helper can be removed. bool trapToGdb(int signal, ContextID ctx_id); + bool sendToGdb(std::string msg); virtual void registerThreadContext(ThreadContext *tc); virtual void replaceThreadContext(ThreadContext *tc);