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("qSaveCore"))
265  if (PACKET_STARTS_WITH("qSpeedTest:"))
267  if (PACKET_MATCHES("qShlibInfoAddr"))
269  if (PACKET_MATCHES("qStepPacketSupported"))
271  if (PACKET_STARTS_WITH("qSupported"))
273  if (PACKET_MATCHES("qSyncThreadStateSupported"))
275  break;
276 
277  case 'T':
278  if (PACKET_STARTS_WITH("qThreadExtraInfo,"))
280  if (PACKET_STARTS_WITH("qThreadStopInfo"))
282  break;
283 
284  case 'U':
285  if (PACKET_STARTS_WITH("qUserName:"))
287  break;
288 
289  case 'V':
290  if (PACKET_MATCHES("qVAttachOrWaitSupported"))
292  break;
293 
294  case 'W':
295  if (PACKET_STARTS_WITH("qWatchpointSupportInfo:"))
297  if (PACKET_MATCHES("qWatchpointSupportInfo"))
299  break;
300 
301  case 'X':
302  if (PACKET_STARTS_WITH("qXfer:"))
304  break;
305  }
306  break;
307 
308  case 'j':
309  if (PACKET_STARTS_WITH("jModulesInfo:"))
311  if (PACKET_MATCHES("jSignalsInfo"))
313  if (PACKET_MATCHES("jThreadsInfo"))
315 
316  if (PACKET_MATCHES("jLLDBTraceSupported"))
318  if (PACKET_STARTS_WITH("jLLDBTraceStop:"))
320  if (PACKET_STARTS_WITH("jLLDBTraceStart:"))
322  if (PACKET_STARTS_WITH("jLLDBTraceGetState:"))
324  if (PACKET_STARTS_WITH("jLLDBTraceGetBinaryData:"))
326  break;
327 
328  case 'v':
329  if (PACKET_STARTS_WITH("vFile:")) {
330  if (PACKET_STARTS_WITH("vFile:open:"))
332  else if (PACKET_STARTS_WITH("vFile:close:"))
334  else if (PACKET_STARTS_WITH("vFile:pread"))
336  else if (PACKET_STARTS_WITH("vFile:pwrite"))
338  else if (PACKET_STARTS_WITH("vFile:size"))
340  else if (PACKET_STARTS_WITH("vFile:exists"))
342  else if (PACKET_STARTS_WITH("vFile:fstat"))
344  else if (PACKET_STARTS_WITH("vFile:stat"))
346  else if (PACKET_STARTS_WITH("vFile:mode"))
348  else if (PACKET_STARTS_WITH("vFile:MD5"))
350  else if (PACKET_STARTS_WITH("vFile:symlink"))
352  else if (PACKET_STARTS_WITH("vFile:unlink"))
354 
355  } else {
356  if (PACKET_STARTS_WITH("vAttach;"))
358  if (PACKET_STARTS_WITH("vAttachWait;"))
360  if (PACKET_STARTS_WITH("vAttachOrWait;"))
362  if (PACKET_STARTS_WITH("vAttachName;"))
364  if (PACKET_STARTS_WITH("vCont;"))
366  if (PACKET_MATCHES("vCont?"))
368  if (PACKET_STARTS_WITH("vRun;"))
369  return eServerPacketType_vRun;
370  }
371  break;
372  case '_':
373  switch (packet_cstr[1]) {
374  case 'M':
375  return eServerPacketType__M;
376 
377  case 'm':
378  return eServerPacketType__m;
379  }
380  break;
381 
382  case '?':
383  if (packet_size == 1)
385  break;
386 
387  case 'c':
388  return eServerPacketType_c;
389 
390  case 'C':
391  return eServerPacketType_C;
392 
393  case 'D':
394  return eServerPacketType_D;
395 
396  case 'g':
397  return eServerPacketType_g;
398 
399  case 'G':
400  return eServerPacketType_G;
401 
402  case 'H':
403  return eServerPacketType_H;
404 
405  case 'I':
406  return eServerPacketType_I;
407 
408  case 'k':
409  if (packet_size == 1)
410  return eServerPacketType_k;
411  break;
412 
413  case 'm':
414  return eServerPacketType_m;
415 
416  case 'M':
417  return eServerPacketType_M;
418 
419  case 'p':
420  return eServerPacketType_p;
421 
422  case 'P':
423  return eServerPacketType_P;
424 
425  case 's':
426  if (packet_size == 1)
427  return eServerPacketType_s;
428  break;
429 
430  case 'S':
431  return eServerPacketType_S;
432 
433  case 'x':
434  return eServerPacketType_x;
435 
436  case 'X':
437  return eServerPacketType_X;
438 
439  case 'T':
440  return eServerPacketType_T;
441 
442  case 'z':
443  if (packet_cstr[1] >= '0' && packet_cstr[1] <= '4')
444  return eServerPacketType_z;
445  break;
446 
447  case 'Z':
448  if (packet_cstr[1] >= '0' && packet_cstr[1] <= '4')
449  return eServerPacketType_Z;
450  break;
451  }
453 }
454 
456  return GetResponseType() == eOK;
457 }
458 
460  return GetResponseType() == eUnsupported;
461 }
462 
464  return GetResponseType() == eResponse;
465 }
466 
468  return GetResponseType() == eError && isxdigit(m_packet[1]) &&
469  isxdigit(m_packet[2]);
470 }
471 
473  if (GetResponseType() == eError) {
474  SetFilePos(1);
475  return GetHexU8(255);
476  }
477  return 0;
478 }
479 
482  if (GetResponseType() == eError) {
483  SetFilePos(1);
484  uint8_t errc = GetHexU8(255);
485  error.SetError(errc, lldb::eErrorTypeGeneric);
486 
487  error.SetErrorStringWithFormat("Error %u", errc);
488  std::string error_messg;
489  if (GetChar() == ';') {
490  GetHexByteString(error_messg);
491  error.SetErrorString(error_messg);
492  }
493  }
494  return error;
495 }
496 
498  // Just get the data bytes in the string as
499  // GDBRemoteCommunication::CheckForPacket() already removes any 0x7d escaped
500  // characters. If any 0x7d characters are left in the packet, then they are
501  // supposed to be there...
502  str.clear();
503  const size_t bytes_left = GetBytesLeft();
504  if (bytes_left > 0) {
505  str.assign(m_packet, m_index, bytes_left);
506  m_index += bytes_left;
507  }
508  return str.size();
509 }
510 
511 static bool
513  const StringExtractorGDBRemote &response) {
514  switch (response.GetResponseType()) {
518  return true;
519 
523  break;
524  }
525  return false;
526 }
527 
528 static bool JSONResponseValidator(void *,
529  const StringExtractorGDBRemote &response) {
530  switch (response.GetResponseType()) {
533  return true; // Accept unsupported or EXX as valid responses
534 
538  break;
539 
541  // JSON that is returned in from JSON query packets is currently always
542  // either a dictionary which starts with a '{', or an array which starts
543  // with a '['. This is a quick validator to just make sure the response
544  // could be valid JSON without having to validate all of the
545  // JSON content.
546  switch (response.GetStringRef()[0]) {
547  case '{':
548  return true;
549  case '[':
550  return true;
551  default:
552  break;
553  }
554  break;
555  }
556  return false;
557 }
558 
559 static bool
561  const StringExtractorGDBRemote &response) {
562  switch (response.GetResponseType()) {
565  return true; // Accept unsupported or EXX as valid responses
566 
570  break;
571 
573  uint32_t valid_count = 0;
574  for (const char ch : response.GetStringRef()) {
575  if (!isxdigit(ch)) {
576  return false;
577  }
578  if (++valid_count >= 16)
579  break; // Don't validate all the characters in case the packet is very
580  // large
581  }
582  return true;
583  } break;
584  }
585  return false;
586 }
587 
589  const StringExtractorGDBRemote &rhs) {
590  m_validator = rhs.m_validator;
592 }
593 
595  ResponseValidatorCallback callback, void *baton) {
596  m_validator = callback;
597  m_validator_baton = baton;
598 }
599 
602  m_validator_baton = nullptr;
603 }
604 
607  m_validator_baton = nullptr;
608 }
609 
612  m_validator_baton = nullptr;
613 }
614 
616  // If we have a validator callback, try to validate the callback
617  if (m_validator)
618  return m_validator(m_validator_baton, *this);
619  else
620  return true; // No validator, so response is valid
621 }
622 
623 llvm::Optional<std::pair<lldb::pid_t, lldb::tid_t>>
625  llvm::StringRef view = llvm::StringRef(m_packet).substr(m_index);
626  size_t initial_length = view.size();
627  lldb::pid_t pid = default_pid;
628  lldb::tid_t tid;
629 
630  if (view.consume_front("p")) {
631  // process identifier
632  if (view.consume_front("-1")) {
633  // -1 is a special case
634  pid = AllProcesses;
635  } else if (view.consumeInteger(16, pid) || pid == 0) {
636  // not a valid hex integer OR unsupported pid 0
638  return llvm::None;
639  }
640 
641  // "." must follow if we expect TID too; otherwise, we assume -1
642  if (!view.consume_front(".")) {
643  // update m_index
644  m_index += initial_length - view.size();
645 
646  return {{pid, AllThreads}};
647  }
648  }
649 
650  // thread identifier
651  if (view.consume_front("-1")) {
652  // -1 is a special case
653  tid = AllThreads;
654  } else if (view.consumeInteger(16, tid) || tid == 0 || pid == AllProcesses) {
655  // not a valid hex integer OR tid 0 OR pid -1 + a specific tid
657  return llvm::None;
658  }
659 
660  // update m_index
661  m_index += initial_length - view.size();
662 
663  return {{pid, tid}};
664 }
StringExtractorGDBRemote::eServerPacketType_D
@ eServerPacketType_D
Definition: StringExtractorGDBRemote.h:145
StringExtractorGDBRemote::GetServerPacketType
ServerPacketType GetServerPacketType() const
Definition: StringExtractorGDBRemote.cpp:57
StringExtractorGDBRemote::eServerPacketType__m
@ eServerPacketType__m
Definition: StringExtractorGDBRemote.h:164
StringExtractorGDBRemote::AllProcesses
static constexpr lldb::pid_t AllProcesses
Definition: StringExtractorGDBRemote.h:201
StringExtractorGDBRemote::eServerPacketType_qUserName
@ eServerPacketType_qUserName
Definition: StringExtractorGDBRemote.h:66
StringExtractorGDBRemote::eServerPacketType_qThreadExtraInfo
@ eServerPacketType_qThreadExtraInfo
Definition: StringExtractorGDBRemote.h:123
StringExtractorGDBRemote::eServerPacketType_vFile_pread
@ eServerPacketType_vFile_pread
Definition: StringExtractorGDBRemote.h:85
StringExtractorGDBRemote::eServerPacketType_qMemoryRegionInfoSupported
@ eServerPacketType_qMemoryRegionInfoSupported
Definition: StringExtractorGDBRemote.h:115
StringExtractorGDBRemote::eError
@ eError
Definition: StringExtractorGDBRemote.h:181
StringExtractorGDBRemote::eServerPacketType_x
@ eServerPacketType_x
Definition: StringExtractorGDBRemote.h:158
StringExtractorGDBRemote::eServerPacketType_QListThreadsInStopReply
@ eServerPacketType_QListThreadsInStopReply
Definition: StringExtractorGDBRemote.h:97
StringExtractorGDBRemote::m_validator_baton
void * m_validator_baton
Definition: StringExtractorGDBRemote.h:212
StringExtractor::SetFilePos
void SetFilePos(uint32_t idx)
Definition: StringExtractor.h:39
StringExtractorGDBRemote::CopyResponseValidator
void CopyResponseValidator(const StringExtractorGDBRemote &rhs)
Definition: StringExtractorGDBRemote.cpp:588
StringExtractor::GetBytesLeft
size_t GetBytesLeft()
Definition: StringExtractor.h:52
StringExtractorGDBRemote::eServerPacketType_qfThreadInfo
@ eServerPacketType_qfThreadInfo
Definition: StringExtractorGDBRemote.h:110
StringExtractorGDBRemote::eServerPacketType_unimplemented
@ eServerPacketType_unimplemented
Definition: StringExtractorGDBRemote.h:50
StringExtractorGDBRemote::eServerPacketType_A
@ eServerPacketType_A
Definition: StringExtractorGDBRemote.h:52
StringExtractorGDBRemote::ResponseType
ResponseType
Definition: StringExtractorGDBRemote.h:181
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:512
StringExtractorGDBRemote::eServerPacketType_qSyncThreadStateSupported
@ eServerPacketType_qSyncThreadStateSupported
Definition: StringExtractorGDBRemote.h:122
StringExtractorGDBRemote::eOK
@ eOK
Definition: StringExtractorGDBRemote.h:181
StringExtractorGDBRemote::eServerPacketType_stop_reason
@ eServerPacketType_stop_reason
Definition: StringExtractorGDBRemote.h:141
StringExtractorGDBRemote::eServerPacketType_QStartNoAckMode
@ eServerPacketType_QStartNoAckMode
Definition: StringExtractorGDBRemote.h:78
StringExtractorGDBRemote::eServerPacketType_vAttachOrWait
@ eServerPacketType_vAttachOrWait
Definition: StringExtractorGDBRemote.h:135
StringExtractorGDBRemote::eServerPacketType_qLLDBSaveCore
@ eServerPacketType_qLLDBSaveCore
Definition: StringExtractorGDBRemote.h:176
StringExtractorGDBRemote::eServerPacketType_QSetMaxPayloadSize
@ eServerPacketType_QSetMaxPayloadSize
Definition: StringExtractorGDBRemote.h:103
StringExtractorGDBRemote::eServerPacketType_vFile_stat
@ eServerPacketType_vFile_stat
Definition: StringExtractorGDBRemote.h:92
StringExtractorGDBRemote::eServerPacketType_qMemoryRegionInfo
@ eServerPacketType_qMemoryRegionInfo
Definition: StringExtractorGDBRemote.h:114
StringExtractorGDBRemote::eServerPacketType_qC
@ eServerPacketType_qC
Definition: StringExtractorGDBRemote.h:55
StringExtractorGDBRemote::eServerPacketType_I
@ eServerPacketType_I
Definition: StringExtractorGDBRemote.h:149
StringExtractorGDBRemote::eServerPacketType_qProcessInfo
@ eServerPacketType_qProcessInfo
Definition: StringExtractorGDBRemote.h:116
StringExtractorGDBRemote::eServerPacketType_M
@ eServerPacketType_M
Definition: StringExtractorGDBRemote.h:152
StringExtractorGDBRemote::eServerPacketType_vRun
@ eServerPacketType_vRun
Definition: StringExtractorGDBRemote.h:139
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:134
StringExtractorGDBRemote::eServerPacketType_G
@ eServerPacketType_G
Definition: StringExtractorGDBRemote.h:147
StringExtractorGDBRemote::eServerPacketType_qWatchpointSupportInfoSupported
@ eServerPacketType_qWatchpointSupportInfoSupported
Definition: StringExtractorGDBRemote.h:127
StringExtractorGDBRemote::eServerPacketType_jLLDBTraceSupported
@ eServerPacketType_jLLDBTraceSupported
Definition: StringExtractorGDBRemote.h:167
StringExtractorGDBRemote::eServerPacketType_qRcmd
@ eServerPacketType_qRcmd
Definition: StringExtractorGDBRemote.h:117
StringExtractorGDBRemote::eServerPacketType_QSetSTDOUT
@ eServerPacketType_QSetSTDOUT
Definition: StringExtractorGDBRemote.h:75
StringExtractorGDBRemote::eServerPacketType_QSetLogging
@ eServerPacketType_QSetLogging
Definition: StringExtractorGDBRemote.h:101
StringExtractorGDBRemote::SetResponseValidatorToASCIIHexBytes
void SetResponseValidatorToASCIIHexBytes()
Definition: StringExtractorGDBRemote.cpp:605
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:467
StringExtractorGDBRemote::eServerPacketType_qfProcessInfo
@ eServerPacketType_qfProcessInfo
Definition: StringExtractorGDBRemote.h:53
StringExtractorGDBRemote::eServerPacketType_jLLDBTraceStart
@ eServerPacketType_jLLDBTraceStart
Definition: StringExtractorGDBRemote.h:168
ASCIIHexBytesResponseValidator
static bool ASCIIHexBytesResponseValidator(void *, const StringExtractorGDBRemote &response)
Definition: StringExtractorGDBRemote.cpp:560
StringExtractorGDBRemote::eServerPacketType_vFile_symlink
@ eServerPacketType_vFile_symlink
Definition: StringExtractorGDBRemote.h:93
StringExtractorGDBRemote::eServerPacketType_qPlatform_mkdir
@ eServerPacketType_qPlatform_mkdir
Definition: StringExtractorGDBRemote.h:81
StringExtractorGDBRemote::eUnsupported
@ eUnsupported
Definition: StringExtractorGDBRemote.h:181
StringExtractorGDBRemote::GetEscapedBinaryData
size_t GetEscapedBinaryData(std::string &str)
Definition: StringExtractorGDBRemote.cpp:497
error
static llvm::raw_ostream & error(Stream &strm)
Definition: CommandReturnObject.cpp:17
StringExtractorGDBRemote::eServerPacketType_QSaveRegisterState
@ eServerPacketType_QSaveRegisterState
Definition: StringExtractorGDBRemote.h:100
StringExtractorGDBRemote::eServerPacketType_c
@ eServerPacketType_c
Definition: StringExtractorGDBRemote.h:143
StringExtractorGDBRemote::eServerPacketType_QSetEnableAsyncProfiling
@ eServerPacketType_QSetEnableAsyncProfiling
Definition: StringExtractorGDBRemote.h:104
StringExtractorGDBRemote::eServerPacketType_nack
@ eServerPacketType_nack
Definition: StringExtractorGDBRemote.h:47
StringExtractorGDBRemote::eServerPacketType_T
@ eServerPacketType_T
Definition: StringExtractorGDBRemote.h:157
StringExtractorGDBRemote::eServerPacketType_vFile_fstat
@ eServerPacketType_vFile_fstat
Definition: StringExtractorGDBRemote.h:91
StringExtractorGDBRemote::eServerPacketType_qMemTags
@ eServerPacketType_qMemTags
Definition: StringExtractorGDBRemote.h:173
StringExtractorGDBRemote::eServerPacketType_Z
@ eServerPacketType_Z
Definition: StringExtractorGDBRemote.h:160
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:124
StringExtractorGDBRemote::eServerPacketType_qWatchpointSupportInfo
@ eServerPacketType_qWatchpointSupportInfo
Definition: StringExtractorGDBRemote.h:126
StringExtractorGDBRemote::eServerPacketType_qProcessInfoPID
@ eServerPacketType_qProcessInfoPID
Definition: StringExtractorGDBRemote.h:64
StringExtractorGDBRemote::eAck
@ eAck
Definition: StringExtractorGDBRemote.h:181
StringExtractorGDBRemote::eServerPacketType_QSyncThreadState
@ eServerPacketType_QSyncThreadState
Definition: StringExtractorGDBRemote.h:105
StringExtractorGDBRemote::eServerPacketType_jLLDBTraceGetBinaryData
@ eServerPacketType_jLLDBTraceGetBinaryData
Definition: StringExtractorGDBRemote.h:171
StringExtractorGDBRemote::eServerPacketType_qPathComplete
@ eServerPacketType_qPathComplete
Definition: StringExtractorGDBRemote.h:79
StringExtractorGDBRemote::eServerPacketType_vCont_actions
@ eServerPacketType_vCont_actions
Definition: StringExtractorGDBRemote.h:138
StringExtractorGDBRemote::eServerPacketType_QSetDetachOnError
@ eServerPacketType_QSetDetachOnError
Definition: StringExtractorGDBRemote.h:73
StringExtractorGDBRemote::eServerPacketType_jSignalsInfo
@ eServerPacketType_jSignalsInfo
Definition: StringExtractorGDBRemote.h:130
StringExtractorGDBRemote::eServerPacketType_jLLDBTraceGetState
@ eServerPacketType_jLLDBTraceGetState
Definition: StringExtractorGDBRemote.h:170
StringExtractorGDBRemote::eServerPacketType_QRestoreRegisterState
@ eServerPacketType_QRestoreRegisterState
Definition: StringExtractorGDBRemote.h:99
StringExtractorGDBRemote::eServerPacketType_qKillSpawnedProcess
@ eServerPacketType_qKillSpawnedProcess
Definition: StringExtractorGDBRemote.h:61
StringExtractorGDBRemote::eResponse
@ eResponse
Definition: StringExtractorGDBRemote.h:181
StringExtractorGDBRemote::eServerPacketType_vAttachName
@ eServerPacketType_vAttachName
Definition: StringExtractorGDBRemote.h:136
StringExtractorGDBRemote::eServerPacketType_g
@ eServerPacketType_g
Definition: StringExtractorGDBRemote.h:146
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:131
StringExtractorGDBRemote::eServerPacketType__M
@ eServerPacketType__M
Definition: StringExtractorGDBRemote.h:163
StringExtractorGDBRemote::eServerPacketType_qXfer
@ eServerPacketType_qXfer
Definition: StringExtractorGDBRemote.h:128
StringExtractorGDBRemote::IsUnsupportedResponse
bool IsUnsupportedResponse() const
Definition: StringExtractorGDBRemote.cpp:459
lldb::eErrorTypeGeneric
@ eErrorTypeGeneric
Generic errors that can be any value.
Definition: lldb-enumerations.h:308
StringExtractorGDBRemote::SetResponseValidatorToJSON
void SetResponseValidatorToJSON()
Definition: StringExtractorGDBRemote.cpp:610
StringExtractor::GetChar
char GetChar(char fail_value='\0')
Definition: StringExtractor.cpp:45
string
string(SUBSTRING ${p} 10 -1 pStripped) if($
Definition: Plugins/CMakeLists.txt:40
StringExtractorGDBRemote::GetPidTid
llvm::Optional< std::pair< lldb::pid_t, lldb::tid_t > > GetPidTid(lldb::pid_t default_pid)
Definition: StringExtractorGDBRemote.cpp:624
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:480
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:159
StringExtractorGDBRemote::eServerPacketType_qSupported
@ eServerPacketType_qSupported
Definition: StringExtractorGDBRemote.h:121
StringExtractorGDBRemote::eServerPacketType_QSetMaxPacketSize
@ eServerPacketType_QSetMaxPacketSize
Definition: StringExtractorGDBRemote.h:102
StringExtractorGDBRemote::AllThreads
static constexpr lldb::tid_t AllThreads
Definition: StringExtractorGDBRemote.h:202
StringExtractorGDBRemote::eServerPacketType_qGDBServerVersion
@ eServerPacketType_qGDBServerVersion
Definition: StringExtractorGDBRemote.h:113
StringExtractorGDBRemote::eServerPacketType_qLaunchSuccess
@ eServerPacketType_qLaunchSuccess
Definition: StringExtractorGDBRemote.h:62
StringExtractorGDBRemote::eServerPacketType_P
@ eServerPacketType_P
Definition: StringExtractorGDBRemote.h:154
StringExtractorGDBRemote::eServerPacketType_vFile_unlink
@ eServerPacketType_vFile_unlink
Definition: StringExtractorGDBRemote.h:94
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:137
StringExtractorGDBRemote::SetResponseValidatorToOKErrorNotSupported
void SetResponseValidatorToOKErrorNotSupported()
Definition: StringExtractorGDBRemote.cpp:600
StringExtractorGDBRemote::ServerPacketType
ServerPacketType
Definition: StringExtractorGDBRemote.h:46
StringExtractorGDBRemote::eServerPacketType_jThreadsInfo
@ eServerPacketType_jThreadsInfo
Definition: StringExtractorGDBRemote.h:108
StringExtractorGDBRemote::eServerPacketType_s
@ eServerPacketType_s
Definition: StringExtractorGDBRemote.h:155
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:615
uint32_t
StringExtractorGDBRemote::eServerPacketType_qsThreadInfo
@ eServerPacketType_qsThreadInfo
Definition: StringExtractorGDBRemote.h:109
StringExtractorGDBRemote::SetResponseValidator
void SetResponseValidator(ResponseValidatorCallback callback, void *baton)
Definition: StringExtractorGDBRemote.cpp:594
StringExtractorGDBRemote::eServerPacketType_notify
@ eServerPacketType_notify
Definition: StringExtractorGDBRemote.h:165
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:181
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:455
StringExtractorGDBRemote::eServerPacketType_jLLDBTraceStop
@ eServerPacketType_jLLDBTraceStop
Definition: StringExtractorGDBRemote.h:169
StringExtractorGDBRemote::eServerPacketType_QEnvironmentHexEncoded
@ eServerPacketType_QEnvironmentHexEncoded
Definition: StringExtractorGDBRemote.h:96
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:528
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:151
StringExtractorGDBRemote::eServerPacketType_H
@ eServerPacketType_H
Definition: StringExtractorGDBRemote.h:148
StringExtractorGDBRemote::eServerPacketType_qShlibInfoAddr
@ eServerPacketType_qShlibInfoAddr
Definition: StringExtractorGDBRemote.h:119
StringExtractorGDBRemote::eServerPacketType_qGetProfileData
@ eServerPacketType_qGetProfileData
Definition: StringExtractorGDBRemote.h:112
StringExtractorGDBRemote::eServerPacketType_qGetWorkingDir
@ eServerPacketType_qGetWorkingDir
Definition: StringExtractorGDBRemote.h:67
StringExtractorGDBRemote
Definition: StringExtractorGDBRemote.h:21
StringExtractorGDBRemote::eServerPacketType_z
@ eServerPacketType_z
Definition: StringExtractorGDBRemote.h:161
StringExtractorGDBRemote::eServerPacketType_C
@ eServerPacketType_C
Definition: StringExtractorGDBRemote.h:144
StringExtractorGDBRemote::eServerPacketType_QPassSignals
@ eServerPacketType_QPassSignals
Definition: StringExtractorGDBRemote.h:98
StringExtractorGDBRemote::eServerPacketType_vAttach
@ eServerPacketType_vAttach
Definition: StringExtractorGDBRemote.h:133
StringExtractorGDBRemote::eServerPacketType_p
@ eServerPacketType_p
Definition: StringExtractorGDBRemote.h:153
StringExtractorGDBRemote::GetError
uint8_t GetError()
Definition: StringExtractorGDBRemote.cpp:472
StringExtractorGDBRemote::eServerPacketType_qHostInfo
@ eServerPacketType_qHostInfo
Definition: StringExtractorGDBRemote.h:58
StringExtractorGDBRemote::eServerPacketType_S
@ eServerPacketType_S
Definition: StringExtractorGDBRemote.h:156
StringExtractorGDBRemote::m_validator
ResponseValidatorCallback m_validator
Definition: StringExtractorGDBRemote.h:211
StringExtractorGDBRemote::eServerPacketType_QMemTags
@ eServerPacketType_QMemTags
Definition: StringExtractorGDBRemote.h:174
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:150
StringExtractorGDBRemote::eServerPacketType_vFile_open
@ eServerPacketType_vFile_open
Definition: StringExtractorGDBRemote.h:83
StringExtractorGDBRemote::eServerPacketType_QThreadSuffixSupported
@ eServerPacketType_QThreadSuffixSupported
Definition: StringExtractorGDBRemote.h:106
PACKET_MATCHES
#define PACKET_MATCHES(s)
StringExtractorGDBRemote::eServerPacketType_qStepPacketSupported
@ eServerPacketType_qStepPacketSupported
Definition: StringExtractorGDBRemote.h:120
StringExtractorGDBRemote::eServerPacketType_qGetPid
@ eServerPacketType_qGetPid
Definition: StringExtractorGDBRemote.h:111
StringExtractorGDBRemote::eServerPacketType_qRegisterInfo
@ eServerPacketType_qRegisterInfo
Definition: StringExtractorGDBRemote.h:118
StringExtractorGDBRemote::eServerPacketType_qVAttachOrWaitSupported
@ eServerPacketType_qVAttachOrWaitSupported
Definition: StringExtractorGDBRemote.h:125
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:463