summaryrefslogtreecommitdiff
path: root/src/core/gdbstub/gdbstub.cpp
diff options
context:
space:
mode:
authorGravatar bunnei2017-10-09 23:56:20 -0400
committerGravatar bunnei2017-10-09 23:56:20 -0400
commitb1d5db1cf60344b6b081c9d03cb6ccc3264326cd (patch)
treefde377c4ba3c0f92c032e6f5ec8627aae37270ef /src/core/gdbstub/gdbstub.cpp
parentloader: Various improvements for NSO/NRO loaders. (diff)
parentMerge pull request #2996 from MerryMage/split-travis (diff)
downloadyuzu-b1d5db1cf60344b6b081c9d03cb6ccc3264326cd.tar.gz
yuzu-b1d5db1cf60344b6b081c9d03cb6ccc3264326cd.tar.xz
yuzu-b1d5db1cf60344b6b081c9d03cb6ccc3264326cd.zip
Merge remote-tracking branch 'upstream/master' into nx
# Conflicts: # src/core/CMakeLists.txt # src/core/arm/dynarmic/arm_dynarmic.cpp # src/core/arm/dyncom/arm_dyncom.cpp # src/core/hle/kernel/process.cpp # src/core/hle/kernel/thread.cpp # src/core/hle/kernel/thread.h # src/core/hle/kernel/vm_manager.cpp # src/core/loader/3dsx.cpp # src/core/loader/elf.cpp # src/core/loader/ncch.cpp # src/core/memory.cpp # src/core/memory.h # src/core/memory_setup.h
Diffstat (limited to 'src/core/gdbstub/gdbstub.cpp')
-rw-r--r--src/core/gdbstub/gdbstub.cpp24
1 files changed, 14 insertions, 10 deletions
diff --git a/src/core/gdbstub/gdbstub.cpp b/src/core/gdbstub/gdbstub.cpp
index 123fe7cd4..d6be16ef6 100644
--- a/src/core/gdbstub/gdbstub.cpp
+++ b/src/core/gdbstub/gdbstub.cpp
@@ -644,7 +644,7 @@ static void ReadMemory() {
644 644
645 auto start_offset = command_buffer + 1; 645 auto start_offset = command_buffer + 1;
646 auto addr_pos = std::find(start_offset, command_buffer + command_length, ','); 646 auto addr_pos = std::find(start_offset, command_buffer + command_length, ',');
647 PAddr addr = HexToInt(start_offset, static_cast<u32>(addr_pos - start_offset)); 647 VAddr addr = HexToInt(start_offset, static_cast<u32>(addr_pos - start_offset));
648 648
649 start_offset = addr_pos + 1; 649 start_offset = addr_pos + 1;
650 u32 len = 650 u32 len =
@@ -656,12 +656,14 @@ static void ReadMemory() {
656 SendReply("E01"); 656 SendReply("E01");
657 } 657 }
658 658
659 const u8* data = Memory::GetPointer(addr); 659 if (!Memory::IsValidVirtualAddress(addr)) {
660 if (!data) {
661 return SendReply("E00"); 660 return SendReply("E00");
662 } 661 }
663 662
664 MemToGdbHex(reply, data, len); 663 std::vector<u8> data(len);
664 Memory::ReadBlock(addr, data.data(), len);
665
666 MemToGdbHex(reply, data.data(), len);
665 reply[len * 2] = '\0'; 667 reply[len * 2] = '\0';
666 SendReply(reinterpret_cast<char*>(reply)); 668 SendReply(reinterpret_cast<char*>(reply));
667} 669}
@@ -670,18 +672,20 @@ static void ReadMemory() {
670static void WriteMemory() { 672static void WriteMemory() {
671 auto start_offset = command_buffer + 1; 673 auto start_offset = command_buffer + 1;
672 auto addr_pos = std::find(start_offset, command_buffer + command_length, ','); 674 auto addr_pos = std::find(start_offset, command_buffer + command_length, ',');
673 PAddr addr = HexToInt(start_offset, static_cast<u32>(addr_pos - start_offset)); 675 VAddr addr = HexToInt(start_offset, static_cast<u32>(addr_pos - start_offset));
674 676
675 start_offset = addr_pos + 1; 677 start_offset = addr_pos + 1;
676 auto len_pos = std::find(start_offset, command_buffer + command_length, ':'); 678 auto len_pos = std::find(start_offset, command_buffer + command_length, ':');
677 u32 len = HexToInt(start_offset, static_cast<u32>(len_pos - start_offset)); 679 u32 len = HexToInt(start_offset, static_cast<u32>(len_pos - start_offset));
678 680
679 u8* dst = Memory::GetPointer(addr); 681 if (!Memory::IsValidVirtualAddress(addr)) {
680 if (!dst) {
681 return SendReply("E00"); 682 return SendReply("E00");
682 } 683 }
683 684
684 GdbHexToMem(dst, len_pos + 1, len); 685 std::vector<u8> data(len);
686
687 GdbHexToMem(data.data(), len_pos + 1, len);
688 Memory::WriteBlock(addr, data.data(), len);
685 SendReply("OK"); 689 SendReply("OK");
686} 690}
687 691
@@ -946,7 +950,7 @@ static void Init(u16 port) {
946 WSAStartup(MAKEWORD(2, 2), &InitData); 950 WSAStartup(MAKEWORD(2, 2), &InitData);
947#endif 951#endif
948 952
949 int tmpsock = socket(PF_INET, SOCK_STREAM, 0); 953 int tmpsock = static_cast<int>(socket(PF_INET, SOCK_STREAM, 0));
950 if (tmpsock == -1) { 954 if (tmpsock == -1) {
951 LOG_ERROR(Debug_GDBStub, "Failed to create gdb socket"); 955 LOG_ERROR(Debug_GDBStub, "Failed to create gdb socket");
952 } 956 }
@@ -973,7 +977,7 @@ static void Init(u16 port) {
973 sockaddr_in saddr_client; 977 sockaddr_in saddr_client;
974 sockaddr* client_addr = reinterpret_cast<sockaddr*>(&saddr_client); 978 sockaddr* client_addr = reinterpret_cast<sockaddr*>(&saddr_client);
975 socklen_t client_addrlen = sizeof(saddr_client); 979 socklen_t client_addrlen = sizeof(saddr_client);
976 gdbserver_socket = accept(tmpsock, client_addr, &client_addrlen); 980 gdbserver_socket = static_cast<int>(accept(tmpsock, client_addr, &client_addrlen));
977 if (gdbserver_socket < 0) { 981 if (gdbserver_socket < 0) {
978 // In the case that we couldn't start the server for whatever reason, just start CPU 982 // In the case that we couldn't start the server for whatever reason, just start CPU
979 // execution like normal. 983 // execution like normal.