Op 4-9-2012 16:46, Greg Clayton schreef:

On Sep 3, 2012, at 12:32 PM, Carlo Kok <[email protected]> wrote:

Op 27-8-2012 19:16, Greg Clayton schreef:
Yes it can, but work is definitely needed. Linux to OSX will work
because we have the lldb modified "debugserver" binary which can
debug macosx apps. There is no linux equivalent because the current
"debugserver" binary was initially made for the Mac only and it isn't
well orgnanized to be used as a starting point for porting to other
systems.

What I would like see happen, is in our Host layer (in
"lldb/source/Host" and "lldb/include/lldb/Host"), we should have a
native debug API that is very closely based on
"lldb/tools/debugserver/source/DNB.h" and name it something like
"lldb_private::NativeDebug". Once we do this, we can then support
native debugging on every platform by making a new Process plugin in
"lldb/source/Plugins/Process" called "Host" which would link against
the new API in the lldb_private::NativeDebug. We then also have
classes which implement remote GDB debugging inside lldb:

lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp
lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp




Are there any technical limitations that keep these from working on windows 
(the client side of things, not the host)? (I tried to import it but there are 
a lot of missing include files which i presume is just because nobody ever did 
this and it's just missing defines).

We have a host layer in our code that is designed to abstract you from the OS 
your are running on, though I am sure it is far from perfect. One of the big 
challenges in making a windows port will be correctly implementing an 
abstraction layer that makes sense.

Does anyone else have any experience and comments for Windows? I seem to 
remember a few folks working on windows over that past year.

Greg Clayton


There are quite a few places that presume unix (like spawn.h, pthread.h); the patch attached has some small tweaks for this but is far from complete. Atm I'm stuck with regex.h (completely missing on vc++) and a read/write lock primitive (readwritelock.h wants it). Win32 doesn't seem to have an equivalent.

--
Carlo Kok
Index: include/lldb/Core/Debugger.h
===================================================================
--- include/lldb/Core/Debugger.h        (revision 163122)
+++ include/lldb/Core/Debugger.h        (working copy)
@@ -13,7 +13,9 @@
 
 
 #include <stdint.h>
+#if !defined(WIN32)
 #include <unistd.h>
+#endif
 
 #include <stack>
 
Index: include/lldb/Core/Error.h
===================================================================
--- include/lldb/Core/Error.h   (revision 163122)
+++ include/lldb/Core/Error.h   (working copy)
@@ -175,7 +175,11 @@
     ///     format string \a format.
     //------------------------------------------------------------------
     void
-    PutToLog (Log *log, const char *format, ...)  __attribute__ ((format 
(printf, 3, 4)));
+    PutToLog (Log *log, const char *format, ...)  
+#if !defined(WIN32)
+       __attribute__ ((format (printf, 3, 4)))
+#endif
+       ;
 
     //------------------------------------------------------------------
     /// Log an error to Log() if the error value is an error.
@@ -196,7 +200,11 @@
     ///     format string \a format.
     //------------------------------------------------------------------
     void
-    LogIfError (Log *log, const char *format, ...)  __attribute__ ((format 
(printf, 3, 4)));
+    LogIfError (Log *log, const char *format, ...)  
+#if !defined(WIN32)
+       __attribute__ ((format (printf, 3, 4)))
+#endif
+       ;
 
     //------------------------------------------------------------------
     /// Set accessor from a kern_return_t.
@@ -266,7 +274,11 @@
     ///     A printf style format string
     //------------------------------------------------------------------
     int
-    SetErrorStringWithFormat (const char *format, ...) __attribute__ ((format 
(printf, 2, 3)));
+    SetErrorStringWithFormat (const char *format, ...) 
+#if !defined(WIN32)    
+       __attribute__ ((format (printf, 2, 3)))
+#endif
+       ;
 
     int
     SetErrorStringWithVarArg (const char *format, va_list args);
Index: include/lldb/Core/Flags.h
===================================================================
--- include/lldb/Core/Flags.h   (revision 163122)
+++ include/lldb/Core/Flags.h   (working copy)
@@ -13,7 +13,9 @@
 
 
 #include <stdint.h>
+#if !defined(WIN32)
 #include <unistd.h>
+#endif
 
 namespace lldb_private {
 
Index: include/lldb/Core/Log.h
===================================================================
--- include/lldb/Core/Log.h     (revision 163122)
+++ include/lldb/Core/Log.h     (working copy)
@@ -11,11 +11,15 @@
 #define liblldb_Log_h_
 
 // C Includes
+#if !(WIN32)
 #include <stdbool.h>
+#endif
 #include <stdint.h>
 #include <signal.h>
 #include <stdio.h>
+#if !(WIN32)
 #include <unistd.h>
+#endif
 
 // C++ Includes
 // Other libraries and framework includes
@@ -126,37 +130,77 @@
     PutCString (const char *cstr);
 
     void
-    Printf (const char *format, ...)  __attribute__ ((format (printf, 2, 3)));
+    Printf (const char *format, ...)  
+#if !(WIN32)
+       __attribute__ ((format (printf, 2, 3)))
+#endif
+       ;
 
     void
     VAPrintf (const char *format, va_list args);
 
     void
-    PrintfWithFlags( uint32_t flags, const char *format, ...)  __attribute__ 
((format (printf, 3, 4)));
+    PrintfWithFlags( uint32_t flags, const char *format, ...)  
+#if !(WIN32)
+       __attribute__ ((format (printf, 3, 4)))
+#endif
+       ;
 
     void
-    LogIf (uint32_t mask, const char *fmt, ...)  __attribute__ ((format 
(printf, 3, 4)));
+    LogIf (uint32_t mask, const char *fmt, ...)  
+#if !(WIN32)
+       __attribute__ ((format (printf, 3, 4)))
+#endif
+       ;
 
     void
-    Debug (const char *fmt, ...)  __attribute__ ((format (printf, 2, 3)));
+    Debug (const char *fmt, ...)  
+#if !(WIN32)
+       __attribute__ ((format (printf, 2, 3)))
+#endif
+       ;
 
     void
-    DebugVerbose (const char *fmt, ...)  __attribute__ ((format (printf, 2, 
3)));
+    DebugVerbose (const char *fmt, ...)  
+#if !(WIN32)
+       __attribute__ ((format (printf, 2, 3)))
+#endif
+       ;
 
     void
-    Error (const char *fmt, ...)  __attribute__ ((format (printf, 2, 3)));
+    Error (const char *fmt, ...)  
+#if !(WIN32)
+       __attribute__ ((format (printf, 2, 3)))
+#endif
+       ;
 
     void
-    FatalError (int err, const char *fmt, ...)  __attribute__ ((format 
(printf, 3, 4)));
+    FatalError (int err, const char *fmt, ...)  
+#if !(WIN32)
+       __attribute__ ((format (printf, 3, 4)))
+#endif
+       ;
 
     void
-    Verbose (const char *fmt, ...)  __attribute__ ((format (printf, 2, 3)));
+    Verbose (const char *fmt, ...)  
+#if !(WIN32)
+       __attribute__ ((format (printf, 2, 3)))
+#endif
+       ;
 
     void
-    Warning (const char *fmt, ...)  __attribute__ ((format (printf, 2, 3)));
+    Warning (const char *fmt, ...)  
+#if !(WIN32)
+       __attribute__ ((format (printf, 2, 3)))
+#endif
+       ;
 
     void
-    WarningVerbose (const char *fmt, ...)  __attribute__ ((format (printf, 2, 
3)));
+    WarningVerbose (const char *fmt, ...)  
+#if !(WIN32)
+       __attribute__ ((format (printf, 2, 3)))
+#endif
+       ;
 
     Flags &
     GetOptions();
Index: include/lldb/Core/Stream.h
===================================================================
--- include/lldb/Core/Stream.h  (revision 163122)
+++ include/lldb/Core/Stream.h  (working copy)
@@ -126,7 +126,11 @@
     ///     The number of bytes that were appended to the stream.
     //------------------------------------------------------------------
     int
-    PrintfAsRawHex8 (const char *format, ...)  __attribute__ ((format (printf, 
2, 3)));
+    PrintfAsRawHex8 (const char *format, ...)  
+#if !(WIN32)   
+       __attribute__ ((format (printf, 2, 3)))
+#endif
+       ;
 
     //------------------------------------------------------------------
     /// Format a C string from a printf style format and variable
@@ -518,7 +522,11 @@
     ///     format string \a format.
     //------------------------------------------------------------------
     int
-    Printf (const char *format, ...)  __attribute__ ((format (printf, 2, 3)));
+    Printf (const char *format, ...)  
+#if !(WIN32)
+       __attribute__ ((format (printf, 2, 3)))
+#endif
+       ;
 
     int
     PrintfVarArg(const char *format, va_list args);
Index: include/lldb/Host/Condition.h
===================================================================
--- include/lldb/Host/Condition.h       (revision 163122)
+++ include/lldb/Host/Condition.h       (working copy)
@@ -12,8 +12,13 @@
 #if defined(__cplusplus)
 
 
+#if defined(WIN32)
+#include <Windows.h>
+#else
 #include <pthread.h>
+#endif
 #include "lldb/Host/Mutex.h"
+#include "lldb/lldb-types.h"
 
 namespace lldb_private {
 
@@ -105,7 +110,7 @@
     //------------------------------------------------------------------
     // Member variables
     //------------------------------------------------------------------
-    pthread_cond_t m_condition; ///< The condition variable.
+    lldb::condition_t m_condition; ///< The condition variable.
     
     //------------------------------------------------------------------
     /// Get accessor to the pthread condition object.
@@ -113,7 +118,7 @@
     /// @return
     ///     A pointer to the condition variable owned by this object.
     //------------------------------------------------------------------
-    pthread_cond_t *
+    lldb::condition_t *
     GetCondition ();
 };
 
Index: include/lldb/Host/File.h
===================================================================
--- include/lldb/Host/File.h    (revision 163122)
+++ include/lldb/Host/File.h    (working copy)
@@ -472,7 +472,11 @@
     ///     format string \a format.
     //------------------------------------------------------------------
     int
-    Printf (const char *format, ...)  __attribute__ ((format (printf, 2, 3)));
+    Printf (const char *format, ...)  
+#if !defined(WIN32)
+       __attribute__ ((format (printf, 2, 3)))
+#endif
+       ;
     
     int
     PrintfVarArg(const char *format, va_list args);
Index: include/lldb/Host/Host.h
===================================================================
--- include/lldb/Host/Host.h    (revision 163122)
+++ include/lldb/Host/Host.h    (working copy)
@@ -18,6 +18,9 @@
 #include "lldb/lldb-private.h"
 #include "lldb/Core/StringList.h"
 #include "lldb/Host/File.h"
+#if defined(WIN32)
+#define mode_t int
+#endif
 
 namespace lldb_private {
 
@@ -141,7 +144,11 @@
     };
 
     static void
-    SystemLog (SystemLogType type, const char *format, ...) __attribute__ 
((format (printf, 2, 3)));
+    SystemLog (SystemLogType type, const char *format, ...) 
+#if !defined(WIN32)
+               __attribute__ ((format (printf, 2, 3)))
+#endif
+       ;
 
     static void
     SystemLog (SystemLogType type, const char *format, va_list args);
@@ -399,7 +406,11 @@
     ///     description string.
     //------------------------------------------------------------------
     static void
-    SetCrashDescriptionWithFormat (const char *format, ...)  __attribute__ 
((format (printf, 1, 2)));
+    SetCrashDescriptionWithFormat (const char *format, ...)  
+#if !defined(WIN32)
+       __attribute__ ((format (printf, 1, 2)))
+#endif
+       ;
 
     static void
     SetCrashDescription (const char *description);
Index: include/lldb/Host/Mutex.h
===================================================================
--- include/lldb/Host/Mutex.h   (revision 163122)
+++ include/lldb/Host/Mutex.h   (working copy)
@@ -11,9 +11,13 @@
 #define liblldb_Mutex_h_
 #if defined(__cplusplus)
 
+#if defined(WIN32)
+#include <Windows.h>
+#else
 #include <pthread.h>
+#endif
 #include <assert.h>
-
+#include "lldb/lldb-types.h"
 #ifdef LLDB_CONFIGURATION_DEBUG
 #include <string>
 #endif
@@ -235,7 +239,7 @@
     //------------------------------------------------------------------
     // TODO: Hide the mutex in the implementation file in case we ever need to 
port to an
     // architecture that doesn't have pthread mutexes.
-    pthread_mutex_t m_mutex; ///< The pthread mutex object.
+    lldb::mutex_t m_mutex; ///< The pthread mutex object.
 
 private:
     //------------------------------------------------------------------
@@ -244,7 +248,7 @@
     /// @return
     ///     A pointer to the pthread mutex object owned by this object.
     //------------------------------------------------------------------
-    pthread_mutex_t *
+    lldb::mutex_t *
     GetMutex();
 
     Mutex(const Mutex&);
Index: include/lldb/Host/ReadWriteLock.h
===================================================================
--- include/lldb/Host/ReadWriteLock.h   (revision 163122)
+++ include/lldb/Host/ReadWriteLock.h   (working copy)
@@ -13,7 +13,9 @@
 
 #include "lldb/Host/Mutex.h"
 #include "lldb/Host/Condition.h"
+#if !defined(WIN32)
 #include <pthread.h>
+#endif
 #include <stdint.h>
 #include <time.h>
 
Index: include/lldb/Host/TimeValue.h
===================================================================
--- include/lldb/Host/TimeValue.h       (revision 163122)
+++ include/lldb/Host/TimeValue.h       (working copy)
@@ -12,12 +12,20 @@
 
 // C Includes
 #include <stdint.h>
+#if WIN32
+#include <time.h>
+#else
 #include <sys/time.h>
+#endif
 
 // BEGIN: MinGW work around
 #if !defined(_STRUCT_TIMESPEC) && !defined(HAVE_STRUCT_TIMESPEC)
+#if defined(WIN32)
+#include <Windows.h>
+#else
 #include <pthread.h>
 #endif
+#endif
 // END: MinGW work around
 
 // C++ Includes
Index: include/lldb/Interpreter/Args.h
===================================================================
--- include/lldb/Interpreter/Args.h     (revision 163122)
+++ include/lldb/Interpreter/Args.h     (working copy)
@@ -11,7 +11,7 @@
 #define liblldb_Command_h_
 
 // C Includes
-#include <getopt.h>
+//#include <getopt.h>
 
 // C++ Includes
 #include <list>
Index: include/lldb/Interpreter/Options.h
===================================================================
--- include/lldb/Interpreter/Options.h  (revision 163122)
+++ include/lldb/Interpreter/Options.h  (working copy)
@@ -11,7 +11,7 @@
 #define liblldb_Options_h_
 
 // C Includes
-#include <getopt.h>
+//#include <getopt.h>
 
 // C++ Includes
 #include <set>
Index: include/lldb/lldb-types.h
===================================================================
--- include/lldb/lldb-types.h   (revision 163122)
+++ include/lldb/lldb-types.h   (working copy)
@@ -14,11 +14,15 @@
 #include "lldb/lldb-forward.h"
 
 #include <assert.h>
+#if defined(WIN32)
+#include <Windows.h>
+#else
 #include <pthread.h>
+#endif
 #include <signal.h>
 #include <stdint.h>
-#include <stdbool.h>
-#include <unistd.h>
+//#include <stdbool.h>
+//#include <unistd.h>
 
 //----------------------------------------------------------------------
 // All host systems must define:
@@ -39,13 +43,20 @@
 // things should be defined. Currently MacOSX is being assumed by default
 // since that is what lldb was first developed for.
 
+
 namespace lldb {
         
//----------------------------------------------------------------------
         // MacOSX Types
         
//----------------------------------------------------------------------
+#if defined(WIN32)
+        typedef CRITICAL_SECTION    mutex_t;
+        typedef HANDLE              condition_t;
+        typedef HANDLE              thread_t;                   // Host thread 
type
+#else
         typedef ::pthread_mutex_t   mutex_t;
         typedef pthread_cond_t      condition_t;
         typedef pthread_t           thread_t;                   // Host thread 
type
+#endif
         typedef void *              thread_arg_t;               // Host thread 
argument type
         typedef void *              thread_result_t;            // Host thread 
result type
         typedef void *              (*thread_func_t)(void *);   // Host thread 
function type
Index: include/lldb/Target/Process.h
===================================================================
--- include/lldb/Target/Process.h       (revision 163122)
+++ include/lldb/Target/Process.h       (working copy)
@@ -12,7 +12,14 @@
 
 // C Includes
 #include <limits.h>
+#if defined(WIN32)
+#include <Windows.h>
+#define STDIN_FILENO stdin
+#define STDOUT_FILENO stdout
+#define STDERR_FILENO stderr
+#else
 #include <spawn.h>
+#endif
 
 // C++ Includes
 #include <list>
@@ -190,7 +197,11 @@
             m_executable = exe_file;
             if (add_exe_file_as_first_arg)
             {
+#if defined(WIN32)
+                               char filename[MAX_PATH];
+#else
                 char filename[PATH_MAX];
+#endif
                 if (exe_file.GetPath(filename, sizeof(filename)))
                     m_arguments.InsertArgumentAtIndex (0, filename);
             }
@@ -479,12 +490,14 @@
 
         bool
         Open (int fd, const char *path, bool read, bool write);
-        
+
+#if !defined(WIN32)
         static bool
         AddPosixSpawnFileAction (posix_spawn_file_actions_t *file_actions,
                                  const FileAction *info,
                                  Log *log, 
                                  Error& error);
+#endif
 
         int
         GetFD () const
Index: include/lldb/Utility/RefCounter.h
===================================================================
--- include/lldb/Utility/RefCounter.h   (revision 163122)
+++ include/lldb/Utility/RefCounter.h   (working copy)
@@ -39,14 +39,22 @@
     inline T
     increment(T* t)
     {
+#if defined(WIN32)
+       return InterlockedIncrement(t) -1;
+#else
         return __sync_fetch_and_add(t, 1);
-    }
+#endif
+       }
     
     template <class T>
     inline T
     decrement(T* t)
     {
+#if defined(WIN32)
+       return InterlockedDecrement(t) +1;
+#else
         return __sync_fetch_and_add(t, -1);
+#endif
     }
     
 };
Index: include/lldb/Utility/SharingPtr.h
===================================================================
--- include/lldb/Utility/SharingPtr.h   (revision 163122)
+++ include/lldb/Utility/SharingPtr.h   (working copy)
@@ -12,11 +12,14 @@
 
 #include <algorithm>
 #include <memory>
+#if defined(WIN32)
+#include <Windows.h>
+#endif
 
 //#define ENABLE_SP_LOGGING 1 // DON'T CHECK THIS LINE IN UNLESS COMMENTED OUT
 #if defined (ENABLE_SP_LOGGING)
 
-extern "C" void track_sp (void *sp_this, void *ptr, long count);
+extern "C" void track_sp (void *sp_this, void *ptr, losng count);
 
 #endif
 
@@ -28,14 +31,22 @@
 inline T
 increment(T& t)
 {
-    return __sync_add_and_fetch(&t, 1);
+#if defined(WIN32)
+       return InterlockedIncrement(&t);
+#else
+       return __sync_add_and_fetch(&t, 1);
+#endif
 }
 
 template <class T>
 inline T
 decrement(T& t)
 {
+#if defined(WIN32)
+       return InterlockedDecrement(&t);
+#else
     return __sync_add_and_fetch(&t, -1);
+#endif
 }
 
 class shared_count
Index: source/Core/ConnectionSharedMemory.cpp
===================================================================
--- source/Core/ConnectionSharedMemory.cpp      (revision 163122)
+++ source/Core/ConnectionSharedMemory.cpp      (working copy)
@@ -11,7 +11,11 @@
 
 // C Includes
 #include <errno.h>
+#if defined(WIN32)
+#include <Windows.h>
+#else
 #include <pthread.h>
+#endif
 #include <stdlib.h>
 #include <sys/file.h>
 #include <sys/mman.h>
Index: source/Core/Log.cpp
===================================================================
--- source/Core/Log.cpp (revision 163122)
+++ source/Core/Log.cpp (working copy)
@@ -8,7 +8,11 @@
 
//===----------------------------------------------------------------------===//
 
 // C Includes
+#if defined(WIN32)
+#include <Windows.h>
+#else
 #include <pthread.h>
+#endif
 #include <stdio.h>
 #include <stdarg.h>
 #include <stdlib.h>
Index: source/Host/freebsd/Host.cpp
===================================================================
--- source/Host/freebsd/Host.cpp        (revision 163122)
+++ source/Host/freebsd/Host.cpp        (working copy)
@@ -21,7 +21,9 @@
 #include <sys/exec.h>
 #include <machine/elf.h>
 
+#if !defined(WIN32)
 #include <spawn.h>
+#endif
 
 // C++ Includes
 // Other libraries and framework includes
Index: source/lldb-log.cpp
===================================================================
--- source/lldb-log.cpp (revision 163122)
+++ source/lldb-log.cpp (working copy)
@@ -21,6 +21,8 @@
 using namespace lldb;
 using namespace lldb_private;
 
+#define strncasecmp(a,b,c) _strnicmp(a, b, c)
+#define strcasecmp(a,b) _stricmp(a,b)
 
 // We want to avoid global constructors where code needs to be run so here we
 // control access to our static g_log_sp by hiding it in a singleton function
_______________________________________________
lldb-dev mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to