From 5bf88bf7a1ab63b9e588017e7698ae3c28404eee Mon Sep 17 00:00:00 2001 From: Earl Ou Date: Mon, 31 Oct 2022 22:36:29 -0700 Subject: [PATCH] sim: allow specifying remote gdb port for each workload In a platform with multiple systems, we may want to specify the remote gdb port for each system. This change makes it possible to specify the port number at each Workload instance. Change-Id: I755b3960ee920ae5289819aa05d98902614a5615 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/65151 Maintainer: Earl Ou Reviewed-by: Yu-hsin Wang Tested-by: kokoro --- src/arch/arm/fs_workload.hh | 3 ++- src/arch/arm/se_workload.hh | 5 +++-- src/arch/mips/se_workload.hh | 5 +++-- src/arch/power/se_workload.hh | 5 +++-- src/arch/riscv/bare_metal/fs_workload.hh | 3 ++- src/arch/riscv/linux/fs_workload.hh | 3 ++- src/arch/riscv/se_workload.hh | 5 +++-- src/arch/sparc/fs_workload.hh | 4 +++- src/arch/sparc/se_workload.hh | 5 ++++- src/arch/x86/fs_workload.hh | 5 +++-- src/arch/x86/linux/se_workload.hh | 5 +++-- src/base/remote_gdb.hh | 3 +-- src/python/m5/debug.py | 2 +- src/python/m5/main.py | 2 -- src/python/pybind11/debug.cc | 1 - src/sim/Workload.py | 3 +++ src/sim/debug.cc | 16 ---------------- src/sim/debug.hh | 4 ---- .../gem5_within_systemc/sc_gem5_control.cc | 6 ------ .../gem5_within_systemc/sc_gem5_control.hh | 4 ---- 20 files changed, 36 insertions(+), 53 deletions(-) diff --git a/src/arch/arm/fs_workload.hh b/src/arch/arm/fs_workload.hh index 547bbf1e70..0811f3d6c7 100644 --- a/src/arch/arm/fs_workload.hh +++ b/src/arch/arm/fs_workload.hh @@ -153,7 +153,8 @@ class FsWorkload : public KernelWorkload setSystem(System *sys) override { KernelWorkload::setSystem(sys); - gdb = BaseRemoteGDB::build(system); + gdb = BaseRemoteGDB::build( + params().remote_gdb_port, system); } Addr diff --git a/src/arch/arm/se_workload.hh b/src/arch/arm/se_workload.hh index deb5d3b906..f0bf0eb7d9 100644 --- a/src/arch/arm/se_workload.hh +++ b/src/arch/arm/se_workload.hh @@ -42,7 +42,7 @@ namespace ArmISA class SEWorkload : public gem5::SEWorkload { public: - using Params = ArmSEWorkloadParams; + PARAMS(ArmSEWorkload); SEWorkload(const Params &p, Addr page_shift) : gem5::SEWorkload(p, page_shift) @@ -52,7 +52,8 @@ class SEWorkload : public gem5::SEWorkload setSystem(System *sys) override { gem5::SEWorkload::setSystem(sys); - gdb = BaseRemoteGDB::build(system); + gdb = BaseRemoteGDB::build( + params().remote_gdb_port, system); } loader::Arch getArch() const override { return loader::Arm64; } diff --git a/src/arch/mips/se_workload.hh b/src/arch/mips/se_workload.hh index d5184dd708..dc6f1dd5e3 100644 --- a/src/arch/mips/se_workload.hh +++ b/src/arch/mips/se_workload.hh @@ -44,7 +44,7 @@ namespace MipsISA class SEWorkload : public gem5::SEWorkload { public: - using Params = MipsSEWorkloadParams; + PARAMS(MipsSEWorkload); SEWorkload(const Params &p, Addr page_shift) : gem5::SEWorkload(p, page_shift) @@ -54,7 +54,8 @@ class SEWorkload : public gem5::SEWorkload setSystem(System *sys) override { gem5::SEWorkload::setSystem(sys); - gdb = BaseRemoteGDB::build(system); + gdb = BaseRemoteGDB::build( + params().remote_gdb_port, system); } loader::Arch getArch() const override { return loader::Mips; } diff --git a/src/arch/power/se_workload.hh b/src/arch/power/se_workload.hh index f3c7b3523b..d041c45728 100644 --- a/src/arch/power/se_workload.hh +++ b/src/arch/power/se_workload.hh @@ -45,7 +45,7 @@ namespace PowerISA class SEWorkload : public gem5::SEWorkload { public: - using Params = PowerSEWorkloadParams; + PARAMS(PowerSEWorkload); SEWorkload(const Params &p, Addr page_shift) : gem5::SEWorkload(p, page_shift) {} @@ -54,7 +54,8 @@ class SEWorkload : public gem5::SEWorkload setSystem(System *sys) override { gem5::SEWorkload::setSystem(sys); - gdb = BaseRemoteGDB::build(system); + gdb = BaseRemoteGDB::build( + params().remote_gdb_port, system); } loader::Arch getArch() const override { return loader::Power; } diff --git a/src/arch/riscv/bare_metal/fs_workload.hh b/src/arch/riscv/bare_metal/fs_workload.hh index e10c0a0433..35f42555df 100644 --- a/src/arch/riscv/bare_metal/fs_workload.hh +++ b/src/arch/riscv/bare_metal/fs_workload.hh @@ -60,7 +60,8 @@ class BareMetal : public Workload setSystem(System *sys) override { Workload::setSystem(sys); - gdb = BaseRemoteGDB::build(system); + gdb = BaseRemoteGDB::build( + params().remote_gdb_port, system); } loader::Arch getArch() const override { return bootloader->getArch(); } diff --git a/src/arch/riscv/linux/fs_workload.hh b/src/arch/riscv/linux/fs_workload.hh index cb29beeafc..1dc704d906 100644 --- a/src/arch/riscv/linux/fs_workload.hh +++ b/src/arch/riscv/linux/fs_workload.hh @@ -51,7 +51,8 @@ class FsLinux : public KernelWorkload setSystem(System *sys) override { KernelWorkload::setSystem(sys); - gdb = BaseRemoteGDB::build(system); + gdb = BaseRemoteGDB::build( + params().remote_gdb_port, system); } ByteOrder byteOrder() const override { return ByteOrder::little; } diff --git a/src/arch/riscv/se_workload.hh b/src/arch/riscv/se_workload.hh index 02ba6e8724..6f7c2edb70 100644 --- a/src/arch/riscv/se_workload.hh +++ b/src/arch/riscv/se_workload.hh @@ -44,7 +44,7 @@ namespace RiscvISA class SEWorkload : public gem5::SEWorkload { public: - using Params = RiscvSEWorkloadParams; + PARAMS(RiscvSEWorkload); SEWorkload(const Params &p, Addr page_shift) : gem5::SEWorkload(p, page_shift) @@ -54,7 +54,8 @@ class SEWorkload : public gem5::SEWorkload setSystem(System *sys) override { gem5::SEWorkload::setSystem(sys); - gdb = BaseRemoteGDB::build(system); + gdb = BaseRemoteGDB::build( + params().remote_gdb_port, system); } loader::Arch getArch() const override { return loader::Riscv64; } diff --git a/src/arch/sparc/fs_workload.hh b/src/arch/sparc/fs_workload.hh index 90d5131a21..3e901a4465 100644 --- a/src/arch/sparc/fs_workload.hh +++ b/src/arch/sparc/fs_workload.hh @@ -46,6 +46,7 @@ class FsWorkload : public Workload loader::SymbolTable defaultSymtab; public: + PARAMS(SparcFsWorkload); FsWorkload(const SparcFsWorkloadParams ¶ms) : Workload(params) {} void initState() override; @@ -53,7 +54,8 @@ class FsWorkload : public Workload setSystem(System *sys) override { Workload::setSystem(sys); - gdb = BaseRemoteGDB::build(system); + gdb = BaseRemoteGDB::build( + params().remote_gdb_port, system); } Addr diff --git a/src/arch/sparc/se_workload.hh b/src/arch/sparc/se_workload.hh index f30f193882..8cb373ac90 100644 --- a/src/arch/sparc/se_workload.hh +++ b/src/arch/sparc/se_workload.hh @@ -35,6 +35,7 @@ #include "arch/sparc/remote_gdb.hh" #include "base/loader/object_file.hh" #include "cpu/thread_context.hh" +#include "params/SparcSEWorkload.hh" #include "sim/se_workload.hh" #include "sim/syscall_abi.hh" @@ -47,13 +48,15 @@ namespace SparcISA class SEWorkload : public gem5::SEWorkload { public: + PARAMS(SparcSEWorkload); using gem5::SEWorkload::SEWorkload; void setSystem(System *sys) override { gem5::SEWorkload::setSystem(sys); - gdb = BaseRemoteGDB::build(system); + gdb = BaseRemoteGDB::build( + params().remote_gdb_port, system); } virtual void handleTrap(ThreadContext *tc, int trapNum); diff --git a/src/arch/x86/fs_workload.hh b/src/arch/x86/fs_workload.hh index 5edadaed87..b40b69b3c4 100644 --- a/src/arch/x86/fs_workload.hh +++ b/src/arch/x86/fs_workload.hh @@ -78,7 +78,7 @@ void installSegDesc(ThreadContext *tc, int seg, SegDescriptor desc, class FsWorkload : public KernelWorkload { public: - using Params = X86FsWorkloadParams; + PARAMS(X86FsWorkload); FsWorkload(const Params &p); public: @@ -88,7 +88,8 @@ class FsWorkload : public KernelWorkload setSystem(System *sys) override { KernelWorkload::setSystem(sys); - gdb = BaseRemoteGDB::build(system); + gdb = BaseRemoteGDB::build( + params().remote_gdb_port, system); } ByteOrder byteOrder() const override { return ByteOrder::little; } diff --git a/src/arch/x86/linux/se_workload.hh b/src/arch/x86/linux/se_workload.hh index d1e613f1e9..f170776d82 100644 --- a/src/arch/x86/linux/se_workload.hh +++ b/src/arch/x86/linux/se_workload.hh @@ -57,7 +57,7 @@ namespace X86ISA class EmuLinux : public SEWorkload { public: - using Params = X86EmuLinuxParams; + PARAMS(X86EmuLinux); EmuLinux(const Params &p); @@ -65,7 +65,8 @@ class EmuLinux : public SEWorkload setSystem(System *sys) override { SEWorkload::setSystem(sys); - gdb = BaseRemoteGDB::build(system); + gdb = BaseRemoteGDB::build( + params().remote_gdb_port, system); } loader::Arch getArch() const override { return loader::X86_64; } diff --git a/src/base/remote_gdb.hh b/src/base/remote_gdb.hh index d4a8a5b296..ad64bc721c 100644 --- a/src/base/remote_gdb.hh +++ b/src/base/remote_gdb.hh @@ -180,9 +180,8 @@ class BaseRemoteGDB template static BaseRemoteGDB * - build(Args... args) + build(int port, Args... args) { - int port = getRemoteGDBPort(); if (port) return new GDBStub(args..., port); else diff --git a/src/python/m5/debug.py b/src/python/m5/debug.py index f5a9d4dbcb..70af2e0f3a 100644 --- a/src/python/m5/debug.py +++ b/src/python/m5/debug.py @@ -28,7 +28,7 @@ from collections.abc import Mapping import _m5.debug from _m5.debug import SimpleFlag, CompoundFlag -from _m5.debug import schedBreak, setRemoteGDBPort +from _m5.debug import schedBreak from m5.util import printList diff --git a/src/python/m5/main.py b/src/python/m5/main.py index 205f3f1340..458e143a53 100644 --- a/src/python/m5/main.py +++ b/src/python/m5/main.py @@ -519,8 +519,6 @@ def main(): if not options.allow_remote_connections: m5.listenersLoopbackOnly() - # set debugging options - debug.setRemoteGDBPort(options.remote_gdb_port) for when in options.debug_break: debug.schedBreak(int(when)) diff --git a/src/python/pybind11/debug.cc b/src/python/pybind11/debug.cc index 9ac87246f2..313ca81e6e 100644 --- a/src/python/pybind11/debug.cc +++ b/src/python/pybind11/debug.cc @@ -86,7 +86,6 @@ pybind_init_debug(py::module_ &m_native) .def("allFlags", &debug::allFlags, py::return_value_policy::reference) .def("schedBreak", &schedBreak) - .def("setRemoteGDBPort", &setRemoteGDBPort) ; py::class_ c_flag(m_debug, "Flag"); diff --git a/src/sim/Workload.py b/src/sim/Workload.py index b46c32fb48..f5139e1dd8 100644 --- a/src/sim/Workload.py +++ b/src/sim/Workload.py @@ -36,6 +36,9 @@ class Workload(SimObject): abstract = True wait_for_remote_gdb = Param.Bool(False, "Wait for a remote GDB connection") + remote_gdb_port = Param.Int( + 7000, "Default port number used for remote GDB connection" + ) @cxxMethod def sendToGdb(self, message): diff --git a/src/sim/debug.cc b/src/sim/debug.cc index 85bfb97ab3..55b28f7d6e 100644 --- a/src/sim/debug.cc +++ b/src/sim/debug.cc @@ -114,20 +114,4 @@ eventqDump() } } -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; -} - } // namespace gem5 diff --git a/src/sim/debug.hh b/src/sim/debug.hh index ed593040c8..e1c537dc86 100644 --- a/src/sim/debug.hh +++ b/src/sim/debug.hh @@ -60,10 +60,6 @@ void takeCheckpoint(Tick when); */ void eventqDump(); -int getRemoteGDBPort(); -// Remote gdb base port. 0 disables remote gdb. -void setRemoteGDBPort(int port); - } // namespace gem5 #endif // __SIM_DEBUG_HH__ diff --git a/util/systemc/gem5_within_systemc/sc_gem5_control.cc b/util/systemc/gem5_within_systemc/sc_gem5_control.cc index db2f00f407..a9b9fd5f83 100644 --- a/util/systemc/gem5_within_systemc/sc_gem5_control.cc +++ b/util/systemc/gem5_within_systemc/sc_gem5_control.cc @@ -174,12 +174,6 @@ Gem5Control::clearDebugFlag(const char *flag) ::gem5::clearDebugFlag(flag); } -void -Gem5Control::setRemoteGDBPort(unsigned int port) -{ - ::gem5::setRemoteGDBPort(port); -} - Gem5System * Gem5Control::makeSystem(const std::string &system_name, const std::string &instance_name) diff --git a/util/systemc/gem5_within_systemc/sc_gem5_control.hh b/util/systemc/gem5_within_systemc/sc_gem5_control.hh index f74e001fc8..2959ba2e04 100644 --- a/util/systemc/gem5_within_systemc/sc_gem5_control.hh +++ b/util/systemc/gem5_within_systemc/sc_gem5_control.hh @@ -142,10 +142,6 @@ class Gem5Control virtual void setDebugFlag(const char *flag); virtual void clearDebugFlag(const char *flag); - /** Choose a base port number for GDB to connect to the model - * (0 disables connections) */ - virtual void setRemoteGDBPort(unsigned int port); - /* Register an action to happen at the end of elaboration */ virtual void registerEndOfElaboration(void (*func)());