Index: include/lldb/Host/windows/win32.h =================================================================== --- include/lldb/Host/windows/win32.h +++ include/lldb/Host/windows/win32.h @@ -13,8 +13,11 @@ #include #include +extern "C" { // posix utilities +#ifndef __MINGW32__ int vasprintf(char **ret, const char *fmt, va_list ap); +#endif char * strcasestr(const char *s, const char* find); char* realpath(const char * name, char * resolved); @@ -51,8 +54,10 @@ typedef unsigned short mode_t; #ifdef LLDB_DISABLE_PYTHON +#ifdef __MINGW32__ typedef uint32_t pid_t; #endif +#endif int usleep(uint32_t useconds); @@ -75,12 +80,14 @@ #define snprintf _snprintf #endif +#ifndef __MINGW32__ // timespec struct timespec { time_t tv_sec; long tv_nsec; }; - +#endif +} // extern "C" #endif // LLDB_lldb_win32_h_ Index: lib/Makefile =================================================================== --- lib/Makefile +++ lib/Makefile @@ -121,6 +121,7 @@ ifeq ($(HOST_OS),MingW) USEDLIBS += lldbHostWindows.a \ lldbPluginProcessElfCore.a \ + lldbPluginProcessWindows.a \ lldbPluginJITLoaderGDB.a endif Index: source/Host/windows/EditLineWin.cpp =================================================================== --- source/Host/windows/EditLineWin.cpp +++ source/Host/windows/EditLineWin.cpp @@ -47,7 +47,11 @@ static char * el_get_s (char *buffer, int chars) { +#ifdef __MINGW32__ + return fgets(buffer,chars,stdin); +#else return gets_s(buffer, chars); +#endif } #else Index: source/Host/windows/Windows.cpp =================================================================== --- source/Host/windows/Windows.cpp +++ source/Host/windows/Windows.cpp @@ -20,6 +20,8 @@ #include #include +extern "C" { +#ifndef __MINGW32__ int vasprintf(char **ret, const char *fmt, va_list ap) { char *buf; @@ -46,6 +48,7 @@ va_end(ap2); return len; } +#endif char* strcasestr(const char *s, const char* find) { @@ -191,3 +194,4 @@ } #endif // _MSC_VER +} \ No newline at end of file Index: source/Interpreter/Makefile =================================================================== --- source/Interpreter/Makefile +++ source/Interpreter/Makefile @@ -13,12 +13,16 @@ include $(LLDB_LEVEL)/../../Makefile.config ifneq ($(HOST_OS),MingW) +ifeq (,$(findstring -DLLDB_DISABLE_PYTHON,$(CXXFLAGS))) +DO_BUILD = 1 BUILT_SOURCES := LLDBWrapPython.cpp endif +endif include $(LLDB_LEVEL)/Makefile -include $(PROJ_OBJ_DIR)/LLDBWrapPython.cpp.d +ifeq ($(DO_BUILD),1) # Drop -Wfour-char-constants, which we are not currently clean with. EXTRA_OPTIONS += -Wno-four-char-constants @@ -40,3 +44,4 @@ clean-local:: $(Verb) $(RM) -f LLDBWrapPython.cpp lldb.py +endif \ No newline at end of file Index: source/Plugins/Makefile =================================================================== --- source/Plugins/Makefile +++ source/Plugins/Makefile @@ -47,6 +47,7 @@ ifeq ($(HOST_OS),MingW) DIRS += Process/elf-core +DIRS += Process/Windows DIRS += JITLoader/GDB endif Index: source/Utility/PseudoTerminal.cpp =================================================================== --- source/Utility/PseudoTerminal.cpp +++ source/Utility/PseudoTerminal.cpp @@ -19,7 +19,12 @@ #ifdef _WIN32 #include "lldb/Host/windows/win32.h" + +#ifndef __MINGW32__ +#ifndef LLDB_DISABLE_PYTHON typedef uint32_t pid_t; +#endif +#endif // empty functions int posix_openpt(int flag) { return 0; } Index: tools/driver/Driver.cpp =================================================================== --- tools/driver/Driver.cpp +++ tools/driver/Driver.cpp @@ -7,8 +7,14 @@ // //===----------------------------------------------------------------------===// +#include + #include "Driver.h" +#ifdef __MINGW32__ +#include +#endif + #include #include #include @@ -910,7 +916,12 @@ if (lldb_temp_dir_spec.GetPath(lldb_cmds_file, sizeof(lldb_cmds_file))) { +#ifndef __MINGW32__ int fd = mkstemp(lldb_cmds_file); +#else + mktemp(lldb_cmds_file); + int fd = open(lldb_cmds_file,S_IRUSR|S_IWUSR|O_RDWR); +#endif if (fd == -1) { fprintf(stderr, "error: can't create temporary file for LLDB commands\n"); @@ -996,6 +1007,7 @@ exit (signo); } +#ifndef _WIN32 void sigtstp_handler (int signo) { @@ -1013,6 +1025,7 @@ kill (getpid(), signo); signal (signo, sigcont_handler); } +#endif int main (int argc, char const *argv[], const char *envp[]) @@ -1027,11 +1040,13 @@ SBHostOS::ThreadCreated (""); +#ifndef __MINGW32__ signal (SIGPIPE, SIG_IGN); signal (SIGWINCH, sigwinch_handler); - signal (SIGINT, sigint_handler); signal (SIGTSTP, sigtstp_handler); signal (SIGCONT, sigcont_handler); +#endif + signal (SIGINT, sigint_handler); // Create a scope for driver so that the driver object will destroy itself // before SBDebugger::Terminate() is called.