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