aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp
diff options
context:
space:
mode:
authorMichał Górny <mgorny@moritz.systems>2021-04-24 22:36:20 +0200
committerMichał Górny <mgorny@moritz.systems>2021-04-27 19:34:00 +0200
commitca7824c2a8dbf3e37734e10e77003acd34d0868a (patch)
tree42263edf5e48807a546e7230bca3ec761e5e092e /lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp
parent887bdff8bae74ae0cedadbbe35f39141da3642c9 (diff)
downloadllvm-ca7824c2a8dbf3e37734e10e77003acd34d0868a.zip
llvm-ca7824c2a8dbf3e37734e10e77003acd34d0868a.tar.gz
llvm-ca7824c2a8dbf3e37734e10e77003acd34d0868a.tar.bz2
[lldb] [gdb-remote] Report QPassSignals and qXfer via extensions API
Remove hardcoded platform list for QPassSignals, qXfer:auxv:read and qXfer:libraries-svr4:read and instead query the process plugin via the GetSupportedExtensions() API. Differential Revision: https://reviews.llvm.org/D101241
Diffstat (limited to 'lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp')
-rw-r--r--lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp24
1 files changed, 16 insertions, 8 deletions
diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp
index 15908c7..1825bc8 100644
--- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp
+++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp
@@ -3594,15 +3594,22 @@ std::vector<std::string> GDBRemoteCommunicationServerLLGS::HandleFeatures(
std::vector<std::string> ret =
GDBRemoteCommunicationServerCommon::HandleFeatures(client_features);
ret.insert(ret.end(), {
- "QThreadSuffixSupported+", "QListThreadsInStopReply+",
- "qXfer:features:read+",
-#if defined(__linux__) || defined(__NetBSD__) || defined(__FreeBSD__)
- "QPassSignals+", "qXfer:auxv:read+", "qXfer:libraries-svr4:read+",
-#endif
- });
+ "QThreadSuffixSupported+",
+ "QListThreadsInStopReply+",
+ "qXfer:features:read+",
+ });
- // check for client features
+ // report server-only features
using Extension = NativeProcessProtocol::Extension;
+ Extension plugin_features = m_process_factory.GetSupportedExtensions();
+ if (bool(plugin_features & Extension::pass_signals))
+ ret.push_back("QPassSignals+");
+ if (bool(plugin_features & Extension::auxv))
+ ret.push_back("qXfer:auxv:read+");
+ if (bool(plugin_features & Extension::libraries_svr4))
+ ret.push_back("qXfer:libraries-svr4:read+");
+
+ // check for client features
m_extensions_supported = {};
for (llvm::StringRef x : client_features)
m_extensions_supported |=
@@ -3611,7 +3618,8 @@ std::vector<std::string> GDBRemoteCommunicationServerLLGS::HandleFeatures(
.Case("fork-events+", Extension::fork)
.Case("vfork-events+", Extension::vfork)
.Default({});
- m_extensions_supported &= m_process_factory.GetSupportedExtensions();
+
+ m_extensions_supported &= plugin_features;
// fork & vfork require multiprocess
if (!bool(m_extensions_supported & Extension::multiprocess))