[Lldb-commits] [PATCH] Fix parsing of IPv6 host:port inside brackets

2020-03-24 Thread Emre Kultursay via lldb-commits



0001-Fix-parsing-of-IPv6-host-port-inside-brackets.patch
Description: Binary data
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] [lldb] Fix and re-enable TestUseSourceCache.py (PR #111237)

2024-10-09 Thread Emre Kultursay via lldb-commits

emrekultursay wrote:

> With this in mind, deleting the file is representative of an editor wanting 
> to save the file using the deletion strategy,...
Yes. I had meant it is not representative of what Android Studio (or _some_ 
editors) does. 

> think it's not our goal here to ensure the editor cannot save the file if the 
> setting is true.

I agree that having a test that sets `use_source_cache=true` and expects 
failure behavior is not a goal. But, it is how we _observe_ that the test input 
`cpp` source file we use satisfies the condition to use mmap. If the condition 
to use mmap changes (e.g., from filesize=16K to filesize=32K), then the test 
input source file will no longer trigger mmap, yet the `use_source_cache=false` 
test will keep passing. So, I think having that negative test case, despite 
being weird, still serves some purpose.




 

https://github.com/llvm/llvm-project/pull/111237
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] [lldb] Fix and re-enable TestUseSourceCache.py (PR #111237)

2024-10-10 Thread Emre Kultursay via lldb-commits

emrekultursay wrote:

LGTM. Thanks. 

https://github.com/llvm/llvm-project/pull/111237
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] [lldb] Fix and re-enable TestUseSourceCache.py (PR #111237)

2024-10-08 Thread Emre Kultursay via lldb-commits

emrekultursay wrote:

OK, I figured the problem.  In the test, we call `os.removeFile()` which does 
not actually represent the real end-user use-case (which is to edit the file 
and save it). 

Empirically, on Windows 11, I can verify that when LLDB mmaps these large 
files, then:
 1. I can append to the file from Python (mode="a")
 2. I can delete the file from Python (what the current test is doing)
 3. I cannot delete the file from File Explorer => says lldb.exe is using the 
file
 4. I cannot overwrite the file from Python (mode="w")
 5. I cannot overwrite/save the file from Notepad++ 
 6. I can overwrite/save the file from vi.

I am guessing that there are different mechanisms for deleting/editing/saving, 
and different editors/tools use different approaches. 

To make the test more representative, I replaced the `removeFile()` method with 
the following

```
def overwriteFile(self, src):
"""Write to file and return true iff file was successfully written."""
try:
f = open(src, "w") 
f.writelines(["// hello world\n"])
return True
except Exception:
return False












https://github.com/llvm/llvm-project/pull/111237
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] [lldb] Fix and re-enable TestUseSourceCache.py (PR #111237)

2024-10-07 Thread Emre Kultursay via lldb-commits

emrekultursay wrote:

>  it failed in this case because the source file is opened with the 
> `FILE_SHARE_DELETE` share mode, which allows the file to be removed, see 
> `llvm::sys::fs::openNativeFileInternal()` in 
> `llvm/lib/Support/Windows/Path.inc`.

Was there an LLDB change about how it opens a source file?  When this test was 
written, LLDB called:

```
liblldb.dll!shouldUseMmap(...) Line 323
at c:\src\llvm-project\llvm\lib\support\memorybuffer.cpp(327)
liblldb.dll!getOpenFileImpl(...) Line 446
at c:\src\llvm-project\llvm\lib\support\memorybuffer.cpp(446)
liblldb.dll!getFileAux(...) Line 254
at c:\src\llvm-project\llvm\lib\support\memorybuffer.cpp(254)
liblldb.dll!llvm::WritableMemoryBuffer::getFile(...) Line 261
at c:\src\llvm-project\llvm\lib\support\memorybuffer.cpp(261)
liblldb.dll!lldb_private::FileSystem::CreateDataBuffer(...) Line 294
at c:\src\llvm-project\lldb\source\host\common\filesystem.cpp(294)
liblldb.dll!lldb_private::FileSystem::CreateDataBuffer(...) Line 310
at c:\src\llvm-project\lldb\source\host\common\filesystem.cpp(310)
liblldb.dll!lldb_private::SourceManager::File::CommonInitializer(...) Line 459
at c:\src\llvm-project\lldb\source\core\sourcemanager.cpp(459)
liblldb.dll!lldb_private::SourceManager::File::File(...) Line 397
at c:\src\llvm-project\lldb\source\core\sourcemanager.cpp(397)
```

...and that `shouldUseMmap` was returning `true` for large files, which 
resulted in a `MemoryBufferMMapFile`. I don't see any relevant changes on those 
files, so I don't know the where `openNativeFileInternal()` comes into the 
picture.


> Judging by this patch, that may no longer be necessary. Or does that only 
> apply for certain situations (certain windows versions, files which are not 
> large enough to be mmapped, etc.)?

LLDB used memory mapping for very large files. Maybe the test `main.cpp` 
doesn't satisfy the "memory-mapped file" criteria any more? I couldn't find an 
explanation based on Windows 10 vs. Windows 11 file system locking.

https://github.com/llvm/llvm-project/pull/111237
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] [lldb] Remove support and workarounds for Android 4 and older (PR #124047)

2025-01-24 Thread Emre Kultursay via lldb-commits

emrekultursay wrote:

On the Android Studio side, we don't run tests on old API levels. We only run 
automated on latest API levels (and some best-effort manual tests on recent-ish 
API levels). Different features in Android Studio have different min-API 
requirements. To me, it seems OK to add "API-21 or newer required for native 
debugging" to future versions of Android Studio; so LGTM.

https://github.com/llvm/llvm-project/pull/124047
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-19 Thread Emre Kultursay via lldb-commits

https://github.com/emrekultursay created 
https://github.com/llvm/llvm-project/pull/136466

Commits 82ee31f and 2e89312 added socket sharing, but only for unix domain 
sockets. That broke Android, which uses unix-abstract sockets.

>From 950bafe1b6b900384b8d0f925f1cdab19a2c8e3d Mon Sep 17 00:00:00 2001
From: Emre Kultursay 
Date: Sun, 20 Apr 2025 01:11:31 +
Subject: [PATCH] Fix connecting via abstract socket

Commits 82ee31f and 2e89312 added socket sharing, but only for
unix domain sockets. That broke Android, which uses unix-abstract
sockets.
---
 lldb/include/lldb/Host/linux/AbstractSocket.h |  1 +
 lldb/include/lldb/Host/posix/DomainSocket.h   |  1 +
 lldb/source/Host/linux/AbstractSocket.cpp |  3 ++
 lldb/source/Host/posix/DomainSocket.cpp   |  6 +++
 lldb/tools/lldb-server/lldb-platform.cpp  | 40 +--
 5 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/lldb/include/lldb/Host/linux/AbstractSocket.h 
b/lldb/include/lldb/Host/linux/AbstractSocket.h
index accfd01457a5e..c6a0e2f8af63b 100644
--- a/lldb/include/lldb/Host/linux/AbstractSocket.h
+++ b/lldb/include/lldb/Host/linux/AbstractSocket.h
@@ -15,6 +15,7 @@ namespace lldb_private {
 class AbstractSocket : public DomainSocket {
 public:
   AbstractSocket();
+  AbstractSocket(NativeSocket socket, bool should_close);
 
 protected:
   size_t GetNameOffset() const override;
diff --git a/lldb/include/lldb/Host/posix/DomainSocket.h 
b/lldb/include/lldb/Host/posix/DomainSocket.h
index 3dbe6206da2c5..562c011ee73e6 100644
--- a/lldb/include/lldb/Host/posix/DomainSocket.h
+++ b/lldb/include/lldb/Host/posix/DomainSocket.h
@@ -33,6 +33,7 @@ class DomainSocket : public Socket {
 
 protected:
   DomainSocket(SocketProtocol protocol);
+  DomainSocket(SocketProtocol protocol, NativeSocket socket, bool 
should_close);
 
   virtual size_t GetNameOffset() const;
   virtual void DeleteSocketFile(llvm::StringRef name);
diff --git a/lldb/source/Host/linux/AbstractSocket.cpp 
b/lldb/source/Host/linux/AbstractSocket.cpp
index 8393a80e86e72..681aa2d1ebc72 100644
--- a/lldb/source/Host/linux/AbstractSocket.cpp
+++ b/lldb/source/Host/linux/AbstractSocket.cpp
@@ -15,6 +15,9 @@ using namespace lldb_private;
 
 AbstractSocket::AbstractSocket() : DomainSocket(ProtocolUnixAbstract) {}
 
+AbstractSocket::AbstractSocket(NativeSocket socket, bool should_close)
+: DomainSocket(ProtocolUnixAbstract, socket, should_close) {}
+
 size_t AbstractSocket::GetNameOffset() const { return 1; }
 
 void AbstractSocket::DeleteSocketFile(llvm::StringRef name) {}
diff --git a/lldb/source/Host/posix/DomainSocket.cpp 
b/lldb/source/Host/posix/DomainSocket.cpp
index 6c490cdda47ed..9b1e4f71bba2a 100644
--- a/lldb/source/Host/posix/DomainSocket.cpp
+++ b/lldb/source/Host/posix/DomainSocket.cpp
@@ -67,6 +67,12 @@ DomainSocket::DomainSocket(NativeSocket socket,
   m_socket = socket;
 }
 
+DomainSocket::DomainSocket(SocketProtocol protocol, NativeSocket socket,
+   bool should_close)
+: Socket(protocol, should_close) {
+  m_socket = socket;
+}
+
 Status DomainSocket::Connect(llvm::StringRef name) {
   sockaddr_un saddr_un;
   socklen_t saddr_un_len;
diff --git a/lldb/tools/lldb-server/lldb-platform.cpp 
b/lldb/tools/lldb-server/lldb-platform.cpp
index 23d36ffb4cb66..1f12f0902b954 100644
--- a/lldb/tools/lldb-server/lldb-platform.cpp
+++ b/lldb/tools/lldb-server/lldb-platform.cpp
@@ -39,11 +39,19 @@
 #if LLDB_ENABLE_POSIX
 #include "lldb/Host/posix/DomainSocket.h"
 #endif
+#ifdef __linux__
+#include "lldb/Host/linux/AbstractSocket.h"
+#endif
 #include "lldb/Utility/FileSpec.h"
 #include "lldb/Utility/LLDBLog.h"
 #include "lldb/Utility/Status.h"
 #include "lldb/Utility/UriParser.h"
 
+#if LLDB_ENABLE_POSIX
+#include 
+#include 
+#endif
+
 using namespace lldb;
 using namespace lldb_private;
 using namespace lldb_private::lldb_server;
@@ -455,14 +463,28 @@ int main_platform(int argc, char *argv[]) {
   lldb_private::Args inferior_arguments;
   inferior_arguments.SetArguments(argc, const_cast(argv));
 
+  Log *log = GetLog(LLDBLog::Platform);
   Socket::SocketProtocol protocol = Socket::ProtocolUnixDomain;
 
   if (fd != SharedSocket::kInvalidFD) {
 // Child process will handle the connection and exit.
-if (gdbserver_port)
+if (gdbserver_port) {
   protocol = Socket::ProtocolTcp;
+} else {
+#ifdef LLDB_ENABLE_POSIX
+  // Check if fd represents domain socket or abstract socket.
+  struct sockaddr_un addr;
+  socklen_t addr_len = sizeof(addr);
+  if (getsockname(fd, (struct sockaddr*)&addr, &addr_len) == -1) {
+LLDB_LOGF(log, "lldb-platform child: not a socket or error occurred");
+return socket_error;
+  }
 
-Log *log = GetLog(LLDBLog::Platform);
+  if (addr.sun_family == AF_UNIX && addr.sun_path[0] == '\0') {
+  protocol = Socket::ProtocolUnixAbstract;
+  }
+#endif
+}
 
 NativeSocket sockfd;
 error = SharedSocket::GetNativeSocket(fd, sockfd);
@@ -473,1

[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-22 Thread Emre Kultursay via lldb-commits

https://github.com/emrekultursay updated 
https://github.com/llvm/llvm-project/pull/136466

>From b6c46b7a28a807b507f06d748ed93f20d26fdfcc Mon Sep 17 00:00:00 2001
From: Emre Kultursay 
Date: Sun, 20 Apr 2025 01:11:31 +
Subject: [PATCH 1/2] Fix connecting via abstract socket

Commit 82ee31f and Commit 2e893124 added socket sharing, but only for
unix domain sockets. That broke Android, which uses unix-abstract
sockets.
---
 lldb/include/lldb/Host/linux/AbstractSocket.h |  1 +
 lldb/include/lldb/Host/posix/DomainSocket.h   |  1 +
 lldb/source/Host/linux/AbstractSocket.cpp |  3 ++
 lldb/source/Host/posix/DomainSocket.cpp   |  6 +++
 lldb/tools/lldb-server/lldb-platform.cpp  | 40 +--
 5 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/lldb/include/lldb/Host/linux/AbstractSocket.h 
b/lldb/include/lldb/Host/linux/AbstractSocket.h
index accfd01457a5e..c6a0e2f8af63b 100644
--- a/lldb/include/lldb/Host/linux/AbstractSocket.h
+++ b/lldb/include/lldb/Host/linux/AbstractSocket.h
@@ -15,6 +15,7 @@ namespace lldb_private {
 class AbstractSocket : public DomainSocket {
 public:
   AbstractSocket();
+  AbstractSocket(NativeSocket socket, bool should_close);
 
 protected:
   size_t GetNameOffset() const override;
diff --git a/lldb/include/lldb/Host/posix/DomainSocket.h 
b/lldb/include/lldb/Host/posix/DomainSocket.h
index 3dbe6206da2c5..562c011ee73e6 100644
--- a/lldb/include/lldb/Host/posix/DomainSocket.h
+++ b/lldb/include/lldb/Host/posix/DomainSocket.h
@@ -33,6 +33,7 @@ class DomainSocket : public Socket {
 
 protected:
   DomainSocket(SocketProtocol protocol);
+  DomainSocket(SocketProtocol protocol, NativeSocket socket, bool 
should_close);
 
   virtual size_t GetNameOffset() const;
   virtual void DeleteSocketFile(llvm::StringRef name);
diff --git a/lldb/source/Host/linux/AbstractSocket.cpp 
b/lldb/source/Host/linux/AbstractSocket.cpp
index 8393a80e86e72..681aa2d1ebc72 100644
--- a/lldb/source/Host/linux/AbstractSocket.cpp
+++ b/lldb/source/Host/linux/AbstractSocket.cpp
@@ -15,6 +15,9 @@ using namespace lldb_private;
 
 AbstractSocket::AbstractSocket() : DomainSocket(ProtocolUnixAbstract) {}
 
+AbstractSocket::AbstractSocket(NativeSocket socket, bool should_close)
+: DomainSocket(ProtocolUnixAbstract, socket, should_close) {}
+
 size_t AbstractSocket::GetNameOffset() const { return 1; }
 
 void AbstractSocket::DeleteSocketFile(llvm::StringRef name) {}
diff --git a/lldb/source/Host/posix/DomainSocket.cpp 
b/lldb/source/Host/posix/DomainSocket.cpp
index 6c490cdda47ed..9b1e4f71bba2a 100644
--- a/lldb/source/Host/posix/DomainSocket.cpp
+++ b/lldb/source/Host/posix/DomainSocket.cpp
@@ -67,6 +67,12 @@ DomainSocket::DomainSocket(NativeSocket socket,
   m_socket = socket;
 }
 
+DomainSocket::DomainSocket(SocketProtocol protocol, NativeSocket socket,
+   bool should_close)
+: Socket(protocol, should_close) {
+  m_socket = socket;
+}
+
 Status DomainSocket::Connect(llvm::StringRef name) {
   sockaddr_un saddr_un;
   socklen_t saddr_un_len;
diff --git a/lldb/tools/lldb-server/lldb-platform.cpp 
b/lldb/tools/lldb-server/lldb-platform.cpp
index 23d36ffb4cb66..59a83c28b0212 100644
--- a/lldb/tools/lldb-server/lldb-platform.cpp
+++ b/lldb/tools/lldb-server/lldb-platform.cpp
@@ -39,11 +39,19 @@
 #if LLDB_ENABLE_POSIX
 #include "lldb/Host/posix/DomainSocket.h"
 #endif
+#ifdef __linux__
+#include "lldb/Host/linux/AbstractSocket.h"
+#endif
 #include "lldb/Utility/FileSpec.h"
 #include "lldb/Utility/LLDBLog.h"
 #include "lldb/Utility/Status.h"
 #include "lldb/Utility/UriParser.h"
 
+#if LLDB_ENABLE_POSIX
+#include 
+#include 
+#endif
+
 using namespace lldb;
 using namespace lldb_private;
 using namespace lldb_private::lldb_server;
@@ -455,14 +463,28 @@ int main_platform(int argc, char *argv[]) {
   lldb_private::Args inferior_arguments;
   inferior_arguments.SetArguments(argc, const_cast(argv));
 
+  Log *log = GetLog(LLDBLog::Platform);
   Socket::SocketProtocol protocol = Socket::ProtocolUnixDomain;
 
   if (fd != SharedSocket::kInvalidFD) {
 // Child process will handle the connection and exit.
-if (gdbserver_port)
+if (gdbserver_port) {
   protocol = Socket::ProtocolTcp;
+} else {
+#ifdef LLDB_ENABLE_POSIX
+  // Check if fd represents domain socket or abstract socket.
+  struct sockaddr_un addr;
+  socklen_t addr_len = sizeof(addr);
+  if (getsockname(fd, (struct sockaddr *)&addr, &addr_len) == -1) {
+LLDB_LOGF(log, "lldb-platform child: not a socket or error occurred");
+return socket_error;
+  }
 
-Log *log = GetLog(LLDBLog::Platform);
+  if (addr.sun_family == AF_UNIX && addr.sun_path[0] == '\0') {
+protocol = Socket::ProtocolUnixAbstract;
+  }
+#endif
+}
 
 NativeSocket sockfd;
 error = SharedSocket::GetNativeSocket(fd, sockfd);
@@ -473,17 +495,27 @@ int main_platform(int argc, char *argv[]) {
 
 GDBRemoteCommunicationServerPlatform platform(protocol, gdbserver_

[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-22 Thread Emre Kultursay via lldb-commits

https://github.com/emrekultursay updated 
https://github.com/llvm/llvm-project/pull/136466

>From b6c46b7a28a807b507f06d748ed93f20d26fdfcc Mon Sep 17 00:00:00 2001
From: Emre Kultursay 
Date: Sun, 20 Apr 2025 01:11:31 +
Subject: [PATCH 1/2] Fix connecting via abstract socket

Commit 82ee31f and Commit 2e893124 added socket sharing, but only for
unix domain sockets. That broke Android, which uses unix-abstract
sockets.
---
 lldb/include/lldb/Host/linux/AbstractSocket.h |  1 +
 lldb/include/lldb/Host/posix/DomainSocket.h   |  1 +
 lldb/source/Host/linux/AbstractSocket.cpp |  3 ++
 lldb/source/Host/posix/DomainSocket.cpp   |  6 +++
 lldb/tools/lldb-server/lldb-platform.cpp  | 40 +--
 5 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/lldb/include/lldb/Host/linux/AbstractSocket.h 
b/lldb/include/lldb/Host/linux/AbstractSocket.h
index accfd01457a5e..c6a0e2f8af63b 100644
--- a/lldb/include/lldb/Host/linux/AbstractSocket.h
+++ b/lldb/include/lldb/Host/linux/AbstractSocket.h
@@ -15,6 +15,7 @@ namespace lldb_private {
 class AbstractSocket : public DomainSocket {
 public:
   AbstractSocket();
+  AbstractSocket(NativeSocket socket, bool should_close);
 
 protected:
   size_t GetNameOffset() const override;
diff --git a/lldb/include/lldb/Host/posix/DomainSocket.h 
b/lldb/include/lldb/Host/posix/DomainSocket.h
index 3dbe6206da2c5..562c011ee73e6 100644
--- a/lldb/include/lldb/Host/posix/DomainSocket.h
+++ b/lldb/include/lldb/Host/posix/DomainSocket.h
@@ -33,6 +33,7 @@ class DomainSocket : public Socket {
 
 protected:
   DomainSocket(SocketProtocol protocol);
+  DomainSocket(SocketProtocol protocol, NativeSocket socket, bool 
should_close);
 
   virtual size_t GetNameOffset() const;
   virtual void DeleteSocketFile(llvm::StringRef name);
diff --git a/lldb/source/Host/linux/AbstractSocket.cpp 
b/lldb/source/Host/linux/AbstractSocket.cpp
index 8393a80e86e72..681aa2d1ebc72 100644
--- a/lldb/source/Host/linux/AbstractSocket.cpp
+++ b/lldb/source/Host/linux/AbstractSocket.cpp
@@ -15,6 +15,9 @@ using namespace lldb_private;
 
 AbstractSocket::AbstractSocket() : DomainSocket(ProtocolUnixAbstract) {}
 
+AbstractSocket::AbstractSocket(NativeSocket socket, bool should_close)
+: DomainSocket(ProtocolUnixAbstract, socket, should_close) {}
+
 size_t AbstractSocket::GetNameOffset() const { return 1; }
 
 void AbstractSocket::DeleteSocketFile(llvm::StringRef name) {}
diff --git a/lldb/source/Host/posix/DomainSocket.cpp 
b/lldb/source/Host/posix/DomainSocket.cpp
index 6c490cdda47ed..9b1e4f71bba2a 100644
--- a/lldb/source/Host/posix/DomainSocket.cpp
+++ b/lldb/source/Host/posix/DomainSocket.cpp
@@ -67,6 +67,12 @@ DomainSocket::DomainSocket(NativeSocket socket,
   m_socket = socket;
 }
 
+DomainSocket::DomainSocket(SocketProtocol protocol, NativeSocket socket,
+   bool should_close)
+: Socket(protocol, should_close) {
+  m_socket = socket;
+}
+
 Status DomainSocket::Connect(llvm::StringRef name) {
   sockaddr_un saddr_un;
   socklen_t saddr_un_len;
diff --git a/lldb/tools/lldb-server/lldb-platform.cpp 
b/lldb/tools/lldb-server/lldb-platform.cpp
index 23d36ffb4cb66..59a83c28b0212 100644
--- a/lldb/tools/lldb-server/lldb-platform.cpp
+++ b/lldb/tools/lldb-server/lldb-platform.cpp
@@ -39,11 +39,19 @@
 #if LLDB_ENABLE_POSIX
 #include "lldb/Host/posix/DomainSocket.h"
 #endif
+#ifdef __linux__
+#include "lldb/Host/linux/AbstractSocket.h"
+#endif
 #include "lldb/Utility/FileSpec.h"
 #include "lldb/Utility/LLDBLog.h"
 #include "lldb/Utility/Status.h"
 #include "lldb/Utility/UriParser.h"
 
+#if LLDB_ENABLE_POSIX
+#include 
+#include 
+#endif
+
 using namespace lldb;
 using namespace lldb_private;
 using namespace lldb_private::lldb_server;
@@ -455,14 +463,28 @@ int main_platform(int argc, char *argv[]) {
   lldb_private::Args inferior_arguments;
   inferior_arguments.SetArguments(argc, const_cast(argv));
 
+  Log *log = GetLog(LLDBLog::Platform);
   Socket::SocketProtocol protocol = Socket::ProtocolUnixDomain;
 
   if (fd != SharedSocket::kInvalidFD) {
 // Child process will handle the connection and exit.
-if (gdbserver_port)
+if (gdbserver_port) {
   protocol = Socket::ProtocolTcp;
+} else {
+#ifdef LLDB_ENABLE_POSIX
+  // Check if fd represents domain socket or abstract socket.
+  struct sockaddr_un addr;
+  socklen_t addr_len = sizeof(addr);
+  if (getsockname(fd, (struct sockaddr *)&addr, &addr_len) == -1) {
+LLDB_LOGF(log, "lldb-platform child: not a socket or error occurred");
+return socket_error;
+  }
 
-Log *log = GetLog(LLDBLog::Platform);
+  if (addr.sun_family == AF_UNIX && addr.sun_path[0] == '\0') {
+protocol = Socket::ProtocolUnixAbstract;
+  }
+#endif
+}
 
 NativeSocket sockfd;
 error = SharedSocket::GetNativeSocket(fd, sockfd);
@@ -473,17 +495,27 @@ int main_platform(int argc, char *argv[]) {
 
 GDBRemoteCommunicationServerPlatform platform(protocol, gdbserver_

[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-23 Thread Emre Kultursay via lldb-commits

https://github.com/emrekultursay updated 
https://github.com/llvm/llvm-project/pull/136466

>From b6c46b7a28a807b507f06d748ed93f20d26fdfcc Mon Sep 17 00:00:00 2001
From: Emre Kultursay 
Date: Sun, 20 Apr 2025 01:11:31 +
Subject: [PATCH 1/4] Fix connecting via abstract socket

Commit 82ee31f and Commit 2e893124 added socket sharing, but only for
unix domain sockets. That broke Android, which uses unix-abstract
sockets.
---
 lldb/include/lldb/Host/linux/AbstractSocket.h |  1 +
 lldb/include/lldb/Host/posix/DomainSocket.h   |  1 +
 lldb/source/Host/linux/AbstractSocket.cpp |  3 ++
 lldb/source/Host/posix/DomainSocket.cpp   |  6 +++
 lldb/tools/lldb-server/lldb-platform.cpp  | 40 +--
 5 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/lldb/include/lldb/Host/linux/AbstractSocket.h 
b/lldb/include/lldb/Host/linux/AbstractSocket.h
index accfd01457a5e..c6a0e2f8af63b 100644
--- a/lldb/include/lldb/Host/linux/AbstractSocket.h
+++ b/lldb/include/lldb/Host/linux/AbstractSocket.h
@@ -15,6 +15,7 @@ namespace lldb_private {
 class AbstractSocket : public DomainSocket {
 public:
   AbstractSocket();
+  AbstractSocket(NativeSocket socket, bool should_close);
 
 protected:
   size_t GetNameOffset() const override;
diff --git a/lldb/include/lldb/Host/posix/DomainSocket.h 
b/lldb/include/lldb/Host/posix/DomainSocket.h
index 3dbe6206da2c5..562c011ee73e6 100644
--- a/lldb/include/lldb/Host/posix/DomainSocket.h
+++ b/lldb/include/lldb/Host/posix/DomainSocket.h
@@ -33,6 +33,7 @@ class DomainSocket : public Socket {
 
 protected:
   DomainSocket(SocketProtocol protocol);
+  DomainSocket(SocketProtocol protocol, NativeSocket socket, bool 
should_close);
 
   virtual size_t GetNameOffset() const;
   virtual void DeleteSocketFile(llvm::StringRef name);
diff --git a/lldb/source/Host/linux/AbstractSocket.cpp 
b/lldb/source/Host/linux/AbstractSocket.cpp
index 8393a80e86e72..681aa2d1ebc72 100644
--- a/lldb/source/Host/linux/AbstractSocket.cpp
+++ b/lldb/source/Host/linux/AbstractSocket.cpp
@@ -15,6 +15,9 @@ using namespace lldb_private;
 
 AbstractSocket::AbstractSocket() : DomainSocket(ProtocolUnixAbstract) {}
 
+AbstractSocket::AbstractSocket(NativeSocket socket, bool should_close)
+: DomainSocket(ProtocolUnixAbstract, socket, should_close) {}
+
 size_t AbstractSocket::GetNameOffset() const { return 1; }
 
 void AbstractSocket::DeleteSocketFile(llvm::StringRef name) {}
diff --git a/lldb/source/Host/posix/DomainSocket.cpp 
b/lldb/source/Host/posix/DomainSocket.cpp
index 6c490cdda47ed..9b1e4f71bba2a 100644
--- a/lldb/source/Host/posix/DomainSocket.cpp
+++ b/lldb/source/Host/posix/DomainSocket.cpp
@@ -67,6 +67,12 @@ DomainSocket::DomainSocket(NativeSocket socket,
   m_socket = socket;
 }
 
+DomainSocket::DomainSocket(SocketProtocol protocol, NativeSocket socket,
+   bool should_close)
+: Socket(protocol, should_close) {
+  m_socket = socket;
+}
+
 Status DomainSocket::Connect(llvm::StringRef name) {
   sockaddr_un saddr_un;
   socklen_t saddr_un_len;
diff --git a/lldb/tools/lldb-server/lldb-platform.cpp 
b/lldb/tools/lldb-server/lldb-platform.cpp
index 23d36ffb4cb66..59a83c28b0212 100644
--- a/lldb/tools/lldb-server/lldb-platform.cpp
+++ b/lldb/tools/lldb-server/lldb-platform.cpp
@@ -39,11 +39,19 @@
 #if LLDB_ENABLE_POSIX
 #include "lldb/Host/posix/DomainSocket.h"
 #endif
+#ifdef __linux__
+#include "lldb/Host/linux/AbstractSocket.h"
+#endif
 #include "lldb/Utility/FileSpec.h"
 #include "lldb/Utility/LLDBLog.h"
 #include "lldb/Utility/Status.h"
 #include "lldb/Utility/UriParser.h"
 
+#if LLDB_ENABLE_POSIX
+#include 
+#include 
+#endif
+
 using namespace lldb;
 using namespace lldb_private;
 using namespace lldb_private::lldb_server;
@@ -455,14 +463,28 @@ int main_platform(int argc, char *argv[]) {
   lldb_private::Args inferior_arguments;
   inferior_arguments.SetArguments(argc, const_cast(argv));
 
+  Log *log = GetLog(LLDBLog::Platform);
   Socket::SocketProtocol protocol = Socket::ProtocolUnixDomain;
 
   if (fd != SharedSocket::kInvalidFD) {
 // Child process will handle the connection and exit.
-if (gdbserver_port)
+if (gdbserver_port) {
   protocol = Socket::ProtocolTcp;
+} else {
+#ifdef LLDB_ENABLE_POSIX
+  // Check if fd represents domain socket or abstract socket.
+  struct sockaddr_un addr;
+  socklen_t addr_len = sizeof(addr);
+  if (getsockname(fd, (struct sockaddr *)&addr, &addr_len) == -1) {
+LLDB_LOGF(log, "lldb-platform child: not a socket or error occurred");
+return socket_error;
+  }
 
-Log *log = GetLog(LLDBLog::Platform);
+  if (addr.sun_family == AF_UNIX && addr.sun_path[0] == '\0') {
+protocol = Socket::ProtocolUnixAbstract;
+  }
+#endif
+}
 
 NativeSocket sockfd;
 error = SharedSocket::GetNativeSocket(fd, sockfd);
@@ -473,17 +495,27 @@ int main_platform(int argc, char *argv[]) {
 
 GDBRemoteCommunicationServerPlatform platform(protocol, gdbserver_

[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-23 Thread Emre Kultursay via lldb-commits

https://github.com/emrekultursay updated 
https://github.com/llvm/llvm-project/pull/136466

>From b6c46b7a28a807b507f06d748ed93f20d26fdfcc Mon Sep 17 00:00:00 2001
From: Emre Kultursay 
Date: Sun, 20 Apr 2025 01:11:31 +
Subject: [PATCH 1/3] Fix connecting via abstract socket

Commit 82ee31f and Commit 2e893124 added socket sharing, but only for
unix domain sockets. That broke Android, which uses unix-abstract
sockets.
---
 lldb/include/lldb/Host/linux/AbstractSocket.h |  1 +
 lldb/include/lldb/Host/posix/DomainSocket.h   |  1 +
 lldb/source/Host/linux/AbstractSocket.cpp |  3 ++
 lldb/source/Host/posix/DomainSocket.cpp   |  6 +++
 lldb/tools/lldb-server/lldb-platform.cpp  | 40 +--
 5 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/lldb/include/lldb/Host/linux/AbstractSocket.h 
b/lldb/include/lldb/Host/linux/AbstractSocket.h
index accfd01457a5e..c6a0e2f8af63b 100644
--- a/lldb/include/lldb/Host/linux/AbstractSocket.h
+++ b/lldb/include/lldb/Host/linux/AbstractSocket.h
@@ -15,6 +15,7 @@ namespace lldb_private {
 class AbstractSocket : public DomainSocket {
 public:
   AbstractSocket();
+  AbstractSocket(NativeSocket socket, bool should_close);
 
 protected:
   size_t GetNameOffset() const override;
diff --git a/lldb/include/lldb/Host/posix/DomainSocket.h 
b/lldb/include/lldb/Host/posix/DomainSocket.h
index 3dbe6206da2c5..562c011ee73e6 100644
--- a/lldb/include/lldb/Host/posix/DomainSocket.h
+++ b/lldb/include/lldb/Host/posix/DomainSocket.h
@@ -33,6 +33,7 @@ class DomainSocket : public Socket {
 
 protected:
   DomainSocket(SocketProtocol protocol);
+  DomainSocket(SocketProtocol protocol, NativeSocket socket, bool 
should_close);
 
   virtual size_t GetNameOffset() const;
   virtual void DeleteSocketFile(llvm::StringRef name);
diff --git a/lldb/source/Host/linux/AbstractSocket.cpp 
b/lldb/source/Host/linux/AbstractSocket.cpp
index 8393a80e86e72..681aa2d1ebc72 100644
--- a/lldb/source/Host/linux/AbstractSocket.cpp
+++ b/lldb/source/Host/linux/AbstractSocket.cpp
@@ -15,6 +15,9 @@ using namespace lldb_private;
 
 AbstractSocket::AbstractSocket() : DomainSocket(ProtocolUnixAbstract) {}
 
+AbstractSocket::AbstractSocket(NativeSocket socket, bool should_close)
+: DomainSocket(ProtocolUnixAbstract, socket, should_close) {}
+
 size_t AbstractSocket::GetNameOffset() const { return 1; }
 
 void AbstractSocket::DeleteSocketFile(llvm::StringRef name) {}
diff --git a/lldb/source/Host/posix/DomainSocket.cpp 
b/lldb/source/Host/posix/DomainSocket.cpp
index 6c490cdda47ed..9b1e4f71bba2a 100644
--- a/lldb/source/Host/posix/DomainSocket.cpp
+++ b/lldb/source/Host/posix/DomainSocket.cpp
@@ -67,6 +67,12 @@ DomainSocket::DomainSocket(NativeSocket socket,
   m_socket = socket;
 }
 
+DomainSocket::DomainSocket(SocketProtocol protocol, NativeSocket socket,
+   bool should_close)
+: Socket(protocol, should_close) {
+  m_socket = socket;
+}
+
 Status DomainSocket::Connect(llvm::StringRef name) {
   sockaddr_un saddr_un;
   socklen_t saddr_un_len;
diff --git a/lldb/tools/lldb-server/lldb-platform.cpp 
b/lldb/tools/lldb-server/lldb-platform.cpp
index 23d36ffb4cb66..59a83c28b0212 100644
--- a/lldb/tools/lldb-server/lldb-platform.cpp
+++ b/lldb/tools/lldb-server/lldb-platform.cpp
@@ -39,11 +39,19 @@
 #if LLDB_ENABLE_POSIX
 #include "lldb/Host/posix/DomainSocket.h"
 #endif
+#ifdef __linux__
+#include "lldb/Host/linux/AbstractSocket.h"
+#endif
 #include "lldb/Utility/FileSpec.h"
 #include "lldb/Utility/LLDBLog.h"
 #include "lldb/Utility/Status.h"
 #include "lldb/Utility/UriParser.h"
 
+#if LLDB_ENABLE_POSIX
+#include 
+#include 
+#endif
+
 using namespace lldb;
 using namespace lldb_private;
 using namespace lldb_private::lldb_server;
@@ -455,14 +463,28 @@ int main_platform(int argc, char *argv[]) {
   lldb_private::Args inferior_arguments;
   inferior_arguments.SetArguments(argc, const_cast(argv));
 
+  Log *log = GetLog(LLDBLog::Platform);
   Socket::SocketProtocol protocol = Socket::ProtocolUnixDomain;
 
   if (fd != SharedSocket::kInvalidFD) {
 // Child process will handle the connection and exit.
-if (gdbserver_port)
+if (gdbserver_port) {
   protocol = Socket::ProtocolTcp;
+} else {
+#ifdef LLDB_ENABLE_POSIX
+  // Check if fd represents domain socket or abstract socket.
+  struct sockaddr_un addr;
+  socklen_t addr_len = sizeof(addr);
+  if (getsockname(fd, (struct sockaddr *)&addr, &addr_len) == -1) {
+LLDB_LOGF(log, "lldb-platform child: not a socket or error occurred");
+return socket_error;
+  }
 
-Log *log = GetLog(LLDBLog::Platform);
+  if (addr.sun_family == AF_UNIX && addr.sun_path[0] == '\0') {
+protocol = Socket::ProtocolUnixAbstract;
+  }
+#endif
+}
 
 NativeSocket sockfd;
 error = SharedSocket::GetNativeSocket(fd, sockfd);
@@ -473,17 +495,27 @@ int main_platform(int argc, char *argv[]) {
 
 GDBRemoteCommunicationServerPlatform platform(protocol, gdbserver_

[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-23 Thread Emre Kultursay via lldb-commits


@@ -182,3 +191,22 @@ std::vector 
DomainSocket::GetListeningConnectionURI() const {
 
   return {llvm::formatv("unix-connect://{0}", addr.sun_path)};
 }
+
+Socket *DomainSocket::Create(NativeSocket sockfd, bool should_close,
+ Status &error) {
+#ifdef __linux__
+  // Check if fd represents domain socket or abstract socket.
+  struct sockaddr_un addr;
+  socklen_t addr_len = sizeof(addr);
+  if (getsockname(sockfd, (struct sockaddr *)&addr, &addr_len) == -1) {
+error = Status::FromErrorString(
+"lldb-platform child: not a socket or error occurred");
+return nullptr;
+  }
+
+  if (addr.sun_family == AF_UNIX && addr.sun_path[0] == '\0') {

emrekultursay wrote:

Done.

https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-23 Thread Emre Kultursay via lldb-commits


@@ -182,3 +191,22 @@ std::vector 
DomainSocket::GetListeningConnectionURI() const {
 
   return {llvm::formatv("unix-connect://{0}", addr.sun_path)};
 }
+
+Socket *DomainSocket::Create(NativeSocket sockfd, bool should_close,
+ Status &error) {
+#ifdef __linux__
+  // Check if fd represents domain socket or abstract socket.
+  struct sockaddr_un addr;
+  socklen_t addr_len = sizeof(addr);
+  if (getsockname(sockfd, (struct sockaddr *)&addr, &addr_len) == -1) {
+error = Status::FromErrorString(
+"lldb-platform child: not a socket or error occurred");
+return nullptr;
+  }
+
+  if (addr.sun_family == AF_UNIX && addr.sun_path[0] == '\0') {
+return new AbstractSocket(sockfd, should_close);
+  }
+#endif
+  return new DomainSocket(sockfd, should_close);
+}

emrekultursay wrote:

Done.

https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-23 Thread Emre Kultursay via lldb-commits

https://github.com/emrekultursay edited 
https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-23 Thread Emre Kultursay via lldb-commits


@@ -455,35 +455,29 @@ int main_platform(int argc, char *argv[]) {
   lldb_private::Args inferior_arguments;
   inferior_arguments.SetArguments(argc, const_cast(argv));
 
-  Socket::SocketProtocol protocol = Socket::ProtocolUnixDomain;

emrekultursay wrote:

Done by adding the initialization back.

https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-23 Thread Emre Kultursay via lldb-commits


@@ -455,35 +455,29 @@ int main_platform(int argc, char *argv[]) {
   lldb_private::Args inferior_arguments;
   inferior_arguments.SetArguments(argc, const_cast(argv));
 
-  Socket::SocketProtocol protocol = Socket::ProtocolUnixDomain;
-
+  Log *log = GetLog(LLDBLog::Platform);
   if (fd != SharedSocket::kInvalidFD) {
 // Child process will handle the connection and exit.
-if (gdbserver_port)
-  protocol = Socket::ProtocolTcp;
-
-Log *log = GetLog(LLDBLog::Platform);
-
 NativeSocket sockfd;
 error = SharedSocket::GetNativeSocket(fd, sockfd);
 if (error.Fail()) {
   LLDB_LOGF(log, "lldb-platform child: %s", error.AsCString());
   return socket_error;
 }
 
-GDBRemoteCommunicationServerPlatform platform(protocol, gdbserver_port);
 Socket *socket;
-if (protocol == Socket::ProtocolTcp)
+if (gdbserver_port) {
   socket = new TCPSocket(sockfd, /*should_close=*/true);
-else {
-#if LLDB_ENABLE_POSIX
-  socket = new DomainSocket(sockfd, /*should_close=*/true);
-#else
-  WithColor::error() << "lldb-platform child: Unix domain sockets are not "
-"supported on this platform.";
-  return socket_error;
-#endif
+} else {
+  socket = DomainSocket::Create(sockfd, /*should_close=*/true, error);
+  if (error.Fail()) {
+LLDB_LOGF(log, "Failed to create socket: %s\n", error.AsCString());
+return socket_error;
+  }
 }
+
+Socket::SocketProtocol protocol = socket->GetSocketProtocol();
+GDBRemoteCommunicationServerPlatform platform(protocol, gdbserver_port);

emrekultursay wrote:

Done.

https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-23 Thread Emre Kultursay via lldb-commits

https://github.com/emrekultursay commented:

PTAL.  I added unit tests for the method, but I'm open to suggestions on how to 
improve that test. 

https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-23 Thread Emre Kultursay via lldb-commits


@@ -182,3 +191,22 @@ std::vector 
DomainSocket::GetListeningConnectionURI() const {
 
   return {llvm::formatv("unix-connect://{0}", addr.sun_path)};
 }
+
+Socket *DomainSocket::Create(NativeSocket sockfd, bool should_close,
+ Status &error) {
+#ifdef __linux__
+  // Check if fd represents domain socket or abstract socket.
+  struct sockaddr_un addr;
+  socklen_t addr_len = sizeof(addr);
+  if (getsockname(sockfd, (struct sockaddr *)&addr, &addr_len) == -1) {
+error = Status::FromErrorString(

emrekultursay wrote:

Done.

https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-23 Thread Emre Kultursay via lldb-commits


@@ -31,8 +31,11 @@ class DomainSocket : public Socket {
 
   std::vector GetListeningConnectionURI() const override;
 
+  static Socket *Create(NativeSocket sockfd, bool should_close, Status &error);

emrekultursay wrote:

Done.

https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-25 Thread Emre Kultursay via lldb-commits


@@ -182,3 +191,20 @@ std::vector 
DomainSocket::GetListeningConnectionURI() const {
 
   return {llvm::formatv("unix-connect://{0}", addr.sun_path)};
 }
+
+llvm::Expected>
+DomainSocket::FromBoundNativeSocket(NativeSocket sockfd, bool should_close) {
+#ifdef __linux__
+  // Check if fd represents domain socket or abstract socket.
+  struct sockaddr_un addr;
+  socklen_t addr_len = sizeof(addr);
+  if (getsockname(sockfd, (struct sockaddr *)&addr, &addr_len) == -1)
+return llvm::createStringError("not a socket or error occurred");
+  if (addr.sun_family != AF_UNIX)
+return llvm::createStringError("Bad socket type");

emrekultursay wrote:

Done.

https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-25 Thread Emre Kultursay via lldb-commits

https://github.com/emrekultursay edited 
https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-25 Thread Emre Kultursay via lldb-commits


@@ -339,6 +342,48 @@ TEST_F(SocketTest, DomainGetConnectURI) {
 }
 #endif
 
+#if LLDB_ENABLE_POSIX

emrekultursay wrote:

Done.

https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-25 Thread Emre Kultursay via lldb-commits


@@ -339,6 +342,48 @@ TEST_F(SocketTest, DomainGetConnectURI) {
 }
 #endif
 
+#if LLDB_ENABLE_POSIX
+TEST_F(SocketTest, DomainSocketFromBoundNativeSocket) {
+  // Generate a name for the domain socket.
+  llvm::SmallString<64> name;
+  std::error_code EC = llvm::sys::fs::createUniqueDirectory(
+  "DomainSocketFromBoundNativeSocket", name);
+  ASSERT_FALSE(EC);
+  llvm::sys::path::append(name, "test");
+
+  DomainSocket socket(true);
+  Status error = socket.Listen(name, /*backlog=*/10);
+  ASSERT_FALSE(error.ToError());
+  NativeSocket native_socket = socket.GetNativeSocket();
+
+  llvm::Expected> sock =
+  DomainSocket::FromBoundNativeSocket(native_socket, 
/*should_close=*/true);
+  ASSERT_THAT_EXPECTED(sock, llvm::Succeeded());
+  ASSERT_EQ(Socket::ProtocolUnixDomain, sock->get()->GetSocketProtocol());
+}
+#endif
+
+#if __linux__
+TEST_F(SocketTest, AbstractSocketFromBoundNativeSocket) {
+  // Generate a name for the abstract socket.
+  llvm::SmallString<64> name;
+  std::error_code EC = llvm::sys::fs::createUniqueDirectory(
+  "AbstractSocketFromBoundNativeSocket", name);
+  ASSERT_FALSE(EC);
+  llvm::sys::path::append(name, "test");
+
+  AbstractSocket socket;
+  Status error = socket.Listen(name, /*backlog=*/10);
+  ASSERT_FALSE(error.ToError());
+  NativeSocket native_socket = socket.GetNativeSocket();
+
+  llvm::Expected> sock =
+  DomainSocket::FromBoundNativeSocket(native_socket, 
/*should_close=*/true);

emrekultursay wrote:

Done.

https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-25 Thread Emre Kultursay via lldb-commits


@@ -339,6 +342,48 @@ TEST_F(SocketTest, DomainGetConnectURI) {
 }
 #endif
 
+#if LLDB_ENABLE_POSIX
+TEST_F(SocketTest, DomainSocketFromBoundNativeSocket) {
+  // Generate a name for the domain socket.
+  llvm::SmallString<64> name;
+  std::error_code EC = llvm::sys::fs::createUniqueDirectory(
+  "DomainSocketFromBoundNativeSocket", name);
+  ASSERT_FALSE(EC);
+  llvm::sys::path::append(name, "test");
+
+  DomainSocket socket(true);
+  Status error = socket.Listen(name, /*backlog=*/10);
+  ASSERT_FALSE(error.ToError());

emrekultursay wrote:

Thanks! Done.


https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-25 Thread Emre Kultursay via lldb-commits

https://github.com/emrekultursay commented:

Thanks. PTAL. 

https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-25 Thread Emre Kultursay via lldb-commits


@@ -339,6 +342,48 @@ TEST_F(SocketTest, DomainGetConnectURI) {
 }
 #endif
 
+#if LLDB_ENABLE_POSIX
+TEST_F(SocketTest, DomainSocketFromBoundNativeSocket) {
+  // Generate a name for the domain socket.
+  llvm::SmallString<64> name;
+  std::error_code EC = llvm::sys::fs::createUniqueDirectory(
+  "DomainSocketFromBoundNativeSocket", name);
+  ASSERT_FALSE(EC);
+  llvm::sys::path::append(name, "test");
+
+  DomainSocket socket(true);
+  Status error = socket.Listen(name, /*backlog=*/10);
+  ASSERT_FALSE(error.ToError());
+  NativeSocket native_socket = socket.GetNativeSocket();
+
+  llvm::Expected> sock =
+  DomainSocket::FromBoundNativeSocket(native_socket, 
/*should_close=*/true);
+  ASSERT_THAT_EXPECTED(sock, llvm::Succeeded());
+  ASSERT_EQ(Socket::ProtocolUnixDomain, sock->get()->GetSocketProtocol());
+}
+#endif
+
+#if __linux__
+TEST_F(SocketTest, AbstractSocketFromBoundNativeSocket) {
+  // Generate a name for the abstract socket.
+  llvm::SmallString<64> name;
+  std::error_code EC = llvm::sys::fs::createUniqueDirectory(
+  "AbstractSocketFromBoundNativeSocket", name);

emrekultursay wrote:

Done.

https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-25 Thread Emre Kultursay via lldb-commits

https://github.com/emrekultursay updated 
https://github.com/llvm/llvm-project/pull/136466

>From b6c46b7a28a807b507f06d748ed93f20d26fdfcc Mon Sep 17 00:00:00 2001
From: Emre Kultursay 
Date: Sun, 20 Apr 2025 01:11:31 +
Subject: [PATCH 1/5] Fix connecting via abstract socket

Commit 82ee31f and Commit 2e893124 added socket sharing, but only for
unix domain sockets. That broke Android, which uses unix-abstract
sockets.
---
 lldb/include/lldb/Host/linux/AbstractSocket.h |  1 +
 lldb/include/lldb/Host/posix/DomainSocket.h   |  1 +
 lldb/source/Host/linux/AbstractSocket.cpp |  3 ++
 lldb/source/Host/posix/DomainSocket.cpp   |  6 +++
 lldb/tools/lldb-server/lldb-platform.cpp  | 40 +--
 5 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/lldb/include/lldb/Host/linux/AbstractSocket.h 
b/lldb/include/lldb/Host/linux/AbstractSocket.h
index accfd01457a5e..c6a0e2f8af63b 100644
--- a/lldb/include/lldb/Host/linux/AbstractSocket.h
+++ b/lldb/include/lldb/Host/linux/AbstractSocket.h
@@ -15,6 +15,7 @@ namespace lldb_private {
 class AbstractSocket : public DomainSocket {
 public:
   AbstractSocket();
+  AbstractSocket(NativeSocket socket, bool should_close);
 
 protected:
   size_t GetNameOffset() const override;
diff --git a/lldb/include/lldb/Host/posix/DomainSocket.h 
b/lldb/include/lldb/Host/posix/DomainSocket.h
index 3dbe6206da2c5..562c011ee73e6 100644
--- a/lldb/include/lldb/Host/posix/DomainSocket.h
+++ b/lldb/include/lldb/Host/posix/DomainSocket.h
@@ -33,6 +33,7 @@ class DomainSocket : public Socket {
 
 protected:
   DomainSocket(SocketProtocol protocol);
+  DomainSocket(SocketProtocol protocol, NativeSocket socket, bool 
should_close);
 
   virtual size_t GetNameOffset() const;
   virtual void DeleteSocketFile(llvm::StringRef name);
diff --git a/lldb/source/Host/linux/AbstractSocket.cpp 
b/lldb/source/Host/linux/AbstractSocket.cpp
index 8393a80e86e72..681aa2d1ebc72 100644
--- a/lldb/source/Host/linux/AbstractSocket.cpp
+++ b/lldb/source/Host/linux/AbstractSocket.cpp
@@ -15,6 +15,9 @@ using namespace lldb_private;
 
 AbstractSocket::AbstractSocket() : DomainSocket(ProtocolUnixAbstract) {}
 
+AbstractSocket::AbstractSocket(NativeSocket socket, bool should_close)
+: DomainSocket(ProtocolUnixAbstract, socket, should_close) {}
+
 size_t AbstractSocket::GetNameOffset() const { return 1; }
 
 void AbstractSocket::DeleteSocketFile(llvm::StringRef name) {}
diff --git a/lldb/source/Host/posix/DomainSocket.cpp 
b/lldb/source/Host/posix/DomainSocket.cpp
index 6c490cdda47ed..9b1e4f71bba2a 100644
--- a/lldb/source/Host/posix/DomainSocket.cpp
+++ b/lldb/source/Host/posix/DomainSocket.cpp
@@ -67,6 +67,12 @@ DomainSocket::DomainSocket(NativeSocket socket,
   m_socket = socket;
 }
 
+DomainSocket::DomainSocket(SocketProtocol protocol, NativeSocket socket,
+   bool should_close)
+: Socket(protocol, should_close) {
+  m_socket = socket;
+}
+
 Status DomainSocket::Connect(llvm::StringRef name) {
   sockaddr_un saddr_un;
   socklen_t saddr_un_len;
diff --git a/lldb/tools/lldb-server/lldb-platform.cpp 
b/lldb/tools/lldb-server/lldb-platform.cpp
index 23d36ffb4cb66..59a83c28b0212 100644
--- a/lldb/tools/lldb-server/lldb-platform.cpp
+++ b/lldb/tools/lldb-server/lldb-platform.cpp
@@ -39,11 +39,19 @@
 #if LLDB_ENABLE_POSIX
 #include "lldb/Host/posix/DomainSocket.h"
 #endif
+#ifdef __linux__
+#include "lldb/Host/linux/AbstractSocket.h"
+#endif
 #include "lldb/Utility/FileSpec.h"
 #include "lldb/Utility/LLDBLog.h"
 #include "lldb/Utility/Status.h"
 #include "lldb/Utility/UriParser.h"
 
+#if LLDB_ENABLE_POSIX
+#include 
+#include 
+#endif
+
 using namespace lldb;
 using namespace lldb_private;
 using namespace lldb_private::lldb_server;
@@ -455,14 +463,28 @@ int main_platform(int argc, char *argv[]) {
   lldb_private::Args inferior_arguments;
   inferior_arguments.SetArguments(argc, const_cast(argv));
 
+  Log *log = GetLog(LLDBLog::Platform);
   Socket::SocketProtocol protocol = Socket::ProtocolUnixDomain;
 
   if (fd != SharedSocket::kInvalidFD) {
 // Child process will handle the connection and exit.
-if (gdbserver_port)
+if (gdbserver_port) {
   protocol = Socket::ProtocolTcp;
+} else {
+#ifdef LLDB_ENABLE_POSIX
+  // Check if fd represents domain socket or abstract socket.
+  struct sockaddr_un addr;
+  socklen_t addr_len = sizeof(addr);
+  if (getsockname(fd, (struct sockaddr *)&addr, &addr_len) == -1) {
+LLDB_LOGF(log, "lldb-platform child: not a socket or error occurred");
+return socket_error;
+  }
 
-Log *log = GetLog(LLDBLog::Platform);
+  if (addr.sun_family == AF_UNIX && addr.sun_path[0] == '\0') {
+protocol = Socket::ProtocolUnixAbstract;
+  }
+#endif
+}
 
 NativeSocket sockfd;
 error = SharedSocket::GetNativeSocket(fd, sockfd);
@@ -473,17 +495,27 @@ int main_platform(int argc, char *argv[]) {
 
 GDBRemoteCommunicationServerPlatform platform(protocol, gdbserver_

[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-25 Thread Emre Kultursay via lldb-commits

emrekultursay wrote:

Thanks folks:
1. Can you please squash-and-merge this PR? (I don't have write permissions)
2. Would you like me to create a cherry-pick into release/20.x branch, or is 
there a separate process for cherry-picks (e.g., wait some time to validate, 
submit a cherry-pick request somewhere, etc.)? 

https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-25 Thread Emre Kultursay via lldb-commits

emrekultursay wrote:

We're getting `SetSockAddr` error which can only fail if the path is too long. 
The path generated by `createUniqueDirectory` is an absolute path to a 
temporary directory. I guess it can be longer than 107 bytes on the CI machines.

All the other DomainSocket related tests skip the test if the generated path is 
longer than 107 bytes:

```
  // Skip the test if the $TMPDIR is too long to hold a domain socket.
  if (Path.size() > 107u)
return;
```

I'll add that to see if it fixes the issue.



https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Skip tests if socket name is longer than 107 bytes (PR #137405)

2025-04-25 Thread Emre Kultursay via lldb-commits

https://github.com/emrekultursay created 
https://github.com/llvm/llvm-project/pull/137405

To fix the test failures introduced in Commit 488eeb3

>From d7ab4d2f439e63a6145d83f0017f6e56dd2e37f9 Mon Sep 17 00:00:00 2001
From: Emre Kultursay 
Date: Fri, 25 Apr 2025 22:04:28 +
Subject: [PATCH] Skip tests if socket name is longer than 107 bytes

To fix the test failures introduced in Commit 488eeb3
---
 lldb/unittests/Host/SocketTest.cpp | 8 
 1 file changed, 8 insertions(+)

diff --git a/lldb/unittests/Host/SocketTest.cpp 
b/lldb/unittests/Host/SocketTest.cpp
index 5bfb48b52f7e7..df67943892420 100644
--- a/lldb/unittests/Host/SocketTest.cpp
+++ b/lldb/unittests/Host/SocketTest.cpp
@@ -349,6 +349,10 @@ TEST_F(SocketTest, DomainSocketFromBoundNativeSocket) {
   ASSERT_FALSE(EC);
   llvm::sys::path::append(name, "test");
 
+  // Skip the test if the $TMPDIR is too long to hold a domain socket.
+  if (name.size() > 107u)
+return;
+
   DomainSocket socket(true);
   Status error = socket.Listen(name, /*backlog=*/10);
   ASSERT_THAT_ERROR(error.takeError(), llvm::Succeeded());
@@ -369,6 +373,10 @@ TEST_F(SocketTest, AbstractSocketFromBoundNativeSocket) {
   llvm::sys::fs::createUniquePath("AbstractSocketFromBoundNativeSocket", name,
   true);
   llvm::sys::path::append(name, "test");
+  
+  // Skip the test if the $TMPDIR is too long to hold a domain socket.
+  if (name.size() > 107u)
+return;
 
   AbstractSocket socket;
   Status error = socket.Listen(name, /*backlog=*/10);

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Skip tests if socket name is longer than 107 bytes (PR #137405)

2025-04-25 Thread Emre Kultursay via lldb-commits

https://github.com/emrekultursay updated 
https://github.com/llvm/llvm-project/pull/137405

>From 65de31524033192d1c14af29b70b8f32bac3be55 Mon Sep 17 00:00:00 2001
From: Emre Kultursay 
Date: Fri, 25 Apr 2025 22:04:28 +
Subject: [PATCH] Skip tests if socket name is longer than 107 bytes

To fix the test failures introduced in Commit 488eeb3
---
 lldb/unittests/Host/SocketTest.cpp | 8 
 1 file changed, 8 insertions(+)

diff --git a/lldb/unittests/Host/SocketTest.cpp 
b/lldb/unittests/Host/SocketTest.cpp
index 5bfb48b52f7e7..70708db57c7e3 100644
--- a/lldb/unittests/Host/SocketTest.cpp
+++ b/lldb/unittests/Host/SocketTest.cpp
@@ -349,6 +349,10 @@ TEST_F(SocketTest, DomainSocketFromBoundNativeSocket) {
   ASSERT_FALSE(EC);
   llvm::sys::path::append(name, "test");
 
+  // Skip the test if the $TMPDIR is too long to hold a domain socket.
+  if (name.size() > 107u)
+return;
+
   DomainSocket socket(true);
   Status error = socket.Listen(name, /*backlog=*/10);
   ASSERT_THAT_ERROR(error.takeError(), llvm::Succeeded());
@@ -370,6 +374,10 @@ TEST_F(SocketTest, AbstractSocketFromBoundNativeSocket) {
   true);
   llvm::sys::path::append(name, "test");
 
+  // Skip the test if the $TMPDIR is too long to hold a domain socket.
+  if (name.size() > 107u)
+return;
+
   AbstractSocket socket;
   Status error = socket.Listen(name, /*backlog=*/10);
   ASSERT_THAT_ERROR(error.takeError(), llvm::Succeeded());

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-25 Thread Emre Kultursay via lldb-commits


@@ -455,37 +455,33 @@ int main_platform(int argc, char *argv[]) {
   lldb_private::Args inferior_arguments;
   inferior_arguments.SetArguments(argc, const_cast(argv));
 
-  Socket::SocketProtocol protocol = Socket::ProtocolUnixDomain;
-
+  Log *log = GetLog(LLDBLog::Platform);
   if (fd != SharedSocket::kInvalidFD) {
 // Child process will handle the connection and exit.
-if (gdbserver_port)
-  protocol = Socket::ProtocolTcp;
-
-Log *log = GetLog(LLDBLog::Platform);
-
 NativeSocket sockfd;
 error = SharedSocket::GetNativeSocket(fd, sockfd);
 if (error.Fail()) {
   LLDB_LOGF(log, "lldb-platform child: %s", error.AsCString());
   return socket_error;
 }
 
-GDBRemoteCommunicationServerPlatform platform(protocol, gdbserver_port);
-Socket *socket;
-if (protocol == Socket::ProtocolTcp)
-  socket = new TCPSocket(sockfd, /*should_close=*/true);
-else {
-#if LLDB_ENABLE_POSIX
-  socket = new DomainSocket(sockfd, /*should_close=*/true);
-#else
-  WithColor::error() << "lldb-platform child: Unix domain sockets are not "
-"supported on this platform.";
-  return socket_error;
-#endif
+std::unique_ptr socket;
+if (gdbserver_port) {
+  socket = std::make_unique(sockfd, /*should_close=*/true);
+} else {
+  llvm::Expected> domain_socket =
+  DomainSocket::FromBoundNativeSocket(sockfd, /*should_close=*/true);
+  if (!domain_socket) {
+LLDB_LOGF(log, "Failed to create socket: %s\n", error.AsCString());

emrekultursay wrote:

Done.

https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Skip tests if socket name is longer than 107 bytes (PR #137405)

2025-04-25 Thread Emre Kultursay via lldb-commits

https://github.com/emrekultursay updated 
https://github.com/llvm/llvm-project/pull/137405

>From 65de31524033192d1c14af29b70b8f32bac3be55 Mon Sep 17 00:00:00 2001
From: Emre Kultursay 
Date: Fri, 25 Apr 2025 22:04:28 +
Subject: [PATCH 1/2] Skip tests if socket name is longer than 107 bytes

To fix the test failures introduced in Commit 488eeb3
---
 lldb/unittests/Host/SocketTest.cpp | 8 
 1 file changed, 8 insertions(+)

diff --git a/lldb/unittests/Host/SocketTest.cpp 
b/lldb/unittests/Host/SocketTest.cpp
index 5bfb48b52f7e7..70708db57c7e3 100644
--- a/lldb/unittests/Host/SocketTest.cpp
+++ b/lldb/unittests/Host/SocketTest.cpp
@@ -349,6 +349,10 @@ TEST_F(SocketTest, DomainSocketFromBoundNativeSocket) {
   ASSERT_FALSE(EC);
   llvm::sys::path::append(name, "test");
 
+  // Skip the test if the $TMPDIR is too long to hold a domain socket.
+  if (name.size() > 107u)
+return;
+
   DomainSocket socket(true);
   Status error = socket.Listen(name, /*backlog=*/10);
   ASSERT_THAT_ERROR(error.takeError(), llvm::Succeeded());
@@ -370,6 +374,10 @@ TEST_F(SocketTest, AbstractSocketFromBoundNativeSocket) {
   true);
   llvm::sys::path::append(name, "test");
 
+  // Skip the test if the $TMPDIR is too long to hold a domain socket.
+  if (name.size() > 107u)
+return;
+
   AbstractSocket socket;
   Status error = socket.Listen(name, /*backlog=*/10);
   ASSERT_THAT_ERROR(error.takeError(), llvm::Succeeded());

>From 8cfc092a631d7122ae84c454bb784f6c265f0267 Mon Sep 17 00:00:00 2001
From: Emre Kultursay 
Date: Fri, 25 Apr 2025 22:30:26 +
Subject: [PATCH 2/2] Use GTEST_SKIP instead of return

---
 lldb/unittests/Host/SocketTest.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lldb/unittests/Host/SocketTest.cpp 
b/lldb/unittests/Host/SocketTest.cpp
index 70708db57c7e3..77366593f05f8 100644
--- a/lldb/unittests/Host/SocketTest.cpp
+++ b/lldb/unittests/Host/SocketTest.cpp
@@ -351,7 +351,7 @@ TEST_F(SocketTest, DomainSocketFromBoundNativeSocket) {
 
   // Skip the test if the $TMPDIR is too long to hold a domain socket.
   if (name.size() > 107u)
-return;
+GTEST_SKIP() << "$TMPDIR is too long to hold a domain socket";
 
   DomainSocket socket(true);
   Status error = socket.Listen(name, /*backlog=*/10);
@@ -376,7 +376,7 @@ TEST_F(SocketTest, AbstractSocketFromBoundNativeSocket) {
 
   // Skip the test if the $TMPDIR is too long to hold a domain socket.
   if (name.size() > 107u)
-return;
+GTEST_SKIP() << "$TMPDIR is too long to hold a domain socket";
 
   AbstractSocket socket;
   Status error = socket.Listen(name, /*backlog=*/10);

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix Windows build (PR #137414)

2025-04-25 Thread Emre Kultursay via lldb-commits

https://github.com/emrekultursay created 
https://github.com/llvm/llvm-project/pull/137414

Windows doesn't have domain sockets, so we must properly #ifdef the code that 
touches DomainSocket.

>From fb1ced0cd73fbd3844a887d064cf319b27d2a237 Mon Sep 17 00:00:00 2001
From: Emre Kultursay 
Date: Fri, 25 Apr 2025 23:04:27 +
Subject: [PATCH] Fix Windows build

Windows doesn't have domain sockets, so we must properly #ifdef
the code that touches DomainSocket.
---
 lldb/tools/lldb-server/lldb-platform.cpp | 6 ++
 1 file changed, 6 insertions(+)

diff --git a/lldb/tools/lldb-server/lldb-platform.cpp 
b/lldb/tools/lldb-server/lldb-platform.cpp
index b9a85370d649c..10d79c63af994 100644
--- a/lldb/tools/lldb-server/lldb-platform.cpp
+++ b/lldb/tools/lldb-server/lldb-platform.cpp
@@ -469,6 +469,7 @@ int main_platform(int argc, char *argv[]) {
 if (gdbserver_port) {
   socket = std::make_unique(sockfd, /*should_close=*/true);
 } else {
+#if LLDB_ENABLE_POSIX
   llvm::Expected> domain_socket =
   DomainSocket::FromBoundNativeSocket(sockfd, /*should_close=*/true);
   if (!domain_socket) {
@@ -477,6 +478,11 @@ int main_platform(int argc, char *argv[]) {
 return socket_error;
   }
   socket = std::move(domain_socket.get());
+#else
+  WithColor::error() << "lldb-platform child: Unix domain sockets are not "
+"supported on this platform.";
+  return socket_error;
+#endif
 }
 
 GDBRemoteCommunicationServerPlatform platform(socket->GetSocketProtocol(),

___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-25 Thread Emre Kultursay via lldb-commits

emrekultursay wrote:

Thanks. Are the following patches good enough, or do we prefer a revert? 

- Test fix: https://github.com/llvm/llvm-project/pull/137405
- Windows fix: https://github.com/llvm/llvm-project/pull/137414

https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix Windows build (PR #137414)

2025-04-25 Thread Emre Kultursay via lldb-commits

https://github.com/emrekultursay edited 
https://github.com/llvm/llvm-project/pull/137414
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-21 Thread Emre Kultursay via lldb-commits

https://github.com/emrekultursay updated 
https://github.com/llvm/llvm-project/pull/136466

>From 2aedf974b8743b9291fbd333af2eaa6d4d5cadcc Mon Sep 17 00:00:00 2001
From: Emre Kultursay 
Date: Sun, 20 Apr 2025 01:11:31 +
Subject: [PATCH] Fix connecting via abstract socket

Commits 82ee31f and 2e89312 added socket sharing, but only for
unix domain sockets. That broke Android, which uses unix-abstract
sockets.
---
 lldb/include/lldb/Host/linux/AbstractSocket.h |  1 +
 lldb/include/lldb/Host/posix/DomainSocket.h   |  1 +
 lldb/source/Host/linux/AbstractSocket.cpp |  3 ++
 lldb/source/Host/posix/DomainSocket.cpp   |  6 +++
 lldb/tools/lldb-server/lldb-platform.cpp  | 40 +--
 5 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/lldb/include/lldb/Host/linux/AbstractSocket.h 
b/lldb/include/lldb/Host/linux/AbstractSocket.h
index accfd01457a5e..c6a0e2f8af63b 100644
--- a/lldb/include/lldb/Host/linux/AbstractSocket.h
+++ b/lldb/include/lldb/Host/linux/AbstractSocket.h
@@ -15,6 +15,7 @@ namespace lldb_private {
 class AbstractSocket : public DomainSocket {
 public:
   AbstractSocket();
+  AbstractSocket(NativeSocket socket, bool should_close);
 
 protected:
   size_t GetNameOffset() const override;
diff --git a/lldb/include/lldb/Host/posix/DomainSocket.h 
b/lldb/include/lldb/Host/posix/DomainSocket.h
index 3dbe6206da2c5..562c011ee73e6 100644
--- a/lldb/include/lldb/Host/posix/DomainSocket.h
+++ b/lldb/include/lldb/Host/posix/DomainSocket.h
@@ -33,6 +33,7 @@ class DomainSocket : public Socket {
 
 protected:
   DomainSocket(SocketProtocol protocol);
+  DomainSocket(SocketProtocol protocol, NativeSocket socket, bool 
should_close);
 
   virtual size_t GetNameOffset() const;
   virtual void DeleteSocketFile(llvm::StringRef name);
diff --git a/lldb/source/Host/linux/AbstractSocket.cpp 
b/lldb/source/Host/linux/AbstractSocket.cpp
index 8393a80e86e72..681aa2d1ebc72 100644
--- a/lldb/source/Host/linux/AbstractSocket.cpp
+++ b/lldb/source/Host/linux/AbstractSocket.cpp
@@ -15,6 +15,9 @@ using namespace lldb_private;
 
 AbstractSocket::AbstractSocket() : DomainSocket(ProtocolUnixAbstract) {}
 
+AbstractSocket::AbstractSocket(NativeSocket socket, bool should_close)
+: DomainSocket(ProtocolUnixAbstract, socket, should_close) {}
+
 size_t AbstractSocket::GetNameOffset() const { return 1; }
 
 void AbstractSocket::DeleteSocketFile(llvm::StringRef name) {}
diff --git a/lldb/source/Host/posix/DomainSocket.cpp 
b/lldb/source/Host/posix/DomainSocket.cpp
index 6c490cdda47ed..9b1e4f71bba2a 100644
--- a/lldb/source/Host/posix/DomainSocket.cpp
+++ b/lldb/source/Host/posix/DomainSocket.cpp
@@ -67,6 +67,12 @@ DomainSocket::DomainSocket(NativeSocket socket,
   m_socket = socket;
 }
 
+DomainSocket::DomainSocket(SocketProtocol protocol, NativeSocket socket,
+   bool should_close)
+: Socket(protocol, should_close) {
+  m_socket = socket;
+}
+
 Status DomainSocket::Connect(llvm::StringRef name) {
   sockaddr_un saddr_un;
   socklen_t saddr_un_len;
diff --git a/lldb/tools/lldb-server/lldb-platform.cpp 
b/lldb/tools/lldb-server/lldb-platform.cpp
index 23d36ffb4cb66..59a83c28b0212 100644
--- a/lldb/tools/lldb-server/lldb-platform.cpp
+++ b/lldb/tools/lldb-server/lldb-platform.cpp
@@ -39,11 +39,19 @@
 #if LLDB_ENABLE_POSIX
 #include "lldb/Host/posix/DomainSocket.h"
 #endif
+#ifdef __linux__
+#include "lldb/Host/linux/AbstractSocket.h"
+#endif
 #include "lldb/Utility/FileSpec.h"
 #include "lldb/Utility/LLDBLog.h"
 #include "lldb/Utility/Status.h"
 #include "lldb/Utility/UriParser.h"
 
+#if LLDB_ENABLE_POSIX
+#include 
+#include 
+#endif
+
 using namespace lldb;
 using namespace lldb_private;
 using namespace lldb_private::lldb_server;
@@ -455,14 +463,28 @@ int main_platform(int argc, char *argv[]) {
   lldb_private::Args inferior_arguments;
   inferior_arguments.SetArguments(argc, const_cast(argv));
 
+  Log *log = GetLog(LLDBLog::Platform);
   Socket::SocketProtocol protocol = Socket::ProtocolUnixDomain;
 
   if (fd != SharedSocket::kInvalidFD) {
 // Child process will handle the connection and exit.
-if (gdbserver_port)
+if (gdbserver_port) {
   protocol = Socket::ProtocolTcp;
+} else {
+#ifdef LLDB_ENABLE_POSIX
+  // Check if fd represents domain socket or abstract socket.
+  struct sockaddr_un addr;
+  socklen_t addr_len = sizeof(addr);
+  if (getsockname(fd, (struct sockaddr *)&addr, &addr_len) == -1) {
+LLDB_LOGF(log, "lldb-platform child: not a socket or error occurred");
+return socket_error;
+  }
 
-Log *log = GetLog(LLDBLog::Platform);
+  if (addr.sun_family == AF_UNIX && addr.sun_path[0] == '\0') {
+protocol = Socket::ProtocolUnixAbstract;
+  }
+#endif
+}
 
 NativeSocket sockfd;
 error = SharedSocket::GetNativeSocket(fd, sockfd);
@@ -473,17 +495,27 @@ int main_platform(int argc, char *argv[]) {
 
 GDBRemoteCommunicationServerPlatform platform(protocol, gdbserver_port);

[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-21 Thread Emre Kultursay via lldb-commits

https://github.com/emrekultursay edited 
https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-21 Thread Emre Kultursay via lldb-commits

https://github.com/emrekultursay edited 
https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-21 Thread Emre Kultursay via lldb-commits

https://github.com/emrekultursay updated 
https://github.com/llvm/llvm-project/pull/136466

>From b6c46b7a28a807b507f06d748ed93f20d26fdfcc Mon Sep 17 00:00:00 2001
From: Emre Kultursay 
Date: Sun, 20 Apr 2025 01:11:31 +
Subject: [PATCH] Fix connecting via abstract socket

Commit 82ee31f and Commit 2e893124 added socket sharing, but only for
unix domain sockets. That broke Android, which uses unix-abstract
sockets.
---
 lldb/include/lldb/Host/linux/AbstractSocket.h |  1 +
 lldb/include/lldb/Host/posix/DomainSocket.h   |  1 +
 lldb/source/Host/linux/AbstractSocket.cpp |  3 ++
 lldb/source/Host/posix/DomainSocket.cpp   |  6 +++
 lldb/tools/lldb-server/lldb-platform.cpp  | 40 +--
 5 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/lldb/include/lldb/Host/linux/AbstractSocket.h 
b/lldb/include/lldb/Host/linux/AbstractSocket.h
index accfd01457a5e..c6a0e2f8af63b 100644
--- a/lldb/include/lldb/Host/linux/AbstractSocket.h
+++ b/lldb/include/lldb/Host/linux/AbstractSocket.h
@@ -15,6 +15,7 @@ namespace lldb_private {
 class AbstractSocket : public DomainSocket {
 public:
   AbstractSocket();
+  AbstractSocket(NativeSocket socket, bool should_close);
 
 protected:
   size_t GetNameOffset() const override;
diff --git a/lldb/include/lldb/Host/posix/DomainSocket.h 
b/lldb/include/lldb/Host/posix/DomainSocket.h
index 3dbe6206da2c5..562c011ee73e6 100644
--- a/lldb/include/lldb/Host/posix/DomainSocket.h
+++ b/lldb/include/lldb/Host/posix/DomainSocket.h
@@ -33,6 +33,7 @@ class DomainSocket : public Socket {
 
 protected:
   DomainSocket(SocketProtocol protocol);
+  DomainSocket(SocketProtocol protocol, NativeSocket socket, bool 
should_close);
 
   virtual size_t GetNameOffset() const;
   virtual void DeleteSocketFile(llvm::StringRef name);
diff --git a/lldb/source/Host/linux/AbstractSocket.cpp 
b/lldb/source/Host/linux/AbstractSocket.cpp
index 8393a80e86e72..681aa2d1ebc72 100644
--- a/lldb/source/Host/linux/AbstractSocket.cpp
+++ b/lldb/source/Host/linux/AbstractSocket.cpp
@@ -15,6 +15,9 @@ using namespace lldb_private;
 
 AbstractSocket::AbstractSocket() : DomainSocket(ProtocolUnixAbstract) {}
 
+AbstractSocket::AbstractSocket(NativeSocket socket, bool should_close)
+: DomainSocket(ProtocolUnixAbstract, socket, should_close) {}
+
 size_t AbstractSocket::GetNameOffset() const { return 1; }
 
 void AbstractSocket::DeleteSocketFile(llvm::StringRef name) {}
diff --git a/lldb/source/Host/posix/DomainSocket.cpp 
b/lldb/source/Host/posix/DomainSocket.cpp
index 6c490cdda47ed..9b1e4f71bba2a 100644
--- a/lldb/source/Host/posix/DomainSocket.cpp
+++ b/lldb/source/Host/posix/DomainSocket.cpp
@@ -67,6 +67,12 @@ DomainSocket::DomainSocket(NativeSocket socket,
   m_socket = socket;
 }
 
+DomainSocket::DomainSocket(SocketProtocol protocol, NativeSocket socket,
+   bool should_close)
+: Socket(protocol, should_close) {
+  m_socket = socket;
+}
+
 Status DomainSocket::Connect(llvm::StringRef name) {
   sockaddr_un saddr_un;
   socklen_t saddr_un_len;
diff --git a/lldb/tools/lldb-server/lldb-platform.cpp 
b/lldb/tools/lldb-server/lldb-platform.cpp
index 23d36ffb4cb66..59a83c28b0212 100644
--- a/lldb/tools/lldb-server/lldb-platform.cpp
+++ b/lldb/tools/lldb-server/lldb-platform.cpp
@@ -39,11 +39,19 @@
 #if LLDB_ENABLE_POSIX
 #include "lldb/Host/posix/DomainSocket.h"
 #endif
+#ifdef __linux__
+#include "lldb/Host/linux/AbstractSocket.h"
+#endif
 #include "lldb/Utility/FileSpec.h"
 #include "lldb/Utility/LLDBLog.h"
 #include "lldb/Utility/Status.h"
 #include "lldb/Utility/UriParser.h"
 
+#if LLDB_ENABLE_POSIX
+#include 
+#include 
+#endif
+
 using namespace lldb;
 using namespace lldb_private;
 using namespace lldb_private::lldb_server;
@@ -455,14 +463,28 @@ int main_platform(int argc, char *argv[]) {
   lldb_private::Args inferior_arguments;
   inferior_arguments.SetArguments(argc, const_cast(argv));
 
+  Log *log = GetLog(LLDBLog::Platform);
   Socket::SocketProtocol protocol = Socket::ProtocolUnixDomain;
 
   if (fd != SharedSocket::kInvalidFD) {
 // Child process will handle the connection and exit.
-if (gdbserver_port)
+if (gdbserver_port) {
   protocol = Socket::ProtocolTcp;
+} else {
+#ifdef LLDB_ENABLE_POSIX
+  // Check if fd represents domain socket or abstract socket.
+  struct sockaddr_un addr;
+  socklen_t addr_len = sizeof(addr);
+  if (getsockname(fd, (struct sockaddr *)&addr, &addr_len) == -1) {
+LLDB_LOGF(log, "lldb-platform child: not a socket or error occurred");
+return socket_error;
+  }
 
-Log *log = GetLog(LLDBLog::Platform);
+  if (addr.sun_family == AF_UNIX && addr.sun_path[0] == '\0') {
+protocol = Socket::ProtocolUnixAbstract;
+  }
+#endif
+}
 
 NativeSocket sockfd;
 error = SharedSocket::GetNativeSocket(fd, sockfd);
@@ -473,17 +495,27 @@ int main_platform(int argc, char *argv[]) {
 
 GDBRemoteCommunicationServerPlatform platform(protocol, gdbserver_port

[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-21 Thread Emre Kultursay via lldb-commits

https://github.com/emrekultursay updated 
https://github.com/llvm/llvm-project/pull/136466

>From fd514c43019e25f36e12166b7239f7882ea7eca4 Mon Sep 17 00:00:00 2001
From: Emre Kultursay 
Date: Sun, 20 Apr 2025 01:11:31 +
Subject: [PATCH] Fix connecting via abstract socket

Commit 82ee31f and Commit 2e89312 added socket sharing, but only for
unix domain sockets. That broke Android, which uses unix-abstract
sockets.
---
 lldb/include/lldb/Host/linux/AbstractSocket.h |  1 +
 lldb/include/lldb/Host/posix/DomainSocket.h   |  1 +
 lldb/source/Host/linux/AbstractSocket.cpp |  3 ++
 lldb/source/Host/posix/DomainSocket.cpp   |  6 +++
 lldb/tools/lldb-server/lldb-platform.cpp  | 40 +--
 5 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/lldb/include/lldb/Host/linux/AbstractSocket.h 
b/lldb/include/lldb/Host/linux/AbstractSocket.h
index accfd01457a5e..c6a0e2f8af63b 100644
--- a/lldb/include/lldb/Host/linux/AbstractSocket.h
+++ b/lldb/include/lldb/Host/linux/AbstractSocket.h
@@ -15,6 +15,7 @@ namespace lldb_private {
 class AbstractSocket : public DomainSocket {
 public:
   AbstractSocket();
+  AbstractSocket(NativeSocket socket, bool should_close);
 
 protected:
   size_t GetNameOffset() const override;
diff --git a/lldb/include/lldb/Host/posix/DomainSocket.h 
b/lldb/include/lldb/Host/posix/DomainSocket.h
index 3dbe6206da2c5..562c011ee73e6 100644
--- a/lldb/include/lldb/Host/posix/DomainSocket.h
+++ b/lldb/include/lldb/Host/posix/DomainSocket.h
@@ -33,6 +33,7 @@ class DomainSocket : public Socket {
 
 protected:
   DomainSocket(SocketProtocol protocol);
+  DomainSocket(SocketProtocol protocol, NativeSocket socket, bool 
should_close);
 
   virtual size_t GetNameOffset() const;
   virtual void DeleteSocketFile(llvm::StringRef name);
diff --git a/lldb/source/Host/linux/AbstractSocket.cpp 
b/lldb/source/Host/linux/AbstractSocket.cpp
index 8393a80e86e72..681aa2d1ebc72 100644
--- a/lldb/source/Host/linux/AbstractSocket.cpp
+++ b/lldb/source/Host/linux/AbstractSocket.cpp
@@ -15,6 +15,9 @@ using namespace lldb_private;
 
 AbstractSocket::AbstractSocket() : DomainSocket(ProtocolUnixAbstract) {}
 
+AbstractSocket::AbstractSocket(NativeSocket socket, bool should_close)
+: DomainSocket(ProtocolUnixAbstract, socket, should_close) {}
+
 size_t AbstractSocket::GetNameOffset() const { return 1; }
 
 void AbstractSocket::DeleteSocketFile(llvm::StringRef name) {}
diff --git a/lldb/source/Host/posix/DomainSocket.cpp 
b/lldb/source/Host/posix/DomainSocket.cpp
index 6c490cdda47ed..9b1e4f71bba2a 100644
--- a/lldb/source/Host/posix/DomainSocket.cpp
+++ b/lldb/source/Host/posix/DomainSocket.cpp
@@ -67,6 +67,12 @@ DomainSocket::DomainSocket(NativeSocket socket,
   m_socket = socket;
 }
 
+DomainSocket::DomainSocket(SocketProtocol protocol, NativeSocket socket,
+   bool should_close)
+: Socket(protocol, should_close) {
+  m_socket = socket;
+}
+
 Status DomainSocket::Connect(llvm::StringRef name) {
   sockaddr_un saddr_un;
   socklen_t saddr_un_len;
diff --git a/lldb/tools/lldb-server/lldb-platform.cpp 
b/lldb/tools/lldb-server/lldb-platform.cpp
index 23d36ffb4cb66..59a83c28b0212 100644
--- a/lldb/tools/lldb-server/lldb-platform.cpp
+++ b/lldb/tools/lldb-server/lldb-platform.cpp
@@ -39,11 +39,19 @@
 #if LLDB_ENABLE_POSIX
 #include "lldb/Host/posix/DomainSocket.h"
 #endif
+#ifdef __linux__
+#include "lldb/Host/linux/AbstractSocket.h"
+#endif
 #include "lldb/Utility/FileSpec.h"
 #include "lldb/Utility/LLDBLog.h"
 #include "lldb/Utility/Status.h"
 #include "lldb/Utility/UriParser.h"
 
+#if LLDB_ENABLE_POSIX
+#include 
+#include 
+#endif
+
 using namespace lldb;
 using namespace lldb_private;
 using namespace lldb_private::lldb_server;
@@ -455,14 +463,28 @@ int main_platform(int argc, char *argv[]) {
   lldb_private::Args inferior_arguments;
   inferior_arguments.SetArguments(argc, const_cast(argv));
 
+  Log *log = GetLog(LLDBLog::Platform);
   Socket::SocketProtocol protocol = Socket::ProtocolUnixDomain;
 
   if (fd != SharedSocket::kInvalidFD) {
 // Child process will handle the connection and exit.
-if (gdbserver_port)
+if (gdbserver_port) {
   protocol = Socket::ProtocolTcp;
+} else {
+#ifdef LLDB_ENABLE_POSIX
+  // Check if fd represents domain socket or abstract socket.
+  struct sockaddr_un addr;
+  socklen_t addr_len = sizeof(addr);
+  if (getsockname(fd, (struct sockaddr *)&addr, &addr_len) == -1) {
+LLDB_LOGF(log, "lldb-platform child: not a socket or error occurred");
+return socket_error;
+  }
 
-Log *log = GetLog(LLDBLog::Platform);
+  if (addr.sun_family == AF_UNIX && addr.sun_path[0] == '\0') {
+protocol = Socket::ProtocolUnixAbstract;
+  }
+#endif
+}
 
 NativeSocket sockfd;
 error = SharedSocket::GetNativeSocket(fd, sockfd);
@@ -473,17 +495,27 @@ int main_platform(int argc, char *argv[]) {
 
 GDBRemoteCommunicationServerPlatform platform(protocol, gdbserver_port)

[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-21 Thread Emre Kultursay via lldb-commits

https://github.com/emrekultursay edited 
https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-21 Thread Emre Kultursay via lldb-commits

https://github.com/emrekultursay edited 
https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] Fix connecting via abstract socket (PR #136466)

2025-04-21 Thread Emre Kultursay via lldb-commits

emrekultursay wrote:

@slydiman Could you also take a look at this PR, as you are the author of the 2 
commits mentioned in the description? Thanks.

https://github.com/llvm/llvm-project/pull/136466
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits