From f0a62447685287d1919c60de7071b953632d2c47 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Sat, 9 Jan 2021 21:56:46 -0800 Subject: [PATCH] msbuild: enable USE_GDBSTUB this does nothing about it actually being usable --- Source/Core/Core/Core.vcxproj | 2 + Source/Core/Core/Core.vcxproj.filters | 6 + Source/Core/Core/PowerPC/GDBStub.cpp | 156 ++++++++++++++------------ Source/Core/Core/PowerPC/GDBStub.h | 2 +- Source/VSProps/Base.props | 1 + 5 files changed, 97 insertions(+), 70 deletions(-) diff --git a/Source/Core/Core/Core.vcxproj b/Source/Core/Core/Core.vcxproj index b2cc380db8..efcec09564 100644 --- a/Source/Core/Core/Core.vcxproj +++ b/Source/Core/Core/Core.vcxproj @@ -242,6 +242,7 @@ + @@ -600,6 +601,7 @@ + diff --git a/Source/Core/Core/Core.vcxproj.filters b/Source/Core/Core/Core.vcxproj.filters index 78c9fe01ec..a30d217970 100644 --- a/Source/Core/Core/Core.vcxproj.filters +++ b/Source/Core/Core/Core.vcxproj.filters @@ -326,6 +326,9 @@ PowerPC + + PowerPC + PowerPC\Cached Interpreter @@ -1390,6 +1393,9 @@ PowerPC + + PowerPC + PowerPC diff --git a/Source/Core/Core/PowerPC/GDBStub.cpp b/Source/Core/Core/PowerPC/GDBStub.cpp index d2b635aae7..20a0ed5939 100644 --- a/Source/Core/Core/PowerPC/GDBStub.cpp +++ b/Source/Core/Core/PowerPC/GDBStub.cpp @@ -5,17 +5,21 @@ // Originally written by Sven Peter for anergistic. #include +#include #include #include -#include #ifdef _WIN32 +#include #include #include +typedef SSIZE_T ssize_t; +#define SHUT_RDWR SD_BOTH #else #include #include #include #include +#include #endif #include "Common/Logging/Log.h" @@ -108,7 +112,7 @@ static u8 gdb_read_byte() { u8 c = '+'; - const ssize_t res = recv(sock, &c, 1, MSG_WAITALL); + const ssize_t res = recv(sock, (char*)&c, 1, MSG_WAITALL); if (res != 1) { ERROR_LOG_FMT(GDB_STUB, "recv failed : {}", res); @@ -319,7 +323,7 @@ static void gdb_reply(const char* reply) memset(cmd_bfr, 0, sizeof cmd_bfr); - cmd_len = strlen(reply); + cmd_len = (u32)strlen(reply); if (cmd_len + 4 > sizeof cmd_bfr) ERROR_LOG_FMT(GDB_STUB, "cmd_bfr overflow in gdb_reply"); @@ -335,7 +339,7 @@ static void gdb_reply(const char* reply) DEBUG_LOG_FMT(GDB_STUB, "gdb: reply (len: {}): {}", cmd_len, CommandBufferAsString()); - u8* ptr = cmd_bfr; + const char* ptr = (const char*)cmd_bfr; u32 left = cmd_len + 4; while (left > 0) { @@ -427,41 +431,46 @@ static void gdb_read_register() id |= hex2char(cmd_bfr[2]); } - switch (id) + if (id < 32) { - case 0 ... 31: wbe32hex(reply, GPR(id)); - break; - case 32 ... 63: + } + else if (id >= 32 && id < 64) + { wbe64hex(reply, rPS(id - 32).PS0AsU64()); - break; - case 64: - wbe32hex(reply, PC); - break; - case 65: - wbe32hex(reply, MSR.Hex); - break; - case 66: - wbe32hex(reply, PowerPC::ppcState.cr.Get()); - break; - case 67: - wbe32hex(reply, LR); - break; - case 68: - wbe32hex(reply, CTR); - break; - case 69: - wbe32hex(reply, PowerPC::ppcState.spr[SPR_XER]); - break; - case 70: - wbe32hex(reply, 0x0BADC0DE); - break; - case 71: - wbe32hex(reply, FPSCR.Hex); - break; - default: - return gdb_reply("E01"); - break; + } + else + { + switch (id) + { + case 64: + wbe32hex(reply, PC); + break; + case 65: + wbe32hex(reply, MSR.Hex); + break; + case 66: + wbe32hex(reply, PowerPC::ppcState.cr.Get()); + break; + case 67: + wbe32hex(reply, LR); + break; + case 68: + wbe32hex(reply, CTR); + break; + case 69: + wbe32hex(reply, PowerPC::ppcState.spr[SPR_XER]); + break; + case 70: + wbe32hex(reply, 0x0BADC0DE); + break; + case 71: + wbe32hex(reply, FPSCR.Hex); + break; + default: + return gdb_reply("E01"); + break; + } } gdb_reply((char*)reply); @@ -512,41 +521,46 @@ static void gdb_write_register() id |= hex2char(cmd_bfr[2]); } - switch (id) + if (id < 32) { - case 0 ... 31: GPR(id) = re32hex(bufptr); - break; - case 32 ... 63: + } + else if (id >= 32 && id < 64) + { rPS(id - 32).SetPS0(re64hex(bufptr)); - break; - case 64: - PC = re32hex(bufptr); - break; - case 65: - MSR.Hex = re32hex(bufptr); - break; - case 66: - PowerPC::ppcState.cr.Set(re32hex(bufptr)); - break; - case 67: - LR = re32hex(bufptr); - break; - case 68: - CTR = re32hex(bufptr); - break; - case 69: - PowerPC::ppcState.spr[SPR_XER] = re32hex(bufptr); - break; - case 70: - // do nothing, we dont have MQ - break; - case 71: - FPSCR.Hex = re32hex(bufptr); - break; - default: - return gdb_reply("E01"); - break; + } + else + { + switch (id) + { + case 64: + PC = re32hex(bufptr); + break; + case 65: + MSR.Hex = re32hex(bufptr); + break; + case 66: + PowerPC::ppcState.cr.Set(re32hex(bufptr)); + break; + case 67: + LR = re32hex(bufptr); + break; + case 68: + CTR = re32hex(bufptr); + break; + case 69: + PowerPC::ppcState.spr[SPR_XER] = re32hex(bufptr); + break; + case 70: + // do nothing, we dont have MQ + break; + case 71: + FPSCR.Hex = re32hex(bufptr); + break; + default: + return gdb_reply("E01"); + break; + } } gdb_reply("OK"); @@ -833,7 +847,7 @@ static void gdb_init_generic(int domain, const sockaddr* server_addr, socklen_t ERROR_LOG_FMT(GDB_STUB, "Failed to create gdb socket"); int on = 1; - if (setsockopt(tmpsock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof on) < 0) + if (setsockopt(tmpsock, SOL_SOCKET, SO_REUSEADDR, (const char*)&on, sizeof on) < 0) ERROR_LOG_FMT(GDB_STUB, "Failed to setsockopt"); if (bind(tmpsock, server_addr, server_addrlen) < 0) @@ -849,7 +863,11 @@ static void gdb_init_generic(int domain, const sockaddr* server_addr, socklen_t ERROR_LOG_FMT(GDB_STUB, "Failed to accept gdb client"); INFO_LOG_FMT(GDB_STUB, "Client connected."); +#ifdef _WIN32 + closesocket(tmpsock); +#else close(tmpsock); +#endif tmpsock = -1; } diff --git a/Source/Core/Core/PowerPC/GDBStub.h b/Source/Core/Core/PowerPC/GDBStub.h index ab03c460cc..ba9c78963c 100644 --- a/Source/Core/Core/PowerPC/GDBStub.h +++ b/Source/Core/Core/PowerPC/GDBStub.h @@ -8,7 +8,7 @@ #include "Common/CommonTypes.h" -#if defined(_WIN32) || !defined(MSG_WAITALL) +#ifndef MSG_WAITALL #define MSG_WAITALL (8) #endif diff --git a/Source/VSProps/Base.props b/Source/VSProps/Base.props index 804ed54fcc..8b3a3b6d31 100644 --- a/Source/VSProps/Base.props +++ b/Source/VSProps/Base.props @@ -69,6 +69,7 @@ _ARCH_64=1;_M_X86=1;_M_X86_64=1;%(PreprocessorDefinitions) _ARCH_64=1;_M_ARM_64=1;%(PreprocessorDefinitions) HAVE_FFMPEG;%(PreprocessorDefinitions) + USE_GDBSTUB;%(PreprocessorDefinitions)