Author: asmith Date: Tue Aug 13 16:50:54 2019 New Revision: 368774 URL: http://llvm.org/viewvc/llvm-project?rev=368774&view=rev Log: Enable lldb-server on Windows
Summary: This commit contains three small changes to enable lldb-server on Windows. - Add lldb-server for Windows to the build - Disable pty redirection on Windows for the initial lldb-server bring up - Add a support to get the parent pid for a process on Windows - Ifdef some signals which aren't supported on Windows Thanks to Hui Huang for the help with this patch! Reviewers: labath Reviewed By: labath Subscribers: JDevlieghere, compnerd, Hui, amccarth, xiaobai, srhines, mgorny, lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D61686 Modified: lldb/trunk/cmake/modules/LLDBConfig.cmake lldb/trunk/source/Host/windows/Host.cpp lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp lldb/trunk/tools/lldb-server/lldb-gdbserver.cpp lldb/trunk/tools/lldb-server/lldb-platform.cpp Modified: lldb/trunk/cmake/modules/LLDBConfig.cmake URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/cmake/modules/LLDBConfig.cmake?rev=368774&r1=368773&r2=368774&view=diff ============================================================================== --- lldb/trunk/cmake/modules/LLDBConfig.cmake (original) +++ lldb/trunk/cmake/modules/LLDBConfig.cmake Tue Aug 13 16:50:54 2019 @@ -408,7 +408,7 @@ list(APPEND system_libs ${CMAKE_DL_LIBS} # Figure out if lldb could use lldb-server. If so, then we'll # ensure we build lldb-server when an lldb target is being built. -if (CMAKE_SYSTEM_NAME MATCHES "Android|Darwin|FreeBSD|Linux|NetBSD") +if (CMAKE_SYSTEM_NAME MATCHES "Android|Darwin|FreeBSD|Linux|NetBSD|Windows") set(LLDB_CAN_USE_LLDB_SERVER ON) else() set(LLDB_CAN_USE_LLDB_SERVER OFF) Modified: lldb/trunk/source/Host/windows/Host.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/windows/Host.cpp?rev=368774&r1=368773&r2=368774&view=diff ============================================================================== --- lldb/trunk/source/Host/windows/Host.cpp (original) +++ lldb/trunk/source/Host/windows/Host.cpp Tue Aug 13 16:50:54 2019 @@ -169,7 +169,23 @@ bool Host::GetProcessInfo(lldb::pid_t pi GetProcessExecutableAndTriple(handle, process_info); // Need to read the PEB to get parent process and command line arguments. - return true; + + AutoHandle snapshot(CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)); + if (!snapshot.IsValid()) + return false; + + PROCESSENTRY32W pe; + pe.dwSize = sizeof(PROCESSENTRY32W); + if (Process32FirstW(snapshot.get(), &pe)) { + do { + if (pe.th32ProcessID == pid) { + process_info.SetParentProcessID(pe.th32ParentProcessID); + return true; + } + } while (Process32NextW(snapshot.get(), &pe)); + } + + return false; } llvm::Expected<HostThread> Host::StartMonitoringChildProcess( Modified: lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp?rev=368774&r1=368773&r2=368774&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp (original) +++ lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp Tue Aug 13 16:50:54 2019 @@ -39,6 +39,8 @@ #if defined(__APPLE__) #define DEBUGSERVER_BASENAME "debugserver" +#elif defined(_WIN32) +#define DEBUGSERVER_BASENAME "lldb-server.exe" #else #define DEBUGSERVER_BASENAME "lldb-server" #endif Modified: lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp?rev=368774&r1=368773&r2=368774&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp (original) +++ lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp Tue Aug 13 16:50:54 2019 @@ -217,8 +217,13 @@ Status GDBRemoteCommunicationServerLLGS: m_process_launch_info.GetFlags().Set(eLaunchFlagDebug); if (should_forward_stdio) { + // Temporarily relax the following for Windows until we can take advantage + // of the recently added pty support. This doesn't really affect the use of + // lldb-server on Windows. +#if !defined(_WIN32) if (llvm::Error Err = m_process_launch_info.SetUpPtyRedirection()) return Status(std::move(Err)); +#endif } { Modified: lldb/trunk/tools/lldb-server/lldb-gdbserver.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-server/lldb-gdbserver.cpp?rev=368774&r1=368773&r2=368774&view=diff ============================================================================== --- lldb/trunk/tools/lldb-server/lldb-gdbserver.cpp (original) +++ lldb/trunk/tools/lldb-server/lldb-gdbserver.cpp Tue Aug 13 16:50:54 2019 @@ -514,7 +514,7 @@ int main_gdbserver(int argc, char *argv[ handle_launch(gdb_server, argc, argv); // Print version info. - printf("%s-%s", LLGS_PROGRAM_NAME, LLGS_VERSION_STR); + printf("%s-%s\n", LLGS_PROGRAM_NAME, LLGS_VERSION_STR); ConnectToRemote(mainloop, gdb_server, reverse_connect, host_and_port, progname, subcommand, named_pipe_path.c_str(), Modified: lldb/trunk/tools/lldb-server/lldb-platform.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-server/lldb-platform.cpp?rev=368774&r1=368773&r2=368774&view=diff ============================================================================== --- lldb/trunk/tools/lldb-server/lldb-platform.cpp (original) +++ lldb/trunk/tools/lldb-server/lldb-platform.cpp Tue Aug 13 16:50:54 2019 @@ -15,8 +15,9 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#if !defined(_WIN32) #include <sys/wait.h> - +#endif #include <fstream> #include "llvm/Support/FileSystem.h" @@ -67,6 +68,7 @@ static struct option g_long_options[] = #define HIGH_PORT (49151u) #endif +#if !defined(_WIN32) // Watch for signals static void signal_handler(int signo) { switch (signo) { @@ -81,6 +83,7 @@ static void signal_handler(int signo) { break; } } +#endif static void display_usage(const char *progname, const char *subcommand) { fprintf(stderr, "Usage:\n %s %s [--log-file log-file-name] [--log-channels " @@ -131,8 +134,10 @@ int main_platform(int argc, char *argv[] const char *subcommand = argv[1]; argc--; argv++; +#if !defined(_WIN32) signal(SIGPIPE, SIG_IGN); signal(SIGHUP, signal_handler); +#endif int long_option_index = 0; Status error; std::string listen_host_port; @@ -309,8 +314,10 @@ int main_platform(int argc, char *argv[] printf("Connection established.\n"); if (g_server) { // Collect child zombie processes. +#if !defined(_WIN32) while (waitpid(-1, nullptr, WNOHANG) > 0) ; +#endif if (fork()) { // Parent doesn't need a connection to the lldb client delete conn; _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits