@@ -16,6 +16,7 @@ desc: Provides a gdb interface to the guest state
1616#include < iomanip>
1717#include < memory>
1818#include < optional>
19+ #include < string_view>
1920
2021#include < Common/FEXServerClient.h>
2122#include < FEXCore/Config/Config.h>
@@ -1003,7 +1004,7 @@ GdbServer::HandledPacketType GdbServer::CommandQueryThreadAlive(const fextl::str
10031004 return {" OK" , HandledPacketType::TYPE_ACK};
10041005}
10051006
1006- GdbServer::HandledPacketType GdbServer::CommandMultiLetterV (const fextl::string& packet) {
1007+ GdbServer::HandledPacketType GdbServer::HandlevFile (const fextl::string& packet) {
10071008 const auto match = [&](const fextl::string& str) -> std::optional<fextl::istringstream> {
10081009 if (packet.rfind (str, 0 ) == 0 ) {
10091010 auto ss = fextl::istringstream (packet);
@@ -1074,10 +1075,26 @@ GdbServer::HandledPacketType GdbServer::CommandMultiLetterV(const fextl::string&
10741075 data.resize (ret);
10751076 return {F_data (ret, data), HandledPacketType::TYPE_ACK};
10761077 }
1078+
1079+ return {" " , HandledPacketType::TYPE_ACK};
1080+ }
1081+
1082+ GdbServer::HandledPacketType GdbServer::HandlevCont (const fextl::string& packet) {
1083+ const auto match = [&](const fextl::string& str) -> std::optional<fextl::istringstream> {
1084+ if (packet.rfind (str, 0 ) == 0 ) {
1085+ auto ss = fextl::istringstream (packet);
1086+ ss.seekg (str.size ());
1087+ return ss;
1088+ }
1089+ return std::nullopt ;
1090+ };
1091+
1092+ std::optional<fextl::istringstream> ss;
10771093 if ((ss = match (" vCont?" ))) {
10781094 return {" vCont;c;t;s;r" , HandledPacketType::TYPE_ACK}; // We support continue, step and terminate
10791095 // FIXME: We also claim to support continue with signal... because it's compulsory
10801096 }
1097+
10811098 if ((ss = match (" vCont;" ))) {
10821099 char action {};
10831100 int thread {};
@@ -1095,6 +1112,26 @@ GdbServer::HandledPacketType GdbServer::CommandMultiLetterV(const fextl::string&
10951112
10961113 return ThreadAction (action, thread);
10971114 }
1115+
1116+ return {" " , HandledPacketType::TYPE_ACK};
1117+ }
1118+
1119+ GdbServer::HandledPacketType GdbServer::CommandMultiLetterV (const fextl::string& packet) {
1120+ // TODO: vAttach
1121+ if (packet.starts_with (" vCont" )) {
1122+ return HandlevCont (packet);
1123+ }
1124+
1125+ // TODO: vCtrlC
1126+
1127+ if (packet.starts_with (" vFile" )) {
1128+ return HandlevFile (packet);
1129+ }
1130+
1131+ // TODO: vKill
1132+ // TODO: vRun
1133+ // TODO: vStopped
1134+
10981135 return {" " , HandledPacketType::TYPE_ACK};
10991136}
11001137
0 commit comments