From f0f6e5f4aea26eb644a011844a3e80cdbee5de4e Mon Sep 17 00:00:00 2001 From: aldelaro5 Date: Fri, 31 Dec 2021 10:22:23 -0500 Subject: [PATCH] GDB Stub: Add memory map xml This allows gdb to know the mapping which is mainly useful when we have MMU off and we can make reasonable assumptions about where the memory would be. --- Source/Core/Core/PowerPC/GDBStub.cpp | 39 +++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/Source/Core/Core/PowerPC/GDBStub.cpp b/Source/Core/Core/PowerPC/GDBStub.cpp index 2eb67059df..98f04ba0cb 100644 --- a/Source/Core/Core/PowerPC/GDBStub.cpp +++ b/Source/Core/Core/PowerPC/GDBStub.cpp @@ -29,6 +29,7 @@ typedef SSIZE_T ssize_t; #include "Common/Logging/Log.h" #include "Common/SocketContext.h" #include "Common/StringUtil.h" +#include "Core/Config/MainSettings.h" #include "Core/Core.h" #include "Core/HW/CPU.h" #include "Core/HW/Memmap.h" @@ -67,6 +68,19 @@ constexpr int MACH_O_POWERPC_750 = 9; const s64 GDB_UPDATE_CYCLES = 100000; const char* QUERY_XFER_TARGET = "qXfer:features:read:target.xml:"; +const char* QUERY_XFER_MEMORY_MAP = "qXfer:memory-map:read::"; + +const char* TARGET_MEMORY_MAP_XML_NO_MMU = + "" + "" + "" + "" + ""; + +const char* TARGET_MEMORY_MAP_XML_WITH_MMU = + "" + "" + ""; const char* target_xml = "" "powerpc:750" @@ -567,21 +581,44 @@ static void HandleQuery() DEBUG_LOG_FMT(GDB_STUB, "gdb: query '{}'", CommandBufferAsString()); if (!strncmp((const char*)(s_cmd_bfr), "qAttached", strlen("qAttached"))) + { return SendReply("1"); + } if (!strcmp((const char*)(s_cmd_bfr), "qC")) + { return SendReply("QC1"); + } if (!strcmp((const char*)(s_cmd_bfr), "qfThreadInfo")) + { return SendReply("m1"); + } else if (!strcmp((const char*)(s_cmd_bfr), "qsThreadInfo")) + { return SendReply("l"); + } else if (!strncmp((const char*)(s_cmd_bfr), "qThreadExtraInfo", strlen("qThreadExtraInfo"))) + { return SendReply("00"); + } else if (!strncmp((const char*)(s_cmd_bfr), "qHostInfo", strlen("qHostInfo"))) + { return WriteHostInfo(); + } else if (!strncmp((const char*)(s_cmd_bfr), "qSupported", strlen("qSupported"))) - return SendReply("swbreak+;hwbreak+;qXfer:features:read+"); + { + return SendReply("swbreak+;hwbreak+;qXfer:features:read+;qXfer:memory-map:read+"); + } else if (!strncmp((const char*)(s_cmd_bfr), QUERY_XFER_TARGET, strlen(QUERY_XFER_TARGET))) + { return ProcessXFerCommand(target_xml, strlen(QUERY_XFER_TARGET)); + } + else if (!strncmp((const char*)(s_cmd_bfr), QUERY_XFER_MEMORY_MAP, strlen(QUERY_XFER_MEMORY_MAP))) + { + const char* memoryMapXml = TARGET_MEMORY_MAP_XML_NO_MMU; + if (Config::Get(Config::MAIN_MMU)) + memoryMapXml = TARGET_MEMORY_MAP_XML_WITH_MMU; + return ProcessXFerCommand(memoryMapXml, strlen(QUERY_XFER_MEMORY_MAP)); + } SendReply(""); }