LLDB  mainline
StringExtractorGDBRemote.cpp
Go to the documentation of this file.
1 //===-- StringExtractorGDBRemote.cpp --------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
10 
11 #include <cctype>
12 #include <cstring>
13 
16 
19  if (m_packet.empty())
20  return eUnsupported;
21 
22  switch (m_packet[0]) {
23  case 'E':
24  if (isxdigit(m_packet[1]) && isxdigit(m_packet[2])) {
25  if (m_packet.size() == 3)
26  return eError;
27  llvm::StringRef packet_ref(m_packet);
28  if (packet_ref[3] == ';') {
29  auto err_string = packet_ref.substr(4);
30  for (auto e : err_string)
31  if (!isxdigit(e))
32  return eResponse;
33  return eError;
34  }
35  }
36  break;
37 
38  case 'O':
39  if (m_packet.size() == 2 && m_packet[1] == 'K')
40  return eOK;
41  break;
42 
43  case '+':
44  if (m_packet.size() == 1)
45  return eAck;
46  break;
47 
48  case '-':
49  if (m_packet.size() == 1)
50  return eNack;
51  break;
52  }
53  return eResponse;
54 }
55 
58 #define PACKET_MATCHES(s) \
59  ((packet_size == (sizeof(s) - 1)) && (strcmp((packet_cstr), (s)) == 0))
60 #define PACKET_STARTS_WITH(s) \
61  ((packet_size >= (sizeof(s) - 1)) && \
62  ::strncmp(packet_cstr, s, (sizeof(s) - 1)) == 0)
63 
64  // Empty is not a supported packet...
65  if (m_packet.empty())
67 
68  const size_t packet_size = m_packet.size();
69  const char *packet_cstr = m_packet.c_str();
70  switch (m_packet[0]) {
71 
72  case '%':
74 
75  case '\x03':
76  if (packet_size == 1)
78  break;
79 
80  case '-':
81  if (packet_size == 1)
83  break;
84 
85  case '+':
86  if (packet_size == 1)
87  return eServerPacketType_ack;
88  break;
89 
90  case 'A':
91  return eServerPacketType_A;
92 
93  case 'Q':
94 
95  switch (packet_cstr[1]) {
96  case 'E':
97  if (PACKET_STARTS_WITH("QEnvironment:"))
99  if (PACKET_STARTS_WITH("QEnvironmentHexEncoded:"))
101  if (PACKET_STARTS_WITH("QEnableErrorStrings"))
103  break;
104 
105  case 'P':
106  if (PACKET_STARTS_WITH("QPassSignals:"))
108  break;
109 
110  case 'S':
111  if (PACKET_MATCHES("QStartNoAckMode"))
113  if (PACKET_STARTS_WITH("QSaveRegisterState"))
115  if (PACKET_STARTS_WITH("QSetDisableASLR:"))
117  if (PACKET_STARTS_WITH("QSetDetachOnError:"))
119  if (PACKET_STARTS_WITH("QSetSTDIN:"))
121  if (PACKET_STARTS_WITH("QSetSTDOUT:"))
123  if (PACKET_STARTS_WITH("QSetSTDERR:"))
125  if (PACKET_STARTS_WITH("QSetWorkingDir:"))
127  if (PACKET_STARTS_WITH("QSetLogging:"))
129  if (PACKET_STARTS_WITH("QSetMaxPacketSize:"))
131  if (PACKET_STARTS_WITH("QSetMaxPayloadSize:"))
133  if (PACKET_STARTS_WITH("QSetEnableAsyncProfiling;"))
135  if (PACKET_STARTS_WITH("QSyncThreadState:"))
137  break;
138 
139  case 'L':
140  if (PACKET_STARTS_WITH("QLaunchArch:"))
142  if (PACKET_MATCHES("QListThreadsInStopReply"))
144  break;
145 
146  case 'M':
147  if (PACKET_STARTS_WITH("QMemTags"))
149  break;
150 
151  case 'R':
152  if (PACKET_STARTS_WITH("QRestoreRegisterState:"))
154  break;
155 
156  case 'T':
157  if (PACKET_MATCHES("QThreadSuffixSupported"))
159  break;
160  }
161  break;
162 
163  case 'q':
164  switch (packet_cstr[1]) {
165  case 's':
166  if (PACKET_MATCHES("qsProcessInfo"))
168  if (PACKET_MATCHES("qsThreadInfo"))
170  break;
171 
172  case 'f':
173  if (PACKET_STARTS_WITH("qfProcessInfo"))
175  if (PACKET_STARTS_WITH("qfThreadInfo"))
177  break;
178 
179  case 'C':
180  if (packet_size == 2)
181  return eServerPacketType_qC;
182  break;
183 
184  case 'E':
185  if (PACKET_STARTS_WITH("qEcho:"))
187  break;
188 
189  case 'F':
190  if (PACKET_STARTS_WITH("qFileLoadAddress:"))
192  break;
193 
194  case 'G':
195  if (PACKET_STARTS_WITH("qGroupName:"))
197  if (PACKET_MATCHES("qGetWorkingDir"))
199  if (PACKET_MATCHES("qGetPid"))
201  if (PACKET_STARTS_WITH("qGetProfileData;"))
203  if (PACKET_MATCHES("qGDBServerVersion"))
205  break;
206 
207  case 'H':
208  if (PACKET_MATCHES("qHostInfo"))
210  break;
211 
212  case 'K':
213  if (PACKET_STARTS_WITH("qKillSpawnedProcess"))
215  break;
216 
217  case 'L':
218  if (PACKET_STARTS_WITH("qLaunchGDBServer"))
220  if (PACKET_MATCHES("qLaunchSuccess"))
222  break;
223 
224  case 'M':
225  if (PACKET_STARTS_WITH("qMemoryRegionInfo:"))
227  if (PACKET_MATCHES("qMemoryRegionInfo"))
229  if (PACKET_STARTS_WITH("qModuleInfo:"))
231  if (PACKET_STARTS_WITH("qMemTags:"))
233  break;
234 
235  case 'P':
236  if (PACKET_STARTS_WITH("qProcessInfoPID:"))
238  if (PACKET_STARTS_WITH("qPlatform_shell:"))
240  if (PACKET_STARTS_WITH("qPlatform_mkdir:"))
242  if (PACKET_STARTS_WITH("qPlatform_chmod:"))
244  if (PACKET_MATCHES("qProcessInfo"))
246  if (PACKET_STARTS_WITH("qPathComplete:"))
248  break;
249 
250  case 'Q':
251  if (PACKET_MATCHES("qQueryGDBServer"))
253  break;
254 
255  case 'R':
256  if (PACKET_STARTS_WITH("qRcmd,"))
258  if (PACKET_STARTS_WITH("qRegisterInfo"))
260  break;
261 
262  case 'S':
263  if (PACKET_STARTS_WITH("qSpeedTest:"))
265  if (PACKET_MATCHES("qShlibInfoAddr"))
267  if (PACKET_MATCHES("qStepPacketSupported"))
269  if (PACKET_STARTS_WITH("qSupported"))
271  if (PACKET_MATCHES("qSyncThreadStateSupported"))
273  break;
274 
275  case 'T':
276  if (PACKET_STARTS_WITH("qThreadExtraInfo,"))
278  if (PACKET_STARTS_WITH("qThreadStopInfo"))
280  break;
281 
282  case 'U':
283  if (PACKET_STARTS_WITH("qUserName:"))
285  break;
286 
287  case 'V':
288  if (PACKET_MATCHES("qVAttachOrWaitSupported"))
290  break;
291 
292  case 'W':
293  if (PACKET_STARTS_WITH("qWatchpointSupportInfo:"))
295  if (PACKET_MATCHES("qWatchpointSupportInfo"))
297  break;
298 
299  case 'X':
300  if (PACKET_STARTS_WITH("qXfer:"))
302  break;
303  }
304  break;
305 
306  case 'j':
307  if (PACKET_STARTS_WITH("jModulesInfo:"))
309  if (PACKET_MATCHES("jSignalsInfo"))
311  if (PACKET_MATCHES("jThreadsInfo"))
313 
314  if (PACKET_MATCHES("jLLDBTraceSupported"))
316  if (PACKET_STARTS_WITH("jLLDBTraceStop:"))
318  if (PACKET_STARTS_WITH("jLLDBTraceStart:"))
320  if (PACKET_STARTS_WITH("jLLDBTraceGetState:"))
322  if (PACKET_STARTS_WITH("jLLDBTraceGetBinaryData:"))
324  break;
325 
326  case 'v':
327  if (PACKET_STARTS_WITH("vFile:")) {
328  if (PACKET_STARTS_WITH("vFile:open:"))
330  else if (PACKET_STARTS_WITH("vFile:close:"))
332  else if (PACKET_STARTS_WITH("vFile:pread"))
334  else if (PACKET_STARTS_WITH("vFile:pwrite"))
336  else if (PACKET_STARTS_WITH("vFile:size"))
338  else if (PACKET_STARTS_WITH("vFile:exists"))
340  else if (PACKET_STARTS_WITH("vFile:stat"))
342  else if (PACKET_STARTS_WITH("vFile:mode"))
344  else if (PACKET_STARTS_WITH("vFile:MD5"))
346  else if (PACKET_STARTS_WITH("vFile:symlink"))
348  else if (PACKET_STARTS_WITH("vFile:unlink"))
350 
351  } else {
352  if (PACKET_STARTS_WITH("vAttach;"))
354  if (PACKET_STARTS_WITH("vAttachWait;"))
356  if (PACKET_STARTS_WITH("vAttachOrWait;"))
358  if (PACKET_STARTS_WITH("vAttachName;"))
360  if (PACKET_STARTS_WITH("vCont;"))
362  if (PACKET_MATCHES("vCont?"))
364  }
365  break;
366  case '_':
367  switch (packet_cstr[1]) {
368  case 'M':
369  return eServerPacketType__M;
370 
371  case 'm':
372  return eServerPacketType__m;
373  }
374  break;
375 
376  case '?':
377  if (packet_size == 1)
379  break;
380 
381  case 'c':
382  return eServerPacketType_c;
383 
384  case 'C':
385  return eServerPacketType_C;
386 
387  case 'D':
388  return eServerPacketType_D;
389 
390  case 'g':
391  return eServerPacketType_g;
392 
393  case 'G':
394  return eServerPacketType_G;
395 
396  case 'H':
397  return eServerPacketType_H;
398 
399  case 'I':
400  return eServerPacketType_I;
401 
402  case 'k':
403  if (packet_size == 1)
404  return eServerPacketType_k;
405  break;
406 
407  case 'm':
408  return eServerPacketType_m;
409 
410  case 'M':
411  return eServerPacketType_M;
412 
413  case 'p':
414  return eServerPacketType_p;
415 
416  case 'P':
417  return eServerPacketType_P;
418 
419  case 's':
420  if (packet_size == 1)
421  return eServerPacketType_s;
422  break;
423 
424  case 'S':
425  return eServerPacketType_S;
426 
427  case 'x':
428  return eServerPacketType_x;
429 
430  case 'X':
431  return eServerPacketType_X;
432 
433  case 'T':
434  return eServerPacketType_T;
435 
436  case 'z':
437  if (packet_cstr[1] >= '0' && packet_cstr[1] <= '4')
438  return eServerPacketType_z;
439  break;
440 
441  case 'Z':
442  if (packet_cstr[1] >= '0' && packet_cstr[1] <= '4')
443  return eServerPacketType_Z;
444  break;
445  }
447 }
448 
450  return GetResponseType() == eOK;
451 }
452 
454  return GetResponseType() == eUnsupported;
455 }
456 
458  return GetResponseType() == eResponse;
459 }
460 
462  return GetResponseType() == eError && isxdigit(m_packet[1]) &&
463  isxdigit(m_packet[2]);
464 }
465 
467  if (GetResponseType() == eError) {
468  SetFilePos(1);
469  return GetHexU8(255);
470  }
471  return 0;
472 }
473 
476  if (GetResponseType() == eError) {
477  SetFilePos(1);
478  uint8_t errc = GetHexU8(255);
479  error.SetError(errc, lldb::eErrorTypeGeneric);
480 
481  error.SetErrorStringWithFormat("Error %u", errc);
482  std::string error_messg;
483  if (GetChar() == ';') {
484  GetHexByteString(error_messg);
485  error.SetErrorString(error_messg);
486  }
487  }
488  return error;
489 }
490 
492  // Just get the data bytes in the string as
493  // GDBRemoteCommunication::CheckForPacket() already removes any 0x7d escaped
494  // characters. If any 0x7d characters are left in the packet, then they are
495  // supposed to be there...
496  str.clear();
497  const size_t bytes_left = GetBytesLeft();
498  if (bytes_left > 0) {
499  str.assign(m_packet, m_index, bytes_left);
500  m_index += bytes_left;
501  }
502  return str.size();
503 }
504 
505 static bool
507  const StringExtractorGDBRemote &response) {
508  switch (response.GetResponseType()) {
512  return true;
513 
517  break;
518  }
519  return false;
520 }
521 
522 static bool JSONResponseValidator(void *,
523  const StringExtractorGDBRemote &response) {
524  switch (response.GetResponseType()) {
527  return true; // Accept unsupported or EXX as valid responses
528 
532  break;
533 
535  // JSON that is returned in from JSON query packets is currently always
536  // either a dictionary which starts with a '{', or an array which starts
537  // with a '['. This is a quick validator to just make sure the response
538  // could be valid JSON without having to validate all of the
539  // JSON content.
540  switch (response.GetStringRef()[0]) {
541  case '{':
542  return true;
543  case '[':
544  return true;
545  default:
546  break;
547  }
548  break;
549  }
550  return false;
551 }
552 
553 static bool
555  const StringExtractorGDBRemote &response) {
556  switch (response.GetResponseType()) {
559  return true; // Accept unsupported or EXX as valid responses
560 
564  break;
565 
567  uint32_t valid_count = 0;
568  for (const char ch : response.GetStringRef()) {
569  if (!isxdigit(ch)) {
570  return false;
571  }
572  if (++valid_count >= 16)
573  break; // Don't validate all the characters in case the packet is very
574  // large
575  }
576  return true;
577  } break;
578  }
579  return false;
580 }
581 
583  const StringExtractorGDBRemote &rhs) {
584  m_validator = rhs.m_validator;
586 }
587 
589  ResponseValidatorCallback callback, void *baton) {
590  m_validator = callback;
591  m_validator_baton = baton;
592 }
593 
596  m_validator_baton = nullptr;
597 }
598 
601  m_validator_baton = nullptr;
602 }
603 
606  m_validator_baton = nullptr;
607 }
608 
610  // If we have a validator callback, try to validate the callback
611  if (m_validator)
612  return m_validator(m_validator_baton, *this);
613  else
614  return true; // No validator, so response is valid
615 }
616 
617 llvm::Optional<std::pair<lldb::pid_t, lldb::tid_t>>
619  llvm::StringRef view = llvm::StringRef(m_packet).substr(m_index);
620  size_t initial_length = view.size();
621  lldb::pid_t pid = default_pid;
622  lldb::tid_t tid;
623 
624  if (view.consume_front("p")) {
625  // process identifier
626  if (view.consume_front("-1")) {
627  // -1 is a special case
628  pid = AllProcesses;
629  } else if (view.consumeInteger(16, pid) || pid == 0) {
630  // not a valid hex integer OR unsupported pid 0
632  return llvm::None;
633  }
634 
635  // "." must follow if we expect TID too; otherwise, we assume -1
636  if (!view.consume_front(".")) {
637  // update m_index
638  m_index += initial_length - view.size();
639 
640  return {{pid, AllThreads}};
641  }
642  }
643 
644  // thread identifier
645  if (view.consume_front("-1")) {
646  // -1 is a special case
647  tid = AllThreads;
648  } else if (view.consumeInteger(16, tid) || tid == 0 || pid == AllProcesses) {
649  // not a valid hex integer OR tid 0 OR pid -1 + a specific tid
651  return llvm::None;
652  }
653 
654  // update m_index
655  m_index += initial_length - view.size();
656 
657  return {{pid, tid}};
658 }
StringExtractorGDBRemote::eServerPacketType_D
@ eServerPacketType_D
Definition: StringExtractorGDBRemote.h:143
StringExtractorGDBRemote::GetServerPacketType
ServerPacketType GetServerPacketType() const
Definition: StringExtractorGDBRemote.cpp:57
StringExtractorGDBRemote::eServerPacketType__m
@ eServerPacketType__m
Definition: StringExtractorGDBRemote.h:162
StringExtractorGDBRemote::AllProcesses
static constexpr lldb::pid_t AllProcesses
Definition: StringExtractorGDBRemote.h:197
StringExtractorGDBRemote::eServerPacketType_qUserName
@ eServerPacketType_qUserName
Definition: StringExtractorGDBRemote.h:66
StringExtractorGDBRemote::eServerPacketType_qThreadExtraInfo
@ eServerPacketType_qThreadExtraInfo
Definition: StringExtractorGDBRemote.h:122
StringExtractorGDBRemote::eServerPacketType_vFile_pread
@ eServerPacketType_vFile_pread
Definition: StringExtractorGDBRemote.h:85
StringExtractorGDBRemote::eServerPacketType_qMemoryRegionInfoSupported
@ eServerPacketType_qMemoryRegionInfoSupported
Definition: StringExtractorGDBRemote.h:114
StringExtractorGDBRemote::eError
@ eError
Definition: StringExtractorGDBRemote.h:177
StringExtractorGDBRemote::eServerPacketType_x
@ eServerPacketType_x
Definition: StringExtractorGDBRemote.h:156
StringExtractorGDBRemote::eServerPacketType_QListThreadsInStopReply
@ eServerPacketType_QListThreadsInStopReply
Definition: StringExtractorGDBRemote.h:96
StringExtractorGDBRemote::m_validator_baton
void * m_validator_baton
Definition: StringExtractorGDBRemote.h:208
StringExtractor::SetFilePos
void SetFilePos(uint32_t idx)
Definition: StringExtractor.h:39
StringExtractorGDBRemote::CopyResponseValidator
void CopyResponseValidator(const StringExtractorGDBRemote &rhs)
Definition: StringExtractorGDBRemote.cpp:582
StringExtractor::GetBytesLeft
size_t GetBytesLeft()
Definition: StringExtractor.h:52
StringExtractorGDBRemote::eServerPacketType_qfThreadInfo
@ eServerPacketType_qfThreadInfo
Definition: StringExtractorGDBRemote.h:109
StringExtractorGDBRemote::eServerPacketType_unimplemented
@ eServerPacketType_unimplemented
Definition: StringExtractorGDBRemote.h:50
StringExtractorGDBRemote::eServerPacketType_A
@ eServerPacketType_A
Definition: StringExtractorGDBRemote.h:52
StringExtractorGDBRemote::ResponseType
ResponseType
Definition: StringExtractorGDBRemote.h:177
StringExtractor::GetStringRef
llvm::StringRef GetStringRef() const
Definition: StringExtractor.h:48
StringExtractorGDBRemote::eServerPacketType_qQueryGDBServer
@ eServerPacketType_qQueryGDBServer
Definition: StringExtractorGDBRemote.h:60
OKErrorNotSupportedResponseValidator
static bool OKErrorNotSupportedResponseValidator(void *, const StringExtractorGDBRemote &response)
Definition: StringExtractorGDBRemote.cpp:506
StringExtractorGDBRemote::eServerPacketType_qSyncThreadStateSupported
@ eServerPacketType_qSyncThreadStateSupported
Definition: StringExtractorGDBRemote.h:121
StringExtractorGDBRemote::eOK
@ eOK
Definition: StringExtractorGDBRemote.h:177
StringExtractorGDBRemote::eServerPacketType_stop_reason
@ eServerPacketType_stop_reason
Definition: StringExtractorGDBRemote.h:139
StringExtractorGDBRemote::eServerPacketType_QStartNoAckMode
@ eServerPacketType_QStartNoAckMode
Definition: StringExtractorGDBRemote.h:78
StringExtractorGDBRemote::eServerPacketType_vAttachOrWait
@ eServerPacketType_vAttachOrWait
Definition: StringExtractorGDBRemote.h:134
StringExtractorGDBRemote::eServerPacketType_QSetMaxPayloadSize
@ eServerPacketType_QSetMaxPayloadSize
Definition: StringExtractorGDBRemote.h:102
StringExtractorGDBRemote::eServerPacketType_vFile_stat
@ eServerPacketType_vFile_stat
Definition: StringExtractorGDBRemote.h:91
StringExtractorGDBRemote::eServerPacketType_qMemoryRegionInfo
@ eServerPacketType_qMemoryRegionInfo
Definition: StringExtractorGDBRemote.h:113
StringExtractorGDBRemote::eServerPacketType_qC
@ eServerPacketType_qC
Definition: StringExtractorGDBRemote.h:55
StringExtractorGDBRemote::eServerPacketType_I
@ eServerPacketType_I
Definition: StringExtractorGDBRemote.h:147
StringExtractorGDBRemote::eServerPacketType_qProcessInfo
@ eServerPacketType_qProcessInfo
Definition: StringExtractorGDBRemote.h:115
StringExtractorGDBRemote::eServerPacketType_M
@ eServerPacketType_M
Definition: StringExtractorGDBRemote.h:150
StringExtractorGDBRemote.h
StringExtractorGDBRemote::eServerPacketType_qPlatform_chmod
@ eServerPacketType_qPlatform_chmod
Definition: StringExtractorGDBRemote.h:82
StringExtractorGDBRemote::eServerPacketType_QEnvironment
@ eServerPacketType_QEnvironment
Definition: StringExtractorGDBRemote.h:69
StringExtractorGDBRemote::eServerPacketType_vAttachWait
@ eServerPacketType_vAttachWait
Definition: StringExtractorGDBRemote.h:133
StringExtractorGDBRemote::eServerPacketType_G
@ eServerPacketType_G
Definition: StringExtractorGDBRemote.h:145
StringExtractorGDBRemote::eServerPacketType_qWatchpointSupportInfoSupported
@ eServerPacketType_qWatchpointSupportInfoSupported
Definition: StringExtractorGDBRemote.h:126
StringExtractorGDBRemote::eServerPacketType_jLLDBTraceSupported
@ eServerPacketType_jLLDBTraceSupported
Definition: StringExtractorGDBRemote.h:165
StringExtractorGDBRemote::eServerPacketType_qRcmd
@ eServerPacketType_qRcmd
Definition: StringExtractorGDBRemote.h:116
StringExtractorGDBRemote::eServerPacketType_QSetSTDOUT
@ eServerPacketType_QSetSTDOUT
Definition: StringExtractorGDBRemote.h:75
StringExtractorGDBRemote::eServerPacketType_QSetLogging
@ eServerPacketType_QSetLogging
Definition: StringExtractorGDBRemote.h:100
StringExtractorGDBRemote::SetResponseValidatorToASCIIHexBytes
void SetResponseValidatorToASCIIHexBytes()
Definition: StringExtractorGDBRemote.cpp:599
StringExtractorGDBRemote::eServerPacketType_invalid
@ eServerPacketType_invalid
Definition: StringExtractorGDBRemote.h:49
PACKET_STARTS_WITH
#define PACKET_STARTS_WITH(s)
StringExtractorGDBRemote::IsErrorResponse
bool IsErrorResponse() const
Definition: StringExtractorGDBRemote.cpp:461
StringExtractorGDBRemote::eServerPacketType_qfProcessInfo
@ eServerPacketType_qfProcessInfo
Definition: StringExtractorGDBRemote.h:53
StringExtractorGDBRemote::eServerPacketType_jLLDBTraceStart
@ eServerPacketType_jLLDBTraceStart
Definition: StringExtractorGDBRemote.h:166
ASCIIHexBytesResponseValidator
static bool ASCIIHexBytesResponseValidator(void *, const StringExtractorGDBRemote &response)
Definition: StringExtractorGDBRemote.cpp:554
StringExtractorGDBRemote::eServerPacketType_vFile_symlink
@ eServerPacketType_vFile_symlink
Definition: StringExtractorGDBRemote.h:92
StringExtractorGDBRemote::eServerPacketType_qPlatform_mkdir
@ eServerPacketType_qPlatform_mkdir
Definition: StringExtractorGDBRemote.h:81
StringExtractorGDBRemote::eUnsupported
@ eUnsupported
Definition: StringExtractorGDBRemote.h:177
StringExtractorGDBRemote::GetEscapedBinaryData
size_t GetEscapedBinaryData(std::string &str)
Definition: StringExtractorGDBRemote.cpp:491
error
static llvm::raw_ostream & error(Stream &strm)
Definition: CommandReturnObject.cpp:17
StringExtractorGDBRemote::eServerPacketType_QSaveRegisterState
@ eServerPacketType_QSaveRegisterState
Definition: StringExtractorGDBRemote.h:99
StringExtractorGDBRemote::eServerPacketType_c
@ eServerPacketType_c
Definition: StringExtractorGDBRemote.h:141
StringExtractorGDBRemote::eServerPacketType_QSetEnableAsyncProfiling
@ eServerPacketType_QSetEnableAsyncProfiling
Definition: StringExtractorGDBRemote.h:103
StringExtractorGDBRemote::eServerPacketType_nack
@ eServerPacketType_nack
Definition: StringExtractorGDBRemote.h:47
StringExtractorGDBRemote::eServerPacketType_T
@ eServerPacketType_T
Definition: StringExtractorGDBRemote.h:155
StringExtractorGDBRemote::eServerPacketType_qMemTags
@ eServerPacketType_qMemTags
Definition: StringExtractorGDBRemote.h:171
StringExtractorGDBRemote::eServerPacketType_Z
@ eServerPacketType_Z
Definition: StringExtractorGDBRemote.h:158
StringExtractorGDBRemote::eServerPacketType_vFile_size
@ eServerPacketType_vFile_size
Definition: StringExtractorGDBRemote.h:87
StringExtractorGDBRemote::eServerPacketType_QSetDisableASLR
@ eServerPacketType_QSetDisableASLR
Definition: StringExtractorGDBRemote.h:72
StringExtractorGDBRemote::eServerPacketType_qThreadStopInfo
@ eServerPacketType_qThreadStopInfo
Definition: StringExtractorGDBRemote.h:123
StringExtractorGDBRemote::eServerPacketType_qWatchpointSupportInfo
@ eServerPacketType_qWatchpointSupportInfo
Definition: StringExtractorGDBRemote.h:125
StringExtractorGDBRemote::eServerPacketType_qProcessInfoPID
@ eServerPacketType_qProcessInfoPID
Definition: StringExtractorGDBRemote.h:64
StringExtractorGDBRemote::eAck
@ eAck
Definition: StringExtractorGDBRemote.h:177
StringExtractorGDBRemote::eServerPacketType_QSyncThreadState
@ eServerPacketType_QSyncThreadState
Definition: StringExtractorGDBRemote.h:104
StringExtractorGDBRemote::eServerPacketType_jLLDBTraceGetBinaryData
@ eServerPacketType_jLLDBTraceGetBinaryData
Definition: StringExtractorGDBRemote.h:169
StringExtractorGDBRemote::eServerPacketType_qPathComplete
@ eServerPacketType_qPathComplete
Definition: StringExtractorGDBRemote.h:79
StringExtractorGDBRemote::eServerPacketType_vCont_actions
@ eServerPacketType_vCont_actions
Definition: StringExtractorGDBRemote.h:137
StringExtractorGDBRemote::eServerPacketType_QSetDetachOnError
@ eServerPacketType_QSetDetachOnError
Definition: StringExtractorGDBRemote.h:73
StringExtractorGDBRemote::eServerPacketType_jSignalsInfo
@ eServerPacketType_jSignalsInfo
Definition: StringExtractorGDBRemote.h:129
StringExtractorGDBRemote::eServerPacketType_jLLDBTraceGetState
@ eServerPacketType_jLLDBTraceGetState
Definition: StringExtractorGDBRemote.h:168
StringExtractorGDBRemote::eServerPacketType_QRestoreRegisterState
@ eServerPacketType_QRestoreRegisterState
Definition: StringExtractorGDBRemote.h:98
StringExtractorGDBRemote::eServerPacketType_qKillSpawnedProcess
@ eServerPacketType_qKillSpawnedProcess
Definition: StringExtractorGDBRemote.h:61
StringExtractorGDBRemote::eResponse
@ eResponse
Definition: StringExtractorGDBRemote.h:177
StringExtractorGDBRemote::eServerPacketType_vAttachName
@ eServerPacketType_vAttachName
Definition: StringExtractorGDBRemote.h:135
StringExtractorGDBRemote::eServerPacketType_g
@ eServerPacketType_g
Definition: StringExtractorGDBRemote.h:144
StringExtractorGDBRemote::GetResponseType
ResponseType GetResponseType() const
Definition: StringExtractorGDBRemote.cpp:18
StringExtractorGDBRemote::eServerPacketType_qGroupName
@ eServerPacketType_qGroupName
Definition: StringExtractorGDBRemote.h:57
StringExtractorGDBRemote::eServerPacketType_qSpeedTest
@ eServerPacketType_qSpeedTest
Definition: StringExtractorGDBRemote.h:65
StringExtractorGDBRemote::eServerPacketType_QSetSTDERR
@ eServerPacketType_QSetSTDERR
Definition: StringExtractorGDBRemote.h:76
StringExtractorGDBRemote::eServerPacketType_jModulesInfo
@ eServerPacketType_jModulesInfo
Definition: StringExtractorGDBRemote.h:130
StringExtractorGDBRemote::eServerPacketType__M
@ eServerPacketType__M
Definition: StringExtractorGDBRemote.h:161
StringExtractorGDBRemote::eServerPacketType_qXfer
@ eServerPacketType_qXfer
Definition: StringExtractorGDBRemote.h:127
StringExtractorGDBRemote::IsUnsupportedResponse
bool IsUnsupportedResponse() const
Definition: StringExtractorGDBRemote.cpp:453
lldb::eErrorTypeGeneric
@ eErrorTypeGeneric
Generic errors that can be any value.
Definition: lldb-enumerations.h:308
StringExtractorGDBRemote::SetResponseValidatorToJSON
void SetResponseValidatorToJSON()
Definition: StringExtractorGDBRemote.cpp:604
StringExtractor::GetChar
char GetChar(char fail_value='\0')
Definition: StringExtractor.cpp:45
string
string(SUBSTRING ${p} 10 -1 pStripped) if($
Definition: Plugins/CMakeLists.txt:39
StringExtractorGDBRemote::GetPidTid
llvm::Optional< std::pair< lldb::pid_t, lldb::tid_t > > GetPidTid(lldb::pid_t default_pid)
Definition: StringExtractorGDBRemote.cpp:618
StringExtractor::GetHexU8
uint8_t GetHexU8(uint8_t fail_value=0, bool set_eof_on_fail=true)
Definition: StringExtractor.cpp:76
StringExtractorGDBRemote::eServerPacketType_qLaunchGDBServer
@ eServerPacketType_qLaunchGDBServer
Definition: StringExtractorGDBRemote.h:59
StringExtractorGDBRemote::eServerPacketType_QSetWorkingDir
@ eServerPacketType_QSetWorkingDir
Definition: StringExtractorGDBRemote.h:77
StringExtractorGDBRemote::GetStatus
lldb_private::Status GetStatus()
Definition: StringExtractorGDBRemote.cpp:474
StringExtractor::m_packet
std::string m_packet
The string in which to extract data.
Definition: StringExtractor.h:113
StringExtractorGDBRemote::eServerPacketType_X
@ eServerPacketType_X
Definition: StringExtractorGDBRemote.h:157
StringExtractorGDBRemote::eServerPacketType_qSupported
@ eServerPacketType_qSupported
Definition: StringExtractorGDBRemote.h:120
StringExtractorGDBRemote::eServerPacketType_QSetMaxPacketSize
@ eServerPacketType_QSetMaxPacketSize
Definition: StringExtractorGDBRemote.h:101
StringExtractorGDBRemote::AllThreads
static constexpr lldb::tid_t AllThreads
Definition: StringExtractorGDBRemote.h:198
StringExtractorGDBRemote::eServerPacketType_qGDBServerVersion
@ eServerPacketType_qGDBServerVersion
Definition: StringExtractorGDBRemote.h:112
StringExtractorGDBRemote::eServerPacketType_qLaunchSuccess
@ eServerPacketType_qLaunchSuccess
Definition: StringExtractorGDBRemote.h:62
StringExtractorGDBRemote::eServerPacketType_P
@ eServerPacketType_P
Definition: StringExtractorGDBRemote.h:152
StringExtractorGDBRemote::eServerPacketType_vFile_unlink
@ eServerPacketType_vFile_unlink
Definition: StringExtractorGDBRemote.h:93
StringExtractorGDBRemote::eServerPacketType_vFile_md5
@ eServerPacketType_vFile_md5
Definition: StringExtractorGDBRemote.h:90
StringExtractorGDBRemote::eServerPacketType_qModuleInfo
@ eServerPacketType_qModuleInfo
Definition: StringExtractorGDBRemote.h:63
StringExtractor::GetHexByteString
size_t GetHexByteString(std::string &str)
Definition: StringExtractor.cpp:300
StringExtractorGDBRemote::eServerPacketType_vCont
@ eServerPacketType_vCont
Definition: StringExtractorGDBRemote.h:136
StringExtractorGDBRemote::SetResponseValidatorToOKErrorNotSupported
void SetResponseValidatorToOKErrorNotSupported()
Definition: StringExtractorGDBRemote.cpp:594
StringExtractorGDBRemote::ServerPacketType
ServerPacketType
Definition: StringExtractorGDBRemote.h:46
StringExtractorGDBRemote::eServerPacketType_jThreadsInfo
@ eServerPacketType_jThreadsInfo
Definition: StringExtractorGDBRemote.h:107
StringExtractorGDBRemote::eServerPacketType_s
@ eServerPacketType_s
Definition: StringExtractorGDBRemote.h:153
StringExtractorGDBRemote::eServerPacketType_vFile_exists
@ eServerPacketType_vFile_exists
Definition: StringExtractorGDBRemote.h:89
lldb_private::Status
Definition: Status.h:44
StringExtractorGDBRemote::ValidateResponse
bool ValidateResponse() const
Definition: StringExtractorGDBRemote.cpp:609
uint32_t
StringExtractorGDBRemote::eServerPacketType_qsThreadInfo
@ eServerPacketType_qsThreadInfo
Definition: StringExtractorGDBRemote.h:108
StringExtractorGDBRemote::SetResponseValidator
void SetResponseValidator(ResponseValidatorCallback callback, void *baton)
Definition: StringExtractorGDBRemote.cpp:588
StringExtractorGDBRemote::eServerPacketType_notify
@ eServerPacketType_notify
Definition: StringExtractorGDBRemote.h:163
lldb::pid_t
uint64_t pid_t
Definition: lldb-types.h:85
StringExtractorGDBRemote::eServerPacketType_vFile_pwrite
@ eServerPacketType_vFile_pwrite
Definition: StringExtractorGDBRemote.h:86
StringExtractorGDBRemote::eServerPacketType_QEnableErrorStrings
@ eServerPacketType_QEnableErrorStrings
Definition: StringExtractorGDBRemote.h:70
StringExtractorGDBRemote::eNack
@ eNack
Definition: StringExtractorGDBRemote.h:177
StringExtractor::m_index
uint64_t m_index
When extracting data from a packet, this index will march along as things get extracted.
Definition: StringExtractor.h:118
StringExtractorGDBRemote::eServerPacketType_interrupt
@ eServerPacketType_interrupt
Definition: StringExtractorGDBRemote.h:51
StringExtractorGDBRemote::eServerPacketType_ack
@ eServerPacketType_ack
Definition: StringExtractorGDBRemote.h:48
StringExtractorGDBRemote::eServerPacketType_qFileLoadAddress
@ eServerPacketType_qFileLoadAddress
Definition: StringExtractorGDBRemote.h:68
StringExtractorGDBRemote::IsOKResponse
bool IsOKResponse() const
Definition: StringExtractorGDBRemote.cpp:449
StringExtractorGDBRemote::eServerPacketType_jLLDBTraceStop
@ eServerPacketType_jLLDBTraceStop
Definition: StringExtractorGDBRemote.h:167
StringExtractorGDBRemote::eServerPacketType_QEnvironmentHexEncoded
@ eServerPacketType_QEnvironmentHexEncoded
Definition: StringExtractorGDBRemote.h:95
StringExtractorGDBRemote::eServerPacketType_qEcho
@ eServerPacketType_qEcho
Definition: StringExtractorGDBRemote.h:56
StringExtractorGDBRemote::eServerPacketType_QLaunchArch
@ eServerPacketType_QLaunchArch
Definition: StringExtractorGDBRemote.h:71
JSONResponseValidator
static bool JSONResponseValidator(void *, const StringExtractorGDBRemote &response)
Definition: StringExtractorGDBRemote.cpp:522
StringExtractorGDBRemote::eServerPacketType_qPlatform_shell
@ eServerPacketType_qPlatform_shell
Definition: StringExtractorGDBRemote.h:80
StringExtractorGDBRemote::eServerPacketType_vFile_mode
@ eServerPacketType_vFile_mode
Definition: StringExtractorGDBRemote.h:88
StringExtractorGDBRemote::eServerPacketType_m
@ eServerPacketType_m
Definition: StringExtractorGDBRemote.h:149
StringExtractorGDBRemote::eServerPacketType_H
@ eServerPacketType_H
Definition: StringExtractorGDBRemote.h:146
StringExtractorGDBRemote::eServerPacketType_qShlibInfoAddr
@ eServerPacketType_qShlibInfoAddr
Definition: StringExtractorGDBRemote.h:118
StringExtractorGDBRemote::eServerPacketType_qGetProfileData
@ eServerPacketType_qGetProfileData
Definition: StringExtractorGDBRemote.h:111
StringExtractorGDBRemote::eServerPacketType_qGetWorkingDir
@ eServerPacketType_qGetWorkingDir
Definition: StringExtractorGDBRemote.h:67
StringExtractorGDBRemote
Definition: StringExtractorGDBRemote.h:21
StringExtractorGDBRemote::eServerPacketType_z
@ eServerPacketType_z
Definition: StringExtractorGDBRemote.h:159
StringExtractorGDBRemote::eServerPacketType_C
@ eServerPacketType_C
Definition: StringExtractorGDBRemote.h:142
StringExtractorGDBRemote::eServerPacketType_QPassSignals
@ eServerPacketType_QPassSignals
Definition: StringExtractorGDBRemote.h:97
StringExtractorGDBRemote::eServerPacketType_vAttach
@ eServerPacketType_vAttach
Definition: StringExtractorGDBRemote.h:132
StringExtractorGDBRemote::eServerPacketType_p
@ eServerPacketType_p
Definition: StringExtractorGDBRemote.h:151
StringExtractorGDBRemote::GetError
uint8_t GetError()
Definition: StringExtractorGDBRemote.cpp:466
StringExtractorGDBRemote::eServerPacketType_qHostInfo
@ eServerPacketType_qHostInfo
Definition: StringExtractorGDBRemote.h:58
StringExtractorGDBRemote::eServerPacketType_S
@ eServerPacketType_S
Definition: StringExtractorGDBRemote.h:154
StringExtractorGDBRemote::m_validator
ResponseValidatorCallback m_validator
Definition: StringExtractorGDBRemote.h:207
StringExtractorGDBRemote::eServerPacketType_QMemTags
@ eServerPacketType_QMemTags
Definition: StringExtractorGDBRemote.h:172
StringExtractorGDBRemote::eServerPacketType_QSetSTDIN
@ eServerPacketType_QSetSTDIN
Definition: StringExtractorGDBRemote.h:74
StringExtractorGDBRemote::eServerPacketType_qsProcessInfo
@ eServerPacketType_qsProcessInfo
Definition: StringExtractorGDBRemote.h:54
StringExtractorGDBRemote::eServerPacketType_k
@ eServerPacketType_k
Definition: StringExtractorGDBRemote.h:148
StringExtractorGDBRemote::eServerPacketType_vFile_open
@ eServerPacketType_vFile_open
Definition: StringExtractorGDBRemote.h:83
StringExtractorGDBRemote::eServerPacketType_QThreadSuffixSupported
@ eServerPacketType_QThreadSuffixSupported
Definition: StringExtractorGDBRemote.h:105
PACKET_MATCHES
#define PACKET_MATCHES(s)
StringExtractorGDBRemote::eServerPacketType_qStepPacketSupported
@ eServerPacketType_qStepPacketSupported
Definition: StringExtractorGDBRemote.h:119
StringExtractorGDBRemote::eServerPacketType_qGetPid
@ eServerPacketType_qGetPid
Definition: StringExtractorGDBRemote.h:110
StringExtractorGDBRemote::eServerPacketType_qRegisterInfo
@ eServerPacketType_qRegisterInfo
Definition: StringExtractorGDBRemote.h:117
StringExtractorGDBRemote::eServerPacketType_qVAttachOrWaitSupported
@ eServerPacketType_qVAttachOrWaitSupported
Definition: StringExtractorGDBRemote.h:124
UINT64_MAX
#define UINT64_MAX
Definition: lldb-defines.h:35
lldb::tid_t
uint64_t tid_t
Definition: lldb-types.h:86
StringExtractorGDBRemote::eServerPacketType_vFile_close
@ eServerPacketType_vFile_close
Definition: StringExtractorGDBRemote.h:84
StringExtractorGDBRemote::IsNormalResponse
bool IsNormalResponse() const
Definition: StringExtractorGDBRemote.cpp:457