Enable llgs to build against experimental Android AOSP lldb/llvm/clang/compiler-rt repos.

See http://reviews.llvm.org/D5495 for more details.

These are changes that are part of an effort to support building llgs, within the AOSP source tree, using the Android.mk
build system, when using the llvm/clang/lldb git repos from AOSP replaced with the experimental ones currently in
github.com/tfiala/aosp-{llvm,clang,lldb,compiler-rt}.

llvm-svn: 218568
This commit is contained in:
Todd Fiala 2014-09-27 16:54:22 +00:00
parent 7b4133ac81
commit cacde7df6d
29 changed files with 153 additions and 47 deletions

View File

@ -457,6 +457,7 @@ namespace lldb_private {
SetBaseLineNumber (uint32_t line);
private:
#ifndef LLDB_DISABLE_LIBEDIT
static LineStatus
LineCompletedCallback (Editline *editline,
StringList &lines,
@ -471,9 +472,12 @@ namespace lldb_private {
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

View File

@ -19,7 +19,9 @@
#define LLDB_CONFIG_TERMIOS_SUPPORTED 1
#ifndef __ANDROID__
#define LLDB_CONFIG_TILDE_RESOLVES_TO_USER 1
#endif
//#define LLDB_CONFIG_DLOPEN_RTLD_FIRST_SUPPORTED 1

View File

@ -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 @@ IOHandlerEditline::IOHandlerEditline (Debugger &debugger,
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 @@ IOHandlerEditline::IOHandlerEditline (Debugger &debugger,
{
SetPrompt(prompt);
#ifndef LLDB_DISABLE_LIBEDIT
bool use_editline = false;
#ifndef _MSC_VER
@ -369,24 +374,28 @@ IOHandlerEditline::IOHandlerEditline (Debugger &debugger,
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 @@ IOHandlerEditline::GetLine (std::string &line, bool &interrupted)
SetIsDone(true);
}
return false;
#ifndef LLDB_DISABLE_LIBEDIT
}
#endif
}
#ifndef LLDB_DISABLE_LIBEDIT
LineStatus
IOHandlerEditline::LineCompletedCallback (Editline *editline,
StringList &lines,
@ -487,14 +499,24 @@ IOHandlerEditline::AutoCompleteCallback (const char *current_line,
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 @@ IOHandlerEditline::SetPrompt (const char *p)
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 @@ void
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 @@ IOHandlerEditline::GetLines (StringList &lines, bool &interrupted)
}
else
{
#endif
LineStatus lines_status = LineStatus::Success;
Error error;
@ -567,7 +595,9 @@ IOHandlerEditline::GetLines (StringList &lines, bool &interrupted)
m_delegate.IOHandlerLinesUpdated(*this, lines, UINT32_MAX, error);
success = lines.GetSize() > 0;
#ifndef LLDB_DISABLE_LIBEDIT
}
#endif
return success;
}
@ -619,20 +649,24 @@ IOHandlerEditline::Run ()
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 @@ IOHandlerEditline::Refresh ()
::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 @@ IOHandlerEditline::Interrupt ()
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

View File

@ -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 @@ Host::StartMonitoringChildProcess(Host::MonitorChildProcessCallback callback, vo
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 @@ public:
private:
int m_old_state; // Save the old cancelability state.
};
#endif
static thread_result_t
MonitorChildProcessThreadFunction (void *arg)
@ -187,10 +191,14 @@ MonitorChildProcessThreadFunction (void *arg)
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 @@ MonitorChildProcessThreadFunction (void *arg)
// 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 @@ FileSpec
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 @@ Host::RunShellCommand (const char *command,
short
Host::GetPosixspawnFlags (ProcessLaunchInfo &launch_info)
{
#ifndef __ANDROID__
short flags = POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK;
#if defined (__APPLE__)
@ -747,12 +762,17 @@ Host::GetPosixspawnFlags (ProcessLaunchInfo &launch_info)
#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 @@ Host::LaunchProcessPosixSpawn (const char *exe_path, ProcessLaunchInfo &launch_i
}
#endif
}
#else
error.SetErrorString("Host::LaunchProcessPosixSpawn() not supported on Android");
#endif
return error;
}
@ -962,6 +985,7 @@ Host::LaunchProcessPosixSpawn (const char *exe_path, ProcessLaunchInfo &launch_i
bool
Host::AddPosixSpawnFileAction(void *_file_actions, const FileAction *info, Log *log, Error &error)
{
#ifndef __ANDROID__
if (info == NULL)
return false;
@ -1024,6 +1048,10 @@ Host::AddPosixSpawnFileAction(void *_file_actions, const FileAction *info, Log *
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

View File

@ -40,6 +40,13 @@ typedef void * get_socket_option_arg_type;
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)

View File

@ -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 @@ Host::GetProcessInfo (lldb::pid_t pid, ProcessInstanceInfo &process_info)
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 @@ Host::Backtrace (Stream &strm, uint32_t max_frames)
::free (strs);
}
}
#else
assert(false && "::backtrace() not supported on Android");
#endif
}
size_t

View File

@ -69,6 +69,7 @@ HostInfoPosix::LookupUserName(uint32_t uid, std::string &user_name)
const char *
HostInfoPosix::LookupGroupName(uint32_t gid, std::string &group_name)
{
#ifndef __ANDROID__
char group_buffer[PATH_MAX];
size_t group_buffer_size = sizeof(group_buffer);
struct group group_info;
@ -94,6 +95,9 @@ HostInfoPosix::LookupGroupName(uint32_t gid, std::string &group_name)
}
}
group_name.clear();
#else
assert(false && "getgrgid_r() not supported on Android");
#endif
return NULL;
}

View File

@ -50,8 +50,12 @@ Error
HostThreadPosix::Cancel()
{
Error error;
#ifndef __ANDROID__
int err = ::pthread_cancel(m_thread);
error.SetError(err, eErrorTypePOSIX);
#else
error.SetErrorString("HostThreadPosix::Cancel() not supported on Android");
#endif
return error;
}

View File

@ -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"

View File

@ -11,7 +11,7 @@
#define liblldb_LinuxThread_H_
// Other libraries and framework includes
#include "POSIXThread.h"
#include "Plugins/Process/POSIX/POSIXThread.h"
//------------------------------------------------------------------------------
// @class LinuxThread

View File

@ -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

View File

@ -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
{

View File

@ -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"

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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())

View File

@ -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;

View File

@ -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 @@ size_and_rw_bits(size_t size, bool read, bool write)
return (0x2 << 2) | rw;
default:
assert(0 && "invalid size, must be one of 1, 2, 4, or 8");
return 0; // Unreachable. Just to silence compiler.
}
}

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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"

View File

@ -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

View File

@ -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"

View File

@ -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;

View File

@ -7,8 +7,6 @@
//
//===----------------------------------------------------------------------===//
#include "lldb/lldb-python.h"
// C Includes
#include <errno.h>
#include <getopt.h>