From 4b131bf1ce748534cc3c0d63b78c24449899f1bf Mon Sep 17 00:00:00 2001 From: aldelaro5 Date: Sun, 2 Jan 2022 04:35:55 -0500 Subject: [PATCH] GDB Stub: do not send a packet when we just connected --- Source/Core/Core/HW/CPU.cpp | 3 ++- Source/Core/Core/PowerPC/GDBStub.cpp | 8 ++++++++ Source/Core/Core/PowerPC/GDBStub.h | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) 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 530c9cdecb..01782db6e8 100644 --- a/Source/Core/Core/PowerPC/GDBStub.cpp +++ b/Source/Core/Core/PowerPC/GDBStub.cpp @@ -61,6 +61,7 @@ enum class BreakpointType 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; @@ -898,6 +899,7 @@ static void HandleRemoveBreakpoint() void ProcessCommands(bool loop_until_continue) { + s_just_connected = false; while (IsActive()) { if (CPU::GetState() == CPU::State::PowerDown) @@ -1038,6 +1040,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); @@ -1083,6 +1086,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);