Add Host{Info, Thread}Android. They cannot directly inherit Host{Info, 
Thread}Posix, because that would need linking the base classes, which will 
cause linker error (some POSIX functions do not exist on Android)

http://reviews.llvm.org/D5495

Files:
  include/lldb/Core/IOHandler.h
  include/lldb/Host/Config.h
  include/lldb/Host/HostInfo.h
  include/lldb/Host/HostNativeThread.h
  include/lldb/Host/android/Config.h
  include/lldb/Host/android/HostInfoAndroid.h
  include/lldb/Host/android/HostThreadAndroid.h
  include/lldb/Host/linux/HostThreadLinux.h
  source/Core/IOHandler.cpp
  source/Host/android/HostInfoAndroid.cpp
  source/Host/android/HostThreadAndroid.cpp
  source/Host/android/ThisThread.cpp
  source/Host/common/Host.cpp
  source/Host/common/Socket.cpp
  source/Host/linux/Host.cpp
  source/Interpreter/CommandInterpreter.cpp
  source/Plugins/Process/Linux/LinuxThread.h
  source/Plugins/Process/Linux/NativeProcessLinux.cpp
  source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.h
  source/Plugins/Process/Linux/ProcessLinux.cpp
  source/Plugins/Process/Linux/ProcessLinux.h
  source/Plugins/Process/Linux/ProcessMonitor.cpp
  source/Plugins/Process/POSIX/POSIXThread.cpp
  source/Plugins/Process/POSIX/POSIXThread.h
  source/Plugins/Process/POSIX/ProcessPOSIX.cpp
  source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_arm64.cpp
  source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_mips64.cpp
  source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_x86.cpp
  source/Plugins/Process/Utility/RegisterInfos_arm64.h
  source/Plugins/Process/elf-core/RegisterContextPOSIXCore_mips64.cpp
  source/Plugins/Process/elf-core/RegisterContextPOSIXCore_x86_64.cpp
  source/Plugins/Process/elf-core/ThreadElfCore.cpp
  source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
  source/Target/ProcessLaunchInfo.cpp
  source/Target/Thread.cpp
  tools/lldb-gdbserver/lldb-gdbserver.cpp
Index: include/lldb/Core/IOHandler.h
===================================================================
--- include/lldb/Core/IOHandler.h
+++ include/lldb/Core/IOHandler.h
@@ -457,6 +457,7 @@
         SetBaseLineNumber (uint32_t line);
         
     private:
+#ifndef LLDB_DISABLE_LIBEDIT
         static LineStatus
         LineCompletedCallback (Editline *editline,
                                StringList &lines,
@@ -471,9 +472,12 @@
                                          int max_matches,
                                          StringList &matches,
                                          void *baton);
+#endif
 
     protected:
+#ifndef LLDB_DISABLE_LIBEDIT
         std::unique_ptr<Editline> m_editline_ap;
+#endif
         IOHandlerDelegate &m_delegate;
         std::string m_prompt;
         uint32_t m_base_line_number; // If non-zero, then show line numbers in prompt
Index: include/lldb/Host/Config.h
===================================================================
--- include/lldb/Host/Config.h
+++ include/lldb/Host/Config.h
@@ -14,6 +14,10 @@
 
 #include "lldb/Host/macosx/Config.h"
 
+#elif defined(__ANDROID__)
+
+#include "lldb/Host/android/Config.h"
+
 #elif defined(__linux__) || defined(__GNU__)
 
 #include "lldb/Host/linux/Config.h"
Index: include/lldb/Host/HostInfo.h
===================================================================
--- include/lldb/Host/HostInfo.h
+++ include/lldb/Host/HostInfo.h
@@ -37,6 +37,9 @@
 #if defined(_WIN32)
 #include "lldb/Host/windows/HostInfoWindows.h"
 #define HOST_INFO_TYPE HostInfoWindows
+#elif defined(__ANDROID__)
+#include "lldb/Host/android/HostInfoAndroid.h"
+#define HOST_INFO_TYPE HostInfoAndroid
 #elif defined(__linux__)
 #include "lldb/Host/linux/HostInfoLinux.h"
 #define HOST_INFO_TYPE HostInfoLinux
Index: include/lldb/Host/HostNativeThread.h
===================================================================
--- include/lldb/Host/HostNativeThread.h
+++ include/lldb/Host/HostNativeThread.h
@@ -16,6 +16,12 @@
 {
 typedef HostThreadWindows HostNativeThread;
 }
+#elif defined(__ANDROID__)
+#include "lldb/Host/android/HostThreadAndroid.h"
+namespace lldb_private
+{
+typedef HostThreadAndroid HostNativeThread;
+}
 #elif defined(__linux__)
 #include "lldb/Host/linux/HostThreadLinux.h"
 namespace lldb_private
