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 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 &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 &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 +#include +#include +#include + +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 &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 + +using namespace lldb_private; + +void +ThisThread::SetName(llvm::StringRef name) +{ + HostNativeThread::SetName(::pthread_self(), name); +} + +void +ThisThread::GetName(llvm::SmallVectorImpl &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 #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 #endif @@ -39,7 +39,9 @@ #endif #if defined (__linux__) || defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined (__APPLE__) || defined(__NetBSD__) +#ifndef __ANDROID__ #include +#endif #include #include #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 #include #include +#ifndef __ANDROID__ #include +#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 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 #include #include +#ifndef __ANDROID__ #include +#endif #include #include #include @@ -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.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/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/ProcessMonitor.cpp =================================================================== --- source/Plugins/Process/Linux/ProcessMonitor.cpp +++ source/Plugins/Process/Linux/ProcessMonitor.cpp @@ -17,7 +17,9 @@ #include #include #include +#ifndef __ANDROID__ #include +#endif #include #include #include @@ -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.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/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/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 #include #ifndef LLDB_DISABLE_POSIX -#include #include #include // 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 -#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