aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/lldb/source/Utility/StringExtractorGDBRemote.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2021-08-22 19:00:43 +0000
committerDimitry Andric <dim@FreeBSD.org>2021-11-13 20:39:49 +0000
commitfe6060f10f634930ff71b7c50291ddc610da2475 (patch)
tree1483580c790bd4d27b6500a7542b5ee00534d3cc /contrib/llvm-project/lldb/source/Utility/StringExtractorGDBRemote.cpp
parentb61bce17f346d79cecfd8f195a64b10f77be43b1 (diff)
parent344a3780b2e33f6ca763666c380202b18aab72a3 (diff)
downloadsrc-fe6060f10f634930ff71b7c50291ddc610da2475.tar.gz
src-fe6060f10f634930ff71b7c50291ddc610da2475.zip
Merge llvm-project main llvmorg-13-init-16847-g88e66fa60ae5
This updates llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-13-init-16847-g88e66fa60ae5, the last commit before the upstream release/13.x branch was created. PR: 258209 MFC after: 2 weeks
Diffstat (limited to 'contrib/llvm-project/lldb/source/Utility/StringExtractorGDBRemote.cpp')
-rw-r--r--contrib/llvm-project/lldb/source/Utility/StringExtractorGDBRemote.cpp84
1 files changed, 67 insertions, 17 deletions
diff --git a/contrib/llvm-project/lldb/source/Utility/StringExtractorGDBRemote.cpp b/contrib/llvm-project/lldb/source/Utility/StringExtractorGDBRemote.cpp
index def096866426..29cf585bea56 100644
--- a/contrib/llvm-project/lldb/source/Utility/StringExtractorGDBRemote.cpp
+++ b/contrib/llvm-project/lldb/source/Utility/StringExtractorGDBRemote.cpp
@@ -8,8 +8,11 @@
#include "lldb/Utility/StringExtractorGDBRemote.h"
-#include <ctype.h>
-#include <string.h>
+#include <cctype>
+#include <cstring>
+
+constexpr lldb::pid_t StringExtractorGDBRemote::AllProcesses;
+constexpr lldb::tid_t StringExtractorGDBRemote::AllThreads;
StringExtractorGDBRemote::ResponseType
StringExtractorGDBRemote::GetResponseType() const {
@@ -140,6 +143,11 @@ StringExtractorGDBRemote::GetServerPacketType() const {
return eServerPacketType_QListThreadsInStopReply;
break;
+ case 'M':
+ if (PACKET_STARTS_WITH("QMemTags"))
+ return eServerPacketType_QMemTags;
+ break;
+
case 'R':
if (PACKET_STARTS_WITH("QRestoreRegisterState:"))
return eServerPacketType_QRestoreRegisterState;
@@ -220,6 +228,8 @@ StringExtractorGDBRemote::GetServerPacketType() const {
return eServerPacketType_qMemoryRegionInfoSupported;
if (PACKET_STARTS_WITH("qModuleInfo:"))
return eServerPacketType_qModuleInfo;
+ if (PACKET_STARTS_WITH("qMemTags:"))
+ return eServerPacketType_qMemTags;
break;
case 'P':
@@ -300,18 +310,17 @@ StringExtractorGDBRemote::GetServerPacketType() const {
return eServerPacketType_jSignalsInfo;
if (PACKET_MATCHES("jThreadsInfo"))
return eServerPacketType_jThreadsInfo;
- if (PACKET_STARTS_WITH("jTraceBufferRead:"))
- return eServerPacketType_jTraceBufferRead;
- if (PACKET_STARTS_WITH("jTraceConfigRead:"))
- return eServerPacketType_jTraceConfigRead;
- if (PACKET_STARTS_WITH("jTraceMetaRead:"))
- return eServerPacketType_jTraceMetaRead;
- if (PACKET_STARTS_WITH("jTraceStart:"))
- return eServerPacketType_jTraceStart;
- if (PACKET_STARTS_WITH("jTraceStop:"))
- return eServerPacketType_jTraceStop;
- if (PACKET_MATCHES("jLLDBTraceSupportedType"))
- return eServerPacketType_jLLDBTraceSupportedType;
+
+ if (PACKET_MATCHES("jLLDBTraceSupported"))
+ return eServerPacketType_jLLDBTraceSupported;
+ if (PACKET_STARTS_WITH("jLLDBTraceStop:"))
+ return eServerPacketType_jLLDBTraceStop;
+ if (PACKET_STARTS_WITH("jLLDBTraceStart:"))
+ return eServerPacketType_jLLDBTraceStart;
+ if (PACKET_STARTS_WITH("jLLDBTraceGetState:"))
+ return eServerPacketType_jLLDBTraceGetState;
+ if (PACKET_STARTS_WITH("jLLDBTraceGetBinaryData:"))
+ return eServerPacketType_jLLDBTraceGetBinaryData;
break;
case 'v':
@@ -376,9 +385,7 @@ StringExtractorGDBRemote::GetServerPacketType() const {
return eServerPacketType_C;
case 'D':
- if (packet_size == 1)
- return eServerPacketType_D;
- break;
+ return eServerPacketType_D;
case 'g':
return eServerPacketType_g;
@@ -606,3 +613,46 @@ bool StringExtractorGDBRemote::ValidateResponse() const {
else
return true; // No validator, so response is valid
}
+
+llvm::Optional<std::pair<lldb::pid_t, lldb::tid_t>>
+StringExtractorGDBRemote::GetPidTid(lldb::pid_t default_pid) {
+ llvm::StringRef view = llvm::StringRef(m_packet).substr(m_index);
+ size_t initial_length = view.size();
+ lldb::pid_t pid = default_pid;
+ lldb::tid_t tid;
+
+ if (view.consume_front("p")) {
+ // process identifier
+ if (view.consume_front("-1")) {
+ // -1 is a special case
+ pid = AllProcesses;
+ } else if (view.consumeInteger(16, pid) || pid == 0) {
+ // not a valid hex integer OR unsupported pid 0
+ m_index = UINT64_MAX;
+ return llvm::None;
+ }
+
+ // "." must follow if we expect TID too; otherwise, we assume -1
+ if (!view.consume_front(".")) {
+ // update m_index
+ m_index += initial_length - view.size();
+
+ return {{pid, AllThreads}};
+ }
+ }
+
+ // thread identifier
+ if (view.consume_front("-1")) {
+ // -1 is a special case
+ tid = AllThreads;
+ } else if (view.consumeInteger(16, tid) || tid == 0 || pid == AllProcesses) {
+ // not a valid hex integer OR tid 0 OR pid -1 + a specific tid
+ m_index = UINT64_MAX;
+ return llvm::None;
+ }
+
+ // update m_index
+ m_index += initial_length - view.size();
+
+ return {{pid, tid}};
+}