summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSubv <subv2112@gmail.com>2017-10-04 18:33:32 +0200
committerSubv <subv2112@gmail.com>2017-10-04 18:33:32 +0200
commit7772fc07314d568939b0e9c12e4ead47e35d3c86 (patch)
tree1966d7f0f102bb11852c0111661abbcaab5f8fba
parentMerge pull request #2971 from Subv/per_process_memops (diff)
downloadyuzu-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.cpp20
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");
}