Andreas Sandberg has submitted this change and it was merged. (
https://gem5-review.googlesource.com/3963 )
Change subject: cpu, sim: Add param to force CPUs to wait for GDB
......................................................................
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.sandb...@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/3963
Reviewed-by: Gabe Black <gabebl...@google.com>
Reviewed-by: Anthony Gutierrez <anthony.gutier...@amd.com>
---
M src/base/remote_gdb.cc
M src/base/remote_gdb.hh
M src/cpu/BaseCPU.py
M src/cpu/base.cc
M src/cpu/base.hh
M src/sim/system.cc
6 files changed, 30 insertions(+), 9 deletions(-)
Approvals:
Anthony Gutierrez: Looks good to me, approved
Gabe Black: Looks good to me, approved
Andreas Sandberg: Looks good to me, approved
diff --git a/src/base/remote_gdb.cc b/src/base/remote_gdb.cc
index f7b0253..3b436cc 100644
--- a/src/base/remote_gdb.cc
+++ b/src/base/remote_gdb.cc
@@ -250,6 +250,16 @@
}
}
+int
+GDBListener::getPort() const
+{
+ panic_if(!listener.islistening(),
+ "Remote GDB port is unknown until GDBListener::listen() has "
+ "been called.\n");
+
+ return port;
+}
+
BaseRemoteGDB::InputEvent::InputEvent(BaseRemoteGDB *g, int fd, int e)
: PollEvent(fd, e), gdb(g)
{}
diff --git a/src/base/remote_gdb.hh b/src/base/remote_gdb.hh
index b860f5d..b7de0ae 100644
--- a/src/base/remote_gdb.hh
+++ b/src/base/remote_gdb.hh
@@ -364,6 +364,8 @@
void accept();
void listen();
std::string name();
+
+ int getPort() const;
};
#endif /* __REMOTE_GDB_H__ */
diff --git a/src/cpu/BaseCPU.py b/src/cpu/BaseCPU.py
index 550ba62..fcae742 100644
--- a/src/cpu/BaseCPU.py
+++ b/src/cpu/BaseCPU.py
@@ -151,6 +151,9 @@
profile = Param.Latency('0ns', "trace the kernel stack")
do_quiesce = Param.Bool(True, "enable quiesce instructions")
+ wait_for_remote_gdb = Param.Bool(False,
+ "Wait for a remote GDB connection");
+
workload = VectorParam.Process([], "processes to run")
if buildEnv['TARGET_ISA'] == 'sparc':
diff --git a/src/cpu/base.cc b/src/cpu/base.cc
index 6f460d3..78b25ca 100644
--- a/src/cpu/base.cc
+++ b/src/cpu/base.cc
@@ -783,3 +783,9 @@
functionEntryTick = curTick();
}
}
+
+bool
+BaseCPU::waitForRemoteGDB() const
+{
+ return params()->wait_for_remote_gdb;
+}
diff --git a/src/cpu/base.hh b/src/cpu/base.hh
index 14dfc26..b49f302 100644
--- a/src/cpu/base.hh
+++ b/src/cpu/base.hh
@@ -589,6 +589,8 @@
return &addressMonitor[tid];
}
+ bool waitForRemoteGDB() const;
+
Cycles syscallRetryLatency;
};
diff --git a/src/sim/system.cc b/src/sim/system.cc
index e46c356..42cd5e7 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 @@
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 @@
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);
}
--
To view, visit https://gem5-review.googlesource.com/3963
To unsubscribe, visit https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: I4d62c68ce9adf69344bccbb44f66e30b33715a1c
Gerrit-Change-Number: 3963
Gerrit-PatchSet: 4
Gerrit-Owner: Andreas Sandberg <andreas.sandb...@arm.com>
Gerrit-Reviewer: Andreas Sandberg <andreas.sandb...@arm.com>
Gerrit-Reviewer: Anthony Gutierrez <anthony.gutier...@amd.com>
Gerrit-Reviewer: Gabe Black <gabebl...@google.com>
Gerrit-Reviewer: Jason Lowe-Power <ja...@lowepower.com>
_______________________________________________
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev