RemoteGDB: add an m5 command line option for setting or disabling remote gdb.
authorMichael Adler <Michael.Adler@intel.com>
Wed, 23 Jul 2008 21:41:33 +0000 (14:41 -0700)
committerMichael Adler <Michael.Adler@intel.com>
Wed, 23 Jul 2008 21:41:33 +0000 (14:41 -0700)
src/python/m5/main.py
src/python/swig/debug.i
src/sim/debug.cc
src/sim/debug.hh
src/sim/process.cc
src/sim/system.cc

index dbabd9600f6c91fecc63127451d0516ef95e0cb2..2bbd72152db29068541a24198f10fb05f9237f67 100644 (file)
@@ -102,6 +102,8 @@ add_option("--stats-file", metavar="FILE", default="m5stats.txt",
 set_group("Debugging Options")
 add_option("--debug-break", metavar="TIME[,TIME]", action='append', split=',',
     help="Cycle to create a breakpoint")
+add_option("--remote-gdb-port", type='int', default=7000,
+    help="Remote gdb base port")
 
 # Tracing options
 set_group("Trace Options")
@@ -256,6 +258,7 @@ def main():
     internal.stats.initText(options.stats_file)
 
     # set debugging options
+    internal.debug.setRemoteGDBPort(options.remote_gdb_port)
     for when in options.debug_break:
         internal.debug.schedBreakCycle(int(when))
 
index b542e9f82eb0c381341096dcd3eb9a17cf3cfa92..1084d69366cd4f24e2c4b7792c6bdee4963ef63c 100644 (file)
 %module debug
 
 %{
-// include these files when compiling debug_wrap.cc
 #include "sim/host.hh"
+#include "sim/debug.hh"
 %}
 
 %include "stdint.i"
 %include "sim/host.hh"
-
-%inline %{
-extern void schedBreakCycle(Tick when);
-%}
+%include "sim/debug.hh"
 
 %wrapper %{
 // fix up module name to reflect the fact that it's inside the m5 package
index b4f4cd9dc32b252c18c22409ccf0e42ed0bee6ed..36ac4efac836bf6ab9efd2017b057abdad852499 100644 (file)
@@ -108,3 +108,20 @@ eventqDump()
     mainEventQueue.dump();
 }
 
+
+int remote_gdb_base_port = 7000;
+
+int
+getRemoteGDBPort()
+{
+    return remote_gdb_base_port;
+}
+
+// Set remote GDB base port.  0 means disable remote GDB.
+// Callable from python.
+void
+setRemoteGDBPort(int port)
+{
+    remote_gdb_base_port = port;
+}
+
index 79792234be579e89616617fbb277bb09a905ba6d..937864e692b093293cf8015701d74dac25fbddd2 100644 (file)
 #ifndef __DEBUG_HH__
 #define __DEBUG_HH__
 
+#include "sim/host.hh"
+
+void schedBreakCycle(Tick when);
 void debug_break();
 
+int getRemoteGDBPort();
+// Remote gdb base port.  0 disables remote gdb.
+void setRemoteGDBPort(int port);
+
 #endif // __DEBUG_HH__
index 16037b2f42ac85eef54647358bfef0a63defd2da..046a6bf9bb43017ee540f6fdc85893f97fa332aa 100644 (file)
@@ -46,6 +46,7 @@
 #include "mem/translating_port.hh"
 #include "params/Process.hh"
 #include "params/LiveProcess.hh"
+#include "sim/debug.hh"
 #include "sim/process.hh"
 #include "sim/process_impl.hh"
 #include "sim/stats.hh"
@@ -201,12 +202,14 @@ Process::registerThreadContext(ThreadContext *tc)
     int myIndex = threadContexts.size();
     threadContexts.push_back(tc);
 
-    RemoteGDB *rgdb = new RemoteGDB(system, tc);
-    GDBListener *gdbl = new GDBListener(rgdb, 7000 + myIndex);
-    gdbl->listen();
-    //gdbl->accept();
+    int port = getRemoteGDBPort();
+    if (port) {
+        RemoteGDB *rgdb = new RemoteGDB(system, tc);
+        GDBListener *gdbl = new GDBListener(rgdb, port + myIndex);
+        gdbl->listen();
 
-    remoteGDB.push_back(rgdb);
+        remoteGDB.push_back(rgdb);
+    }
 
     // return CPU number to caller
     return myIndex;
index 10b9b1217eb955a8b1553d914ddda4a8908372e3..803881539dabfc9948706636abaeca1d5aeb6cd8 100644 (file)
@@ -42,6 +42,7 @@
 #include "mem/physical.hh"
 #include "sim/byteswap.hh"
 #include "sim/system.hh"
+#include "sim/debug.hh"
 #if FULL_SYSTEM
 #include "arch/vtophys.hh"
 #include "kern/kernel_stats.hh"
@@ -183,9 +184,10 @@ System::registerThreadContext(ThreadContext *tc, int id)
     threadContexts[id] = tc;
     numcpus++;
 
-    if (rgdb_enable) {
+    int port = getRemoteGDBPort();
+    if (rgdb_enable && port) {
         RemoteGDB *rgdb = new RemoteGDB(this, tc);
-        GDBListener *gdbl = new GDBListener(rgdb, 7000 + id);
+        GDBListener *gdbl = new GDBListener(rgdb, port + id);
         gdbl->listen();
         /**
          * Uncommenting this line waits for a remote debugger to