Index: include/lldb/Host/android/Config.h
===================================================================
--- /dev/null
+++ include/lldb/Host/android/Config.h
@@ -0,0 +1,28 @@
+//===-- Config.h -----------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+//----------------------------------------------------------------------
+// LLDB currently doesn't have a dynamic configuration mechanism, so we 
+// are going to hardcode things for now. Eventually these files will
+// be auto generated by some configuration script that can detect
+// platform functionality availability.
+//----------------------------------------------------------------------
+
+#ifndef liblldb_Platform_Config_h_
+#define liblldb_Platform_Config_h_
+
+#define LLDB_CONFIG_TERMIOS_SUPPORTED 1
+
+//#define LLDB_CONFIG_TILDE_RESOLVES_TO_USER 1
+
+//#define LLDB_CONFIG_DLOPEN_RTLD_FIRST_SUPPORTED 1
+
+//#define LLDB_CONFIG_FCNTL_GETPATH_SUPPORTED 1
+
+#endif // #ifndef liblldb_Platform_Config_h_
Index: include/lldb/Host/android/HostInfoAndroid.h
===================================================================
--- /dev/null
+++ include/lldb/Host/android/HostInfoAndroid.h
@@ -0,0 +1,38 @@
+//===-- HostInfoAndroid.h ---------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_linux_HostInfoAndroid_h_
+#define lldb_Host_linux_HostInfoAndroid_h_
+
+#include "lldb/Host/HostInfoBase.h"
+
+namespace lldb_private
+{
+
+class HostInfoAndroid : public HostInfoBase
+{
+    friend class HostInfoBase;
+
+  private:
+    // Static class, unconstructable.
+    HostInfoAndroid();
+    ~HostInfoAndroid();
+
+  public:
+    static size_t GetPageSize();
+    static bool ComputePythonDirectory(FileSpec &file_spec);
+    static bool GetOSVersion(uint32_t &major, uint32_t &minor, uint32_t &update);
+    static const char *LookupUserName(uint32_t uid, std::string &user_name);
+    static const char *LookupGroupName(uint32_t gid, std::string &group_name);
+    static FileSpec GetProgramFileSpec();
+    static bool GetHostname(std::string &s);
+};
+}
+
+#endif
Index: include/lldb/Host/android/HostThreadAndroid.h
===================================================================
--- /dev/null
+++ include/lldb/Host/android/HostThreadAndroid.h
@@ -0,0 +1,36 @@
+//===-- HostThreadAndroid.h -------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef lldb_Host_linux_HostThreadAndroid_h_
+#define lldb_Host_linux_HostThreadAndroid_h_
+
+#include "lldb/Host/HostNativeThreadBase.h"
+
+#include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/SmallString.h"
+
+namespace lldb_private
+{
+
+class HostThreadAndroid : public HostNativeThreadBase
+{
+  public:
+    HostThreadAndroid();
+    HostThreadAndroid(lldb::thread_t thread);
+
+    Error Join(lldb::thread_result_t *result);
+    Error Detach();
+    Error Cancel();
+
+    static void SetName(lldb::thread_t thread, llvm::StringRef name);
+    static void GetName(lldb::thread_t thread, llvm::SmallVectorImpl<char> &name);
+};
+}
+
+#endif
Index: include/lldb/Host/linux/HostThreadLinux.h
===================================================================
--- include/lldb/Host/linux/HostThreadLinux.h
+++ include/lldb/Host/linux/HostThreadLinux.h
@@ -24,6 +24,8 @@
     HostThreadLinux();
     HostThreadLinux(lldb::thread_t thread);
 
+    Error Join(lldb::thread_result_t *result);
+
     static void SetName(lldb::thread_t thread, llvm::StringRef name);
     static void GetName(lldb::thread_t thread, llvm::SmallVectorImpl<char> &name);
 };
Index: source/Core/IOHandler.cpp
===================================================================
--- source/Core/IOHandler.cpp
+++ source/Core/IOHandler.cpp
@@ -19,7 +19,9 @@
 #include "lldb/Core/State.h"
 #include "lldb/Core/StreamFile.h"
 #include "lldb/Core/ValueObjectRegister.h"
+#ifndef LLDB_DISABLE_LIBEDIT
 #include "lldb/Host/Editline.h"
+#endif
 #include "lldb/Interpreter/CommandCompletions.h"
 #include "lldb/Interpreter/CommandInterpreter.h"
 #include "lldb/Symbol/Block.h"
@@ -339,7 +341,9 @@
                                       uint32_t line_number_start,
                                       IOHandlerDelegate &delegate) :
     IOHandler (debugger, input_sp, output_sp, error_sp, flags),
+#ifndef LLDB_DISABLE_LIBEDIT
     m_editline_ap (),
+#endif
     m_delegate (delegate),
     m_prompt (),
     m_base_line_number (line_number_start),
@@ -347,6 +351,7 @@
 {
     SetPrompt(prompt);
 
+#ifndef LLDB_DISABLE_LIBEDIT
     bool use_editline = false;
     
 #ifndef _MSC_VER
@@ -369,24 +374,28 @@
         m_editline_ap->SetLineCompleteCallback (LineCompletedCallback, this);
         m_editline_ap->SetAutoCompleteCallback (AutoCompleteCallback, this);
     }
-    
+#endif
 }
 
 IOHandlerEditline::~IOHandlerEditline ()
 {
+#ifndef LLDB_DISABLE_LIBEDIT
     m_editline_ap.reset();
+#endif
 }
 
 
 bool
 IOHandlerEditline::GetLine (std::string &line, bool &interrupted)
 {
+#ifndef LLDB_DISABLE_LIBEDIT
     if (m_editline_ap)
     {
         return m_editline_ap->GetLine(line, interrupted).Success();
     }
     else
     {
+#endif
         line.clear();
 
         FILE *in = GetInputFILE();
@@ -452,10 +461,13 @@
             SetIsDone(true);
         }
         return false;
+#ifndef LLDB_DISABLE_LIBEDIT
     }
