diff options
Diffstat (limited to 'src/core/gdbstub/gdbstub.cpp')
| -rw-r--r-- | src/core/gdbstub/gdbstub.cpp | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/src/core/gdbstub/gdbstub.cpp b/src/core/gdbstub/gdbstub.cpp index f96cbde64..9acdd402b 100644 --- a/src/core/gdbstub/gdbstub.cpp +++ b/src/core/gdbstub/gdbstub.cpp | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | #include <unistd.h> | 30 | #include <unistd.h> |
| 31 | #endif | 31 | #endif |
| 32 | 32 | ||
| 33 | #include "core/loader/loader.h" | ||
| 33 | #include "common/logging/log.h" | 34 | #include "common/logging/log.h" |
| 34 | #include "common/string_util.h" | 35 | #include "common/string_util.h" |
| 35 | #include "core/arm/arm_interface.h" | 36 | #include "core/arm/arm_interface.h" |
| @@ -450,8 +451,8 @@ static void SendSignal(u32 signal) { | |||
| 450 | latest_signal = signal; | 451 | latest_signal = signal; |
| 451 | 452 | ||
| 452 | std::string buffer = Common::StringFromFormat("T%02x%02x:%08x;%02x:%08x;", latest_signal, 15, | 453 | std::string buffer = Common::StringFromFormat("T%02x%02x:%08x;%02x:%08x;", latest_signal, 15, |
| 453 | htonl(Core::g_app_core->GetPC()), 13, | 454 | htonl(Core::AppCore().GetPC()), 13, |
| 454 | htonl(Core::g_app_core->GetReg(13))); | 455 | htonl(Core::AppCore().GetReg(13))); |
| 455 | LOG_DEBUG(Debug_GDBStub, "Response: %s", buffer.c_str()); | 456 | LOG_DEBUG(Debug_GDBStub, "Response: %s", buffer.c_str()); |
| 456 | SendReply(buffer.c_str()); | 457 | SendReply(buffer.c_str()); |
| 457 | } | 458 | } |
| @@ -538,15 +539,15 @@ static void ReadRegister() { | |||
| 538 | } | 539 | } |
| 539 | 540 | ||
| 540 | if (id <= R15_REGISTER) { | 541 | if (id <= R15_REGISTER) { |
| 541 | IntToGdbHex(reply, Core::g_app_core->GetReg(id)); | 542 | IntToGdbHex(reply, Core::AppCore().GetReg(id)); |
| 542 | } else if (id == CPSR_REGISTER) { | 543 | } else if (id == CPSR_REGISTER) { |
| 543 | IntToGdbHex(reply, Core::g_app_core->GetCPSR()); | 544 | IntToGdbHex(reply, Core::AppCore().GetCPSR()); |
| 544 | } else if (id > CPSR_REGISTER && id < FPSCR_REGISTER) { | 545 | } else if (id > CPSR_REGISTER && id < FPSCR_REGISTER) { |
| 545 | IntToGdbHex(reply, Core::g_app_core->GetVFPReg( | 546 | IntToGdbHex(reply, Core::AppCore().GetVFPReg( |
| 546 | id - CPSR_REGISTER - | 547 | id - CPSR_REGISTER - |
| 547 | 1)); // VFP registers should start at 26, so one after CSPR_REGISTER | 548 | 1)); // VFP registers should start at 26, so one after CSPR_REGISTER |
| 548 | } else if (id == FPSCR_REGISTER) { | 549 | } else if (id == FPSCR_REGISTER) { |
| 549 | IntToGdbHex(reply, Core::g_app_core->GetVFPSystemReg(VFP_FPSCR)); // Get FPSCR | 550 | IntToGdbHex(reply, Core::AppCore().GetVFPSystemReg(VFP_FPSCR)); // Get FPSCR |
| 550 | IntToGdbHex(reply + 8, 0); | 551 | IntToGdbHex(reply + 8, 0); |
| 551 | } else { | 552 | } else { |
| 552 | return SendReply("E01"); | 553 | return SendReply("E01"); |
| @@ -563,22 +564,22 @@ static void ReadRegisters() { | |||
| 563 | u8* bufptr = buffer; | 564 | u8* bufptr = buffer; |
| 564 | 565 | ||
| 565 | for (int reg = 0; reg <= R15_REGISTER; reg++) { | 566 | for (int reg = 0; reg <= R15_REGISTER; reg++) { |
| 566 | IntToGdbHex(bufptr + reg * CHAR_BIT, Core::g_app_core->GetReg(reg)); | 567 | IntToGdbHex(bufptr + reg * CHAR_BIT, Core::AppCore().GetReg(reg)); |
| 567 | } | 568 | } |
| 568 | 569 | ||
| 569 | bufptr += (16 * CHAR_BIT); | 570 | bufptr += (16 * CHAR_BIT); |
| 570 | 571 | ||
| 571 | IntToGdbHex(bufptr, Core::g_app_core->GetCPSR()); | 572 | IntToGdbHex(bufptr, Core::AppCore().GetCPSR()); |
| 572 | 573 | ||
| 573 | bufptr += CHAR_BIT; | 574 | bufptr += CHAR_BIT; |
| 574 | 575 | ||
| 575 | for (int reg = 0; reg <= 31; reg++) { | 576 | for (int reg = 0; reg <= 31; reg++) { |
| 576 | IntToGdbHex(bufptr + reg * CHAR_BIT, Core::g_app_core->GetVFPReg(reg)); | 577 | IntToGdbHex(bufptr + reg * CHAR_BIT, Core::AppCore().GetVFPReg(reg)); |
| 577 | } | 578 | } |
| 578 | 579 | ||
| 579 | bufptr += (32 * CHAR_BIT); | 580 | bufptr += (32 * CHAR_BIT); |
| 580 | 581 | ||
| 581 | IntToGdbHex(bufptr, Core::g_app_core->GetVFPSystemReg(VFP_FPSCR)); | 582 | IntToGdbHex(bufptr, Core::AppCore().GetVFPSystemReg(VFP_FPSCR)); |
| 582 | 583 | ||
| 583 | SendReply(reinterpret_cast<char*>(buffer)); | 584 | SendReply(reinterpret_cast<char*>(buffer)); |
| 584 | } | 585 | } |
| @@ -595,13 +596,13 @@ static void WriteRegister() { | |||
| 595 | } | 596 | } |
| 596 | 597 | ||
| 597 | if (id <= R15_REGISTER) { | 598 | if (id <= R15_REGISTER) { |
| 598 | Core::g_app_core->SetReg(id, GdbHexToInt(buffer_ptr)); | 599 | Core::AppCore().SetReg(id, GdbHexToInt(buffer_ptr)); |
| 599 | } else if (id == CPSR_REGISTER) { | 600 | } else if (id == CPSR_REGISTER) { |
| 600 | Core::g_app_core->SetCPSR(GdbHexToInt(buffer_ptr)); | 601 | Core::AppCore().SetCPSR(GdbHexToInt(buffer_ptr)); |
| 601 | } else if (id > CPSR_REGISTER && id < FPSCR_REGISTER) { | 602 | } else if (id > CPSR_REGISTER && id < FPSCR_REGISTER) { |
| 602 | Core::g_app_core->SetVFPReg(id - CPSR_REGISTER - 1, GdbHexToInt(buffer_ptr)); | 603 | Core::AppCore().SetVFPReg(id - CPSR_REGISTER - 1, GdbHexToInt(buffer_ptr)); |
| 603 | } else if (id == FPSCR_REGISTER) { | 604 | } else if (id == FPSCR_REGISTER) { |
| 604 | Core::g_app_core->SetVFPSystemReg(VFP_FPSCR, GdbHexToInt(buffer_ptr)); | 605 | Core::AppCore().SetVFPSystemReg(VFP_FPSCR, GdbHexToInt(buffer_ptr)); |
| 605 | } else { | 606 | } else { |
| 606 | return SendReply("E01"); | 607 | return SendReply("E01"); |
| 607 | } | 608 | } |
| @@ -618,20 +619,20 @@ static void WriteRegisters() { | |||
| 618 | 619 | ||
| 619 | for (int i = 0, reg = 0; reg <= FPSCR_REGISTER; i++, reg++) { | 620 | for (int i = 0, reg = 0; reg <= FPSCR_REGISTER; i++, reg++) { |
| 620 | if (reg <= R15_REGISTER) { | 621 | if (reg <= R15_REGISTER) { |
| 621 | Core::g_app_core->SetReg(reg, GdbHexToInt(buffer_ptr + i * CHAR_BIT)); | 622 | Core::AppCore().SetReg(reg, GdbHexToInt(buffer_ptr + i * CHAR_BIT)); |
| 622 | } else if (reg == CPSR_REGISTER) { | 623 | } else if (reg == CPSR_REGISTER) { |
| 623 | Core::g_app_core->SetCPSR(GdbHexToInt(buffer_ptr + i * CHAR_BIT)); | 624 | Core::AppCore().SetCPSR(GdbHexToInt(buffer_ptr + i * CHAR_BIT)); |
| 624 | } else if (reg == CPSR_REGISTER - 1) { | 625 | } else if (reg == CPSR_REGISTER - 1) { |
| 625 | // Dummy FPA register, ignore | 626 | // Dummy FPA register, ignore |
| 626 | } else if (reg < CPSR_REGISTER) { | 627 | } else if (reg < CPSR_REGISTER) { |
| 627 | // Dummy FPA registers, ignore | 628 | // Dummy FPA registers, ignore |
| 628 | i += 2; | 629 | i += 2; |
| 629 | } else if (reg > CPSR_REGISTER && reg < FPSCR_REGISTER) { | 630 | } else if (reg > CPSR_REGISTER && reg < FPSCR_REGISTER) { |
| 630 | Core::g_app_core->SetVFPReg(reg - CPSR_REGISTER - 1, | 631 | Core::AppCore().SetVFPReg(reg - CPSR_REGISTER - 1, |
| 631 | GdbHexToInt(buffer_ptr + i * CHAR_BIT)); | 632 | GdbHexToInt(buffer_ptr + i * CHAR_BIT)); |
| 632 | i++; // Skip padding | 633 | i++; // Skip padding |
| 633 | } else if (reg == FPSCR_REGISTER) { | 634 | } else if (reg == FPSCR_REGISTER) { |
| 634 | Core::g_app_core->SetVFPSystemReg(VFP_FPSCR, GdbHexToInt(buffer_ptr + i * CHAR_BIT)); | 635 | Core::AppCore().SetVFPSystemReg(VFP_FPSCR, GdbHexToInt(buffer_ptr + i * CHAR_BIT)); |
| 635 | } | 636 | } |
| 636 | } | 637 | } |
| 637 | 638 | ||
| @@ -908,7 +909,7 @@ void ToggleServer(bool status) { | |||
| 908 | server_enabled = status; | 909 | server_enabled = status; |
| 909 | 910 | ||
| 910 | // Start server | 911 | // Start server |
| 911 | if (!IsConnected() && Core::g_sys_core != nullptr) { | 912 | if (!IsConnected() && Core::System().GetInstance().IsPoweredOn()) { |
| 912 | Init(); | 913 | Init(); |
| 913 | } | 914 | } |
| 914 | } else { | 915 | } else { |