diff options
| author | Léo Lam <leo@leolam.fr> | 2022-01-03 01:40:16 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-03 01:40:16 +0100 |
| commit | 4ee20368f8b5fe16fa19a93852c8563f26ca8856 (patch) | |
| tree | 4d69ecd2d1a16f845e8b085e5ca1f9a9a52aa762 /Source/Core | |
| parent | cbd1c4969d3fb0c17cd3beb4a8560f90c5dedffa (diff) | |
| parent | 4b131bf1ce748534cc3c0d63b78c24449899f1bf (diff) | |
Merge pull request #10336 from aldelaro5/gdb-stub-fix-first-packet
GDB Stub: do not send a packet when we just connected
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/HW/CPU.cpp | 3 | ||||
| -rw-r--r-- | Source/Core/Core/PowerPC/GDBStub.cpp | 8 | ||||
| -rw-r--r-- | Source/Core/Core/PowerPC/GDBStub.h | 1 |
3 files changed, 11 insertions, 1 deletions
diff --git a/Source/Core/Core/HW/CPU.cpp b/Source/Core/Core/HW/CPU.cpp index 766eb01f7b..1325cce402 100644 --- a/Source/Core/Core/HW/CPU.cpp +++ b/Source/Core/Core/HW/CPU.cpp @@ -136,7 +136,8 @@ void Run() state_lock.unlock(); if (GDBStub::IsActive() && GDBStub::HasControl()) { - GDBStub::SendSignal(GDBStub::Signal::Sigtrap); + if (!GDBStub::JustConnected()) + GDBStub::SendSignal(GDBStub::Signal::Sigtrap); GDBStub::ProcessCommands(true); // If we are still going to step, emulate the fact we just sent a step command if (GDBStub::HasControl()) diff --git a/Source/Core/Core/PowerPC/GDBStub.cpp b/Source/Core/Core/PowerPC/GDBStub.cpp index f1631e77d8..e3b214b586 100644 --- a/Source/Core/Core/PowerPC/GDBStub.cpp +++ b/Source/Core/Core/PowerPC/GDBStub.cpp @@ -63,6 +63,7 @@ constexpr u32 NUM_BREAKPOINT_TYPES = 4; const s64 GDB_UPDATE_CYCLES = 100000; static bool s_has_control = false; +static bool s_just_connected = false; static int s_tmpsock = -1; static int s_sock = -1; @@ -901,6 +902,7 @@ static void HandleRemoveBreakpoint() void ProcessCommands(bool loop_until_continue) { + s_just_connected = false; while (IsActive()) { if (CPU::GetState() == CPU::State::PowerDown) @@ -1041,6 +1043,7 @@ static void InitGeneric(int domain, const sockaddr* server_addr, socklen_t serve if (s_sock < 0) ERROR_LOG_FMT(GDB_STUB, "Failed to accept gdb client"); INFO_LOG_FMT(GDB_STUB, "Client connected."); + s_just_connected = true; #ifdef _WIN32 closesocket(s_tmpsock); @@ -1086,6 +1089,11 @@ void TakeControl() s_has_control = true; } +bool JustConnected() +{ + return s_just_connected; +} + void SendSignal(Signal signal) { char bfr[128] = {}; diff --git a/Source/Core/Core/PowerPC/GDBStub.h b/Source/Core/Core/PowerPC/GDBStub.h index d7580dbf8c..9dfa469d8d 100644 --- a/Source/Core/Core/PowerPC/GDBStub.h +++ b/Source/Core/Core/PowerPC/GDBStub.h @@ -22,6 +22,7 @@ void Deinit(); bool IsActive(); bool HasControl(); void TakeControl(); +bool JustConnected(); void ProcessCommands(bool loop_until_continue); void SendSignal(Signal signal); |
