summaryrefslogtreecommitdiff
path: root/src/core/gdbstub/gdbstub.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/gdbstub/gdbstub.cpp')
-rw-r--r--src/core/gdbstub/gdbstub.cpp39
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 {