+#endif
 }
 
 
+#ifndef LLDB_DISABLE_LIBEDIT
 LineStatus
 IOHandlerEditline::LineCompletedCallback (Editline *editline,
                                           StringList &lines,
@@ -487,14 +499,24 @@
                                                               matches);
     return 0;
 }
+#endif
 
 const char *
 IOHandlerEditline::GetPrompt ()
 {
+#ifndef LLDB_DISABLE_LIBEDIT
     if (m_editline_ap)
+    {
         return m_editline_ap->GetPrompt ();
-    else if (m_prompt.empty())
-        return NULL;
+    }
+    else
+    {
+#endif
+        if (m_prompt.empty())
+            return NULL;
+#ifndef LLDB_DISABLE_LIBEDIT
+    }
+#endif
     return m_prompt.c_str();
 }
 
@@ -505,8 +527,10 @@
         m_prompt = p;
     else
         m_prompt.clear();
+#ifndef LLDB_DISABLE_LIBEDIT
     if (m_editline_ap)
         m_editline_ap->SetPrompt (m_prompt.empty() ? NULL : m_prompt.c_str());
+#endif
     return true;
 }
 
@@ -514,14 +538,17 @@
 IOHandlerEditline::SetBaseLineNumber (uint32_t line)
 {
     m_base_line_number = line;
+#ifndef LLDB_DISABLE_LIBEDIT
     if (m_editline_ap)
         m_editline_ap->ShowLineNumbers (true, line);
+#endif
     
 }
 bool
 IOHandlerEditline::GetLines (StringList &lines, bool &interrupted)
 {
     bool success = false;
+#ifndef LLDB_DISABLE_LIBEDIT
     if (m_editline_ap)
     {
         std::string end_token;
@@ -529,6 +556,7 @@
     }
     else
     {
+#endif
         LineStatus lines_status = LineStatus::Success;
         Error error;
 
@@ -567,7 +595,9 @@
         m_delegate.IOHandlerLinesUpdated(*this, lines, UINT32_MAX, error);
 
         success = lines.GetSize() > 0;
+#ifndef LLDB_DISABLE_LIBEDIT
     }
+#endif
     return success;
 }
 
@@ -619,20 +649,24 @@
 void
 IOHandlerEditline::Hide ()
 {
+#ifndef LLDB_DISABLE_LIBEDIT
     if (m_editline_ap)
         m_editline_ap->Hide();
+#endif
 }
 
 
 void
 IOHandlerEditline::Refresh ()
 {
+#ifndef LLDB_DISABLE_LIBEDIT
     if (m_editline_ap)
     {
         m_editline_ap->Refresh();
     }
     else
     {
+#endif
         const char *prompt = GetPrompt();
         if (prompt && prompt[0])
         {
@@ -643,14 +677,18 @@
                 ::fflush(out);
             }
         }
+#ifndef LLDB_DISABLE_LIBEDIT
     }
+#endif
 }
 
 void
 IOHandlerEditline::Cancel ()
 {
+#ifndef LLDB_DISABLE_LIBEDIT
     if (m_editline_ap)
         m_editline_ap->Interrupt ();
+#endif
 }
 
 bool
@@ -660,16 +698,20 @@
     if (m_delegate.IOHandlerInterrupt(*this))
         return true;
 
+#ifndef LLDB_DISABLE_LIBEDIT
     if (m_editline_ap)
         return m_editline_ap->Interrupt();
+#endif
     return false;
 }
 
 void
 IOHandlerEditline::GotEOF()
 {
+#ifndef LLDB_DISABLE_LIBEDIT
     if (m_editline_ap)
         m_editline_ap->Interrupt();
+#endif
 }
 
 // we may want curses to be disabled for some builds
