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 <ctype.h>
12 #include <string.h>
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 'R':
147  if (PACKET_STARTS_WITH("QRestoreRegisterState:"))
149  break;
150 
151  case 'T':
152  if (PACKET_MATCHES("QThreadSuffixSupported"))
154  break;
155  }
156  break;
157 
158  case 'q':
159  switch (packet_cstr[1]) {
160  case 's':
161  if (PACKET_MATCHES("qsProcessInfo"))
163  if (PACKET_MATCHES("qsThreadInfo"))
165  break;
166 
167  case 'f':
168  if (PACKET_STARTS_WITH("qfProcessInfo"))
170  if (PACKET_STARTS_WITH("qfThreadInfo"))
172  break;
173 
174  case 'C':
175  if (packet_size == 2)
176  return eServerPacketType_qC;
177  break;
178 
179  case 'E':
180  if (PACKET_STARTS_WITH("qEcho:"))
182  break;
183 
184  case 'F':
185  if (PACKET_STARTS_WITH("qFileLoadAddress:"))
187  break;
188 
189  case 'G':
190  if (PACKET_STARTS_WITH("qGroupName:"))
192  if (PACKET_MATCHES("qGetWorkingDir"))
194  if (PACKET_MATCHES("qGetPid"))
196  if (PACKET_STARTS_WITH("qGetProfileData;"))
198  if (PACKET_MATCHES("qGDBServerVersion"))
200  break;
201 
202  case 'H':
203  if (PACKET_MATCHES("qHostInfo"))
205  break;
206 
207  case 'K':
208  if (PACKET_STARTS_WITH("qKillSpawnedProcess"))
210  break;
211 
212  case 'L':
213  if (PACKET_STARTS_WITH("qLaunchGDBServer"))
215  if (PACKET_MATCHES("qLaunchSuccess"))
217  break;
218 
219  case 'M':
220  if (PACKET_STARTS_WITH("qMemoryRegionInfo:"))
222  if (PACKET_MATCHES("qMemoryRegionInfo"))
224  if (PACKET_STARTS_WITH("qModuleInfo:"))
226  break;
227 
228  case 'P':
229  if (PACKET_STARTS_WITH("qProcessInfoPID:"))
231  if (PACKET_STARTS_WITH("qPlatform_shell:"))
233  if (PACKET_STARTS_WITH("qPlatform_mkdir:"))
235  if (PACKET_STARTS_WITH("qPlatform_chmod:"))
237  if (PACKET_MATCHES("qProcessInfo"))
239  if (PACKET_STARTS_WITH("qPathComplete:"))
241  break;
242 
243  case 'Q':
244  if (PACKET_MATCHES("qQueryGDBServer"))
246  break;
247 
248  case 'R':
249  if (PACKET_STARTS_WITH("qRcmd,"))
251  if (PACKET_STARTS_WITH("qRegisterInfo"))
253  break;
254 
255  case 'S':
256  if (PACKET_STARTS_WITH("qSpeedTest:"))
258  if (PACKET_MATCHES("qShlibInfoAddr"))
260  if (PACKET_MATCHES("qStepPacketSupported"))
262  if (PACKET_STARTS_WITH("qSupported"))
264  if (PACKET_MATCHES("qSyncThreadStateSupported"))
266  break;
267 
268  case 'T':
269  if (PACKET_STARTS_WITH("qThreadExtraInfo,"))
271  if (PACKET_STARTS_WITH("qThreadStopInfo"))
273  break;
274 
275  case 'U':
276  if (PACKET_STARTS_WITH("qUserName:"))
278  break;
279 
280  case 'V':
281  if (PACKET_MATCHES("qVAttachOrWaitSupported"))
283  break;
284 
285  case 'W':
286  if (PACKET_STARTS_WITH("qWatchpointSupportInfo:"))
288  if (PACKET_MATCHES("qWatchpointSupportInfo"))
290  break;
291 
292  case 'X':
293  if (PACKET_STARTS_WITH("qXfer:"))
295  break;
296  }
297  break;
298 
299  case 'j':
300  if (PACKET_STARTS_WITH("jModulesInfo:"))
302  if (PACKET_MATCHES("jSignalsInfo"))
304  if (PACKET_MATCHES("jThreadsInfo"))
306 
307  if (PACKET_MATCHES("jLLDBTraceSupported"))
309  if (PACKET_STARTS_WITH("jLLDBTraceStop:"))
311  if (PACKET_STARTS_WITH("jLLDBTraceStart:"))
313  if (PACKET_STARTS_WITH("jLLDBTraceGetState:"))
315  if (PACKET_STARTS_WITH("jLLDBTraceGetBinaryData:"))
317  break;
318 
319  case 'v':
320  if (PACKET_STARTS_WITH("vFile:")) {
321  if (PACKET_STARTS_WITH("vFile:open:"))
323  else if (PACKET_STARTS_WITH("vFile:close:"))
325  else if (PACKET_STARTS_WITH("vFile:pread"))
327  else if (PACKET_STARTS_WITH("vFile:pwrite"))
329  else if (PACKET_STARTS_WITH("vFile:size"))
331  else if (PACKET_STARTS_WITH("vFile:exists"))
333  else if (PACKET_STARTS_WITH("vFile:stat"))
335  else if (PACKET_STARTS_WITH("vFile:mode"))
337  else if (PACKET_STARTS_WITH("vFile:MD5"))
339  else if (PACKET_STARTS_WITH("vFile:symlink"))
341  else if (PACKET_STARTS_WITH("vFile:unlink"))
343 
344  } else {
345  if (PACKET_STARTS_WITH("vAttach;"))
347  if (PACKET_STARTS_WITH("vAttachWait;"))
349  if (PACKET_STARTS_WITH("vAttachOrWait;"))
351  if (PACKET_STARTS_WITH("vAttachName;"))
353  if (PACKET_STARTS_WITH("vCont;"))
355  if (PACKET_MATCHES("vCont?"))
357  }
358  break;
359  case '_':
360  switch (packet_cstr[1]) {
361  case 'M':
362  return eServerPacketType__M;
363 
364  case 'm':
365  return eServerPacketType__m;
366  }
367  break;
368 
369  case '?':
370  if (packet_size == 1)
372  break;
373 
374  case 'c':
375  return eServerPacketType_c;
376 
377  case 'C':
378  return eServerPacketType_C;
379 
380  case 'D':
381  return eServerPacketType_D;
382 
383  case 'g':
384  return eServerPacketType_g;
385 
386  case 'G':
387  return eServerPacketType_G;
388 
389  case 'H':
390  return eServerPacketType_H;
391 
392  case 'I':
393  return eServerPacketType_I;
394 
395  case 'k':
396  if (packet_size == 1)
397  return eServerPacketType_k;
398  break;
399 
400  case 'm':
401  return eServerPacketType_m;
402 
403  case 'M':
404  return eServerPacketType_M;
405 
406  case 'p':
407  return eServerPacketType_p;
408 
409  case 'P':
410  return eServerPacketType_P;
411 
412  case 's':
413  if (packet_size == 1)
414  return eServerPacketType_s;
415  break;
416 
417  case 'S':
418  return eServerPacketType_S;
419 
420  case 'x':
421  return eServerPacketType_x;
422 
423  case 'X':
424  return eServerPacketType_X;
425 
426  case 'T':
427  return eServerPacketType_T;
428 
429  case 'z':
430  if (packet_cstr[1] >= '0' && packet_cstr[1] <= '4')
431  return eServerPacketType_z;
432  break;
433 
434  case 'Z':
435  if (packet_cstr[1] >= '0' && packet_cstr[1] <= '4')
436  return eServerPacketType_Z;
437  break;
438  }
440 }
441 
443  return GetResponseType() == eOK;
444 }
445 
447  return GetResponseType() == eUnsupported;
448 }
449 
451  return GetResponseType() == eResponse;
452 }
453 
455  return GetResponseType() == eError && isxdigit(m_packet[1]) &&
456  isxdigit(m_packet[2]);
457 }
458 
460  if (GetResponseType() == eError) {
461  SetFilePos(1);
462  return GetHexU8(255);
463  }
464  return 0;
465 }
466 
469  if (GetResponseType() == eError) {
470  SetFilePos(1);
471  uint8_t errc = GetHexU8(255);
472  error.SetError(errc, lldb::eErrorTypeGeneric);
473 
474  error.SetErrorStringWithFormat("Error %u", errc);
475  std::string error_messg;
476  if (GetChar() == ';') {
477  GetHexByteString(error_messg);
478  error.SetErrorString(error_messg);
479  }
480  }
481  return error;
482 }
483 
485  // Just get the data bytes in the string as
486  // GDBRemoteCommunication::CheckForPacket() already removes any 0x7d escaped
487  // characters. If any 0x7d characters are left in the packet, then they are
488  // supposed to be there...
489  str.clear();
490  const size_t bytes_left = GetBytesLeft();
491  if (bytes_left > 0) {
492  str.assign(m_packet, m_index, bytes_left);
493  m_index += bytes_left;
494  }
495  return str.size();
496 }
497 
498 static bool
500  const StringExtractorGDBRemote &response) {
501  switch (response.GetResponseType()) {
505  return true;
506 
510  break;
511  }
512  return false;
513 }
514 
515 static bool JSONResponseValidator(void *,
516  const StringExtractorGDBRemote &response) {
517  switch (response.GetResponseType()) {
520  return true; // Accept unsupported or EXX as valid responses
521 
525  break;
526 
528  // JSON that is returned in from JSON query packets is currently always
529  // either a dictionary which starts with a '{', or an array which starts
530  // with a '['. This is a quick validator to just make sure the response
531  // could be valid JSON without having to validate all of the
532  // JSON content.
533  switch (response.GetStringRef()[0]) {
534  case '{':
535  return true;
536  case '[':
537  return true;
538  default:
539  break;
540  }
541  break;
542  }
543  return false;
544 }
545 
546 static bool
548  const StringExtractorGDBRemote &response) {
549  switch (response.GetResponseType()) {
552  return true; // Accept unsupported or EXX as valid responses
553 
557  break;
558 
560  uint32_t valid_count = 0;
561  for (const char ch : response.GetStringRef()) {
562  if (!isxdigit(ch)) {
563  return false;
564  }
565  if (++valid_count >= 16)
566  break; // Don't validate all the characters in case the packet is very
567  // large
568  }
569  return true;
570  } break;
571  }
572  return false;
573 }
574 
576  const StringExtractorGDBRemote &rhs) {
577  m_validator = rhs.m_validator;
579 }
580 
582  ResponseValidatorCallback callback, void *baton) {
583  m_validator = callback;
584  m_validator_baton = baton;
585 }
586 
589  m_validator_baton = nullptr;
590 }
591 
594  m_validator_baton = nullptr;
595 }
596 
599  m_validator_baton = nullptr;
600 }
601 
603  // If we have a validator callback, try to validate the callback
604  if (m_validator)
605  return m_validator(m_validator_baton, *this);
606  else
607  return true; // No validator, so response is valid
608 }
609 
610 llvm::Optional<std::pair<lldb::pid_t, lldb::tid_t>>
612  llvm::StringRef view = llvm::StringRef(m_packet).substr(m_index);
613  size_t initial_length = view.size();
614  lldb::pid_t pid = default_pid;
615  lldb::tid_t tid;
616 
617  if (view.consume_front("p")) {
618  // process identifier
619  if (view.consume_front("-1")) {
620  // -1 is a special case
621  pid = AllProcesses;
622  } else if (view.consumeInteger(16, pid) || pid == 0) {
623  // not a valid hex integer OR unsupported pid 0
625  return llvm::None;
626  }
627 
628  // "." must follow if we expect TID too; otherwise, we assume -1
629  if (!view.consume_front(".")) {
630  // update m_index
631  m_index += initial_length - view.size();
632 
633  return {{pid, AllThreads}};
634  }
635  }
636 
637  // thread identifier
638  if (view.consume_front("-1")) {
639  // -1 is a special case
640  tid = AllThreads;
641  } else if (view.consumeInteger(16, tid) || tid == 0 || pid == AllProcesses) {
642  // not a valid hex integer OR tid 0 OR pid -1 + a specific tid
644  return llvm::None;
645  }
646 
647  // update m_index
648  m_index += initial_length - view.size();
649 
650  return {{pid, tid}};
651 }
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:194
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:174
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:205
StringExtractor::SetFilePos
void SetFilePos(uint32_t idx)
Definition: StringExtractor.h:39
StringExtractorGDBRemote::CopyResponseValidator
void CopyResponseValidator(const StringExtractorGDBRemote &rhs)
Definition: StringExtractorGDBRemote.cpp:575
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:174
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:499
StringExtractorGDBRemote::eServerPacketType_qSyncThreadStateSupported
@ eServerPacketType_qSyncThreadStateSupported
Definition: StringExtractorGDBRemote.h:121
StringExtractorGDBRemote::eOK
@ eOK
Definition: StringExtractorGDBRemote.h:174
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:592
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:454
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:547
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:174
StringExtractorGDBRemote::GetEscapedBinaryData
size_t GetEscapedBinaryData(std::string &str)
Definition: StringExtractorGDBRemote.cpp:484
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_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:174
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:174
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:446
lldb::eErrorTypeGeneric
@ eErrorTypeGeneric
Generic errors that can be any value.
Definition: lldb-enumerations.h:308
StringExtractorGDBRemote::SetResponseValidatorToJSON
void SetResponseValidatorToJSON()
Definition: StringExtractorGDBRemote.cpp:597
StringExtractor::GetChar
char GetChar(char fail_value='\0')
Definition: StringExtractor.cpp:45
string
string(SUBSTRING ${p} 10 -1 pStripped) if($
Definition: Plugins/CMakeLists.txt:38
StringExtractorGDBRemote::GetPidTid
llvm::Optional< std::pair< lldb::pid_t, lldb::tid_t > > GetPidTid(lldb::pid_t default_pid)
Definition: StringExtractorGDBRemote.cpp:611
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:467
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:195
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:587
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:602
uint32_t
StringExtractorGDBRemote::eServerPacketType_qsThreadInfo
@ eServerPacketType_qsThreadInfo
Definition: StringExtractorGDBRemote.h:108
StringExtractorGDBRemote::SetResponseValidator
void SetResponseValidator(ResponseValidatorCallback callback, void *baton)
Definition: StringExtractorGDBRemote.cpp:581
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:174
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:442
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:515
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:459
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:204
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:450