diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2021-08-22 19:00:43 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2021-11-13 20:39:49 +0000 |
commit | fe6060f10f634930ff71b7c50291ddc610da2475 (patch) | |
tree | 1483580c790bd4d27b6500a7542b5ee00534d3cc /contrib/llvm-project/lldb/source/Utility/StringExtractorGDBRemote.cpp | |
parent | b61bce17f346d79cecfd8f195a64b10f77be43b1 (diff) | |
parent | 344a3780b2e33f6ca763666c380202b18aab72a3 (diff) | |
download | src-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.cpp | 84 |
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}}; +} |