Index: source/Host/android/HostInfoAndroid.cpp
===================================================================
--- /dev/null
+++ source/Host/android/HostInfoAndroid.cpp
@@ -0,0 +1,146 @@
+//===-- HostInfoAndroid.cpp -------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "lldb/Host/android/HostInfoAndroid.h"
+
+#include <netdb.h>
+#include <sys/utsname.h>
+#include <pwd.h>
+#include <sys/types.h>
+
+using namespace lldb_private;
+
+namespace
+{
+struct HostInfoLinuxFields
+{
+    HostInfoLinuxFields()
+        : m_os_major(0)
+        , m_os_minor(0)
+        , m_os_update(0)
+    {
+    }
+
+    std::string m_distribution_id;
+    uint32_t m_os_major;
+    uint32_t m_os_minor;
+    uint32_t m_os_update;
+};
+
+HostInfoLinuxFields *g_fields = nullptr;
+}
+
+size_t
+HostInfoAndroid::GetPageSize()
+{
+    return ::getpagesize();
+}
+
+bool
+HostInfoAndroid::ComputePythonDirectory(FileSpec &file_spec)
+{
+    return false;
+}
+
+bool
+HostInfoAndroid::GetOSVersion(uint32_t &major, uint32_t &minor, uint32_t &update)
+{
+    static bool is_initialized = false;
+    static bool success = false;
+
+    if (!is_initialized)
+    {
+        is_initialized = true;
+        struct utsname un;
+
+        if (uname(&un))
+            goto finished;
+
+        int status = sscanf(un.release, "%u.%u.%u", &g_fields->m_os_major, &g_fields->m_os_minor, &g_fields->m_os_update);
+        if (status == 3)
+        {
+            success = true;
+            goto finished;
+        }
+
+        // Some kernels omit the update version, so try looking for just "X.Y" and
+        // set update to 0.
+        g_fields->m_os_update = 0;
+        status = sscanf(un.release, "%u.%u", &g_fields->m_os_major, &g_fields->m_os_minor);
+        success = !!(status == 2);
+    }
+
+finished:
+    major = g_fields->m_os_major;
+    minor = g_fields->m_os_minor;
+    update = g_fields->m_os_update;
+    return success;
+}
+
+
+const char *
+HostInfoAndroid::LookupUserName(uint32_t uid, std::string &user_name)
+{
+    struct passwd user_info;
+    struct passwd *user_info_ptr = &user_info;
+    char user_buffer[PATH_MAX];
+    size_t user_buffer_size = sizeof(user_buffer);
+    if (::getpwuid_r(uid, &user_info, user_buffer, user_buffer_size, &user_info_ptr) == 0)
+    {
+        if (user_info_ptr)
+        {
+            user_name.assign(user_info_ptr->pw_name);
+            return user_name.c_str();
+        }
+    }
+    user_name.clear();
+    return NULL;
+}
+
+const char *
+HostInfoAndroid::LookupGroupName(uint32_t gid, std::string &group_name)
+{
+    return NULL;
+}
+
+FileSpec
+HostInfoAndroid::GetProgramFileSpec()
+{
+    static FileSpec g_program_filespec;
+
+    if (!g_program_filespec)
+    {
+        char exe_path[PATH_MAX];
+        ssize_t len = readlink("/proc/self/exe", exe_path, sizeof(exe_path) - 1);
+        if (len > 0)
+        {
+            exe_path[len] = 0;
+            g_program_filespec.SetFile(exe_path, false);
+        }
+    }
+
+    return g_program_filespec;
+}
+
+bool
+HostInfoAndroid::GetHostname(std::string &s)
+{
+    char hostname[PATH_MAX];
+    hostname[sizeof(hostname) - 1] = '\0';
+    if (::gethostname(hostname, sizeof(hostname) - 1) == 0)
+    {
+        struct hostent *h = ::gethostbyname(hostname);
+        if (h)
+            s.assign(h->h_name);
+        else
+            s.assign(hostname);
+        return true;
+    }
+    return false;
+}
Index: source/Host/android/HostThreadAndroid.cpp
===================================================================
--- /dev/null
+++ source/Host/android/HostThreadAndroid.cpp
@@ -0,0 +1,81 @@
+//===-- HostThreadAndroid.cpp -----------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "lldb/Host/android/HostThreadAndroid.h"
+
+#include "lldb/lldb-enumerations.h"
+#include "lldb/Core/DataBuffer.h"
+#include "Plugins/Process/Linux/ProcFileReader.h"
+
+using namespace lldb;
+using namespace lldb_private;
+
+HostThreadAndroid::HostThreadAndroid()
+    : HostNativeThreadBase()
+{
+}
+
+HostThreadAndroid::HostThreadAndroid(lldb::thread_t thread)
+    : HostNativeThreadBase(thread)
+{
+}
+
+Error
+HostThreadAndroid::Join(lldb::thread_result_t *result)
+{
+    Error error;
+    if (IsJoinable())
+    {
+        lldb::thread_result_t thread_result;
+        int err = ::pthread_join(m_thread, &thread_result);
+        error.SetError(err, lldb::eErrorTypePOSIX);
+    }
+    else
+        error.SetError(EINVAL, eErrorTypePOSIX);
+
+    Reset();
+    return error;
+}
+
+Error
+HostThreadAndroid::Detach()
+{
+    Error error;
+    int err = ::pthread_detach(m_thread);
+    error.SetError(err, eErrorTypePOSIX);
+    Reset();
+    return error;
+}
+
+Error
+HostThreadAndroid::Cancel()
+{
+    Error error;
+    error.SetErrorString("pthread_cancel() not supported on Android");
+    return error;
+}
+
+void
+HostThreadAndroid::SetName(lldb::thread_t thread, llvm::StringRef name)
+{
+    ::pthread_setname_np(thread, name.data());
+}
+
+void
+HostThreadAndroid::GetName(lldb::thread_t thread, llvm::SmallVectorImpl<char> &name)
+{
+    // Read /proc/$TID/comm file.
+    lldb::DataBufferSP buf_sp = ProcFileReader::ReadIntoDataBuffer(thread, "comm");
+    const char *comm_str = (const char *)buf_sp->GetBytes();
+    const char *cr_str = ::strchr(comm_str, '\n');
+    size_t length = cr_str ? (cr_str - comm_str) : strlen(comm_str);
+
+    name.clear();
+    name.append(comm_str, comm_str + length);
+}
Index: source/Host/android/ThisThread.cpp
===================================================================
--- /dev/null
+++ source/Host/android/ThisThread.cpp
@@ -0,0 +1,29 @@
+//===-- ThisThread.cpp ------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "lldb/Host/HostNativeThread.h"
+#include "lldb/Host/ThisThread.h"
+
+#include "llvm/ADT/SmallVector.h"
+
+#include <pthread.h>
+
+using namespace lldb_private;
+
+void
+ThisThread::SetName(llvm::StringRef name)
+{
+    HostNativeThread::SetName(::pthread_self(), name);
+}
+
+void
+ThisThread::GetName(llvm::SmallVectorImpl<char> &name)
+{
+    HostNativeThread::GetName(::pthread_self(), name);
+}
Index: source/Host/common/Host.cpp
===================================================================
--- source/Host/common/Host.cpp
+++ source/Host/common/Host.cpp
@@ -27,8 +27,8 @@
 #include <sys/stat.h>
 #endif
 
