summaryrefslogtreecommitdiffstats
path: root/lldb/source/Host
diff options
context:
space:
mode:
authorVince Harron <vince@nethacker.com>2015-05-12 01:10:56 +0000
committerVince Harron <vince@nethacker.com>2015-05-12 01:10:56 +0000
commit8b33567189ea25fbdd454d9c4cc75cb2850a821f (patch)
tree1f16337a50f4a62cd82d8961ee311390a9a10614 /lldb/source/Host
parent7b6c0e02acd94ece5b3d6674a1c397adf7f9d7b3 (diff)
downloadbcm5719-llvm-8b33567189ea25fbdd454d9c4cc75cb2850a821f.tar.gz
bcm5719-llvm-8b33567189ea25fbdd454d9c4cc75cb2850a821f.zip
Get lldb-server building on android-9
Build lldb-server with an android-9 sysroot. llvm-svn: 237078
Diffstat (limited to 'lldb/source/Host')
-rw-r--r--lldb/source/Host/CMakeLists.txt1
-rw-r--r--lldb/source/Host/android/LibcGlue.cpp39
-rw-r--r--lldb/source/Host/posix/HostInfoPosix.cpp26
3 files changed, 65 insertions, 1 deletions
diff --git a/lldb/source/Host/CMakeLists.txt b/lldb/source/Host/CMakeLists.txt
index 5f5547764dc..a13defa46c5 100644
--- a/lldb/source/Host/CMakeLists.txt
+++ b/lldb/source/Host/CMakeLists.txt
@@ -104,6 +104,7 @@ else()
if (__ANDROID_NDK__)
add_host_subdirectory(android
android/HostInfoAndroid.cpp
+ android/LibcGlue.cpp
android/ProcessLauncherAndroid.cpp
linux/Host.cpp
linux/HostInfoLinux.cpp
diff --git a/lldb/source/Host/android/LibcGlue.cpp b/lldb/source/Host/android/LibcGlue.cpp
new file mode 100644
index 00000000000..d443a92724e
--- /dev/null
+++ b/lldb/source/Host/android/LibcGlue.cpp
@@ -0,0 +1,39 @@
+//===-- LibcGlue.cpp --------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// This files adds functions missing from libc on earlier versions of Android
+
+#include <android/api-level.h>
+
+#if __ANDROID_API__ < 21
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <sys/syscall.h>
+#include <signal.h>
+
+#include "lldb/Host/Time.h"
+
+time_t timegm(struct tm* t)
+{
+ return (time_t) timegm64(t);
+}
+
+int signalfd (int fd, const sigset_t *mask, int flags)
+{
+ return syscall(__NR_signalfd4, fd, mask, _NSIG / 8, flags);
+}
+
+int posix_openpt(int flags)
+{
+ return open("/dev/ptmx", flags);
+}
+
+#endif
diff --git a/lldb/source/Host/posix/HostInfoPosix.cpp b/lldb/source/Host/posix/HostInfoPosix.cpp
index debff52d8c1..160bd235565 100644
--- a/lldb/source/Host/posix/HostInfoPosix.cpp
+++ b/lldb/source/Host/posix/HostInfoPosix.cpp
@@ -17,6 +17,7 @@
#include <grp.h>
#include <limits.h>
+#include <mutex>
#include <netdb.h>
#include <pwd.h>
#include <sys/types.h>
@@ -47,9 +48,31 @@ HostInfoPosix::GetHostname(std::string &s)
return false;
}
+#ifdef __ANDROID_NDK__
+#include <android/api-level.h>
+#endif
+#if defined(__ANDROID_API__) && __ANDROID_API__ < 21
+#define USE_GETPWUID
+#endif
+
+#ifdef USE_GETPWUID
+static std::mutex s_getpwuid_lock;
+#endif
+
const char *
HostInfoPosix::LookupUserName(uint32_t uid, std::string &user_name)
{
+#ifdef USE_GETPWUID
+ // getpwuid_r is missing from android-9
+ // make getpwuid thread safe with a mutex
+ std::lock_guard<std::mutex> lock(s_getpwuid_lock);
+ struct passwd *user_info_ptr = ::getpwuid(uid);
+ if (user_info_ptr)
+ {
+ user_name.assign(user_info_ptr->pw_name);
+ return user_name.c_str();
+ }
+#else
struct passwd user_info;
struct passwd *user_info_ptr = &user_info;
char user_buffer[PATH_MAX];
@@ -62,8 +85,9 @@ HostInfoPosix::LookupUserName(uint32_t uid, std::string &user_name)
return user_name.c_str();
}
}
+#endif
user_name.clear();
- return NULL;
+ return nullptr;
}
const char *
OpenPOWER on IntegriCloud