diff options
Diffstat (limited to 'src/core/gdbstub/gdbstub.cpp')
| -rw-r--r-- | src/core/gdbstub/gdbstub.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/core/gdbstub/gdbstub.cpp b/src/core/gdbstub/gdbstub.cpp index 0ecdd9f82..d8c7b3492 100644 --- a/src/core/gdbstub/gdbstub.cpp +++ b/src/core/gdbstub/gdbstub.cpp | |||
| @@ -37,7 +37,9 @@ | |||
| 37 | #include "core/core.h" | 37 | #include "core/core.h" |
| 38 | #include "core/core_cpu.h" | 38 | #include "core/core_cpu.h" |
| 39 | #include "core/gdbstub/gdbstub.h" | 39 | #include "core/gdbstub/gdbstub.h" |
| 40 | #include "core/hle/kernel/process.h" | ||
| 40 | #include "core/hle/kernel/scheduler.h" | 41 | #include "core/hle/kernel/scheduler.h" |
| 42 | #include "core/hle/kernel/vm_manager.h" | ||
| 41 | #include "core/loader/loader.h" | 43 | #include "core/loader/loader.h" |
| 42 | #include "core/memory.h" | 44 | #include "core/memory.h" |
| 43 | 45 | ||
| @@ -585,7 +587,8 @@ static void HandleQuery() { | |||
| 585 | strlen("Xfer:features:read:target.xml:")) == 0) { | 587 | strlen("Xfer:features:read:target.xml:")) == 0) { |
| 586 | SendReply(target_xml); | 588 | SendReply(target_xml); |
| 587 | } else if (strncmp(query, "Offsets", strlen("Offsets")) == 0) { | 589 | } else if (strncmp(query, "Offsets", strlen("Offsets")) == 0) { |
| 588 | std::string buffer = fmt::format("TextSeg={:0x}", Memory::PROCESS_IMAGE_VADDR); | 590 | const VAddr base_address = Core::CurrentProcess()->vm_manager.GetCodeRegionBaseAddress(); |
| 591 | std::string buffer = fmt::format("TextSeg={:0x}", base_address); | ||
| 589 | SendReply(buffer.c_str()); | 592 | SendReply(buffer.c_str()); |
| 590 | } else if (strncmp(query, "fThreadInfo", strlen("fThreadInfo")) == 0) { | 593 | } else if (strncmp(query, "fThreadInfo", strlen("fThreadInfo")) == 0) { |
| 591 | std::string val = "m"; | 594 | std::string val = "m"; |
| @@ -893,11 +896,11 @@ static void ReadMemory() { | |||
| 893 | static u8 reply[GDB_BUFFER_SIZE - 4]; | 896 | static u8 reply[GDB_BUFFER_SIZE - 4]; |
| 894 | 897 | ||
| 895 | auto start_offset = command_buffer + 1; | 898 | auto start_offset = command_buffer + 1; |
| 896 | auto addr_pos = std::find(start_offset, command_buffer + command_length, ','); | 899 | const auto addr_pos = std::find(start_offset, command_buffer + command_length, ','); |
| 897 | VAddr addr = HexToLong(start_offset, static_cast<u64>(addr_pos - start_offset)); | 900 | const VAddr addr = HexToLong(start_offset, static_cast<u64>(addr_pos - start_offset)); |
| 898 | 901 | ||
| 899 | start_offset = addr_pos + 1; | 902 | start_offset = addr_pos + 1; |
| 900 | u64 len = | 903 | const u64 len = |
| 901 | HexToLong(start_offset, static_cast<u64>((command_buffer + command_length) - start_offset)); | 904 | HexToLong(start_offset, static_cast<u64>((command_buffer + command_length) - start_offset)); |
| 902 | 905 | ||
| 903 | LOG_DEBUG(Debug_GDBStub, "gdb: addr: {:016X} len: {:016X}", addr, len); | 906 | LOG_DEBUG(Debug_GDBStub, "gdb: addr: {:016X} len: {:016X}", addr, len); |
| @@ -906,7 +909,9 @@ static void ReadMemory() { | |||
| 906 | SendReply("E01"); | 909 | SendReply("E01"); |
| 907 | } | 910 | } |
| 908 | 911 | ||
| 909 | if (addr < Memory::PROCESS_IMAGE_VADDR || addr >= Memory::MAP_REGION_VADDR_END) { | 912 | const auto& vm_manager = Core::CurrentProcess()->vm_manager; |
| 913 | if (addr < vm_manager.GetCodeRegionBaseAddress() || | ||
| 914 | addr >= vm_manager.GetMapRegionEndAddress()) { | ||
| 910 | return SendReply("E00"); | 915 | return SendReply("E00"); |
| 911 | } | 916 | } |
| 912 | 917 | ||