-#if !defined (__GNU__) && !defined (_WIN32)
-// Does not exist under GNU/HURD or Windows
+#if !defined (__GNU__) && !defined (_WIN32) && !defined (__ANDROID__)
+// Does not exist under GNU/HURD, or Windows, or Android
 #include <sys/sysctl.h>
 #endif
 
@@ -39,7 +39,9 @@
 #endif
 
 #if defined (__linux__) || defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined (__APPLE__) || defined(__NetBSD__)
+#ifndef __ANDROID__
 #include <spawn.h>
+#endif
 #include <sys/wait.h>
 #include <sys/syscall.h>
 #endif
@@ -127,6 +129,7 @@
     return ThreadLauncher::LaunchThread(thread_name, MonitorChildProcessThreadFunction, info_ptr, NULL);
 }
 
+#ifndef __ANDROID__
 //------------------------------------------------------------------
 // Scoped class that will disable thread canceling when it is
 // constructed, and exception safely restore the previous value it
@@ -154,6 +157,7 @@
 private:
     int m_old_state;    // Save the old cancelability state.
 };
+#endif
 
 static thread_result_t
 MonitorChildProcessThreadFunction (void *arg)
@@ -187,10 +191,14 @@
             log->Printf("%s ::wait_pid (pid = %" PRIi32 ", &status, options = %i)...", function, pid, options);
 
         // Wait for all child processes
+#ifndef __ANDROID__
         ::pthread_testcancel ();
+#endif
         // Get signals from all children with same process group of pid
         const ::pid_t wait_pid = ::waitpid (pid, &status, options);
+#ifndef __ANDROID__
         ::pthread_testcancel ();
+#endif
 
         if (wait_pid == -1)
         {
@@ -236,7 +244,9 @@
 
             // Scope for pthread_cancel_disabler
             {
+#ifndef __ANDROID__
                 ScopedPThreadCancelDisabler pthread_cancel_disabler;
+#endif
 
                 log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS);
                 if (log)
@@ -464,12 +474,16 @@
 Host::GetModuleFileSpecForHostAddress (const void *host_addr)
 {
     FileSpec module_filespec;
+#ifndef __ANDROID__
     Dl_info info;
     if (::dladdr (host_addr, &info))
     {
         if (info.dli_fname)
             module_filespec.SetFile(info.dli_fname, true);
     }
+#else
+    assert(false && "dladdr() not supported on Android");
+#endif
     return module_filespec;
 }
 
@@ -705,6 +719,7 @@
 short
 Host::GetPosixspawnFlags (ProcessLaunchInfo &launch_info)
 {
+#ifndef __ANDROID__
     short flags = POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK;
 
 #if defined (__APPLE__)
@@ -747,12 +762,17 @@
 #endif
 #endif // #if defined (__APPLE__)
     return flags;
+#else
+    assert(false *&& "Host::GetPosixspawnFlags() not supported on Android");
+    return 0;
+#endif
 }
 
 Error
 Host::LaunchProcessPosixSpawn (const char *exe_path, ProcessLaunchInfo &launch_info, ::pid_t &pid)
 {
     Error error;
+#ifndef __ANDROID__
     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_HOST | LIBLLDB_LOG_PROCESS));
 
     posix_spawnattr_t attr;
@@ -955,6 +975,9 @@
         }
 #endif
     }
+#else
+    error.SetErrorString("Host::LaunchProcessPosixSpawn() not supported on Android");
+#endif
 
     return error;
 }
@@ -962,6 +985,7 @@
 bool
 Host::AddPosixSpawnFileAction(void *_file_actions, const FileAction *info, Log *log, Error &error)
 {
+#ifndef __ANDROID__
     if (info == NULL)
         return false;
 
@@ -1024,6 +1048,10 @@
             break;
     }
     return error.Success();
+#else
+    error.SetErrorString("Host::AddPosixSpawnFileAction() not supported on Android");
+    return false;
+#endif
 }
 
 #endif // LaunchProcedssPosixSpawn: Apple, Linux, FreeBSD and other GLIBC systems
Index: source/Host/common/Socket.cpp
===================================================================
--- source/Host/common/Socket.cpp
+++ source/Host/common/Socket.cpp
@@ -40,6 +40,13 @@
 const NativeSocket Socket::kInvalidSocketValue = -1;
 #endif // #if defined(_WIN32)
 
+#ifdef __ANDROID__ 
+// Android does not have SUN_LEN
+#ifndef SUN_LEN
+#define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path) + strlen((ptr)->sun_path))
+#endif
+#endif // #ifdef __ANDROID__
+
 Socket::Socket(NativeSocket socket, SocketProtocol protocol, bool should_close)
     : IOObject(eFDTypeSocket, should_close)
     , m_protocol(protocol)
Index: source/Host/linux/Host.cpp
===================================================================
--- source/Host/linux/Host.cpp
+++ source/Host/linux/Host.cpp
@@ -14,7 +14,9 @@
 #include <sys/stat.h>
 #include <dirent.h>
 #include <fcntl.h>
