Author: Kazuki Sakamoto Date: 2023-06-15T14:24:14-07:00 New Revision: b4d710e410595905c6c1d40cd5d257dfa9143bbe
URL: https://github.com/llvm/llvm-project/commit/b4d710e410595905c6c1d40cd5d257dfa9143bbe DIFF: https://github.com/llvm/llvm-project/commit/b4d710e410595905c6c1d40cd5d257dfa9143bbe.diff LOG: [lldb][Android] Use a lambda for calls to ::open in RetryAfterSignal lldb-server for Android does not build with NDK r21 and above due to RetryAfterSignal and Bionic ::open mismatch. https://github.com/llvm/llvm-project/issues/54727 Apply the LLVM patch to LLDB. https://github.com/llvm/llvm-project/commit/0a0e411204a2baa520fd73a8d69b664f98b428ba > In Bionic, open can be overloaded for _FORTIFY_SOURCE support, causing > compile errors of RetryAfterSignal due to overload resolution. Wrapping > the call in a lambda avoids this. Differential Revision: https://reviews.llvm.org/D152712 Added: Modified: lldb/include/lldb/Host/FileSystem.h lldb/source/Host/common/PseudoTerminal.cpp lldb/source/Host/posix/ConnectionFileDescriptorPosix.cpp lldb/source/Host/posix/FileSystemPosix.cpp lldb/source/Host/posix/PipePosix.cpp lldb/source/Host/posix/ProcessLauncherPosixFork.cpp Removed: ################################################################################ diff --git a/lldb/include/lldb/Host/FileSystem.h b/lldb/include/lldb/Host/FileSystem.h index 823e7710b4efe..e25fc9983c1f0 100644 --- a/lldb/include/lldb/Host/FileSystem.h +++ b/lldb/include/lldb/Host/FileSystem.h @@ -52,7 +52,7 @@ class FileSystem { FILE *Fopen(const char *path, const char *mode); /// Wraps ::open in a platform-independent way. - int Open(const char *path, int flags, int mode); + int Open(const char *path, int flags, int mode = 0600); llvm::Expected<std::unique_ptr<File>> Open(const FileSpec &file_spec, File::OpenOptions options, diff --git a/lldb/source/Host/common/PseudoTerminal.cpp b/lldb/source/Host/common/PseudoTerminal.cpp index be4c3c7928dfd..de49058beeb70 100644 --- a/lldb/source/Host/common/PseudoTerminal.cpp +++ b/lldb/source/Host/common/PseudoTerminal.cpp @@ -8,6 +8,7 @@ #include "lldb/Host/PseudoTerminal.h" #include "lldb/Host/Config.h" +#include "lldb/Host/FileSystem.h" #include "llvm/Support/Errc.h" #include "llvm/Support/Errno.h" #include <cassert> @@ -95,7 +96,7 @@ llvm::Error PseudoTerminal::OpenSecondary(int oflag) { CloseSecondaryFileDescriptor(); std::string name = GetSecondaryName(); - m_secondary_fd = llvm::sys::RetryAfterSignal(-1, ::open, name.c_str(), oflag); + m_secondary_fd = FileSystem::Instance().Open(name.c_str(), oflag); if (m_secondary_fd >= 0) return llvm::Error::success(); diff --git a/lldb/source/Host/posix/ConnectionFileDescriptorPosix.cpp b/lldb/source/Host/posix/ConnectionFileDescriptorPosix.cpp index dc5b24979fb54..825da09d76022 100644 --- a/lldb/source/Host/posix/ConnectionFileDescriptorPosix.cpp +++ b/lldb/source/Host/posix/ConnectionFileDescriptorPosix.cpp @@ -15,6 +15,7 @@ #include "lldb/Host/posix/ConnectionFileDescriptorPosix.h" #include "lldb/Host/Config.h" +#include "lldb/Host/FileSystem.h" #include "lldb/Host/Socket.h" #include "lldb/Host/SocketAddress.h" #include "lldb/Utility/LLDBLog.h" @@ -726,7 +727,7 @@ ConnectionStatus ConnectionFileDescriptor::ConnectFile( #if LLDB_ENABLE_POSIX std::string addr_str = s.str(); // file:///PATH - int fd = llvm::sys::RetryAfterSignal(-1, ::open, addr_str.c_str(), O_RDWR); + int fd = FileSystem::Instance().Open(addr_str.c_str(), O_RDWR); if (fd == -1) { if (error_ptr) error_ptr->SetErrorToErrno(); @@ -776,7 +777,7 @@ ConnectionStatus ConnectionFileDescriptor::ConnectSerialPort( return eConnectionStatusError; } - int fd = llvm::sys::RetryAfterSignal(-1, ::open, path.str().c_str(), O_RDWR); + int fd = FileSystem::Instance().Open(path.str().c_str(), O_RDWR); if (fd == -1) { if (error_ptr) error_ptr->SetErrorToErrno(); diff --git a/lldb/source/Host/posix/FileSystemPosix.cpp b/lldb/source/Host/posix/FileSystemPosix.cpp index 26a266e86382b..cdb76da626bc9 100644 --- a/lldb/source/Host/posix/FileSystemPosix.cpp +++ b/lldb/source/Host/posix/FileSystemPosix.cpp @@ -77,5 +77,8 @@ FILE *FileSystem::Fopen(const char *path, const char *mode) { } int FileSystem::Open(const char *path, int flags, int mode) { - return llvm::sys::RetryAfterSignal(-1, ::open, path, flags, mode); + // Call ::open in a lambda to avoid overload resolution in RetryAfterSignal + // when open is overloaded, such as in Bionic. + auto lambda = [&]() { return ::open(path, flags, mode); }; + return llvm::sys::RetryAfterSignal(-1, lambda); } diff --git a/lldb/source/Host/posix/PipePosix.cpp b/lldb/source/Host/posix/PipePosix.cpp index bd311ad8769a4..5e4e8618fa4f1 100644 --- a/lldb/source/Host/posix/PipePosix.cpp +++ b/lldb/source/Host/posix/PipePosix.cpp @@ -7,11 +7,11 @@ //===----------------------------------------------------------------------===// #include "lldb/Host/posix/PipePosix.h" +#include "lldb/Host/FileSystem.h" #include "lldb/Host/HostInfo.h" #include "lldb/Utility/SelectHelper.h" #include "llvm/ADT/SmallString.h" #include "llvm/Support/Errno.h" -#include "llvm/Support/FileSystem.h" #include <functional> #include <thread> @@ -148,7 +148,7 @@ Status PipePosix::OpenAsReader(llvm::StringRef name, flags |= O_CLOEXEC; Status error; - int fd = llvm::sys::RetryAfterSignal(-1, ::open, name.str().c_str(), flags); + int fd = FileSystem::Instance().Open(name.str().c_str(), flags); if (fd != -1) m_fds[READ] = fd; else diff --git a/lldb/source/Host/posix/ProcessLauncherPosixFork.cpp b/lldb/source/Host/posix/ProcessLauncherPosixFork.cpp index a148c110e87b1..0a832ebad13a7 100644 --- a/lldb/source/Host/posix/ProcessLauncherPosixFork.cpp +++ b/lldb/source/Host/posix/ProcessLauncherPosixFork.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// #include "lldb/Host/posix/ProcessLauncherPosixFork.h" +#include "lldb/Host/FileSystem.h" #include "lldb/Host/Host.h" #include "lldb/Host/HostProcess.h" #include "lldb/Host/Pipe.h" @@ -14,7 +15,6 @@ #include "lldb/Utility/FileSpec.h" #include "lldb/Utility/Log.h" #include "llvm/Support/Errno.h" -#include "llvm/Support/FileSystem.h" #include <climits> #include <sys/ptrace.h> @@ -71,7 +71,7 @@ static void DisableASLR(int error_fd) { } static void DupDescriptor(int error_fd, const char *file, int fd, int flags) { - int target_fd = llvm::sys::RetryAfterSignal(-1, ::open, file, flags, 0666); + int target_fd = FileSystem::Instance().Open(file, flags, 0666); if (target_fd == -1) ExitWithError(error_fd, "DupDescriptor-open"); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits