LLGS Android target support - for Andy Chien : http://reviews.llvm.org/D6166

llvm-svn: 221570
This commit is contained in:
Shawn Best 2014-11-08 01:41:49 +00:00
parent ed98258482
commit 8da0bf3b7c
24 changed files with 143 additions and 220 deletions

View File

@ -7,9 +7,15 @@ if ( CMAKE_SYSTEM_NAME MATCHES "Windows" )
set(LLDB_DEFAULT_ENABLE_PYTHON_SCRIPTS_SWIG_API_GENERATION 1)
endif()
else()
set(LLDB_DEFAULT_DISABLE_PYTHON 0)
set(LLDB_DEFAULT_DISABLE_CURSES 0)
set(LLDB_DEFAULT_ENABLE_PYTHON_SCRIPTS_SWIG_API_GENERATION 0)
if ( __ANDROID_NDK__ )
set(LLDB_DEFAULT_DISABLE_PYTHON 1)
set(LLDB_DEFAULT_DISABLE_CURSES 1)
set(LLDB_DEFAULT_ENABLE_PYTHON_SCRIPTS_SWIG_API_GENERATION 0)
else()
set(LLDB_DEFAULT_DISABLE_PYTHON 0)
set(LLDB_DEFAULT_DISABLE_CURSES 0)
set(LLDB_DEFAULT_ENABLE_PYTHON_SCRIPTS_SWIG_API_GENERATION 0)
endif()
endif()
set(LLDB_DISABLE_PYTHON ${LLDB_DEFAULT_DISABLE_PYTHON} CACHE BOOL
"Disables the Python scripting integration.")
@ -115,8 +121,14 @@ macro(add_lldb_definitions)
endmacro(add_lldb_definitions)
if (NOT LLDB_DISABLE_PYTHON)
find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
if(UNIX)
# This is necessary for crosscompile on Ubuntu 14.04 64bit. Need a proper fix.
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu")
endif()
endif()
find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
endif()
include_directories(../clang/include)

View File

@ -39,6 +39,9 @@ inline void regfree(llvm_regex_t * a)
}
#else
#if __ANDROID_NDK__
#include <regex>
#endif
#include <regex.h>
#endif
#include <stdint.h>

View File

@ -14,6 +14,10 @@
#include "lldb/Host/macosx/Config.h"
#elif defined(__ANDROID_NDK__)
#include "lldb/Host/android/Config.h"
#elif defined(__linux__) || defined(__GNU__)
#include "lldb/Host/linux/Config.h"

View File

@ -14,11 +14,13 @@
#include "lldb/lldb-private.h"
#include <stdio.h>
#ifdef _WIN32
#if defined(_WIN32)
#include "lldb/Host/windows/editlinewin.h"
#else
#if !defined(__ANDROID_NDK__)
#include <histedit.h>
#endif
#endif
#include <string>
#include <vector>

View File

@ -16,6 +16,10 @@
#include "lldb/Host/windows/win32.h"
#endif
#ifdef __ANDROID_NDK__
#include "lldb/Host/android/Android.h"
#endif
#include "lldb/lldb-public.h"
#include "lldb/lldb-private-enumerations.h"
#include "lldb/lldb-private-interfaces.h"

View File

@ -1,4 +1,4 @@
# build the Python readline suppression module only on Linux
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
if (CMAKE_SYSTEM_NAME MATCHES "Linux" AND NOT __ANDROID_NDK__)
add_subdirectory(readline)
endif()

View File

@ -31,182 +31,8 @@ add_subdirectory(Symbol)
add_subdirectory(Target)
add_subdirectory(Utility)
set( LLDB_USED_LIBS
lldbBreakpoint
lldbCommands
lldbDataFormatters
lldbHost
lldbCore
lldbExpression
lldbInterpreter
lldbSymbol
lldbTarget
lldbUtility
include(../cmake/LLDBDependencies.cmake)
# Plugins
lldbPluginDisassemblerLLVM
lldbPluginSymbolFileDWARF
lldbPluginSymbolFileSymtab
lldbPluginDynamicLoaderStatic
lldbPluginDynamicLoaderPosixDYLD
lldbPluginDynamicLoaderHexagonDYLD
lldbPluginObjectFileMachO
lldbPluginObjectFileELF
lldbPluginObjectFileJIT
lldbPluginSymbolVendorELF
lldbPluginObjectContainerBSDArchive
lldbPluginObjectContainerMachOArchive
lldbPluginProcessGDBRemote
lldbPluginProcessMachCore
lldbPluginProcessUtility
lldbPluginPlatformGDB
lldbPluginPlatformFreeBSD
lldbPluginPlatformKalimba
lldbPluginPlatformLinux
lldbPluginPlatformPOSIX
lldbPluginPlatformWindows
lldbPluginObjectFileMachO
lldbPluginObjectContainerMachOArchive
lldbPluginObjectContainerBSDArchive
lldbPluginPlatformMacOSX
lldbPluginDynamicLoaderMacOSXDYLD
lldbPluginUnwindAssemblyInstEmulation
lldbPluginUnwindAssemblyX86
lldbPluginAppleObjCRuntime
lldbPluginCXXItaniumABI
lldbPluginABIMacOSX_arm
lldbPluginABIMacOSX_arm64
lldbPluginABIMacOSX_i386
lldbPluginABISysV_x86_64
lldbPluginABISysV_hexagon
lldbPluginABISysV_ppc
lldbPluginABISysV_ppc64
lldbPluginInstructionARM
lldbPluginInstructionARM64
lldbPluginObjectFilePECOFF
lldbPluginOSPython
lldbPluginMemoryHistoryASan
lldbPluginInstrumentationRuntimeAddressSanitizer
)
# Need to export the API in the liblldb.dll for Windows
# The lldbAPI source files are added directly in liblldb
if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows" )
list(APPEND LLDB_USED_LIBS
lldbAPI
)
endif ()
# Windows-only libraries
if ( CMAKE_SYSTEM_NAME MATCHES "Windows" )
list(APPEND LLDB_USED_LIBS
lldbPluginProcessWindows
lldbPluginProcessElfCore
lldbPluginJITLoaderGDB
Ws2_32
)
endif ()
# Linux-only libraries
if ( CMAKE_SYSTEM_NAME MATCHES "Linux" )
list(APPEND LLDB_USED_LIBS
lldbPluginProcessLinux
lldbPluginProcessPOSIX
lldbPluginProcessElfCore
lldbPluginJITLoaderGDB
)
endif ()
# FreeBSD-only libraries
if ( CMAKE_SYSTEM_NAME MATCHES "FreeBSD" )
list(APPEND LLDB_USED_LIBS
lldbPluginProcessFreeBSD
lldbPluginProcessPOSIX
lldbPluginProcessElfCore
lldbPluginJITLoaderGDB
)
endif ()
# Darwin-only libraries
if ( CMAKE_SYSTEM_NAME MATCHES "Darwin" )
set(LLDB_VERS_GENERATED_FILE ${LLDB_BINARY_DIR}/source/LLDB_vers.c)
add_custom_command(OUTPUT ${LLDB_VERS_GENERATED_FILE}
COMMAND ${LLDB_SOURCE_DIR}/scripts/generate-vers.pl
${LLDB_SOURCE_DIR}/lldb.xcodeproj/project.pbxproj liblldb_core
> ${LLDB_VERS_GENERATED_FILE})
set_source_files_properties(${LLDB_VERS_GENERATED_FILE} PROPERTIES GENERATED 1)
list(APPEND LLDB_USED_LIBS
lldbPluginDynamicLoaderDarwinKernel
lldbPluginProcessMacOSXKernel
lldbPluginSymbolVendorMacOSX
lldbPluginSystemRuntimeMacOSX
lldbPluginProcessElfCore
lldbPluginJITLoaderGDB
)
endif()
set( CLANG_USED_LIBS
clangAnalysis
clangAST
clangBasic
clangCodeGen
clangDriver
clangEdit
clangFrontend
clangLex
clangParse
clangRewrite
clangRewriteFrontend
clangSema
clangSerialization
)
set(LLDB_SYSTEM_LIBS)
if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
list(APPEND LLDB_SYSTEM_LIBS edit panel ncurses)
endif()
# On FreeBSD backtrace() is provided by libexecinfo, not libc.
if (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
list(APPEND LLDB_SYSTEM_LIBS execinfo)
endif()
if (NOT LLDB_DISABLE_PYTHON)
list(APPEND LLDB_SYSTEM_LIBS ${PYTHON_LIBRARIES})
endif()
list(APPEND LLDB_SYSTEM_LIBS ${system_libs})
set( LLVM_LINK_COMPONENTS
${LLVM_TARGETS_TO_BUILD}
interpreter
asmparser
bitreader
bitwriter
codegen
ipo
selectiondag
bitreader
mc
mcjit
core
mcdisassembler
executionengine
option
)
if ( NOT LLDB_DISABLE_PYTHON )
set(LLDB_WRAP_PYTHON ${LLDB_BINARY_DIR}/scripts/LLDBWrapPython.cpp)
set_source_files_properties(${LLDB_WRAP_PYTHON} PROPERTIES GENERATED 1)
if (LLVM_COMPILER_IS_GCC_COMPATIBLE AND
NOT "${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
set_property(SOURCE ${LLDB_WRAP_PYTHON}
APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-sequence-point")
endif ()
endif()
set(SHARED_LIBRARY 1)
if ( CMAKE_SYSTEM_NAME MATCHES "Windows" )

View File

@ -6,6 +6,7 @@
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef __ANDROID_NDK__
#include "lldb/Core/ConnectionSharedMemory.h"
@ -156,3 +157,4 @@ ConnectionSharedMemory::Open (bool create, const char *name, size_t size, Error
return eConnectionStatusError;
}
#endif // __ANDROID_NDK__

View File

@ -27,6 +27,9 @@
#include "lldb/Utility/ProcessStructReader.h"
#include <algorithm>
#if __ANDROID_NDK__
#include <sys/types.h>
#endif
using namespace lldb;
using namespace lldb_private;

View File

@ -5,7 +5,6 @@ endmacro()
add_host_subdirectory(common
common/Condition.cpp
common/Editline.cpp
common/File.cpp
common/FileCache.cpp
common/FileSpec.cpp
@ -33,6 +32,12 @@ add_host_subdirectory(common
common/TimeValue.cpp
)
if (NOT __ANDROID_NDK__)
add_host_subdirectory(common
common/Editline.cpp
)
endif()
add_host_subdirectory(posix
posix/ConnectionFileDescriptorPosix.cpp
)
@ -81,12 +86,21 @@ else()
)
elseif (CMAKE_SYSTEM_NAME MATCHES "Linux")
add_host_subdirectory(linux
linux/Host.cpp
linux/HostInfoLinux.cpp
linux/HostThreadLinux.cpp
linux/ThisThread.cpp
)
if (__ANDROID_NDK__)
add_host_subdirectory(android
linux/Host.cpp
linux/HostInfoLinux.cpp
linux/HostThreadLinux.cpp
linux/ThisThread.cpp
)
else()
add_host_subdirectory(linux
linux/Host.cpp
linux/HostInfoLinux.cpp
linux/HostThreadLinux.cpp
linux/ThisThread.cpp
)
endif()
elseif (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
add_host_subdirectory(freebsd
freebsd/Host.cpp

View File

@ -896,7 +896,7 @@ File::CalculateInteractiveAndTerminal ()
{
m_is_interactive = eLazyBoolNo;
m_is_real_terminal = eLazyBoolNo;
#ifdef _WIN32
#if (defined(_WIN32) || defined(__ANDROID_NDK__))
if (_isatty(fd))
{
m_is_interactive = eLazyBoolYes;

View File

@ -30,7 +30,7 @@
#endif
#if defined (__linux__) || defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined (__APPLE__) || defined(__NetBSD__)
#ifndef __ANDROID__
#if !defined(__ANDROID__) && !defined(__ANDROID_NDK__)
#include <spawn.h>
#endif
#include <sys/wait.h>
@ -111,7 +111,7 @@ Host::StartMonitoringChildProcess(Host::MonitorChildProcessCallback callback, vo
return ThreadLauncher::LaunchThread(thread_name, MonitorChildProcessThreadFunction, info_ptr, NULL);
}
#ifndef __ANDROID__
#if !defined(__ANDROID__) && !defined(__ANDROID_NDK__)
//------------------------------------------------------------------
// Scoped class that will disable thread canceling when it is
// constructed, and exception safely restore the previous value it
@ -126,7 +126,6 @@ public:
int err = ::pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &m_old_state);
if (err != 0)
m_old_state = -1;
}
~ScopedPThreadCancelDisabler()
@ -139,7 +138,7 @@ public:
private:
int m_old_state; // Save the old cancelability state.
};
#endif
#endif // __ANDROID_NDK__
static thread_result_t
MonitorChildProcessThreadFunction (void *arg)
@ -173,15 +172,14 @@ MonitorChildProcessThreadFunction (void *arg)
log->Printf("%s ::wait_pid (pid = %" PRIi32 ", &status, options = %i)...", function, pid, options);
// Wait for all child processes
#ifndef __ANDROID__
#if !defined(__ANDROID__) && !defined(__ANDROID_NDK__)
::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__
#if !defined(__ANDROID__) && !defined(__ANDROID_NDK__)
::pthread_testcancel ();
#endif
if (wait_pid == -1)
{
if (errno == EINTR)
@ -226,7 +224,7 @@ MonitorChildProcessThreadFunction (void *arg)
// Scope for pthread_cancel_disabler
{
#ifndef __ANDROID__
#if !defined(__ANDROID__) && !defined(__ANDROID_NDK__)
ScopedPThreadCancelDisabler pthread_cancel_disabler;
#endif
@ -316,6 +314,8 @@ Host::GetCurrentThreadID()
return thread_self;
#elif defined(__FreeBSD__)
return lldb::tid_t(pthread_getthreadid_np());
#elif defined(__ANDROID_NDK__)
return lldb::tid_t(gettid());
#elif defined(__linux__)
return lldb::tid_t(syscall(SYS_gettid));
#else
@ -456,7 +456,7 @@ FileSpec
Host::GetModuleFileSpecForHostAddress (const void *host_addr)
{
FileSpec module_filespec;
#ifndef __ANDROID__
#if !defined(__ANDROID__) && !defined(__ANDROID_NDK__)
Dl_info info;
if (::dladdr (host_addr, &info))
{
@ -694,14 +694,13 @@ Host::RunShellCommand (const char *command,
// systems
#if defined (__APPLE__) || defined (__linux__) || defined (__FreeBSD__) || defined (__GLIBC__) || defined(__NetBSD__)
// this method needs to be visible to macosx/Host.cpp and
// common/Host.cpp.
short
Host::GetPosixspawnFlags(const ProcessLaunchInfo &launch_info)
{
#ifndef __ANDROID__
#if !defined(__ANDROID__) && !defined(__ANDROID_NDK__)
short flags = POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK;
#if defined (__APPLE__)
@ -745,7 +744,7 @@ Host::GetPosixspawnFlags(const ProcessLaunchInfo &launch_info)
#endif // #if defined (__APPLE__)
return flags;
#else
assert(false *&& "Host::GetPosixspawnFlags() not supported on Android");
assert(false && "Host::GetPosixspawnFlags() not supported on Android");
return 0;
#endif
}
@ -754,7 +753,7 @@ Error
Host::LaunchProcessPosixSpawn(const char *exe_path, const ProcessLaunchInfo &launch_info, lldb::pid_t &pid)
{
Error error;
#ifndef __ANDROID__
#if !defined(__ANDROID__) && !defined(__ANDROID_NDK__)
Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_HOST | LIBLLDB_LOG_PROCESS));
posix_spawnattr_t attr;
@ -954,7 +953,7 @@ Host::LaunchProcessPosixSpawn(const char *exe_path, const ProcessLaunchInfo &lau
bool
Host::AddPosixSpawnFileAction(void *_file_actions, const FileAction *info, Log *log, Error &error)
{
#ifndef __ANDROID__
#if !defined(__ANDROID__) && !defined(__ANDROID_NDK__)
if (info == NULL)
return false;
@ -1022,7 +1021,6 @@ Host::AddPosixSpawnFileAction(void *_file_actions, const FileAction *info, Log *
return false;
#endif
}
#endif // LaunchProcedssPosixSpawn: Apple, Linux, FreeBSD and other GLIBC systems
#if defined(__linux__) || defined(__FreeBSD__) || defined(__GLIBC__) || defined(__NetBSD__) || defined(_WIN32)
@ -1049,11 +1047,9 @@ Host::LaunchProcess (ProcessLaunchInfo &launch_info)
return error;
}
#endif // defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__)
#ifndef _WIN32
void
Host::Kill(lldb::pid_t pid, int signo)
{

View File

@ -18,6 +18,14 @@
#include "lldb/Host/TimeValue.h"
#include "lldb/Interpreter/Args.h"
#ifdef __ANDROID_NDK__
#include <linux/tcp.h>
#include <bits/error_constants.h>
#include <asm-generic/errno-base.h>
#include <errno.h>
#include <arpa/inet.h>
#endif
#ifndef LLDB_DISABLE_POSIX
#include <arpa/inet.h>
#include <netdb.h>

View File

@ -26,6 +26,9 @@
#include "lldb/Target/Process.h"
#include "lldb/Host/Host.h"
#ifdef __ANDROID_NDK__
#include "lldb/Host/android/Android.h"
#endif
#include "lldb/Core/DataBufferHeap.h"
#include "lldb/Core/DataExtractor.h"

View File

@ -9,7 +9,7 @@
#include "ObjectContainerBSDArchive.h"
#ifdef _WIN32
#if defined(_WIN32) || defined(__ANDROID_NDK__)
// Defines from ar, missing on Windows
#define ARMAG "!<arch>\n"
#define SARMAG 8

View File

@ -820,7 +820,7 @@ PlatformLinux::LaunchNativeProcess (
lldb_private::NativeProcessProtocol::NativeDelegate &native_delegate,
NativeProcessProtocolSP &process_sp)
{
#if !defined(__linux__)
#if !defined(__linux__) || defined(__ANDROID_NDK__)
return Error("only implemented on Linux hosts");
#else
if (!IsHost ())
@ -857,7 +857,7 @@ PlatformLinux::AttachNativeProcess (lldb::pid_t pid,
lldb_private::NativeProcessProtocol::NativeDelegate &native_delegate,
NativeProcessProtocolSP &process_sp)
{
#if !defined(__linux__)
#if !defined(__linux__) || defined(__ANDROID_NDK__)
return Error("only implemented on Linux hosts");
#else
if (!IsHost ())

View File

@ -18,7 +18,13 @@
#include <stdint.h>
#include <unistd.h>
#include <linux/unistd.h>
#if defined(__ANDROID_NDK__) && defined (__arm__)
#include <linux/personality.h>
#include <linux/user.h>
#else
#include <sys/personality.h>
#include <sys/user.h>
#endif
#ifndef __ANDROID__
#include <sys/procfs.h>
#endif
@ -27,7 +33,6 @@
#include <sys/socket.h>
#include <sys/syscall.h>
#include <sys/types.h>
#include <sys/user.h>
#include <sys/wait.h>
#if defined (__arm64__) || defined (__aarch64__)

View File

@ -16,7 +16,13 @@
#include <stdint.h>
#include <unistd.h>
#include <elf.h>
#if defined(__ANDROID_NDK__) && defined (__arm__)
#include <linux/personality.h>
#include <linux/user.h>
#else
#include <sys/personality.h>
#include <sys/user.h>
#endif
#ifndef __ANDROID__
#include <sys/procfs.h>
#endif
@ -25,7 +31,6 @@
#include <sys/socket.h>
#include <sys/syscall.h>
#include <sys/types.h>
#include <sys/user.h>
#include <sys/wait.h>
// C++ Includes

View File

@ -150,7 +150,7 @@ RegisterContextMacOSXFrameBackchain::ReadRegister (const RegisterInfo *reg_info,
// TOOD: need a better way to detect when "long double" types are
// the same bytes size as "double"
#if !defined(__arm__) && !defined(__arm64__) && !defined(__aarch64__) && !defined(_MSC_VER) && \
!defined(__mips__) && !defined(__powerpc__)
!defined(__mips__) && !defined(__powerpc__) && !defined(__ANDROID_NDK__)
case sizeof (long double):
if (sizeof (long double) == sizeof(uint32_t))
{

View File

@ -31,6 +31,8 @@ char *ptsname(int fd) { return 0; }
pid_t fork(void) { return 0; }
pid_t setsid(void) { return 0; }
#elif defined(__ANDROID_NDK__)
#include "lldb/Host/android/Android.h"
#endif
using namespace lldb_utility;

View File

@ -2,7 +2,9 @@ if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
add_subdirectory(debugserver)
endif()
add_subdirectory(driver)
if (NOT __ANDROID_NDK__)
add_subdirectory(lldb-mi)
endif()
if (CMAKE_SYSTEM_NAME MATCHES "FreeBSD" OR CMAKE_SYSTEM_NAME MATCHES "Linux")
add_subdirectory(lldb-gdbserver)
endif()

View File

@ -19,6 +19,8 @@
#if defined(_WIN32)
#include <io.h>
#include <fcntl.h>
#elif defined(__ANDROID_NDK__)
#include <errno.h>
#else
#include <unistd.h>
#endif

View File

@ -101,15 +101,17 @@
#include <termios.h>
#include <unistd.h>
#include <histedit.h>
#include <pthread.h>
#include <sys/time.h>
#if defined(__FreeBSD__) || defined(__NetBSD__)
#include <readline/readline.h>
#else
#include <editline/readline.h>
#endif
#if !defined(__ANDROID_NDK__)
#include <histedit.h>
#if defined(__FreeBSD__) || defined(__NetBSD__)
#include <readline/readline.h>
#else
#include <editline/readline.h>
#endif
#endif
#endif

View File

@ -1,12 +1,40 @@
set(LLVM_NO_RTTI 1)
if ( CMAKE_SYSTEM_NAME MATCHES "Linux" )
include_directories(
../../source/Plugins/Process/Linux
../../source/Plugins/Process/POSIX
)
endif ()
if ( CMAKE_SYSTEM_NAME MATCHES "FreeBSD" )
include_directories(
../../source/Plugins/Process/FreeBSD
../../source/Plugins/Process/POSIX
)
endif ()
include_directories(../../source)
include(../../cmake/LLDBDependencies.cmake)
# have to include lldb and lldb-log files since those are not libraries and llgs depends on them
add_lldb_executable(lldb-gdbserver
lldb-gdbserver.cpp
../../source/lldb-log.cpp
../../source/lldb.cpp
)
target_link_libraries(lldb-gdbserver liblldb)
# The Darwin linker doesn't understand --start-group/--end-group.
if (LLVM_COMPILER_IS_GCC_COMPATIBLE AND NOT "${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
target_link_libraries(lldb-gdbserver
-Wl,--start-group ${LLDB_USED_LIBS} -Wl,--end-group)
else()
target_link_libraries(lldb-gdbserver ${LLDB_USED_LIBS})
endif()
target_link_libraries(lldb-gdbserver ${CLANG_USED_LIBS})
llvm_config(lldb-gdbserver ${LLVM_LINK_COMPONENTS})
target_link_libraries(lldb-gdbserver ${LLDB_SYSTEM_LIBS})
set_target_properties(lldb-gdbserver PROPERTIES VERSION ${LLDB_VERSION})