+#ifndef __ANDROID__
 #include <execinfo.h>
+#endif
 
 // C++ Includes
 // Other libraries and framework includes
@@ -375,6 +377,7 @@
 void
 Host::Backtrace (Stream &strm, uint32_t max_frames)
 {
+#ifndef __ANDROID__
     if (max_frames > 0)
     {
         std::vector<void *> frame_buffer (max_frames, NULL);
@@ -388,6 +391,9 @@
             ::free (strs);
         }
     }
+#else
+    assert(false && "::backtrace() not supported on Android");
+#endif
 }
 
 size_t
Index: source/Interpreter/CommandInterpreter.cpp
===================================================================
--- source/Interpreter/CommandInterpreter.cpp
+++ source/Interpreter/CommandInterpreter.cpp
@@ -49,7 +49,9 @@
 #include "lldb/Core/StreamFile.h"
 #include "lldb/Core/Timer.h"
 
+#ifndef LLDB_DISABLE_LIBEDIT
 #include "lldb/Host/Editline.h"
+#endif
 #include "lldb/Host/Host.h"
 #include "lldb/Host/HostInfo.h"
 
Index: source/Plugins/Process/Linux/LinuxThread.h
===================================================================
--- source/Plugins/Process/Linux/LinuxThread.h
+++ source/Plugins/Process/Linux/LinuxThread.h
@@ -11,7 +11,7 @@
 #define liblldb_LinuxThread_H_
 
 // Other libraries and framework includes
-#include "POSIXThread.h"
+#include "Plugins/Process/POSIX/POSIXThread.h"
 
 //------------------------------------------------------------------------------
 // @class LinuxThread
Index: source/Plugins/Process/Linux/NativeProcessLinux.cpp
===================================================================
--- source/Plugins/Process/Linux/NativeProcessLinux.cpp
+++ source/Plugins/Process/Linux/NativeProcessLinux.cpp
@@ -19,7 +19,9 @@
 #include <unistd.h>
 #include <linux/unistd.h>
 #include <sys/personality.h>
+#ifndef __ANDROID__
 #include <sys/procfs.h>
+#endif
 #include <sys/ptrace.h>
 #include <sys/uio.h>
 #include <sys/socket.h>
@@ -58,7 +60,12 @@
 #include "Plugins/Process/Utility/LinuxSignals.h"
 #include "NativeThreadLinux.h"
 #include "ProcFileReader.h"
-#include "ProcessPOSIXLog.h"
+#include "Plugins/Process/POSIX/ProcessPOSIXLog.h"
+
+#ifdef __ANDROID__
+#define __ptrace_request int
+#define PT_DETACH PTRACE_DETACH
+#endif
 
 #define DEBUG_PTRACE_MAXBYTES 20
 
Index: source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.h
===================================================================
--- source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.h
+++ source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.h
@@ -12,8 +12,8 @@
 #define lldb_NativeRegisterContextLinux_x86_64_h
 
 #include "lldb/Target/NativeRegisterContextRegisterInfo.h"
