diff options
author | Liam <byteslice@airmail.cc> | 2023-08-14 22:33:27 +0200 |
---|---|---|
committer | Liam <byteslice@airmail.cc> | 2023-08-14 22:33:27 +0200 |
commit | fbda084acb85cbd9f0a42bd17e89fd89cc460f31 (patch) | |
tree | 22aca43e286747f8163b6cf4f9d0e3a53900fcc7 | |
parent | Merge pull request #11282 from ameerj/glasm-xfb (diff) | |
download | yuzu-fbda084acb85cbd9f0a42bd17e89fd89cc460f31.tar yuzu-fbda084acb85cbd9f0a42bd17e89fd89cc460f31.tar.gz yuzu-fbda084acb85cbd9f0a42bd17e89fd89cc460f31.tar.bz2 yuzu-fbda084acb85cbd9f0a42bd17e89fd89cc460f31.tar.lz yuzu-fbda084acb85cbd9f0a42bd17e89fd89cc460f31.tar.xz yuzu-fbda084acb85cbd9f0a42bd17e89fd89cc460f31.tar.zst yuzu-fbda084acb85cbd9f0a42bd17e89fd89cc460f31.zip |
-rw-r--r-- | src/core/debugger/gdbstub.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/core/debugger/gdbstub.cpp b/src/core/debugger/gdbstub.cpp index 0f839d5b4..e55831f27 100644 --- a/src/core/debugger/gdbstub.cpp +++ b/src/core/debugger/gdbstub.cpp @@ -263,6 +263,23 @@ void GDBStub::ExecuteCommand(std::string_view packet, std::vector<DebuggerAction std::vector<u8> mem(size); if (system.ApplicationMemory().ReadBlock(addr, mem.data(), size)) { + // Restore any bytes belonging to replaced instructions. + auto it = replaced_instructions.lower_bound(addr); + for (; it != replaced_instructions.end() && it->first < addr + size; it++) { + // Get the bytes of the instruction we previously replaced. + const u32 original_bytes = it->second; + + // Calculate where to start writing to the output buffer. + const size_t output_offset = it->first - addr; + + // Calculate how many bytes to write. + // The loop condition ensures output_offset < size. + const size_t n = std::min<size_t>(size - output_offset, sizeof(u32)); + + // Write the bytes to the output buffer. + std::memcpy(mem.data() + output_offset, &original_bytes, n); + } + SendReply(Common::HexToString(mem)); } else { SendReply(GDB_STUB_REPLY_ERR); |