diff options
author | Subv <subv2112@gmail.com> | 2017-10-04 18:33:32 +0200 |
---|---|---|
committer | Subv <subv2112@gmail.com> | 2017-10-04 18:33:32 +0200 |
commit | 7772fc07314d568939b0e9c12e4ead47e35d3c86 (patch) | |
tree | 1966d7f0f102bb11852c0111661abbcaab5f8fba | |
parent | Merge pull request #2971 from Subv/per_process_memops (diff) | |
download | yuzu-7772fc07314d568939b0e9c12e4ead47e35d3c86.tar yuzu-7772fc07314d568939b0e9c12e4ead47e35d3c86.tar.gz yuzu-7772fc07314d568939b0e9c12e4ead47e35d3c86.tar.bz2 yuzu-7772fc07314d568939b0e9c12e4ead47e35d3c86.tar.lz yuzu-7772fc07314d568939b0e9c12e4ead47e35d3c86.tar.xz yuzu-7772fc07314d568939b0e9c12e4ead47e35d3c86.tar.zst yuzu-7772fc07314d568939b0e9c12e4ead47e35d3c86.zip |
-rw-r--r-- | src/core/gdbstub/gdbstub.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/core/gdbstub/gdbstub.cpp b/src/core/gdbstub/gdbstub.cpp index be2b2e25f..d6be16ef6 100644 --- a/src/core/gdbstub/gdbstub.cpp +++ b/src/core/gdbstub/gdbstub.cpp @@ -644,7 +644,7 @@ static void ReadMemory() { auto start_offset = command_buffer + 1; auto addr_pos = std::find(start_offset, command_buffer + command_length, ','); - PAddr addr = HexToInt(start_offset, static_cast<u32>(addr_pos - start_offset)); + VAddr addr = HexToInt(start_offset, static_cast<u32>(addr_pos - start_offset)); start_offset = addr_pos + 1; u32 len = @@ -656,12 +656,14 @@ static void ReadMemory() { SendReply("E01"); } - const u8* data = Memory::GetPointer(addr); - if (!data) { + if (!Memory::IsValidVirtualAddress(addr)) { return SendReply("E00"); } - MemToGdbHex(reply, data, len); + std::vector<u8> data(len); + Memory::ReadBlock(addr, data.data(), len); + + MemToGdbHex(reply, data.data(), len); reply[len * 2] = '\0'; SendReply(reinterpret_cast<char*>(reply)); } @@ -670,18 +672,20 @@ static void ReadMemory() { static void WriteMemory() { auto start_offset = command_buffer + 1; auto addr_pos = std::find(start_offset, command_buffer + command_length, ','); - PAddr addr = HexToInt(start_offset, static_cast<u32>(addr_pos - start_offset)); + VAddr addr = HexToInt(start_offset, static_cast<u32>(addr_pos - start_offset)); start_offset = addr_pos + 1; auto len_pos = std::find(start_offset, command_buffer + command_length, ':'); u32 len = HexToInt(start_offset, static_cast<u32>(len_pos - start_offset)); - u8* dst = Memory::GetPointer(addr); - if (!dst) { + if (!Memory::IsValidVirtualAddress(addr)) { return SendReply("E00"); } - GdbHexToMem(dst, len_pos + 1, len); + std::vector<u8> data(len); + + GdbHexToMem(data.data(), len_pos + 1, len); + Memory::WriteBlock(addr, data.data(), len); SendReply("OK"); } |