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