https://github.com/charles-zablit updated https://github.com/llvm/llvm-project/pull/206985
>From 8b897129938714430e907c8e7780c8df622b0f87 Mon Sep 17 00:00:00 2001 From: Charles Zablit <[email protected]> Date: Wed, 1 Jul 2026 14:44:35 +0100 Subject: [PATCH 1/3] [lldb] Extract URI schemes manually to support Windows paths --- .../gdb-server/PlatformRemoteGDBServer.cpp | 24 ++++++++++++++----- .../GDBRemoteCommunicationServerLLGS.cpp | 12 ++++++---- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp index 1f69ef5f3f6ca..55fdc94df4b99 100644 --- a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp +++ b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp @@ -19,6 +19,7 @@ #include "lldb/Host/Host.h" #include "lldb/Host/HostInfo.h" #include "lldb/Host/PosixApi.h" +#include "lldb/Host/Socket.h" #include "lldb/Target/Process.h" #include "lldb/Target/Target.h" #include "lldb/Utility/FileSpec.h" @@ -226,13 +227,24 @@ Status PlatformRemoteGDBServer::ConnectRemote(Args &args) { if (!url) return Status::FromErrorString("URL is null."); - std::optional<URI> parsed_url = URI::Parse(url); - if (!parsed_url) - return Status::FromErrorStringWithFormat("Invalid URL: %s", url); + // Parse the scheme manually because URI::parse does not handle Windows paths. + llvm::StringRef scheme = llvm::StringRef(url).split("://").first; + std::optional<Socket::ProtocolModePair> protocol_and_mode = + Socket::GetProtocolAndMode(scheme); + if (protocol_and_mode && + (protocol_and_mode->first == Socket::ProtocolUnixDomain || + protocol_and_mode->first == Socket::ProtocolUnixAbstract)) { + m_platform_scheme = scheme.str(); + m_platform_hostname = ""; + } else { + std::optional<URI> parsed_url = URI::Parse(url); + if (!parsed_url) + return Status::FromErrorStringWithFormat("Invalid URL: %s", url); - // We're going to reuse the hostname when we connect to the debugserver. - m_platform_scheme = parsed_url->scheme.str(); - m_platform_hostname = parsed_url->hostname.str(); + // We're going to reuse the hostname when we connect to the debugserver. + m_platform_scheme = parsed_url->scheme.str(); + m_platform_hostname = parsed_url->hostname.str(); + } auto client_up = std::make_unique<process_gdb_remote::GDBRemoteCommunicationClient>(); diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp index 769705588fbdf..948e939a02613 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp @@ -4560,20 +4560,22 @@ void GDBRemoteCommunicationServerLLGS::AppendThreadIDToResponse( std::string lldb_private::process_gdb_remote::LLGSArgToURL(llvm::StringRef url_arg, bool reverse_connect) { - // Try parsing the argument as URL. - if (std::optional<URI> url = URI::Parse(url_arg)) { + // Parse the scheme manually because URI::parse does not handle Windows paths. + constexpr llvm::StringRef kSchemeSep = "://"; + if (size_t pos = url_arg.find(kSchemeSep); pos != llvm::StringRef::npos) { if (reverse_connect) return url_arg.str(); // Translate the scheme from LLGS notation to ConnectionFileDescriptor. // If the scheme doesn't match any, pass it through to support using CFD // schemes directly. - std::string new_url = llvm::StringSwitch<std::string>(url->scheme) + llvm::StringRef scheme = url_arg.substr(0, pos); + std::string new_url = llvm::StringSwitch<std::string>(scheme) .Case("tcp", "listen") .Case("unix", "unix-accept") .Case("unix-abstract", "unix-abstract-accept") - .Default(url->scheme.str()); - llvm::append_range(new_url, url_arg.substr(url->scheme.size())); + .Default(scheme.str()); + llvm::append_range(new_url, url_arg.substr(scheme.size())); return new_url; } >From 52b7d2cf85f6ffaaacf5d61720c9fd4d40a93d11 Mon Sep 17 00:00:00 2001 From: Charles Zablit <[email protected]> Date: Wed, 1 Jul 2026 16:38:40 +0100 Subject: [PATCH 2/3] inline variable --- .../Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp index 948e939a02613..f550c82d0885f 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp @@ -4561,8 +4561,7 @@ std::string lldb_private::process_gdb_remote::LLGSArgToURL(llvm::StringRef url_arg, bool reverse_connect) { // Parse the scheme manually because URI::parse does not handle Windows paths. - constexpr llvm::StringRef kSchemeSep = "://"; - if (size_t pos = url_arg.find(kSchemeSep); pos != llvm::StringRef::npos) { + if (size_t pos = url_arg.find("://"); pos != llvm::StringRef::npos) { if (reverse_connect) return url_arg.str(); >From b58e5d550d04029a021e9b728408f75df77db57a Mon Sep 17 00:00:00 2001 From: Charles Zablit <[email protected]> Date: Wed, 1 Jul 2026 17:00:55 +0100 Subject: [PATCH 3/3] add comment --- .../Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp index 55fdc94df4b99..22d30d660d9c3 100644 --- a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp +++ b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp @@ -235,6 +235,7 @@ Status PlatformRemoteGDBServer::ConnectRemote(Args &args) { (protocol_and_mode->first == Socket::ProtocolUnixDomain || protocol_and_mode->first == Socket::ProtocolUnixAbstract)) { m_platform_scheme = scheme.str(); + // The URI contains a filepath, the hostname is empty. m_platform_hostname = ""; } else { std::optional<URI> parsed_url = URI::Parse(url); _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