-#include "RegisterContext_x86.h"
-#include "lldb-x86-register-enums.h"
+#include "Plugins/Process/Utility/RegisterContext_x86.h"
+#include "Plugins/Process/Utility/lldb-x86-register-enums.h"
 
 namespace lldb_private
 {
Index: source/Plugins/Process/Linux/ProcessLinux.cpp
===================================================================
--- source/Plugins/Process/Linux/ProcessLinux.cpp
+++ source/Plugins/Process/Linux/ProcessLinux.cpp
@@ -20,7 +20,7 @@
 #include "lldb/Target/Target.h"
 
 #include "ProcessLinux.h"
-#include "ProcessPOSIXLog.h"
+#include "Plugins/Process/POSIX/ProcessPOSIXLog.h"
 #include "Plugins/Process/Utility/InferiorCallPOSIX.h"
 #include "Plugins/Process/Utility/LinuxSignals.h"
 #include "ProcessMonitor.h"
Index: source/Plugins/Process/Linux/ProcessLinux.h
===================================================================
--- source/Plugins/Process/Linux/ProcessLinux.h
+++ source/Plugins/Process/Linux/ProcessLinux.h
@@ -17,8 +17,8 @@
 
 // Other libraries and framework includes
 #include "lldb/Target/Process.h"
-#include "ProcessMessage.h"
-#include "ProcessPOSIX.h"
+#include "Plugins/Process/POSIX/ProcessMessage.h"
+#include "Plugins/Process/POSIX/ProcessPOSIX.h"
 
 class ProcessMonitor;
 
Index: source/Plugins/Process/Linux/ProcessMonitor.cpp
===================================================================
--- source/Plugins/Process/Linux/ProcessMonitor.cpp
+++ source/Plugins/Process/Linux/ProcessMonitor.cpp
@@ -17,7 +17,9 @@
 #include <unistd.h>
 #include <elf.h>
 #include <sys/personality.h>
+#ifndef __ANDROID__
 #include <sys/procfs.h>
+#endif
 #include <sys/ptrace.h>
 #include <sys/uio.h>
 #include <sys/socket.h>
@@ -39,11 +41,16 @@
 #include "lldb/Target/RegisterContext.h"
 #include "lldb/Utility/PseudoTerminal.h"
 
-#include "POSIXThread.h"
+#include "Plugins/Process/POSIX/POSIXThread.h"
 #include "ProcessLinux.h"
-#include "ProcessPOSIXLog.h"
+#include "Plugins/Process/POSIX/ProcessPOSIXLog.h"
 #include "ProcessMonitor.h"
 
+#ifdef __ANDROID__
+#define __ptrace_request int
+#define PT_DETACH PTRACE_DETACH
+#endif
+
 #define DEBUG_PTRACE_MAXBYTES 20
 
 // Support ptrace extensions even when compiled without required kernel support
Index: source/Plugins/Process/POSIX/POSIXThread.cpp
===================================================================
--- source/Plugins/Process/POSIX/POSIXThread.cpp
+++ source/Plugins/Process/POSIX/POSIXThread.cpp
@@ -31,18 +31,17 @@
 #include "POSIXThread.h"
 #include "ProcessPOSIX.h"
 #include "ProcessPOSIXLog.h"
-#include "ProcessMonitor.h"
+#include "Plugins/Process/Linux/ProcessMonitor.h"
 #include "RegisterContextPOSIXProcessMonitor_arm64.h"
 #include "RegisterContextPOSIXProcessMonitor_mips64.h"
 #include "RegisterContextPOSIXProcessMonitor_x86.h"
-#include "RegisterContextLinux_arm64.h"
-#include "RegisterContextLinux_i386.h"
-#include "RegisterContextLinux_x86_64.h"
-#include "RegisterContextFreeBSD_i386.h"
-#include "RegisterContextFreeBSD_mips64.h"
-#include "RegisterContextFreeBSD_x86_64.h"
-
-#include "UnwindLLDB.h"
+#include "Plugins/Process/Utility/RegisterContextLinux_arm64.h"
+#include "Plugins/Process/Utility/RegisterContextLinux_i386.h"
+#include "Plugins/Process/Utility/RegisterContextLinux_x86_64.h"
+#include "Plugins/Process/Utility/RegisterContextFreeBSD_i386.h"
+#include "Plugins/Process/Utility/RegisterContextFreeBSD_mips64.h"
+#include "Plugins/Process/Utility/RegisterContextFreeBSD_x86_64.h"
+#include "Plugins/Process/Utility/UnwindLLDB.h"
 
 using namespace lldb;
 using namespace lldb_private;
Index: source/Plugins/Process/POSIX/POSIXThread.h
===================================================================
--- source/Plugins/Process/POSIX/POSIXThread.h
+++ source/Plugins/Process/POSIX/POSIXThread.h
@@ -17,7 +17,7 @@
 
 // Other libraries and framework includes
 #include "lldb/Target/Thread.h"
-#include "RegisterContextPOSIX.h"
+#include "Plugins/Process/Utility/RegisterContextPOSIX.h"
 
 class ProcessMessage;
 class ProcessMonitor;
Index: source/Plugins/Process/POSIX/ProcessPOSIX.cpp
===================================================================
--- source/Plugins/Process/POSIX/ProcessPOSIX.cpp
+++ source/Plugins/Process/POSIX/ProcessPOSIX.cpp
@@ -28,7 +28,7 @@
 #include "ProcessPOSIX.h"
 #include "ProcessPOSIXLog.h"
 #include "Plugins/Process/Utility/InferiorCallPOSIX.h"
-#include "ProcessMonitor.h"
+#include "Plugins/Process/Linux/ProcessMonitor.h"
 #include "POSIXThread.h"
 
 using namespace lldb;
Index: source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_arm64.cpp
===================================================================
--- source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_arm64.cpp
+++ source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_arm64.cpp
@@ -10,10 +10,10 @@
 #include "lldb/Target/Thread.h"
 #include "lldb/Core/RegisterValue.h"
 
-#include "RegisterContextPOSIX_arm64.h"
+#include "Plugins/Process/Utility/RegisterContextPOSIX_arm64.h"
 #include "ProcessPOSIX.h"
 #include "RegisterContextPOSIXProcessMonitor_arm64.h"
-#include "ProcessMonitor.h"
+#include "Plugins/Process/Linux/ProcessMonitor.h"
 
 #define REG_CONTEXT_SIZE (GetGPRSize())
 
Index: source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_mips64.cpp
===================================================================
--- source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_mips64.cpp
+++ source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_mips64.cpp
@@ -10,10 +10,10 @@
 #include "lldb/Target/Thread.h"
 #include "lldb/Core/RegisterValue.h"
 
-#include "RegisterContextPOSIX_mips64.h"
+#include "Plugins/Process/Utility/RegisterContextPOSIX_mips64.h"
 #include "ProcessPOSIX.h"
 #include "RegisterContextPOSIXProcessMonitor_mips64.h"
-#include "ProcessMonitor.h"
+#include "Plugins/Process/Linux/ProcessMonitor.h"
 
 using namespace lldb_private;
 using namespace lldb;
Index: source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_x86.cpp
===================================================================
--- source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_x86.cpp
+++ source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_x86.cpp
@@ -10,9 +10,9 @@
 #include "lldb/Target/Thread.h"
 #include "lldb/Core/RegisterValue.h"
 
-#include "ProcessPOSIX.h"
+#include "Plugins/Process/POSIX/ProcessPOSIX.h"
 #include "RegisterContextPOSIXProcessMonitor_x86.h"
-#include "ProcessMonitor.h"
+#include "Plugins/Process/Linux/ProcessMonitor.h"
 
 using namespace lldb_private;
 using namespace lldb;
@@ -48,6 +48,7 @@
         return (0x2 << 2) | rw;
     default:
         assert(0 && "invalid size, must be one of 1, 2, 4, or 8");
+        return 0;
     }
 }
 
