summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2022-01-03 01:40:16 +0100
committerGitHub <noreply@github.com>2022-01-03 01:40:16 +0100
commit4ee20368f8b5fe16fa19a93852c8563f26ca8856 (patch)
tree4d69ecd2d1a16f845e8b085e5ca1f9a9a52aa762 /Source/Core
parentcbd1c4969d3fb0c17cd3beb4a8560f90c5dedffa (diff)
parent4b131bf1ce748534cc3c0d63b78c24449899f1bf (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.cpp3
-rw-r--r--Source/Core/Core/PowerPC/GDBStub.cpp8
-rw-r--r--Source/Core/Core/PowerPC/GDBStub.h1
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);