[Lldb-commits] [lldb] r242319 - Use accept instead of accept4 for Android.

Chaoren Lin chaorenl at google.com
Wed Jul 15 12:22:12 PDT 2015


Author: chaoren
Date: Wed Jul 15 14:22:12 2015
New Revision: 242319

URL: http://llvm.org/viewvc/llvm-project?rev=242319&view=rev
Log:
Use accept instead of accept4 for Android.

Summary:
The accept4 syscall is missing on older ARM Android kernels, and the accept()
call is implemented with the accept4 syscall, so we'll need to call the accept
syscall directly.

Reviewers: vharron, tberghammer, labath

Subscribers: ovyalov, chaoren, labath, tberghammer, aemerson, lldb-commits

Differential Revision: http://reviews.llvm.org/D10887

Modified:
    lldb/trunk/cmake/platforms/Android.cmake
    lldb/trunk/source/Host/common/Socket.cpp

Modified: lldb/trunk/cmake/platforms/Android.cmake
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/cmake/platforms/Android.cmake?rev=242319&r1=242318&r2=242319&view=diff
==============================================================================
--- lldb/trunk/cmake/platforms/Android.cmake (original)
+++ lldb/trunk/cmake/platforms/Android.cmake Wed Jul 15 14:22:12 2015
@@ -102,6 +102,10 @@ elseif( ANDROID_ABI STREQUAL "armeabi" )
  # 64 bit atomic operations used in c++ libraries require armv7-a instructions
  # armv5te and armv6 were tried but do not work.
  set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -march=armv7-a" )
+ if ( LLVM_BUILD_STATIC )
+  # Temporary workaround for static linking with the latest API.
+  set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -DANDROID_ARM_BUILD_STATIC" )
+ endif()
 endif()
 
 # linker flags

Modified: lldb/trunk/source/Host/common/Socket.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/common/Socket.cpp?rev=242319&r1=242318&r2=242319&view=diff
==============================================================================
--- lldb/trunk/source/Host/common/Socket.cpp (original)
+++ lldb/trunk/source/Host/common/Socket.cpp Wed Jul 15 14:22:12 2015
@@ -24,7 +24,11 @@
 #include <asm-generic/errno-base.h>
 #include <errno.h>
 #include <arpa/inet.h>
-#endif
+#if defined(ANDROID_ARM_BUILD_STATIC)
+#include <unistd.h>
+#include <sys/syscall.h>
+#endif // ANDROID_ARM_BUILD_STATIC
+#endif // __ANDROID_NDK__
 
 #ifndef LLDB_DISABLE_POSIX
 #include <arpa/inet.h>
@@ -70,7 +74,20 @@ NativeSocket CreateSocket(const int doma
 
 NativeSocket Accept(NativeSocket sockfd, struct sockaddr *addr, socklen_t *addrlen, bool child_processes_inherit)
 {
-#ifdef SOCK_CLOEXEC
+#if defined(ANDROID_ARM_BUILD_STATIC)
+	// Temporary workaround for statically linking Android lldb-server with the
+	// latest API.
+	int fd = syscall(__NR_accept, sockfd, addr, addrlen);
+	if (fd >= 0 && !child_processes_inherit)
+	{
+		int flags = ::fcntl(fd, F_GETFD);
+		if (flags == -1)
+			return -1;
+		if (::fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1)
+			return -1;
+	}
+	return fd;
+#elif defined(SOCK_CLOEXEC)
     int flags = 0;
     if (!child_processes_inherit) {
         flags |= SOCK_CLOEXEC;





More information about the lldb-commits mailing list