summaryrefslogtreecommitdiff
path: root/src/sim
diff options
context:
space:
mode:
authorJose Marinho <jose.marinho@arm.com>2017-06-28 11:09:13 +0100
committerAndreas Sandberg <andreas.sandberg@arm.com>2017-07-12 12:29:32 +0000
commitc2baaab0ed43ad09fc8b7fcda25207b6ccd6c0e3 (patch)
tree224509c2ab0f21168001ce5f14160eb61e09d9ce /src/sim
parenteef537fd993f7a879a44f5786bc528e03b0e61bc (diff)
downloadgem5-c2baaab0ed43ad09fc8b7fcda25207b6ccd6c0e3.tar.xz
cpu, sim: Add param to force CPUs to wait for GDB
By setting the BaseCPU parameter wait_for_dbg_connection, the GDB server blocks during initialisation waiting for the remote debugger to connect before starting the simulated CPU. Change-Id: I4d62c68ce9adf69344bccbb44f66e30b33715a1c [ Update info message to include remote GDB port, rename param. ] Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/3963 Reviewed-by: Gabe Black <gabeblack@google.com> Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com>
Diffstat (limited to 'src/sim')
-rw-r--r--src/sim/system.cc16
1 files changed, 7 insertions, 9 deletions
diff --git a/src/sim/system.cc b/src/sim/system.cc
index e46c35611..42cd5e720 100644
--- a/src/sim/system.cc
+++ b/src/sim/system.cc
@@ -58,6 +58,7 @@
#include "cpu/kvm/base.hh"
#include "cpu/kvm/vm.hh"
#endif
+#include "cpu/base.hh"
#include "cpu/thread_context.hh"
#include "debug/Loader.hh"
#include "debug/WorkItems.hh"
@@ -221,13 +222,6 @@ bool System::breakpoint()
return false;
}
-/**
- * Setting rgdb_wait to a positive integer waits for a remote debugger to
- * connect to that context ID before continuing. This should really
- be a parameter on the CPU object or something...
- */
-int rgdb_wait = -1;
-
ContextID
System::registerThreadContext(ThreadContext *tc, ContextID assigned)
{
@@ -259,9 +253,13 @@ System::registerThreadContext(ThreadContext *tc, ContextID assigned)
GDBListener *gdbl = new GDBListener(rgdb, port + id);
gdbl->listen();
- if (rgdb_wait != -1 && rgdb_wait == id)
- gdbl->accept();
+ BaseCPU *cpu = tc->getCpuPtr();
+ if (cpu->waitForRemoteGDB()) {
+ inform("%s: Waiting for a remote GDB connection on port %d.\n",
+ cpu->name(), gdbl->getPort());
+ gdbl->accept();
+ }
if (remoteGDB.size() <= id) {
remoteGDB.resize(id + 1);
}