Index: source/Plugins/Process/Utility/RegisterInfos_arm64.h
===================================================================
--- source/Plugins/Process/Utility/RegisterInfos_arm64.h
+++ source/Plugins/Process/Utility/RegisterInfos_arm64.h
@@ -15,8 +15,8 @@
 #include "lldb/lldb-defines.h"
 #include "lldb/lldb-enumerations.h"
 
-#include "ARM64_GCC_Registers.h"
-#include "ARM64_DWARF_Registers.h"
+#include "Utility/ARM64_GCC_Registers.h"
+#include "Utility/ARM64_DWARF_Registers.h"
 
 #ifndef GPR_OFFSET
 #error GPR_OFFSET must be defined before including this header file
Index: source/Plugins/Process/elf-core/RegisterContextPOSIXCore_mips64.cpp
===================================================================
--- source/Plugins/Process/elf-core/RegisterContextPOSIXCore_mips64.cpp
+++ source/Plugins/Process/elf-core/RegisterContextPOSIXCore_mips64.cpp
@@ -10,7 +10,7 @@
 #include "lldb/Core/DataExtractor.h"
 #include "lldb/Core/RegisterValue.h"
 #include "lldb/Target/Thread.h"
-#include "RegisterContextPOSIX.h"
+#include "Plugins/Process/Utility/RegisterContextPOSIX.h"
 #include "RegisterContextPOSIXCore_mips64.h"
 
 using namespace lldb_private;
Index: source/Plugins/Process/elf-core/RegisterContextPOSIXCore_x86_64.cpp
===================================================================
--- source/Plugins/Process/elf-core/RegisterContextPOSIXCore_x86_64.cpp
+++ source/Plugins/Process/elf-core/RegisterContextPOSIXCore_x86_64.cpp
@@ -10,7 +10,7 @@
 #include "lldb/Core/DataExtractor.h"
 #include "lldb/Core/RegisterValue.h"
 #include "lldb/Target/Thread.h"
-#include "RegisterContextPOSIX.h"
+#include "Plugins/Process/Utility/RegisterContextPOSIX.h"
 #include "RegisterContextPOSIXCore_x86_64.h"
 
 using namespace lldb_private;
Index: source/Plugins/Process/elf-core/ThreadElfCore.cpp
===================================================================
--- source/Plugins/Process/elf-core/ThreadElfCore.cpp
+++ source/Plugins/Process/elf-core/ThreadElfCore.cpp
@@ -16,10 +16,10 @@
 
 #include "ThreadElfCore.h"
 #include "ProcessElfCore.h"
-#include "RegisterContextLinux_x86_64.h"
-#include "RegisterContextFreeBSD_i386.h"
-#include "RegisterContextFreeBSD_mips64.h"
-#include "RegisterContextFreeBSD_x86_64.h"
+#include "Plugins/Process/Utility/RegisterContextLinux_x86_64.h"
+#include "Plugins/Process/Utility/RegisterContextFreeBSD_i386.h"
+#include "Plugins/Process/Utility/RegisterContextFreeBSD_mips64.h"
+#include "Plugins/Process/Utility/RegisterContextFreeBSD_x86_64.h"
 #include "RegisterContextPOSIXCore_mips64.h"
 #include "RegisterContextPOSIXCore_x86_64.h"
 
Index: source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
===================================================================
--- source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
+++ source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
@@ -14,7 +14,6 @@
 #include <errno.h>
 #include <stdlib.h>
 #ifndef LLDB_DISABLE_POSIX
-#include <spawn.h>
 #include <netinet/in.h>
 #include <sys/mman.h>       // for mmap
 #endif
Index: source/Target/ProcessLaunchInfo.cpp
===================================================================
--- source/Target/ProcessLaunchInfo.cpp
+++ source/Target/ProcessLaunchInfo.cpp
@@ -9,10 +9,6 @@
 
 #include "lldb/Host/Config.h"
 
-#ifndef LLDB_DISABLE_POSIX
-#include <spawn.h>
-#endif
-
 #include "lldb/Target/ProcessLaunchInfo.h"
 #include "lldb/Target/FileAction.h"
 #include "lldb/Target/Target.h"
Index: source/Target/Thread.cpp
===================================================================
--- source/Target/Thread.cpp
+++ source/Target/Thread.cpp
@@ -43,7 +43,7 @@
 #include "lldb/Target/ThreadSpec.h"
 #include "lldb/Target/Unwind.h"
 #include "Plugins/Process/Utility/UnwindLLDB.h"
-#include "UnwindMacOSXFrameBackchain.h"
+#include "Plugins/Process/Utility/UnwindMacOSXFrameBackchain.h"
 
 
 using namespace lldb;
Index: tools/lldb-gdbserver/lldb-gdbserver.cpp
===================================================================
--- tools/lldb-gdbserver/lldb-gdbserver.cpp
+++ tools/lldb-gdbserver/lldb-gdbserver.cpp
@@ -7,7 +7,9 @@
 //
 //===----------------------------------------------------------------------===//
 
+#ifndef LLDB_DISABLE_PYTHON
 #include "lldb/lldb-python.h"
+#endif
 
 // C Includes
 #include <errno.h>
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

Reply via email to