[Lldb-commits] [lldb] r167220 [1/3] - in /lldb/branches/windows: ./ include/lldb/ include/lldb/API/ include/lldb/Core/ scripts/ source/Expression/ source/Plugins/SymbolFile/DWARF/ source/Symbol/ source/Target/ tools/driver/
Carlo Kok
ck at remobjects.com
Thu Nov 1 00:39:11 PDT 2012
Author: carlokok
Date: Thu Nov 1 02:39:11 2012
New Revision: 167220
URL: http://llvm.org/viewvc/llvm-project?rev=167220&view=rev
Log:
TortoiseSVN added files that never should have gone in the last commit. Delete.
Removed:
lldb/branches/windows/builtintypedefs.patch
lldb/branches/windows/ddd.patch
lldb/branches/windows/include/lldb/API/SBCommandInterpreter.h.orig
lldb/branches/windows/include/lldb/Core/CXXFormatterFunctions.h.orig
lldb/branches/windows/include/lldb/lldb-combined-headers.h
lldb/branches/windows/ll.patch
lldb/branches/windows/lldb-changes (3).patch
lldb/branches/windows/lldb-changes-that-make-it-work-better-on-windows-2.patch
lldb/branches/windows/lldb-changes-that-make-it-work-better-on-windows.patch
lldb/branches/windows/lldb-get-access-to-type-original-name.patch
lldb/branches/windows/lldb-mutex-fix.patch
lldb/branches/windows/patch_to_getfunction_types.patch
lldb/branches/windows/scripts/csharp-typemaps.swig
lldb/branches/windows/scripts/lldb_wrap.cxx
lldb/branches/windows/source/Expression/ClangExpressionParser.cpp.orig
lldb/branches/windows/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp.orig
lldb/branches/windows/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp.orig
lldb/branches/windows/source/Symbol/ClangASTContext.cpp.orig
lldb/branches/windows/source/Symbol/ClangASTType.cpp.orig
lldb/branches/windows/source/Target/ObjCLanguageRuntime.cpp.orig
lldb/branches/windows/tools/driver/Driver.cpp.orig
Removed: lldb/branches/windows/builtintypedefs.patch
URL: http://llvm.org/viewvc/llvm-project/lldb/branches/windows/builtintypedefs.patch?rev=167219&view=auto
==============================================================================
--- lldb/branches/windows/builtintypedefs.patch (original)
+++ lldb/branches/windows/builtintypedefs.patch (removed)
@@ -1,51 +0,0 @@
-Index: include/lldb/Symbol/ClangASTContext.h
-===================================================================
---- include/lldb/Symbol/ClangASTContext.h (revision 166968)
-+++ include/lldb/Symbol/ClangASTContext.h (working copy)
-@@ -970,6 +970,13 @@
- static unsigned
- GetTypeQualifiers(lldb::clang_type_t clang_type);
- protected:
-+
-+ lldb::clang_type_t
-+ GetBuiltinTypeForDWARFEncodingAndBitSize_Private (const char *type_name,
-+ uint32_t dw_ate,
-+ uint32_t bit_size);
-+
-+
- //------------------------------------------------------------------
- // Classes that inherit from ClangASTContext can see and modify these
- //------------------------------------------------------------------
-Index: source/Symbol/ClangASTContext.cpp
-===================================================================
---- source/Symbol/ClangASTContext.cpp (revision 166968)
-+++ source/Symbol/ClangASTContext.cpp (working copy)
-@@ -717,6 +717,28 @@
- clang_type_t
- ClangASTContext::GetBuiltinTypeForDWARFEncodingAndBitSize (const char *type_name, uint32_t dw_ate, uint32_t bit_size)
- {
-+ clang_type_t clang_type = GetBuiltinTypeForDWARFEncodingAndBitSize_Private (type_name, dw_ate, bit_size);
-+ if (type_name && type_name[0] && clang_type)
-+ {
-+ ASTContext *ast = getASTContext();
-+ std::string clang_type_name (ClangASTType::GetTypeNameForOpaqueQualType (ast, clang_type));
-+ if (clang_type_name.compare(type_name) != 0)
-+ {
-+ if (strchr(type_name, ' ') == NULL)
-+ {
-+ //printf ("\ncreating typedef: typedef %s %s;\n", clang_type_name.c_str(), type_name);
-+ clang_type_t typedef_clang_type = CreateTypedefType (type_name, clang_type, NULL);
-+ if (typedef_clang_type)
-+ return typedef_clang_type;
-+ }
-+ }
-+ }
-+ return clang_type;
-+}
-+
-+clang_type_t
-+ClangASTContext::GetBuiltinTypeForDWARFEncodingAndBitSize_Private (const char *type_name, uint32_t dw_ate, uint32_t bit_size)
-+{
- ASTContext *ast = getASTContext();
-
- #define streq(a,b) strcmp(a,b) == 0
Removed: lldb/branches/windows/ddd.patch
URL: http://llvm.org/viewvc/llvm-project/lldb/branches/windows/ddd.patch?rev=167219&view=auto
==============================================================================
--- lldb/branches/windows/ddd.patch (original)
+++ lldb/branches/windows/ddd.patch (removed)
@@ -1,154 +0,0 @@
-Index: include/lldb/Host/Condition.h
-===================================================================
---- include/lldb/Host/Condition.h (revision 164694)
-+++ include/lldb/Host/Condition.h (working copy)
-@@ -15,6 +15,7 @@
- #include <pthread.h>
- #endif
-
-+#include <memory>
- #include "lldb/lldb-types.h"
- #include "lldb/Host/Mutex.h"
-
-@@ -125,6 +126,10 @@
- lldb::condition_t m_condition;
-
- #endif
-+private:
-+ Condition(const Condition& disabled);
-+
-+ const Condition& operator=(const Condition&);
- };
-
- } // namespace lldb_private
-Index: include/lldb/Host/Mutex.h
-===================================================================
---- include/lldb/Host/Mutex.h (revision 164694)
-+++ include/lldb/Host/Mutex.h (working copy)
-@@ -22,7 +22,7 @@
- #include <Windows.h>
- #undef GetUserName
- #endif
--
-+#include <memory>
- #include <assert.h>
-
- #ifdef LLDB_CONFIGURATION_DEBUG
-@@ -264,13 +264,13 @@
-
- #ifndef _POSIX_SOURCE
- #ifdef _WIN32
-- CRITICAL_SECTION* m_mutex;
-+ CRITICAL_SECTION m_mutex;
- #else
- llvm::sys::MutexImpl m_mutex;
- #endif
- #endif
--
-- Mutex(const Mutex&);
-+private:
-+ Mutex(const Mutex& disabled);
- const Mutex& operator=(const Mutex&);
- };
-
-Index: source/Host/common/Condition.cpp
-===================================================================
---- source/Host/common/Condition.cpp (revision 164694)
-+++ source/Host/common/Condition.cpp (working copy)
-@@ -110,9 +110,8 @@
-
- wait = wval;
- }
--
--
-- int err = SleepConditionVariableCS(&m_condition, mutex.m_mutex, wait);
-+
-+ int err = SleepConditionVariableCS(&m_condition, &mutex.m_mutex, wait);
-
- if (timed_out != NULL)
- {
-Index: source/Host/common/Mutex.cpp
-===================================================================
---- source/Host/common/Mutex.cpp (revision 164694)
-+++ source/Host/common/Mutex.cpp (working copy)
-@@ -184,8 +184,7 @@
- m_mutex()
- {
- #ifdef _WIN32
-- m_mutex = new CRITICAL_SECTION();
-- InitializeCriticalSection(m_mutex);
-+ InitializeCriticalSection(&m_mutex);
- #else
- int err;
- err = ::pthread_mutex_init (&m_mutex, NULL);
-@@ -206,8 +205,7 @@
- m_mutex()
- {
- #ifdef _WIN32
-- m_mutex = new CRITICAL_SECTION();
-- InitializeCriticalSection(m_mutex);
-+ InitializeCriticalSection(&m_mutex);
- #else
- int err;
- ::pthread_mutexattr_t attr;
-@@ -251,8 +249,8 @@
- Mutex::~Mutex()
- {
- #ifdef _WIN32
-- DeleteCriticalSection(m_mutex);
-- delete m_mutex;
-+ DeleteCriticalSection(&m_mutex);
-+
- #else
- int err;
- err = ::pthread_mutex_destroy (&m_mutex);
-@@ -291,9 +289,9 @@
- Mutex::Lock()
- {
- #ifdef _WIN32
-- EnterCriticalSection(m_mutex);
-+ EnterCriticalSection(&m_mutex);
- return 0;
--#else
-+#else
- DEBUG_LOG ("[%4.4llx/%4.4llx] pthread_mutex_lock (%p)...\n", Host::GetCurrentProcessID(), Host::GetCurrentThreadID(), &m_mutex);
-
- #if ENABLE_MUTEX_ERROR_CHECKING
-@@ -327,7 +325,7 @@
- Mutex::TryLock(const char *failure_message)
- {
- #ifdef _WIN32
-- return 0 == TryEnterCriticalSection(m_mutex);
-+ return 0 == TryEnterCriticalSection(&m_mutex);
- #else
- #if ENABLE_MUTEX_ERROR_CHECKING
- error_check_mutex (&m_mutex, eMutexActionAssertInitialized);
-@@ -352,7 +350,7 @@
- Mutex::Unlock()
- {
- #ifdef _WIN32
-- LeaveCriticalSection(m_mutex);
-+ LeaveCriticalSection(&m_mutex);
- return 0;
- #else
- #if ENABLE_MUTEX_ERROR_CHECKING
-Index: tools/driver/Driver.cpp
-===================================================================
---- tools/driver/Driver.cpp (revision 164694)
-+++ tools/driver/Driver.cpp (working copy)
-@@ -33,6 +33,7 @@
- #include "lldb/API/SBTarget.h"
- #include "lldb/API/SBThread.h"
- #include "lldb/API/SBProcess.h"
-+#include "Plugins/Platform/Windows/PlatformWindows.h"
-
- using namespace lldb;
-
-@@ -330,6 +331,7 @@
- int
- main (int argc, char const *argv[], const char *envp[])
- {
-+ PlatformSP sp(new PlatformWindows(true)); sp.reset();
- #if 1 // Enable for debug logging
- lldb::StreamSP logStream(new lldb_private::StreamCallback(LogOutput, 0));
- const char* logCategories[] = { 0 };
Removed: lldb/branches/windows/include/lldb/API/SBCommandInterpreter.h.orig
URL: http://llvm.org/viewvc/llvm-project/lldb/branches/windows/include/lldb/API/SBCommandInterpreter.h.orig?rev=167219&view=auto
==============================================================================
--- lldb/branches/windows/include/lldb/API/SBCommandInterpreter.h.orig (original)
+++ lldb/branches/windows/include/lldb/API/SBCommandInterpreter.h.orig (removed)
@@ -1,190 +0,0 @@
-//===-- SBCommandInterpreter.h ----------------------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLDB_SBCommandInterpreter_h_
-#define LLDB_SBCommandInterpreter_h_
-
-#include "lldb/API/SBDefines.h"
-#include "lldb/API/SBDebugger.h"
-
-namespace lldb {
-
-class SBCommandInterpreter
-{
-public:
- enum
- {
- eBroadcastBitThreadShouldExit = (1 << 0),
- eBroadcastBitResetPrompt = (1 << 1),
- eBroadcastBitQuitCommandReceived = (1 << 2), // User entered quit
- eBroadcastBitAsynchronousOutputData = (1 << 3),
- eBroadcastBitAsynchronousErrorData = (1 << 4)
- };
-
- SBCommandInterpreter ();
-
- SBCommandInterpreter (const lldb::SBCommandInterpreter &rhs);
-
- const lldb::SBCommandInterpreter &
- operator = (const lldb::SBCommandInterpreter &rhs);
-
- ~SBCommandInterpreter ();
-
- static const char *
- GetArgumentTypeAsCString (const lldb::CommandArgumentType arg_type);
-
- static const char *
- GetArgumentDescriptionAsCString (const lldb::CommandArgumentType arg_type);
-
- bool
- IsValid() const;
-
- bool
- CommandExists (const char *cmd);
-
- bool
- AliasExists (const char *cmd);
-
- lldb::SBBroadcaster
- GetBroadcaster ();
-
- static const char *
- GetBroadcasterClass ();
-
- bool
- HasCommands ();
-
- bool
- HasAliases ();
-
- bool
- HasAliasOptions ();
-
- lldb::SBProcess
- GetProcess ();
-
- lldb::SBDebugger
- GetDebugger ();
-
- lldb::SBCommand
- AddMultiwordCommand (const char* name, const char* help);
-
- lldb::SBCommand
- AddCommand (const char* name, lldb::SBCommandPluginInterface *impl, const char* help);
-
- void
- SourceInitFileInHomeDirectory (lldb::SBCommandReturnObject &result);
-
- void
- SourceInitFileInCurrentWorkingDirectory (lldb::SBCommandReturnObject &result);
-
- lldb::ReturnStatus
- HandleCommand (const char *command_line, lldb::SBCommandReturnObject &result, bool add_to_history = false);
-
- // This interface is not useful in SWIG, since the cursor & last_char arguments are string pointers INTO current_line
- // and you can't do that in a scripting language interface in general...
- int
- HandleCompletion (const char *current_line,
- const char *cursor,
- const char *last_char,
- int match_start_point,
- int max_return_elements,
- lldb::SBStringList &matches);
-
- int
- HandleCompletion (const char *current_line,
- uint32_t cursor_pos,
- int match_start_point,
- int max_return_elements,
- lldb::SBStringList &matches);
-
- // Catch commands before they execute by registering a callback that will
- // get called when the command gets executed. This allows GUI or command
- // line interfaces to intercept a command and stop it from happening
- bool
- SetCommandOverrideCallback (const char *command_name,
- lldb::CommandOverrideCallback callback,
- void *baton);
-
- SBCommandInterpreter (lldb_private::CommandInterpreter *interpreter_ptr = NULL); // Access using SBDebugger::GetCommandInterpreter();
-
-protected:
-
- lldb_private::CommandInterpreter &
- ref ();
-
- lldb_private::CommandInterpreter *
- get ();
-
- void
- reset (lldb_private::CommandInterpreter *);
-private:
- friend class SBDebugger;
-
-<<<<<<< .working
- SBCommandInterpreter (lldb_private::CommandInterpreter *interpreter_ptr); // Access using SBDebugger::GetCommandInterpreter();
-
-=======
->>>>>>> .merge-right.r165938
- static void
- InitializeSWIG ();
-
- lldb_private::CommandInterpreter *m_opaque_ptr;
-};
-
-class SBCommandPluginInterface
-{
-public:
- virtual bool
- DoExecute (lldb::SBDebugger debugger,
- char** command,
- lldb::SBCommandReturnObject &result)
- {
- return false;
- }
-
- virtual
- ~SBCommandPluginInterface ()
- {}
-};
-
-class SBCommand
-{
-public:
-
- SBCommand ();
-
- bool
- IsValid ();
-
- const char*
- GetName ();
-
- const char*
- GetHelp ();
-
- lldb::SBCommand
- AddMultiwordCommand (const char* name, const char* help = NULL);
-
- lldb::SBCommand
- AddCommand (const char* name, lldb::SBCommandPluginInterface* impl, const char* help = NULL);
-
-private:
-
- friend class SBDebugger;
- friend class SBCommandInterpreter;
-
- SBCommand (lldb::CommandObjectSP cmd_sp);
-
- lldb::CommandObjectSP m_opaque_sp;
-};
-
-} // namespace lldb
-
-#endif // LLDB_SBCommandInterpreter_h_
Removed: lldb/branches/windows/include/lldb/Core/CXXFormatterFunctions.h.orig
URL: http://llvm.org/viewvc/llvm-project/lldb/branches/windows/include/lldb/Core/CXXFormatterFunctions.h.orig?rev=167219&view=auto
==============================================================================
--- lldb/branches/windows/include/lldb/Core/CXXFormatterFunctions.h.orig (original)
+++ lldb/branches/windows/include/lldb/Core/CXXFormatterFunctions.h.orig (removed)
@@ -1,308 +0,0 @@
-//===-- CXXFormatterFunctions.h------------------------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef liblldb_CXXFormatterFunctions_h_
-#define liblldb_CXXFormatterFunctions_h_
-
-#include <stdint.h>
-#include "lldb/lldb-forward.h"
-#ifdef _MSC_VER
-typedef unsigned __int64 uint64_t;
-#endif
-
-#include "lldb/Core/ConstString.h"
-#include "lldb/Core/FormatClasses.h"
-
-#include "clang/AST/ASTContext.h"
-
-namespace lldb_private {
- namespace formatters
- {
-
- bool
- ExtractValueFromObjCExpression (ValueObject &valobj,
- const char* target_type,
- const char* selector,
- uint64_t &value);
-
- lldb::ValueObjectSP
- CallSelectorOnObject (ValueObject &valobj,
- const char* return_type,
- const char* selector,
- uint64_t index);
-
- lldb::ValueObjectSP
- CallSelectorOnObject (ValueObject &valobj,
- const char* return_type,
- const char* selector,
- const char* key);
-
- template<bool name_entries>
- bool
- NSDictionarySummaryProvider (ValueObject& valobj, Stream& stream);
-
- bool
- NSArraySummaryProvider (ValueObject& valobj, Stream& stream);
-
- template<bool needs_at>
- bool
- NSDataSummaryProvider (ValueObject& valobj, Stream& stream);
-
- bool
- NSNumberSummaryProvider (ValueObject& valobj, Stream& stream);
-
- bool
- NSStringSummaryProvider (ValueObject& valobj, Stream& stream);
-
-<<<<<<< .working
- template bool
-=======
- bool
- RuntimeSpecificDescriptionSummaryProvider (ValueObject& valobj, Stream& stream);
-
- extern template bool
->>>>>>> .merge-right.r165938
- NSDictionarySummaryProvider<true> (ValueObject&, Stream&) ;
-
- template bool
- NSDictionarySummaryProvider<false> (ValueObject&, Stream&) ;
-
- template bool
- NSDataSummaryProvider<true> (ValueObject&, Stream&) ;
-
- template bool
- NSDataSummaryProvider<false> (ValueObject&, Stream&) ;
-
- class NSArrayMSyntheticFrontEnd : public SyntheticChildrenFrontEnd
- {
- private:
- struct DataDescriptor_32
- {
- uint32_t _used;
- uint32_t _priv1 : 2 ;
- uint32_t _size : 30;
- uint32_t _priv2 : 2;
- uint32_t offset : 30;
- uint32_t _priv3;
- uint32_t _data;
- };
- struct DataDescriptor_64
- {
- uint64_t _used;
- uint64_t _priv1 : 2 ;
- uint64_t _size : 62;
- uint64_t _priv2 : 2;
- uint64_t offset : 62;
- uint32_t _priv3;
- uint64_t _data;
- };
- public:
- NSArrayMSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp);
-
- virtual uint32_t
- CalculateNumChildren ();
-
- virtual lldb::ValueObjectSP
- GetChildAtIndex (uint32_t idx);
-
- virtual bool
- Update();
-
- virtual uint32_t
- GetIndexOfChildWithName (const ConstString &name);
-
- virtual
- ~NSArrayMSyntheticFrontEnd ();
- private:
- ExecutionContextRef m_exe_ctx_ref;
- uint8_t m_ptr_size;
- DataDescriptor_32 *m_data_32;
- DataDescriptor_64 *m_data_64;
- ClangASTType m_id_type;
- std::vector<lldb::ValueObjectSP> m_children;
- };
-
- class NSArrayISyntheticFrontEnd : public SyntheticChildrenFrontEnd
- {
- public:
- NSArrayISyntheticFrontEnd (lldb::ValueObjectSP valobj_sp);
-
- virtual uint32_t
- CalculateNumChildren ();
-
- virtual lldb::ValueObjectSP
- GetChildAtIndex (uint32_t idx);
-
- virtual bool
- Update();
-
- virtual uint32_t
- GetIndexOfChildWithName (const ConstString &name);
-
- virtual
- ~NSArrayISyntheticFrontEnd ();
- private:
- ExecutionContextRef m_exe_ctx_ref;
- uint8_t m_ptr_size;
- uint64_t m_items;
- lldb::addr_t m_data_ptr;
- ClangASTType m_id_type;
- std::vector<lldb::ValueObjectSP> m_children;
- };
-
- class NSArrayCodeRunningSyntheticFrontEnd : public SyntheticChildrenFrontEnd
- {
- public:
- NSArrayCodeRunningSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp);
-
- virtual uint32_t
- CalculateNumChildren ();
-
- virtual lldb::ValueObjectSP
- GetChildAtIndex (uint32_t idx);
-
- virtual bool
- Update();
-
- virtual uint32_t
- GetIndexOfChildWithName (const ConstString &name);
-
- virtual
- ~NSArrayCodeRunningSyntheticFrontEnd ();
- };
-
- SyntheticChildrenFrontEnd* NSArraySyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
-
- class NSDictionaryISyntheticFrontEnd : public SyntheticChildrenFrontEnd
- {
- private:
- struct DataDescriptor_32
- {
- uint32_t _used : 26;
- uint32_t _szidx : 6;
- };
- struct DataDescriptor_64
- {
- uint64_t _used : 58;
- uint32_t _szidx : 6;
- };
-
- struct DictionaryItemDescriptor
- {
- lldb::addr_t key_ptr;
- lldb::addr_t val_ptr;
- lldb::ValueObjectSP valobj_sp;
- };
-
- public:
- NSDictionaryISyntheticFrontEnd (lldb::ValueObjectSP valobj_sp);
-
- virtual uint32_t
- CalculateNumChildren ();
-
- virtual lldb::ValueObjectSP
- GetChildAtIndex (uint32_t idx);
-
- virtual bool
- Update();
-
- virtual uint32_t
- GetIndexOfChildWithName (const ConstString &name);
-
- virtual
- ~NSDictionaryISyntheticFrontEnd ();
- private:
- ExecutionContextRef m_exe_ctx_ref;
- uint8_t m_ptr_size;
- DataDescriptor_32 *m_data_32;
- DataDescriptor_64 *m_data_64;
- lldb::addr_t m_data_ptr;
- std::vector<DictionaryItemDescriptor> m_children;
- };
-
- class NSDictionaryMSyntheticFrontEnd : public SyntheticChildrenFrontEnd
- {
- private:
- struct DataDescriptor_32
- {
- uint32_t _used : 26;
- uint32_t _kvo : 1;
- uint32_t _size;
- uint32_t _mutations;
- uint32_t _objs_addr;
- uint32_t _keys_addr;
- };
- struct DataDescriptor_64
- {
- uint64_t _used : 58;
- uint32_t _kvo : 1;
- uint64_t _size;
- uint64_t _mutations;
- uint64_t _objs_addr;
- uint64_t _keys_addr;
- };
- struct DictionaryItemDescriptor
- {
- lldb::addr_t key_ptr;
- lldb::addr_t val_ptr;
- lldb::ValueObjectSP valobj_sp;
- };
- public:
- NSDictionaryMSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp);
-
- virtual uint32_t
- CalculateNumChildren ();
-
- virtual lldb::ValueObjectSP
- GetChildAtIndex (uint32_t idx);
-
- virtual bool
- Update();
-
- virtual uint32_t
- GetIndexOfChildWithName (const ConstString &name);
-
- virtual
- ~NSDictionaryMSyntheticFrontEnd ();
- private:
- ExecutionContextRef m_exe_ctx_ref;
- uint8_t m_ptr_size;
- uint64_t m_items;
- DataDescriptor_32 *m_data_32;
- DataDescriptor_64 *m_data_64;
- std::vector<DictionaryItemDescriptor> m_children;
- };
-
- class NSDictionaryCodeRunningSyntheticFrontEnd : public SyntheticChildrenFrontEnd
- {
- public:
- NSDictionaryCodeRunningSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp);
-
- virtual uint32_t
- CalculateNumChildren ();
-
- virtual lldb::ValueObjectSP
- GetChildAtIndex (uint32_t idx);
-
- virtual bool
- Update();
-
- virtual uint32_t
- GetIndexOfChildWithName (const ConstString &name);
-
- virtual
- ~NSDictionaryCodeRunningSyntheticFrontEnd ();
- };
-
- SyntheticChildrenFrontEnd* NSDictionarySyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
-
- }
-}
-
-#endif
Removed: lldb/branches/windows/include/lldb/lldb-combined-headers.h
URL: http://llvm.org/viewvc/llvm-project/lldb/branches/windows/include/lldb/lldb-combined-headers.h?rev=167219&view=auto
==============================================================================
--- lldb/branches/windows/include/lldb/lldb-combined-headers.h (original)
+++ lldb/branches/windows/include/lldb/lldb-combined-headers.h (removed)
@@ -1,656 +0,0 @@
-//===-- lldb-enumerations.h -------------------------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLDB_lldb_enumerations_h_
-#define LLDB_lldb_enumerations_h_
-
-namespace lldb {
-
- //----------------------------------------------------------------------
- // Process and Thread States
- //----------------------------------------------------------------------
- typedef enum StateType
- {
- eStateInvalid = 0,
- eStateUnloaded, ///< Process is object is valid, but not currently loaded
- eStateConnected, ///< Process is connected to remote debug services, but not launched or attached to anything yet
- eStateAttaching, ///< Process is currently trying to attach
- eStateLaunching, ///< Process is in the process of launching
- eStateStopped, ///< Process or thread is stopped and can be examined.
- eStateRunning, ///< Process or thread is running and can't be examined.
- eStateStepping, ///< Process or thread is in the process of stepping and can not be examined.
- eStateCrashed, ///< Process or thread has crashed and can be examined.
- eStateDetached, ///< Process has been detached and can't be examined.
- eStateExited, ///< Process has exited and can't be examined.
- eStateSuspended ///< Process or thread is in a suspended state as far
- ///< as the debugger is concerned while other processes
- ///< or threads get the chance to run.
- } StateType;
-
- //----------------------------------------------------------------------
- // Launch Flags
- //----------------------------------------------------------------------
- typedef enum LaunchFlags
- {
- eLaunchFlagNone = 0u,
- eLaunchFlagExec = (1u << 0), ///< Exec when launching and turn the calling process into a new process
- eLaunchFlagDebug = (1u << 1), ///< Stop as soon as the process launches to allow the process to be debugged
- eLaunchFlagStopAtEntry = (1u << 2), ///< Stop at the program entry point instead of auto-continuing when launching or attaching at entry point
- eLaunchFlagDisableASLR = (1u << 3), ///< Disable Address Space Layout Randomization
- eLaunchFlagDisableSTDIO = (1u << 4), ///< Disable stdio for inferior process (e.g. for a GUI app)
- eLaunchFlagLaunchInTTY = (1u << 5), ///< Launch the process in a new TTY if supported by the host
- eLaunchFlagLaunchInShell= (1u << 6), ///< Launch the process inside a shell to get shell expansion
- eLaunchFlagLaunchInSeparateProcessGroup = (1u << 7) ///< Launch the process in a separate process group
- } LaunchFlags;
-
- //----------------------------------------------------------------------
- // Thread Run Modes
- //----------------------------------------------------------------------
- typedef enum RunMode {
- eOnlyThisThread,
- eAllThreads,
- eOnlyDuringStepping
- } RunMode;
-
- //----------------------------------------------------------------------
- // Byte ordering definitions
- //----------------------------------------------------------------------
- typedef enum ByteOrder
- {
- eByteOrderInvalid = 0,
- eByteOrderBig = 1,
- eByteOrderPDP = 2,
- eByteOrderLittle = 4
- } ByteOrder;
-
- //----------------------------------------------------------------------
- // Register encoding definitions
- //----------------------------------------------------------------------
- typedef enum Encoding
- {
- eEncodingInvalid = 0,
- eEncodingUint, // unsigned integer
- eEncodingSint, // signed integer
- eEncodingIEEE754, // float
- eEncodingVector // vector registers
- } Encoding;
-
- //----------------------------------------------------------------------
- // Display format definitions
- //----------------------------------------------------------------------
- typedef enum Format
- {
- eFormatDefault = 0,
- eFormatInvalid = 0,
- eFormatBoolean,
- eFormatBinary,
- eFormatBytes,
- eFormatBytesWithASCII,
- eFormatChar,
- eFormatCharPrintable, // Only printable characters, space if not printable
- eFormatComplex, // Floating point complex type
- eFormatComplexFloat = eFormatComplex,
- eFormatCString, // NULL terminated C strings
- eFormatDecimal,
- eFormatEnum,
- eFormatHex,
- eFormatHexUppercase,
- eFormatFloat,
- eFormatOctal,
- eFormatOSType, // OS character codes encoded into an integer 'PICT' 'text' etc...
- eFormatUnicode16,
- eFormatUnicode32,
- eFormatUnsigned,
- eFormatPointer,
- eFormatVectorOfChar,
- eFormatVectorOfSInt8,
- eFormatVectorOfUInt8,
- eFormatVectorOfSInt16,
- eFormatVectorOfUInt16,
- eFormatVectorOfSInt32,
- eFormatVectorOfUInt32,
- eFormatVectorOfSInt64,
- eFormatVectorOfUInt64,
- eFormatVectorOfFloat32,
- eFormatVectorOfFloat64,
- eFormatVectorOfUInt128,
- eFormatComplexInteger, // Integer complex type
- eFormatCharArray, // Print characters with no single quotes, used for character arrays that can contain non printable characters
- eFormatAddressInfo, // Describe what an address points to (func + offset with file/line, symbol + offset, data, etc)
- eFormatHexFloat, // ISO C99 hex float string
- eFormatInstruction, // Disassemble an opcode
- eFormatVoid, // Do not print this
- kNumFormats
- } Format;
-
- //----------------------------------------------------------------------
- // Description levels for "void GetDescription(Stream *, DescriptionLevel)" calls
- //----------------------------------------------------------------------
- typedef enum DescriptionLevel
- {
- eDescriptionLevelBrief = 0,
- eDescriptionLevelFull,
- eDescriptionLevelVerbose,
- kNumDescriptionLevels
- } DescriptionLevel;
-
- //----------------------------------------------------------------------
- // Script interpreter types
- //----------------------------------------------------------------------
- typedef enum ScriptLanguage
- {
- eScriptLanguageNone,
- eScriptLanguagePython,
- eScriptLanguageDefault = eScriptLanguagePython
- } ScriptLanguage;
-
- //----------------------------------------------------------------------
- // Register numbering types
- //----------------------------------------------------------------------
- typedef enum RegisterKind
- {
- eRegisterKindGCC = 0, // the register numbers seen in eh_frame
- eRegisterKindDWARF, // the register numbers seen DWARF
- eRegisterKindGeneric, // insn ptr reg, stack ptr reg, etc not specific to any particular target
- eRegisterKindGDB, // the register numbers gdb uses (matches stabs numbers?)
- eRegisterKindLLDB, // lldb's internal register numbers
- kNumRegisterKinds
- } RegisterKind;
-
- //----------------------------------------------------------------------
- // Thread stop reasons
- //----------------------------------------------------------------------
- typedef enum StopReason
- {
- eStopReasonInvalid = 0,
- eStopReasonNone,
- eStopReasonTrace,
- eStopReasonBreakpoint,
- eStopReasonWatchpoint,
- eStopReasonSignal,
- eStopReasonException,
- eStopReasonPlanComplete
- } StopReason;
-
- //----------------------------------------------------------------------
- // Command Return Status Types
- //----------------------------------------------------------------------
- typedef enum ReturnStatus
- {
- eReturnStatusInvalid,
- eReturnStatusSuccessFinishNoResult,
- eReturnStatusSuccessFinishResult,
- eReturnStatusSuccessContinuingNoResult,
- eReturnStatusSuccessContinuingResult,
- eReturnStatusStarted,
- eReturnStatusFailed,
- eReturnStatusQuit
- } ReturnStatus;
-
-
- //----------------------------------------------------------------------
- // Connection Status Types
- //----------------------------------------------------------------------
- typedef enum ConnectionStatus
- {
- eConnectionStatusSuccess, // Success
- eConnectionStatusEndOfFile, // End-of-file encountered
- eConnectionStatusError, // Check GetError() for details
- eConnectionStatusTimedOut, // Request timed out
- eConnectionStatusNoConnection, // No connection
- eConnectionStatusLostConnection // Lost connection while connected to a valid connection
- } ConnectionStatus;
-
- typedef enum ErrorType
- {
- eErrorTypeInvalid,
- eErrorTypeGeneric, ///< Generic errors that can be any value.
- eErrorTypeMachKernel, ///< Mach kernel error codes.
- eErrorTypePOSIX ///< POSIX error codes.
- } ErrorType;
-
-
- typedef enum ValueType
- {
- eValueTypeInvalid = 0,
- eValueTypeVariableGlobal = 1, // globals variable
- eValueTypeVariableStatic = 2, // static variable
- eValueTypeVariableArgument = 3, // function argument variables
- eValueTypeVariableLocal = 4, // function local variables
- eValueTypeRegister = 5, // stack frame register value
- eValueTypeRegisterSet = 6, // A collection of stack frame register values
- eValueTypeConstResult = 7 // constant result variables
- } ValueType;
-
- //----------------------------------------------------------------------
- // Token size/granularities for Input Readers
- //----------------------------------------------------------------------
-
- typedef enum InputReaderGranularity
- {
- eInputReaderGranularityInvalid = 0,
- eInputReaderGranularityByte,
- eInputReaderGranularityWord,
- eInputReaderGranularityLine,
- eInputReaderGranularityAll
- } InputReaderGranularity;
-
- //------------------------------------------------------------------
- /// These mask bits allow a common interface for queries that can
- /// limit the amount of information that gets parsed to only the
- /// information that is requested. These bits also can indicate what
- /// actually did get resolved during query function calls.
- ///
- /// Each definition corresponds to a one of the member variables
- /// in this class, and requests that that item be resolved, or
- /// indicates that the member did get resolved.
- //------------------------------------------------------------------
- typedef enum SymbolContextItem
- {
- eSymbolContextTarget = (1u << 0), ///< Set when \a target is requested from a query, or was located in query results
- eSymbolContextModule = (1u << 1), ///< Set when \a module is requested from a query, or was located in query results
- eSymbolContextCompUnit = (1u << 2), ///< Set when \a comp_unit is requested from a query, or was located in query results
- eSymbolContextFunction = (1u << 3), ///< Set when \a function is requested from a query, or was located in query results
- eSymbolContextBlock = (1u << 4), ///< Set when the deepest \a block is requested from a query, or was located in query results
- eSymbolContextLineEntry = (1u << 5), ///< Set when \a line_entry is requested from a query, or was located in query results
- eSymbolContextSymbol = (1u << 6), ///< Set when \a symbol is requested from a query, or was located in query results
- eSymbolContextEverything = ((eSymbolContextSymbol << 1) - 1u) ///< Indicates to try and lookup everything up during a query.
- } SymbolContextItem;
-
- typedef enum Permissions
- {
- ePermissionsWritable = (1u << 0),
- ePermissionsReadable = (1u << 1),
- ePermissionsExecutable = (1u << 2)
- } Permissions;
-
- typedef enum InputReaderAction
- {
- eInputReaderActivate, // reader is newly pushed onto the reader stack
- eInputReaderAsynchronousOutputWritten, // an async output event occurred; the reader may want to do something
- eInputReaderReactivate, // reader is on top of the stack again after another reader was popped off
- eInputReaderDeactivate, // another reader was pushed on the stack
- eInputReaderGotToken, // reader got one of its tokens (granularity)
- eInputReaderInterrupt, // reader received an interrupt signal (probably from a control-c)
- eInputReaderEndOfFile, // reader received an EOF char (probably from a control-d)
- eInputReaderDone // reader was just popped off the stack and is done
- } InputReaderAction;
-
- typedef enum BreakpointEventType
- {
- eBreakpointEventTypeInvalidType = (1u << 0),
- eBreakpointEventTypeAdded = (1u << 1),
- eBreakpointEventTypeRemoved = (1u << 2),
- eBreakpointEventTypeLocationsAdded = (1u << 3), // Locations added doesn't get sent when the breakpoint is created
- eBreakpointEventTypeLocationsRemoved = (1u << 4),
- eBreakpointEventTypeLocationsResolved = (1u << 5),
- eBreakpointEventTypeEnabled = (1u << 6),
- eBreakpointEventTypeDisabled = (1u << 7),
- eBreakpointEventTypeCommandChanged = (1u << 8),
- eBreakpointEventTypeConditionChanged = (1u << 9),
- eBreakpointEventTypeIgnoreChanged = (1u << 10),
- eBreakpointEventTypeThreadChanged = (1u << 11)
- } BreakpointEventType;
-
-
- //----------------------------------------------------------------------
- /// Programming language type.
- ///
- /// These enumerations use the same language enumerations as the DWARF
- /// specification for ease of use and consistency.
- /// The enum -> string code is in LanguageRuntime.cpp, don't change this
- /// table without updating that code as well.
- //----------------------------------------------------------------------
- typedef enum LanguageType
- {
- eLanguageTypeUnknown = 0x0000, ///< Unknown or invalid language value.
- eLanguageTypeC89 = 0x0001, ///< ISO C:1989.
- eLanguageTypeC = 0x0002, ///< Non-standardized C, such as K&R.
- eLanguageTypeAda83 = 0x0003, ///< ISO Ada:1983.
- eLanguageTypeC_plus_plus = 0x0004, ///< ISO C++:1998.
- eLanguageTypeCobol74 = 0x0005, ///< ISO Cobol:1974.
- eLanguageTypeCobol85 = 0x0006, ///< ISO Cobol:1985.
- eLanguageTypeFortran77 = 0x0007, ///< ISO Fortran 77.
- eLanguageTypeFortran90 = 0x0008, ///< ISO Fortran 90.
- eLanguageTypePascal83 = 0x0009, ///< ISO Pascal:1983.
- eLanguageTypeModula2 = 0x000a, ///< ISO Modula-2:1996.
- eLanguageTypeJava = 0x000b, ///< Java.
- eLanguageTypeC99 = 0x000c, ///< ISO C:1999.
- eLanguageTypeAda95 = 0x000d, ///< ISO Ada:1995.
- eLanguageTypeFortran95 = 0x000e, ///< ISO Fortran 95.
- eLanguageTypePLI = 0x000f, ///< ANSI PL/I:1976.
- eLanguageTypeObjC = 0x0010, ///< Objective-C.
- eLanguageTypeObjC_plus_plus = 0x0011, ///< Objective-C++.
- eLanguageTypeUPC = 0x0012, ///< Unified Parallel C.
- eLanguageTypeD = 0x0013, ///< D.
- eLanguageTypePython = 0x0014 ///< Python.
- } LanguageType;
-
- typedef enum DynamicValueType
- {
- eNoDynamicValues = 0,
- eDynamicCanRunTarget = 1,
- eDynamicDontRunTarget = 2
- } DynamicValueType;
-
- typedef enum AccessType
- {
- eAccessNone,
- eAccessPublic,
- eAccessPrivate,
- eAccessProtected,
- eAccessPackage
- } AccessType;
-
- typedef enum CommandArgumentType
- {
- eArgTypeAddress = 0,
- eArgTypeAliasName,
- eArgTypeAliasOptions,
- eArgTypeArchitecture,
- eArgTypeBoolean,
- eArgTypeBreakpointID,
- eArgTypeBreakpointIDRange,
- eArgTypeByteSize,
- eArgTypeClassName,
- eArgTypeCommandName,
- eArgTypeCount,
- eArgTypeEndAddress,
- eArgTypeExpression,
- eArgTypeExpressionPath,
- eArgTypeExprFormat,
- eArgTypeFilename,
- eArgTypeFormat,
- eArgTypeFrameIndex,
- eArgTypeFullName,
- eArgTypeFunctionName,
- eArgTypeGDBFormat,
- eArgTypeIndex,
- eArgTypeLanguage,
- eArgTypeLineNum,
- eArgTypeLogCategory,
- eArgTypeLogChannel,
- eArgTypeMethod,
- eArgTypeName,
- eArgTypeNewPathPrefix,
- eArgTypeNumLines,
- eArgTypeNumberPerLine,
- eArgTypeOffset,
- eArgTypeOldPathPrefix,
- eArgTypeOneLiner,
- eArgTypePath,
- eArgTypePid,
- eArgTypePlugin,
- eArgTypeProcessName,
- eArgTypePythonClass,
- eArgTypePythonFunction,
- eArgTypePythonScript,
- eArgTypeQueueName,
- eArgTypeRegisterName,
- eArgTypeRegularExpression,
- eArgTypeRunArgs,
- eArgTypeRunMode,
- eArgTypeScriptedCommandSynchronicity,
- eArgTypeScriptLang,
- eArgTypeSearchWord,
- eArgTypeSelector,
- eArgTypeSettingIndex,
- eArgTypeSettingKey,
- eArgTypeSettingPrefix,
- eArgTypeSettingVariableName,
- eArgTypeShlibName,
- eArgTypeSourceFile,
- eArgTypeSortOrder,
- eArgTypeStartAddress,
- eArgTypeSummaryString,
- eArgTypeSymbol,
- eArgTypeThreadID,
- eArgTypeThreadIndex,
- eArgTypeThreadName,
- eArgTypeUnsignedInteger,
- eArgTypeUnixSignal,
- eArgTypeVarName,
- eArgTypeValue,
- eArgTypeWidth,
- eArgTypeNone,
- eArgTypePlatform,
- eArgTypeWatchpointID,
- eArgTypeWatchpointIDRange,
- eArgTypeWatchType,
- eArgTypeLastArg // Always keep this entry as the last entry in this enumeration!!
- } CommandArgumentType;
-
- //----------------------------------------------------------------------
- // Symbol types
- //----------------------------------------------------------------------
- typedef enum SymbolType
- {
- eSymbolTypeAny = 0,
- eSymbolTypeInvalid = 0,
- eSymbolTypeAbsolute,
- eSymbolTypeCode,
- eSymbolTypeData,
- eSymbolTypeTrampoline,
- eSymbolTypeRuntime,
- eSymbolTypeException,
- eSymbolTypeSourceFile,
- eSymbolTypeHeaderFile,
- eSymbolTypeObjectFile,
- eSymbolTypeCommonBlock,
- eSymbolTypeBlock,
- eSymbolTypeLocal,
- eSymbolTypeParam,
- eSymbolTypeVariable,
- eSymbolTypeVariableType,
- eSymbolTypeLineEntry,
- eSymbolTypeLineHeader,
- eSymbolTypeScopeBegin,
- eSymbolTypeScopeEnd,
- eSymbolTypeAdditional, // When symbols take more than one entry, the extra entries get this type
- eSymbolTypeCompiler,
- eSymbolTypeInstrumentation,
- eSymbolTypeUndefined,
- eSymbolTypeObjCClass,
- eSymbolTypeObjCMetaClass,
- eSymbolTypeObjCIVar
- } SymbolType;
-
- typedef enum SectionType
- {
- eSectionTypeInvalid,
- eSectionTypeCode,
- eSectionTypeContainer, // The section contains child sections
- eSectionTypeData,
- eSectionTypeDataCString, // Inlined C string data
- eSectionTypeDataCStringPointers, // Pointers to C string data
- eSectionTypeDataSymbolAddress, // Address of a symbol in the symbol table
- eSectionTypeData4,
- eSectionTypeData8,
- eSectionTypeData16,
- eSectionTypeDataPointers,
- eSectionTypeDebug,
- eSectionTypeZeroFill,
- eSectionTypeDataObjCMessageRefs, // Pointer to function pointer + selector
- eSectionTypeDataObjCCFStrings, // Objective C const CFString/NSString objects
- eSectionTypeDWARFDebugAbbrev,
- eSectionTypeDWARFDebugAranges,
- eSectionTypeDWARFDebugFrame,
- eSectionTypeDWARFDebugInfo,
- eSectionTypeDWARFDebugLine,
- eSectionTypeDWARFDebugLoc,
- eSectionTypeDWARFDebugMacInfo,
- eSectionTypeDWARFDebugPubNames,
- eSectionTypeDWARFDebugPubTypes,
- eSectionTypeDWARFDebugRanges,
- eSectionTypeDWARFDebugStr,
- eSectionTypeDWARFAppleNames,
- eSectionTypeDWARFAppleTypes,
- eSectionTypeDWARFAppleNamespaces,
- eSectionTypeDWARFAppleObjC,
- eSectionTypeEHFrame,
- eSectionTypeOther
-
- } SectionType;
-
- typedef enum EmulateInstructionOptions
- {
- eEmulateInstructionOptionNone = (0u),
- eEmulateInstructionOptionAutoAdvancePC = (1u << 0),
- eEmulateInstructionOptionIgnoreConditions = (1u << 1)
- } EmulateInstructionOptions;
-
- typedef enum FunctionNameType
- {
- eFunctionNameTypeNone = 0u,
- eFunctionNameTypeAuto = (1u << 1), // Automatically figure out which FunctionNameType
- // bits to set based on the function name.
- eFunctionNameTypeFull = (1u << 2), // The function name.
- // For C this is the same as just the name of the function
- // For C++ this is the mangled or demangled version of the mangled name.
- // For ObjC this is the full function signature with the + or
- // - and the square brackets and the class and selector
- eFunctionNameTypeBase = (1u << 3), // The function name only, no namespaces or arguments and no class
- // methods or selectors will be searched.
- eFunctionNameTypeMethod = (1u << 4), // Find function by method name (C++) with no namespace or arguments
- eFunctionNameTypeSelector = (1u << 5), // Find function by selector name (ObjC) names
- eFunctionNameTypeAny = (eFunctionNameTypeFull |
- eFunctionNameTypeBase |
- eFunctionNameTypeMethod |
- eFunctionNameTypeSelector )
- } FunctionNameType;
-
-
- //----------------------------------------------------------------------
- // Basic types enumeration for the public API SBType::GetBasicType()
- //----------------------------------------------------------------------
- typedef enum BasicType
- {
- eBasicTypeInvalid = 0,
- eBasicTypeVoid = 1,
- eBasicTypeChar,
- eBasicTypeSignedChar,
- eBasicTypeWChar,
- eBasicTypeChar16,
- eBasicTypeChar32,
- eBasicTypeShort,
- eBasicTypeUnsignedShort,
- eBasicTypeInt,
- eBasicTypeUnsignedInt,
- eBasicTypeLong,
- eBasicTypeUnsignedLong,
- eBasicTypeLongLong,
- eBasicTypeUnsignedLongLong,
- eBasicTypeInt128,
- eBasicTypeUnsignedInt128,
- eBasicTypeBool,
- eBasicTypeFloat,
- eBasicTypeDouble,
- eBasicTypeLongDouble,
- eBasicTypeFloatComplex,
- eBasicTypeDoubleComplex,
- eBasicTypeLongDoubleComplex,
- eBasicTypeObjCID,
- eBasicTypeObjCClass,
- eBasicTypeObjCSel
- } BasicType;
-
- typedef enum TypeClass
- {
- eTypeClassInvalid = (0u),
- eTypeClassArray = (1u << 0),
- eTypeClassBlockPointer = (1u << 1),
- eTypeClassBuiltin = (1u << 2),
- eTypeClassClass = (1u << 3),
- eTypeClassComplexFloat = (1u << 4),
- eTypeClassComplexInteger = (1u << 5),
- eTypeClassEnumeration = (1u << 6),
- eTypeClassFunction = (1u << 7),
- eTypeClassMemberPointer = (1u << 8),
- eTypeClassObjCObject = (1u << 9),
- eTypeClassObjCInterface = (1u << 10),
- eTypeClassObjCObjectPointer = (1u << 11),
- eTypeClassPointer = (1u << 12),
- eTypeClassReference = (1u << 13),
- eTypeClassStruct = (1u << 14),
- eTypeClassTypedef = (1u << 15),
- eTypeClassUnion = (1u << 16),
- eTypeClassVector = (1u << 17),
- // Define the last type class as the MSBit of a 32 bit value
- eTypeClassOther = (1u << 31),
- // Define a mask that can be used for any type when finding types
- eTypeClassAny = (0xffffffffu)
- }TypeClass;
-
- typedef enum TemplateArgumentKind
- {
- eTemplateArgumentKindNull = 0,
- eTemplateArgumentKindType,
- eTemplateArgumentKindDeclaration,
- eTemplateArgumentKindIntegral,
- eTemplateArgumentKindTemplate,
- eTemplateArgumentKindTemplateExpansion,
- eTemplateArgumentKindExpression,
- eTemplateArgumentKindPack
-
- } TemplateArgumentKind;
-
- //----------------------------------------------------------------------
- // Options that can be set for a formatter to alter its behavior
- // Not all of these are applicable to all formatter types
- //----------------------------------------------------------------------
- typedef enum TypeOptions
- {
- eTypeOptionNone = (0u),
- eTypeOptionCascade = (1u << 0),
- eTypeOptionSkipPointers = (1u << 1),
- eTypeOptionSkipReferences = (1u << 2),
- eTypeOptionHideChildren = (1u << 3),
- eTypeOptionHideValue = (1u << 4),
- eTypeOptionShowOneLiner = (1u << 5),
- eTypeOptionHideNames = (1u << 6)
- } TypeOptions;
-
- //----------------------------------------------------------------------
- // This is the return value for frame comparisons. When frame A pushes
- // frame B onto the stack, frame A is OLDER than frame B.
- //----------------------------------------------------------------------
- typedef enum FrameComparison
- {
- eFrameCompareInvalid,
- eFrameCompareUnknown,
- eFrameCompareEqual,
- eFrameCompareYounger,
- eFrameCompareOlder
- } FrameComparison;
-
- //----------------------------------------------------------------------
- // Address Class
- //
- // A way of classifying an address used for disassembling and setting
- // breakpoints. Many object files can track exactly what parts of their
- // object files are code, data and other information. This is of course
- // above and beyond just looking at the section types. For example, code
- // might contain PC relative data and the object file might be able to
- // tell us that an address in code is data.
- //----------------------------------------------------------------------
- typedef enum AddressClass
- {
- eAddressClassInvalid,
- eAddressClassUnknown,
- eAddressClassCode,
- eAddressClassCodeAlternateISA,
- eAddressClassData,
- eAddressClassDebug,
- eAddressClassRuntime
- } AddressClass;
-
-} // namespace lldb
-
-
-#endif // LLDB_lldb_enumerations_h_
Removed: lldb/branches/windows/ll.patch
URL: http://llvm.org/viewvc/llvm-project/lldb/branches/windows/ll.patch?rev=167219&view=auto
==============================================================================
--- lldb/branches/windows/ll.patch (original)
+++ lldb/branches/windows/ll.patch (removed)
@@ -1,247 +0,0 @@
-Index: include/lldb/API/SBTarget.h
-===================================================================
---- include/lldb/API/SBTarget.h (revision 165938)
-+++ include/lldb/API/SBTarget.h (working copy)
-@@ -452,6 +452,30 @@
- const char *url,
- const char *plugin_name,
- SBError& error);
-+
-+ //------------------------------------------------------------------
-+ /// Connect to a GDB remote platform with url.
-+ ///
-+ /// @param[in] listener
-+ /// An optional listener that will receive all process events.
-+ /// If \a listener is valid then \a listener will listen to all
-+ /// process events. If not valid, then this target's debugger
-+ /// (SBTarget::GetDebugger()) will listen to all process events.
-+ ///
-+ /// @param[in] url
-+ /// The url to connect to, e.g., 'connect://localhost:12345'.
-+ ///
-+ /// @param[in] plugin_name
-+ /// The plugin name to be used; can be NULL.
-+ ///
-+ /// @param[out] error
-+ /// An error explaining what went wrong if the connect fails.
-+ ///
-+ //------------------------------------------------------------------
-+ void
-+ ConnectRemotePlatform (const char *url,
-+ const char *platform,
-+ SBError& error);
-
- lldb::SBFileSpec
- GetExecutable ();
-Index: include/lldb/API/SBType.h
-===================================================================
---- include/lldb/API/SBType.h (revision 165942)
-+++ include/lldb/API/SBType.h (working copy)
-@@ -141,6 +141,18 @@
- lldb::TemplateArgumentKind
- GetTemplateArgumentKind (uint32_t idx);
-
-+ bool
-+ IsFunctionType ();
-+
-+ lldb::SBType
-+ GetFunctionReturnType ();
-+
-+ int
-+ GetNumberOfFunctionArguments ();
-+
-+ lldb::SBType
-+ GetFunctionArgumentTypeAtIndex (int no);
-+
- const char*
- GetName();
-
-Index: include/lldb/Symbol/ClangASTContext.h
-===================================================================
---- include/lldb/Symbol/ClangASTContext.h (revision 166275)
-+++ include/lldb/Symbol/ClangASTContext.h (working copy)
-@@ -963,12 +963,19 @@
- //------------------------------------------------------------------
- // Qualifiers
- //------------------------------------------------------------------
-- static unsigned
-- GetTypeQualifiers(lldb::clang_type_t clang_type);
--protected:
-- //------------------------------------------------------------------
-- // Classes that inherit from ClangASTContext can see and modify these
-- //------------------------------------------------------------------
-+ static unsigned
-+ GetTypeQualifiers(lldb::clang_type_t clang_type);
-+protected:
-+
-+ lldb::clang_type_t
-+ GetBuiltinTypeForDWARFEncodingAndBitSize_Private (const char *type_name,
-+ uint32_t dw_ate,
-+ uint32_t bit_size);
-+
-+
-+ //------------------------------------------------------------------
-+ // Classes that inherit from ClangASTContext can see and modify these
-+ //------------------------------------------------------------------
- std::string m_target_triple;
- std::auto_ptr<clang::ASTContext> m_ast_ap;
- std::auto_ptr<clang::LangOptions> m_language_options_ap;
-Index: source/API/SBAddress.cpp
-===================================================================
---- source/API/SBAddress.cpp (revision 165938)
-+++ source/API/SBAddress.cpp (working copy)
-@@ -182,7 +182,7 @@
- SBAddress::GetOffset ()
- {
- if (m_opaque_ap.get())
-- m_opaque_ap->GetOffset();
-+ return m_opaque_ap->GetOffset();
- return 0;
- }
-
-Index: source/API/SBTarget.cpp
-===================================================================
---- source/API/SBTarget.cpp (revision 165942)
-+++ source/API/SBTarget.cpp (working copy)
-@@ -1101,6 +1101,33 @@
- return sb_process;
- }
-
-+void
-+SBTarget::ConnectRemotePlatform (const char *url,
-+ const char *platform,
-+ SBError& error)
-+{
-+ TargetSP target_sp(GetSP());
-+ Debugger& debugger = target_sp->GetDebugger();
-+ PlatformList & list = debugger.GetPlatformList();
-+
-+ PlatformSP found;
-+ for (int i = 0; i < list.GetSize(); i++) {
-+ PlatformSP p = list.GetAtIndex(i);
-+ if (strcmp(p->GetShortPluginName(), platform) == 0){
-+ found = p;
-+ break;
-+ }
-+ }
-+ if (!found) {
-+ error.SetErrorStringWithFormat("No platform with the name %s", platform);
-+ return;
-+ }
-+ list.SetSelectedPlatform(found);
-+ Args args(url);
-+ error.SetError(found->ConnectRemote(args));
-+}
-+
-+
- SBFileSpec
- SBTarget::GetExecutable ()
- {
-Index: source/API/SBType.cpp
-===================================================================
---- source/API/SBType.cpp (revision 165942)
-+++ source/API/SBType.cpp (working copy)
-@@ -219,7 +219,58 @@
- return SBType(ClangASTType(m_opaque_sp->GetASTContext(),qt.getNonReferenceType().getAsOpaquePtr()));
- }
-
-+bool
-+SBType::IsFunctionType ()
-+{
-+ if (!IsValid())
-+ return false;
-+ QualType qt = QualType::getFromOpaquePtr(m_opaque_sp->GetOpaqueQualType());
-+
-+ return qt->isFunctionProtoType();
-+}
-+
-+lldb::SBType
-+SBType::GetFunctionReturnType ()
-+{
-+ if (!IsValid())
-+ return lldb::SBType();
-+ QualType qt = QualType::getFromOpaquePtr(m_opaque_sp->GetOpaqueQualType());
-+
-+ if (qt->isFunctionProtoType())
-+ return SBType(ClangASTType(m_opaque_sp->GetASTContext(), cast<FunctionProtoType>(qt.getTypePtr())->getResultType().getAsOpaquePtr()));
-+ return lldb::SBType();
-+}
-+
-+int
-+SBType::GetNumberOfFunctionArguments ()
-+{
-+ if (!IsValid())
-+ return 0;
-+ QualType qt = QualType::getFromOpaquePtr(m_opaque_sp->GetOpaqueQualType());
-+
-+ if (qt->isFunctionProtoType())
-+ return cast<FunctionProtoType>(qt.getTypePtr())->getNumArgs();
-+ return 0;
-+}
-+
- lldb::SBType
-+SBType::GetFunctionArgumentTypeAtIndex (int no)
-+{
-+ if (!IsValid())
-+ return lldb::SBType();
-+ QualType qt = QualType::getFromOpaquePtr(m_opaque_sp->GetOpaqueQualType());
-+
-+ if (qt->isFunctionProtoType()) {
-+ const FunctionProtoType* func = cast<FunctionProtoType>(qt.getTypePtr());
-+ if (no >= 0 && no < func->getNumArgs())
-+ {
-+ return SBType(ClangASTType(m_opaque_sp->GetASTContext(), func->getArgType(no).getAsOpaquePtr()));
-+ }
-+ }
-+ return lldb::SBType();
-+}
-+
-+lldb::SBType
- SBType::GetUnqualifiedType()
- {
- if (!IsValid())
-Index: source/Symbol/ClangASTContext.cpp
-===================================================================
---- source/Symbol/ClangASTContext.cpp (revision 166275)
-+++ source/Symbol/ClangASTContext.cpp (working copy)
-@@ -715,12 +715,34 @@
- return NULL;
- }
-
--clang_type_t
--ClangASTContext::GetBuiltinTypeForDWARFEncodingAndBitSize (const char *type_name, uint32_t dw_ate, uint32_t bit_size)
--{
-- ASTContext *ast = getASTContext();
--
--#define streq(a,b) strcmp(a,b) == 0
-+clang_type_t
-+ClangASTContext::GetBuiltinTypeForDWARFEncodingAndBitSize (const char *type_name, uint32_t dw_ate, uint32_t bit_size)
-+{
-+ clang_type_t clang_type = GetBuiltinTypeForDWARFEncodingAndBitSize_Private (type_name, dw_ate, bit_size);
-+ if (type_name && type_name[0] && clang_type)
-+ {
-+ ASTContext *ast = getASTContext();
-+ std::string clang_type_name (ClangASTType::GetTypeNameForOpaqueQualType (ast, clang_type));
-+ if (clang_type_name.compare(type_name) != 0)
-+ {
-+ if (strchr(type_name, ' ') == NULL)
-+ {
-+ //printf ("\ncreating typedef: typedef %s %s;\n", clang_type_name.c_str(), type_name);
-+ clang_type_t typedef_clang_type = CreateTypedefType (type_name, clang_type, NULL);
-+ if (typedef_clang_type)
-+ return typedef_clang_type;
-+ }
-+ }
-+ }
-+ return clang_type;
-+}
-+
-+clang_type_t
-+ClangASTContext::GetBuiltinTypeForDWARFEncodingAndBitSize_Private (const char *type_name, uint32_t dw_ate, uint32_t bit_size)
-+{
-+ ASTContext *ast = getASTContext();
-+
-+#define streq(a,b) strcmp(a,b) == 0
- assert (ast != NULL);
- if (ast)
- {
Removed: lldb/branches/windows/lldb-changes (3).patch
URL: http://llvm.org/viewvc/llvm-project/lldb/branches/windows/lldb-changes%20%283%29.patch?rev=167219&view=auto
==============================================================================
--- lldb/branches/windows/lldb-changes (3).patch (original)
+++ lldb/branches/windows/lldb-changes (3).patch (removed)
@@ -1,10239 +0,0 @@
-Index: .
-===================================================================
---- . (revision 163322)
-+++ . (working copy)
-
-Property changes on: .
-___________________________________________________________________
-Added: svn:ignore
-## -0,0 +1 ##
-+build
-Index: CMakeLists.txt
-===================================================================
---- CMakeLists.txt (revision 0)
-+++ CMakeLists.txt (working copy)
-@@ -0,0 +1,158 @@
-+# If we are not building as a part of LLVM, build LLDB as an
-+# standalone project, using LLVM as an external library:
-+if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
-+ project(lldb)
-+ cmake_minimum_required(VERSION 2.8)
-+
-+ set(LLDB_PATH_TO_LLVM_SOURCE "" CACHE PATH
-+ "Path to LLVM source code. Not necessary if using an installed LLVM.")
-+ set(LLDB_PATH_TO_LLVM_BUILD "" CACHE PATH
-+ "Path to the directory where LLVM was built or installed.")
-+
-+ set(LLDB_PATH_TO_CLANG_SOURCE "" CACHE PATH
-+ "Path to Clang source code. Not necessary if using an installed Clang.")
-+ set(LLDB_PATH_TO_CLANG_BUILD "" CACHE PATH
-+ "Path to the directory where Clang was built or installed.")
-+
-+ set(LLDB_DISABLE_PYTHON 1 BOOL "Disables the Python scripting integration.")
-+
-+ if (LLDB_PATH_TO_LLVM_SOURCE)
-+ if (NOT EXISTS "${LLDB_PATH_TO_LLVM_SOURCE}/cmake/config-ix.cmake")
-+ message(FATAL_ERROR "Please set LLDB_PATH_TO_LLVM_SOURCE to the root "
-+ "directory of LLVM source code.")
-+ else()
-+ get_filename_component(LLVM_MAIN_SRC_DIR ${LLDB_PATH_TO_LLVM_SOURCE}
-+ ABSOLUTE)
-+ list(APPEND CMAKE_MODULE_PATH "${LLVM_MAIN_SRC_DIR}/cmake/modules")
-+ endif()
-+ endif()
-+
-+ if (LLDB_PATH_TO_CLANG_SOURCE)
-+ get_filename_component(CLANG_MAIN_SRC_DIR ${LLDB_PATH_TO_CLANG_SOURCE}
-+ ABSOLUTE)
-+ endif()
-+
-+ list(APPEND CMAKE_MODULE_PATH "${LLDB_PATH_TO_LLVM_BUILD}/share/llvm/cmake")
-+
-+ get_filename_component(PATH_TO_LLVM_BUILD ${LLDB_PATH_TO_LLVM_BUILD}
-+ ABSOLUTE)
-+
-+ get_filename_component(PATH_TO_CLANG_BUILD ${LLDB_PATH_TO_CLANG_BUILD}
-+ ABSOLUTE)
-+
-+ include(AddLLVM)
-+ include("${LLDB_PATH_TO_LLVM_BUILD}/share/llvm/cmake/LLVMConfig.cmake")
-+ include(HandleLLVMOptions)
-+
-+ set(PACKAGE_VERSION "${LLVM_PACKAGE_VERSION}")
-+
-+ set(LLVM_MAIN_INCLUDE_DIR "${LLVM_MAIN_SRC_DIR}/include")
-+ set(LLVM_BINARY_DIR ${CMAKE_BINARY_DIR})
-+
-+ set(CLANG_MAIN_INCLUDE_DIR "${CLANG_MAIN_SRC_DIR}/include")
-+
-+ set(CMAKE_INCLUDE_CURRENT_DIR ON)
-+ include_directories("${PATH_TO_LLVM_BUILD}/include"
-+ "${LLVM_MAIN_INCLUDE_DIR}"
-+ "${PATH_TO_CLANG_BUILD}/include"
-+ "${CLANG_MAIN_INCLUDE_DIR}"
-+ "${CMAKE_CURRENT_SOURCE_DIR}/source")
-+ link_directories("${PATH_TO_LLVM_BUILD}/lib")
-+
-+ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
-+ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
-+ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
-+
-+ set(LLDB_BUILT_STANDALONE 1)
-+
-+ if (LLDB_DISABLE_PYTHON)
-+ add_definitions( -DLLDB_DISABLE_PYTHON )
-+ endif()
-+endif()
-+
-+macro(add_lldb_definitions)
-+ # We don't want no semicolons on LLDB_DEFINITIONS:
-+ foreach(arg ${ARGN})
-+ set(LLDB_DEFINITIONS "${LLVM_DEFINITIONS} ${arg}")
-+ endforeach(arg)
-+ add_definitions( ${ARGN} )
-+endmacro(add_lldb_definitions)
-+
-+# Disable MSVC warnings
-+if( MSVC )
-+ add_lldb_definitions(
-+ -wd4018 # Suppress 'warning C4018: '>=' : signed/unsigned mismatch'
-+ -wd4068 # Suppress 'warning C4068: unknown pragma'
-+ -wd4150 # Suppress 'warning C4150: deletion of pointer to incomplete type'
-+ -wd4521 # Suppress 'warning C4521: 'type' : multiple copy constructors specified'
-+ )
-+endif()
-+
-+set(LLDB_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
-+set(LLDB_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
-+
-+if (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
-+ message(FATAL_ERROR "In-source builds are not allowed. CMake would overwrite "
-+"the makefiles distributed with LLDB. Please create a directory and run cmake "
-+"from there, passing the path to this source directory as the last argument. "
-+"This process created the file `CMakeCache.txt' and the directory "
-+"`CMakeFiles'. Please delete them.")
-+endif()
-+
-+macro(add_lldb_library name)
-+ llvm_process_sources(srcs ${ARGN})
-+ if (MSVC_IDE OR XCODE)
-+ string(REGEX MATCHALL "/[^/]+" split_path ${CMAKE_CURRENT_SOURCE_DIR})
-+ list(GET split_path -1 dir)
-+ file(GLOB_RECURSE headers
-+ ../../include/lldb${dir}/*.h)
-+ set(srcs ${srcs} ${headers})
-+ endif()
-+ if (MODULE)
-+ set(libkind MODULE)
-+ elseif (SHARED_LIBRARY)
-+ set(libkind SHARED)
-+ else()
-+ set(libkind)
-+ endif()
-+ add_library(${name} ${libkind} ${srcs})
-+ if (LLVM_COMMON_DEPENDS)
-+ add_dependencies(${name} ${LLVM_COMMON_DEPENDS})
-+ endif()
-+
-+ target_link_libraries(${name} ${LLVM_USED_LIBS})
-+ llvm_config(${name} ${LLVM_LINK_COMPONENTS})
-+ target_link_libraries(${name} ${LLVM_COMMON_LIBS})
-+ #target_link_libraries(${name} ${CLANG_USED_LIBS})
-+ link_system_libs(${name})
-+
-+ install(TARGETS ${name}
-+ LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
-+ ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX})
-+ set_target_properties(${name} PROPERTIES FOLDER "lldb libraries")
-+endmacro(add_lldb_library)
-+
-+macro(add_lldb_executable name)
-+ add_llvm_executable(${name} ${ARGN})
-+ target_link_libraries(${name} ${LLDB_USED_LIBS})
-+ target_link_libraries(${name} ${CLANG_USED_LIBS})
-+ set_target_properties(${name} PROPERTIES FOLDER "lldb executables")
-+endmacro(add_lldb_executable)
-+
-+include_directories(BEFORE
-+ ${CMAKE_CURRENT_BINARY_DIR}/include
-+ ${CMAKE_CURRENT_SOURCE_DIR}/include
-+ )
-+
-+install(DIRECTORY include/
-+ DESTINATION include
-+ FILES_MATCHING
-+ PATTERN "*.h"
-+ PATTERN ".svn" EXCLUDE
-+ )
-+
-+#add_subdirectory(include)
-+#add_subdirectory(scripts)
-+add_subdirectory(source)
-+#add_subdirectory(test)
-+add_subdirectory(tools)
-Index: include/dirent.h
-===================================================================
---- include/dirent.h (revision 0)
-+++ include/dirent.h (working copy)
-@@ -0,0 +1,395 @@
-+/*****************************************************************************
-+ * dirent.h - dirent API for Microsoft Visual Studio
-+ *
-+ * Copyright (C) 2006 Toni Ronkko
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining
-+ * a copy of this software and associated documentation files (the
-+ * ``Software''), to deal in the Software without restriction, including
-+ * without limitation the rights to use, copy, modify, merge, publish,
-+ * distribute, sublicense, and/or sell copies of the Software, and to
-+ * permit persons to whom the Software is furnished to do so, subject to
-+ * the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included
-+ * in all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
-+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-+ * IN NO EVENT SHALL TONI RONKKO BE LIABLE FOR ANY CLAIM, DAMAGES OR
-+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ * OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ * Aug 11, 2010, Toni Ronkko
-+ * Added d_type and d_namlen fields to dirent structure. The former is
-+ * especially useful for determining whether directory entry represents a
-+ * file or a directory. For more information, see
-+ * http://www.delorie.com/gnu/docs/glibc/libc_270.html
-+ *
-+ * Aug 11, 2010, Toni Ronkko
-+ * Improved conformance to the standards. For example, errno is now set
-+ * properly on failure and assert() is never used. Thanks to Peter Brockam
-+ * for suggestions.
-+ *
-+ * Aug 11, 2010, Toni Ronkko
-+ * Fixed a bug in rewinddir(): when using relative directory names, change
-+ * of working directory no longer causes rewinddir() to fail.
-+ *
-+ * Dec 15, 2009, John Cunningham
-+ * Added rewinddir member function
-+ *
-+ * Jan 18, 2008, Toni Ronkko
-+ * Using FindFirstFileA and WIN32_FIND_DATAA to avoid converting string
-+ * between multi-byte and unicode representations. This makes the
-+ * code simpler and also allows the code to be compiled under MingW. Thanks
-+ * to Azriel Fasten for the suggestion.
-+ *
-+ * Mar 4, 2007, Toni Ronkko
-+ * Bug fix: due to the strncpy_s() function this file only compiled in
-+ * Visual Studio 2005. Using the new string functions only when the
-+ * compiler version allows.
-+ *
-+ * Nov 2, 2006, Toni Ronkko
-+ * Major update: removed support for Watcom C, MS-DOS and Turbo C to
-+ * simplify the file, updated the code to compile cleanly on Visual
-+ * Studio 2005 with both unicode and multi-byte character strings,
-+ * removed rewinddir() as it had a bug.
-+ *
-+ * Aug 20, 2006, Toni Ronkko
-+ * Removed all remarks about MSVC 1.0, which is antiqued now. Simplified
-+ * comments by removing SGML tags.
-+ *
-+ * May 14 2002, Toni Ronkko
-+ * Embedded the function definitions directly to the header so that no
-+ * source modules need to be included in the Visual Studio project. Removed
-+ * all the dependencies to other projects so that this very header can be
-+ * used independently.
-+ *
-+ * May 28 1998, Toni Ronkko
-+ * First version.
-+ *****************************************************************************/
-+#ifndef DIRENT_H
-+#define DIRENT_H
-+
-+#define NOMINMAX
-+#define WIN32_LEAN_AND_MEAN
-+#include <windows.h>
-+#include <string.h>
-+#include <stdlib.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <errno.h>
-+
-+/* File type and permission flags for stat() */
-+#if defined(_MSC_VER) && !defined(S_IREAD)
-+# define S_IFMT _S_IFMT /* file type mask */
-+# define S_IFDIR _S_IFDIR /* directory */
-+# define S_IFCHR _S_IFCHR /* character device */
-+# define S_IFFIFO _S_IFFIFO /* pipe */
-+# define S_IFREG _S_IFREG /* regular file */
-+# define S_IREAD _S_IREAD /* read permission */
-+# define S_IWRITE _S_IWRITE /* write permission */
-+# define S_IEXEC _S_IEXEC /* execute permission */
-+#endif
-+
-+#ifndef S_IFBLK
-+#define S_IFBLK 0060000 /* block device */
-+#endif
-+
-+#ifndef S_IFLNK
-+#define S_IFLNK 0120000 /* link */
-+#endif
-+
-+#ifndef S_IFSOCK
-+#define S_IFSOCK 0140000 /* socket */
-+#endif
-+
-+#ifndef S_IFIFO
-+#define S_IFIFO 0010000 /* fifo */
-+#endif
-+
-+#if defined(_MSC_VER)
-+# define S_IRUSR S_IREAD /* read, user */
-+# define S_IWUSR S_IWRITE /* write, user */
-+# define S_IXUSR 0 /* execute, user */
-+# define S_IRGRP 0 /* read, group */
-+# define S_IWGRP 0 /* write, group */
-+# define S_IXGRP 0 /* execute, group */
-+# define S_IROTH 0 /* read, others */
-+# define S_IWOTH 0 /* write, others */
-+# define S_IXOTH 0 /* execute, others */
-+#endif
-+
-+/* Indicates that d_type field is available in dirent structure */
-+#define _DIRENT_HAVE_D_TYPE
-+
-+/* File type flags for d_type */
-+#define DT_UNKNOWN 0
-+#define DT_REG S_IFREG
-+#define DT_DIR S_IFDIR
-+#define DT_FIFO S_IFIFO
-+#define DT_SOCK S_IFSOCK
-+#define DT_CHR S_IFCHR
-+#define DT_BLK S_IFBLK
-+#define DT_LNK S_IFLNK
-+
-+/* Macros for converting between st_mode and d_type */
-+#define IFTODT(mode) ((mode) & S_IFMT)
-+#define DTTOIF(type) (type)
-+
-+/*
-+ * File type macros. Note that block devices, sockets and links cannot be
-+ * distinguished on Windows and the macros S_ISBLK, S_ISSOCK and S_ISLNK are
-+ * only defined for compatibility. These macros should always return false
-+ * on Windows.
-+ */
-+
-+#ifndef S_ISFIFO
-+#define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFFIFO)
-+#endif
-+
-+#ifndef S_ISDIR
-+#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
-+#endif
-+
-+#ifndef S_ISREG
-+#define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
-+#endif
-+
-+#define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK)
-+#define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK)
-+
-+#ifndef S_ISCHR
-+#define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR)
-+#endif
-+
-+#ifndef S_ISBLK
-+#define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK)
-+#endif
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+
-+typedef struct dirent
-+{
-+ char d_name[MAX_PATH + 1]; /* File name */
-+ size_t d_namlen; /* Length of name without \0 */
-+ int d_type; /* File type */
-+} dirent;
-+
-+
-+typedef struct DIR
-+{
-+ dirent curentry; /* Current directory entry */
-+ WIN32_FIND_DATAA find_data; /* Private file data */
-+ int cached; /* True if data is valid */
-+ HANDLE search_handle; /* Win32 search handle */
-+ char patt[MAX_PATH + 3]; /* Initial directory name */
-+} DIR;
-+
-+
-+/* Forward declarations */
-+static DIR *opendir(const char *dirname);
-+static struct dirent *readdir(DIR *dirp);
-+static int closedir(DIR *dirp);
-+static void rewinddir(DIR* dirp);
-+
-+
-+/* Use the new safe string functions introduced in Visual Studio 2005 */
-+#if defined(_MSC_VER) && _MSC_VER >= 1400
-+# define DIRENT_STRNCPY(dest,src,size) strncpy_s((dest),(size),(src),_TRUNCATE)
-+#else
-+# define DIRENT_STRNCPY(dest,src,size) strncpy((dest),(src),(size))
-+#endif
-+
-+/* Set errno variable */
-+#if defined(_MSC_VER)
-+#define DIRENT_SET_ERRNO(x) _set_errno (x)
-+#else
-+#define DIRENT_SET_ERRNO(x) (errno = (x))
-+#endif
-+
-+
-+/*****************************************************************************
-+ * Open directory stream DIRNAME for read and return a pointer to the
-+ * internal working area that is used to retrieve individual directory
-+ * entries.
-+ */
-+static DIR *opendir(const char *dirname)
-+{
-+ DIR *dirp;
-+
-+ /* ensure that the resulting search pattern will be a valid file name */
-+ if (dirname == NULL) {
-+ DIRENT_SET_ERRNO (ENOENT);
-+ return NULL;
-+ }
-+ if (strlen (dirname) + 3 >= MAX_PATH) {
-+ DIRENT_SET_ERRNO (ENAMETOOLONG);
-+ return NULL;
-+ }
-+
-+ /* construct new DIR structure */
-+ dirp = (DIR*) malloc (sizeof (struct DIR));
-+ if (dirp != NULL) {
-+ int error;
-+
-+ /*
-+ * Convert relative directory name to an absolute directory one. This
-+ * allows rewinddir() to function correctly when the current working
-+ * directory is changed between opendir() and rewinddir().
-+ */
-+ if (GetFullPathNameA (dirname, MAX_PATH, dirp->patt, NULL)) {
-+ char *p;
-+
-+ /* append the search pattern "\\*\0" to the directory name */
-+ p = strchr (dirp->patt, '\0');
-+ if (dirp->patt < p && *(p-1) != '\\' && *(p-1) != ':') {
-+ *p++ = '\\';
-+ }
-+ *p++ = '*';
-+ *p = '\0';
-+
-+ /* open directory stream and retrieve the first entry */
-+ dirp->search_handle = FindFirstFileA (dirp->patt, &dirp->find_data);
-+ if (dirp->search_handle != INVALID_HANDLE_VALUE) {
-+ /* a directory entry is now waiting in memory */
-+ dirp->cached = 1;
-+ error = 0;
-+ } else {
-+ /* search pattern is not a directory name? */
-+ DIRENT_SET_ERRNO (ENOENT);
-+ error = 1;
-+ }
-+ } else {
-+ /* buffer too small */
-+ DIRENT_SET_ERRNO (ENOMEM);
-+ error = 1;
-+ }
-+
-+ if (error) {
-+ free (dirp);
-+ dirp = NULL;
-+ }
-+ }
-+
-+ return dirp;
-+}
-+
-+
-+/*****************************************************************************
-+ * Read a directory entry, and return a pointer to a dirent structure
-+ * containing the name of the entry in d_name field. Individual directory
-+ * entries returned by this very function include regular files,
-+ * sub-directories, pseudo-directories "." and "..", but also volume labels,
-+ * hidden files and system files may be returned.
-+ */
-+static struct dirent *readdir(DIR *dirp)
-+{
-+ DWORD attr;
-+ if (dirp == NULL) {
-+ /* directory stream did not open */
-+ DIRENT_SET_ERRNO (EBADF);
-+ return NULL;
-+ }
-+
-+ /* get next directory entry */
-+ if (dirp->cached != 0) {
-+ /* a valid directory entry already in memory */
-+ dirp->cached = 0;
-+ } else {
-+ /* get the next directory entry from stream */
-+ if (dirp->search_handle == INVALID_HANDLE_VALUE) {
-+ return NULL;
-+ }
-+ if (FindNextFileA (dirp->search_handle, &dirp->find_data) == FALSE) {
-+ /* the very last entry has been processed or an error occured */
-+ FindClose (dirp->search_handle);
-+ dirp->search_handle = INVALID_HANDLE_VALUE;
-+ return NULL;
-+ }
-+ }
-+
-+ /* copy as a multibyte character string */
-+ DIRENT_STRNCPY ( dirp->curentry.d_name,
-+ dirp->find_data.cFileName,
-+ sizeof(dirp->curentry.d_name) );
-+ dirp->curentry.d_name[MAX_PATH] = '\0';
-+
-+ /* compute the length of name */
-+ dirp->curentry.d_namlen = strlen (dirp->curentry.d_name);
-+
-+ /* determine file type */
-+ attr = dirp->find_data.dwFileAttributes;
-+ if ((attr & FILE_ATTRIBUTE_DEVICE) != 0) {
-+ dirp->curentry.d_type = DT_CHR;
-+ } else if ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0) {
-+ dirp->curentry.d_type = DT_DIR;
-+ } else {
-+ dirp->curentry.d_type = DT_REG;
-+ }
-+ return &dirp->curentry;
-+}
-+
-+
-+/*****************************************************************************
-+ * Close directory stream opened by opendir() function. Close of the
-+ * directory stream invalidates the DIR structure as well as any previously
-+ * read directory entry.
-+ */
-+static int closedir(DIR *dirp)
-+{
-+ if (dirp == NULL) {
-+ /* invalid directory stream */
-+ DIRENT_SET_ERRNO (EBADF);
-+ return -1;
-+ }
-+
-+ /* release search handle */
-+ if (dirp->search_handle != INVALID_HANDLE_VALUE) {
-+ FindClose (dirp->search_handle);
-+ dirp->search_handle = INVALID_HANDLE_VALUE;
-+ }
-+
-+ /* release directory structure */
-+ free (dirp);
-+ return 0;
-+}
-+
-+
-+/*****************************************************************************
-+ * Resets the position of the directory stream to which dirp refers to the
-+ * beginning of the directory. It also causes the directory stream to refer
-+ * to the current state of the corresponding directory, as a call to opendir()
-+ * would have done. If dirp does not refer to a directory stream, the effect
-+ * is undefined.
-+ */
-+static void rewinddir(DIR* dirp)
-+{
-+ if (dirp != NULL) {
-+ /* release search handle */
-+ if (dirp->search_handle != INVALID_HANDLE_VALUE) {
-+ FindClose (dirp->search_handle);
-+ }
-+
-+ /* open new search handle and retrieve the first entry */
-+ dirp->search_handle = FindFirstFileA (dirp->patt, &dirp->find_data);
-+ if (dirp->search_handle != INVALID_HANDLE_VALUE) {
-+ /* a directory entry is now waiting in memory */
-+ dirp->cached = 1;
-+ } else {
-+ /* failed to re-open directory: no directory entry in memory */
-+ dirp->cached = 0;
-+ }
-+ }
-+}
-+
-+
-+#ifdef __cplusplus
-+}
-+#endif
-+#endif /*DIRENT_H*/
-Index: include/lldb/API/SBCommandReturnObject.h
-===================================================================
---- include/lldb/API/SBCommandReturnObject.h (revision 163322)
-+++ include/lldb/API/SBCommandReturnObject.h (working copy)
-@@ -87,7 +87,7 @@
- PutCString(const char* string, int len = -1);
-
- size_t
-- Printf(const char* format, ...) __attribute__ ((format (printf, 2, 3)));
-+ Printf(const char* format, ...) LLDB_ATTR(__attribute__ ((format (printf, 2, 3))));
-
- protected:
- friend class SBCommandInterpreter;
-Index: include/lldb/API/SBError.h
-===================================================================
---- include/lldb/API/SBError.h (revision 163322)
-+++ include/lldb/API/SBError.h (working copy)
-@@ -56,7 +56,7 @@
- SetErrorString (const char *err_str);
-
- int
-- SetErrorStringWithFormat (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
-+ SetErrorStringWithFormat (const char *format, ...) LLDB_ATTR(__attribute__ ((format (printf, 2, 3))));
-
- bool
- IsValid () const;
-Index: include/lldb/API/SBHostOS.h
-===================================================================
---- include/lldb/API/SBHostOS.h (revision 163322)
-+++ include/lldb/API/SBHostOS.h (working copy)
-@@ -27,7 +27,7 @@
-
- static lldb::thread_t
- ThreadCreate (const char *name,
-- void *(*thread_function)(void *),
-+ thread_func_t thread_function,
- void *thread_arg,
- lldb::SBError *err);
-
-@@ -40,7 +40,7 @@
- lldb::SBError *err);
- static bool
- ThreadJoin (lldb::thread_t thread,
-- void **result,
-+ thread_result_t *result,
- lldb::SBError *err);
-
-
-Index: include/lldb/API/SBStream.h
-===================================================================
---- include/lldb/API/SBStream.h (revision 163322)
-+++ include/lldb/API/SBStream.h (working copy)
-@@ -39,7 +39,7 @@
- GetSize();
-
- void
-- Printf (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
-+ Printf (const char *format, ...) LLDB_ATTR(__attribute__ ((format (printf, 2, 3))));
-
- void
- RedirectToFile (const char *path, bool append);
-Index: include/lldb/Breakpoint/BreakpointLocation.h
-===================================================================
---- include/lldb/Breakpoint/BreakpointLocation.h (revision 163322)
-+++ include/lldb/Breakpoint/BreakpointLocation.h (working copy)
-@@ -320,7 +320,7 @@
-
- protected:
- friend class BreakpointLocationList;
-- friend class CommandObjectBreakpointCommandAdd;
-+ //friend class CommandObjectBreakpointCommandAdd;
- friend class Process;
-
- //------------------------------------------------------------------
-Index: include/lldb/Core/ConnectionFileDescriptor.h
-===================================================================
---- include/lldb/Core/ConnectionFileDescriptor.h (revision 163322)
-+++ include/lldb/Core/ConnectionFileDescriptor.h (working copy)
-@@ -11,9 +11,11 @@
- #define liblldb_ConnectionFileDescriptor_h_
-
- // C Includes
-+#ifdef _POSIX_SOURCE
- #include <sys/socket.h>
- #include <sys/types.h>
- #include <netinet/in.h>
-+#endif
-
- // C++ Includes
- // Other libraries and framework includes
-Index: include/lldb/Core/CXXFormatterFunctions.h
-===================================================================
---- include/lldb/Core/CXXFormatterFunctions.h (revision 163322)
-+++ include/lldb/Core/CXXFormatterFunctions.h (working copy)
-@@ -11,6 +11,9 @@
- #define liblldb_CXXFormatterFunctions_h_
-
- #include "lldb/lldb-forward.h"
-+#ifdef _MSC_VER
-+typedef unsigned __int64 uint64_t;
-+#endif
-
- namespace lldb_private {
- namespace formatters
-@@ -39,16 +42,16 @@
- bool
- NSString_SummaryProvider (ValueObject& valobj, Stream& stream);
-
-- extern template bool
-+ template bool
- NSDictionary_SummaryProvider<true> (ValueObject&, Stream&) ;
-
-- extern template bool
-+ template bool
- NSDictionary_SummaryProvider<false> (ValueObject&, Stream&) ;
-
-- extern template bool
-+ template bool
- NSData_SummaryProvider<true> (ValueObject&, Stream&) ;
-
-- extern template bool
-+ template bool
- NSData_SummaryProvider<false> (ValueObject&, Stream&) ;
-
- }
-Index: include/lldb/Core/Debugger.h
-===================================================================
---- include/lldb/Core/Debugger.h (revision 163322)
-+++ include/lldb/Core/Debugger.h (working copy)
-@@ -13,7 +13,6 @@
-
-
- #include <stdint.h>
--#include <unistd.h>
-
- #include <stack>
-
-Index: include/lldb/Core/dwarf.h
-===================================================================
---- include/lldb/Core/dwarf.h (revision 163322)
-+++ include/lldb/Core/dwarf.h (working copy)
-@@ -11,7 +11,6 @@
- #define DebugBase_dwarf_h_
-
- #include <stdint.h>
--#include <stdbool.h>
-
- // Get the DWARF constant defintions from llvm
- #include "llvm/Support/Dwarf.h"
-Index: include/lldb/Core/Error.h
-===================================================================
---- include/lldb/Core/Error.h (revision 163322)
-+++ include/lldb/Core/Error.h (working copy)
-@@ -175,7 +175,7 @@
- /// format string \a format.
- //------------------------------------------------------------------
- void
-- PutToLog (Log *log, const char *format, ...) __attribute__ ((format (printf, 3, 4)));
-+ PutToLog (Log *log, const char *format, ...) LLDB_ATTR(__attribute__ ((format (printf, 3, 4))));
-
- //------------------------------------------------------------------
- /// Log an error to Log() if the error value is an error.
-@@ -196,7 +196,7 @@
- /// format string \a format.
- //------------------------------------------------------------------
- void
-- LogIfError (Log *log, const char *format, ...) __attribute__ ((format (printf, 3, 4)));
-+ LogIfError (Log *log, const char *format, ...) LLDB_ATTR(__attribute__ ((format (printf, 3, 4))));
-
- //------------------------------------------------------------------
- /// Set accessor from a kern_return_t.
-@@ -266,7 +266,7 @@
- /// A printf style format string
- //------------------------------------------------------------------
- int
-- SetErrorStringWithFormat (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
-+ SetErrorStringWithFormat (const char *format, ...) LLDB_ATTR(__attribute__ ((format (printf, 2, 3))));
-
- int
- SetErrorStringWithVarArg (const char *format, va_list args);
-Index: include/lldb/Core/Flags.h
-===================================================================
---- include/lldb/Core/Flags.h (revision 163322)
-+++ include/lldb/Core/Flags.h (working copy)
-@@ -13,7 +13,6 @@
-
-
- #include <stdint.h>
--#include <unistd.h>
-
- namespace lldb_private {
-
-Index: include/lldb/Core/FormatClasses.h
-===================================================================
---- include/lldb/Core/FormatClasses.h (revision 163322)
-+++ include/lldb/Core/FormatClasses.h (working copy)
-@@ -12,7 +12,6 @@
-
- // C Includes
- #include <stdint.h>
--#include <unistd.h>
-
- // C++ Includes
- #include <string>
-Index: include/lldb/Core/FormatManager.h
-===================================================================
---- include/lldb/Core/FormatManager.h (revision 163322)
-+++ include/lldb/Core/FormatManager.h (working copy)
-@@ -718,7 +718,11 @@
- void
- Changed ()
- {
-+#ifdef _MSC_VER
-+ InterlockedIncrement(&m_last_revision);
-+#else
- __sync_add_and_fetch(&m_last_revision, +1);
-+#endif
- }
-
- uint32_t
-@@ -767,10 +771,8 @@
- void
- LoadSystemFormatters();
-
--#ifndef LLDB_DISABLE_PYTHON
- void
- LoadObjCFormatters();
--#endif
- };
-
- } // namespace lldb_private
-Index: include/lldb/Core/Log.h
-===================================================================
---- include/lldb/Core/Log.h (revision 163322)
-+++ include/lldb/Core/Log.h (working copy)
-@@ -11,11 +11,9 @@
- #define liblldb_Log_h_
-
- // C Includes
--#include <stdbool.h>
- #include <stdint.h>
- #include <signal.h>
- #include <stdio.h>
--#include <unistd.h>
-
- // C++ Includes
- // Other libraries and framework includes
-@@ -126,37 +124,37 @@
- PutCString (const char *cstr);
-
- void
-- Printf (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
-+ Printf (const char *format, ...) LLDB_ATTR(__attribute__ ((format (printf, 2, 3))));
-
- 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, ...) LLDB_ATTR(__attribute__ ((format (printf, 3, 4))));
-
- void
-- LogIf (uint32_t mask, const char *fmt, ...) __attribute__ ((format (printf, 3, 4)));
-+ LogIf (uint32_t mask, const char *fmt, ...) LLDB_ATTR(__attribute__ ((format (printf, 3, 4))));
-
- void
-- Debug (const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
-+ Debug (const char *fmt, ...) LLDB_ATTR(__attribute__ ((format (printf, 2, 3))));
-
- void
-- DebugVerbose (const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
-+ DebugVerbose (const char *fmt, ...) LLDB_ATTR(__attribute__ ((format (printf, 2, 3))));
-
- void
-- Error (const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
-+ Error (const char *fmt, ...) LLDB_ATTR(__attribute__ ((format (printf, 2, 3))));
-
- void
-- FatalError (int err, const char *fmt, ...) __attribute__ ((format (printf, 3, 4)));
-+ FatalError (int err, const char *fmt, ...) LLDB_ATTR(__attribute__ ((format (printf, 3, 4))));
-
- void
-- Verbose (const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
-+ Verbose (const char *fmt, ...) LLDB_ATTR(__attribute__ ((format (printf, 2, 3))));
-
- void
-- Warning (const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
-+ Warning (const char *fmt, ...) LLDB_ATTR(__attribute__ ((format (printf, 2, 3))));
-
- void
-- WarningVerbose (const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
-+ WarningVerbose (const char *fmt, ...) LLDB_ATTR(__attribute__ ((format (printf, 2, 3))));
-
- Flags &
- GetOptions();
-Index: include/lldb/Core/Module.h
-===================================================================
---- include/lldb/Core/Module.h (revision 163322)
-+++ include/lldb/Core/Module.h (working copy)
-@@ -760,21 +760,21 @@
- // This centralizes code so that everyone doesn't need to format their error and log messages on
- // their own and keeps the output a bit more consistent.
- void
-- LogMessage (Log *log, const char *format, ...) __attribute__ ((format (printf, 3, 4)));
-+ LogMessage (Log *log, const char *format, ...) LLDB_ATTR(__attribute__ ((format (printf, 3, 4))));
-
- void
-- LogMessageVerboseBacktrace (Log *log, const char *format, ...) __attribute__ ((format (printf, 3, 4)));
-+ LogMessageVerboseBacktrace (Log *log, const char *format, ...) LLDB_ATTR(__attribute__ ((format (printf, 3, 4))));
-
- void
-- ReportWarning (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
-+ ReportWarning (const char *format, ...) LLDB_ATTR(__attribute__ ((format (printf, 2, 3))));
-
- void
-- ReportError (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
-+ ReportError (const char *format, ...) LLDB_ATTR(__attribute__ ((format (printf, 2, 3))));
-
- // Only report an error once when the module is first detected to be modified
- // so we don't spam the console with many messages.
- void
-- ReportErrorIfModifyDetected (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
-+ ReportErrorIfModifyDetected (const char *format, ...) LLDB_ATTR(__attribute__ ((format (printf, 2, 3))));
-
- //------------------------------------------------------------------
- // Return true if the file backing this module has changed since the
-Index: include/lldb/Core/RegularExpression.h
-===================================================================
---- include/lldb/Core/RegularExpression.h (revision 163322)
-+++ include/lldb/Core/RegularExpression.h (working copy)
-@@ -11,7 +11,9 @@
- #define liblldb_DBRegex_h_
- #if defined(__cplusplus)
-
--#include <regex.h>
-+#include "llvm/ADT/SmallVector.h"
-+#include "llvm/ADT/StringRef.h"
-+#include "llvm/Support/Regex.h"
- #include <stdint.h>
-
- #include <string>
-@@ -123,8 +125,8 @@
- bool
- Execute (const char* string, size_t match_count = 0, int execute_flags = 0) const;
-
-- size_t
-- GetErrorAsCString (char *err_str, size_t err_str_max_len) const;
-+ std::string
-+ GetErrorAsCString () const;
-
- bool
- GetMatchAtIndex (const char* s, uint32_t idx, std::string& match_str) const;
-@@ -168,21 +170,6 @@
- bool
- IsValid () const;
-
-- void
-- Clear ()
-- {
-- Free();
-- m_re.clear();
-- m_compile_flags = 0;
-- m_comp_err = 1;
-- }
--
-- int
-- GetErrorCode() const
-- {
-- return m_comp_err;
-- }
--
- bool
- operator < (const RegularExpression& rhs) const;
-
-@@ -190,12 +177,14 @@
- //------------------------------------------------------------------
- // Member variables
- //------------------------------------------------------------------
-- std::string m_re; ///< A copy of the original regular expression text
-- int m_comp_err; ///< Error code for the regular expression compilation
-- regex_t m_preg; ///< The compiled regular expression
-+ mutable std::string m_re; ///< A copy of the original regular expression text
-+ mutable llvm::Regex m_regex; ///< The compiled regular expression
- int m_compile_flags; ///< Stores the flags from the last compile.
-- mutable std::vector<regmatch_t> m_matches; ///< Where parenthesized subexpressions results are stored
--
-+
-+ typedef llvm::SmallVectorImpl<llvm::StringRef> MatchVectorImpl;
-+ typedef llvm::SmallVector<llvm::StringRef, 1> MatchVector;
-+ mutable MatchVector m_matches;
-+
- };
-
- } // namespace lldb_private
-Index: include/lldb/Core/Stream.h
-===================================================================
---- include/lldb/Core/Stream.h (revision 163322)
-+++ include/lldb/Core/Stream.h (working copy)
-@@ -126,7 +126,7 @@
- /// The number of bytes that were appended to the stream.
- //------------------------------------------------------------------
- int
-- PrintfAsRawHex8 (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
-+ PrintfAsRawHex8 (const char *format, ...) LLDB_ATTR(__attribute__ ((format (printf, 2, 3))));
-
- //------------------------------------------------------------------
- /// Format a C string from a printf style format and variable
-@@ -518,7 +518,7 @@
- /// format string \a format.
- //------------------------------------------------------------------
- int
-- Printf (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
-+ Printf (const char *format, ...) LLDB_ATTR(__attribute__ ((format (printf, 2, 3))));
-
- int
- PrintfVarArg(const char *format, va_list args);
-Index: include/lldb/Core/StreamCallback.h
-===================================================================
---- include/lldb/Core/StreamCallback.h (revision 163322)
-+++ include/lldb/Core/StreamCallback.h (working copy)
-@@ -11,6 +11,7 @@
- #define liblldb_StreamCallback_h_
-
- #include <string>
-+#include <map>
-
- #include "lldb/Core/Stream.h"
- #include "lldb/Core/StreamString.h"
-Index: include/lldb/Core/Timer.h
-===================================================================
---- include/lldb/Core/Timer.h (revision 163322)
-+++ include/lldb/Core/Timer.h (working copy)
-@@ -39,7 +39,7 @@
- //--------------------------------------------------------------
- /// Default constructor.
- //--------------------------------------------------------------
-- Timer(const char *category, const char *format, ...) __attribute__ ((format (printf, 3, 4)));
-+ Timer(const char *category, const char *format, ...) LLDB_ATTR(__attribute__ ((format (printf, 3, 4))));
-
- //--------------------------------------------------------------
- /// Desstructor
-Index: include/lldb/Expression/DWARFExpression.h
-===================================================================
---- include/lldb/Expression/DWARFExpression.h (revision 163322)
-+++ include/lldb/Expression/DWARFExpression.h (working copy)
-@@ -17,11 +17,10 @@
- #include "lldb/Core/Error.h"
- #include "lldb/Core/Scalar.h"
-
-+namespace lldb_private {
-+
- class ClangExpressionVariable;
- class ClangExpressionVariableList;
--
--namespace lldb_private {
--
- class ClangExpressionDeclMap;
-
- //----------------------------------------------------------------------
-Index: include/lldb/Expression/RecordingMemoryManager.h
-===================================================================
---- include/lldb/Expression/RecordingMemoryManager.h (revision 163322)
-+++ include/lldb/Expression/RecordingMemoryManager.h (working copy)
-@@ -84,6 +84,15 @@
- //------------------------------------------------------------------
- /// Passthrough interface stub
- //------------------------------------------------------------------
-+ virtual void *getPointerToNamedFunction(const std::string &Name,
-+ bool AbortOnFailure = true)
-+ {
-+ return m_default_mm_ap->getPointerToNamedFunction(Name, AbortOnFailure);
-+ }
-+
-+ //------------------------------------------------------------------
-+ /// Passthrough interface stub
-+ //------------------------------------------------------------------
- virtual void AllocateGOT()
- {
- m_default_mm_ap->AllocateGOT();
-Index: include/lldb/Host/Condition.h
-===================================================================
---- include/lldb/Host/Condition.h (revision 163322)
-+++ include/lldb/Host/Condition.h (working copy)
-@@ -11,8 +11,11 @@
- #define liblldb_DBCondition_h_
- #if defined(__cplusplus)
-
-+#ifdef _POSIX_SOURCE
-+#include <pthread.h>
-+#endif
-
--#include <pthread.h>
-+#include "lldb/lldb-types.h"
- #include "lldb/Host/Mutex.h"
-
- namespace lldb_private {
-@@ -102,6 +105,8 @@
- Wait (Mutex &mutex, const TimeValue *abstime = NULL, bool *timed_out = NULL);
-
- protected:
-+
-+#ifdef _POSIX_SOURCE
- //------------------------------------------------------------------
- // Member variables
- //------------------------------------------------------------------
-@@ -115,6 +120,11 @@
- //------------------------------------------------------------------
- pthread_cond_t *
- GetCondition ();
-+#else
-+
-+ lldb::condition_t m_condition;
-+
-+#endif
- };
-
- } // namespace lldb_private
-Index: include/lldb/Host/Config.h
-===================================================================
---- include/lldb/Host/Config.h (revision 163322)
-+++ include/lldb/Host/Config.h (working copy)
-@@ -26,6 +26,10 @@
-
- #include "lldb/Host/mingw/Config.h"
-
-+#elif defined(_WIN32) || defined(_WIN64)
-+
-+//#include "lldb/Host/windows/Config.h"
-+
- #else
-
- #error undefined platform
-Index: include/lldb/Host/File.h
-===================================================================
---- include/lldb/Host/File.h (revision 163322)
-+++ include/lldb/Host/File.h (working copy)
-@@ -458,7 +458,7 @@
- /// format string \a format.
- //------------------------------------------------------------------
- int
-- Printf (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
-+ Printf (const char *format, ...) LLDB_ATTR(__attribute__ ((format (printf, 2, 3))));
-
- int
- PrintfVarArg(const char *format, va_list args);
-Index: include/lldb/Host/Host.h
-===================================================================
---- include/lldb/Host/Host.h (revision 163322)
-+++ include/lldb/Host/Host.h (working copy)
-@@ -138,7 +138,7 @@
- };
-
- static void
-- SystemLog (SystemLogType type, const char *format, ...) __attribute__ ((format (printf, 2, 3)));
-+ SystemLog (SystemLogType type, const char *format, ...) LLDB_ATTR(__attribute__ ((format (printf, 2, 3))));
-
- static void
- SystemLog (SystemLogType type, const char *format, va_list args);
-@@ -396,7 +396,7 @@
- /// description string.
- //------------------------------------------------------------------
- static void
-- SetCrashDescriptionWithFormat (const char *format, ...) __attribute__ ((format (printf, 1, 2)));
-+ SetCrashDescriptionWithFormat (const char *format, ...) LLDB_ATTR(__attribute__ ((format (printf, 1, 2))));
-
- static void
- SetCrashDescription (const char *description);
-Index: include/lldb/Host/Mutex.h
-===================================================================
---- include/lldb/Host/Mutex.h (revision 163322)
-+++ include/lldb/Host/Mutex.h (working copy)
-@@ -11,7 +11,12 @@
- #define liblldb_Mutex_h_
- #if defined(__cplusplus)
-
-+#include "llvm\Support\Mutex.h"
-+
-+#ifdef _POSIX_SOURCE
- #include <pthread.h>
-+#endif
-+
- #include <assert.h>
-
- #ifdef LLDB_CONFIGURATION_DEBUG
-@@ -125,10 +130,10 @@
- /// returns \b false otherwise.
- //--------------------------------------------------------------
- bool
-- TryLock (Mutex &mutex, const char *failure_message = NULL);
-+ TryLock (Mutex &mutex, const char *failure_message = 0);
-
- bool
-- TryLock (Mutex *mutex, const char *failure_message = NULL)
-+ TryLock (Mutex *mutex, const char *failure_message = 0)
- {
- if (mutex)
- return TryLock(*mutex, failure_message);
-@@ -210,7 +215,7 @@
- virtual
- #endif
- int
-- TryLock(const char *failure_message = NULL);
-+ TryLock(const char *failure_message = 0);
-
- //------------------------------------------------------------------
- /// Unlock the mutex.
-@@ -230,14 +235,17 @@
- Unlock();
-
- protected:
-+#ifdef _POSIX_SOURCE
- //------------------------------------------------------------------
- // Member variables
- //------------------------------------------------------------------
- // 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.
-+#endif
-
- private:
-+#ifdef _POSIX_SOURCE
- //------------------------------------------------------------------
- /// Mutex get accessor.
- ///
-@@ -246,7 +254,12 @@
- //------------------------------------------------------------------
- pthread_mutex_t *
- GetMutex();
-+#endif
-
-+#ifndef _POSIX_SOURCE
-+ llvm::sys::MutexImpl m_mutex;
-+#endif
-+
- Mutex(const Mutex&);
- const Mutex& operator=(const Mutex&);
- };
-Index: include/lldb/Host/ReadWriteLock.h
-===================================================================
---- include/lldb/Host/ReadWriteLock.h (revision 163322)
-+++ include/lldb/Host/ReadWriteLock.h (working copy)
-@@ -11,9 +11,17 @@
- #define liblldb_ReadWriteLock_h_
- #if defined(__cplusplus)
-
-+#if defined(WIN32)
-+#include "lldb/lldb-defines.h"
-+#include <Windows.h>
-+#undef interface
-+#else
-+#include <pthread.h>
-+#endif
-+
- #include "lldb/Host/Mutex.h"
- #include "lldb/Host/Condition.h"
--#include <pthread.h>
-+
- #include <stdint.h>
- #include <time.h>
-
-@@ -36,6 +44,16 @@
- class ReadWriteLock
- {
- public:
-+#if defined(WIN32)
-+ ReadWriteLock ();
-+ ~ReadWriteLock ();
-+ bool ReadLock ();
-+ bool ReadTryLock ();
-+ bool ReadUnlock ();
-+ bool WriteLock ();
-+ bool WriteTryLock ();
-+ bool WriteUnlock ();
-+#else
- ReadWriteLock () :
- m_rwlock()
- {
-@@ -88,6 +106,7 @@
- {
- return ::pthread_rwlock_unlock (&m_rwlock) == 0;
- }
-+#endif
-
- class ReadLocker
- {
-@@ -229,7 +248,11 @@
- };
-
- protected:
-+#if defined(WIN32)
-+ void* m_data;
-+#else
- pthread_rwlock_t m_rwlock;
-+#endif
- private:
- DISALLOW_COPY_AND_ASSIGN(ReadWriteLock);
- };
-Index: include/lldb/Host/SocketAddress.h
-===================================================================
---- include/lldb/Host/SocketAddress.h (revision 163322)
-+++ include/lldb/Host/SocketAddress.h (working copy)
-@@ -12,17 +12,24 @@
-
- // C Includes
- #include <stdint.h>
-+#ifdef _POSIX_SOURCE
- #include <sys/socket.h>
- #include <netdb.h>
- #include <netinet/in.h>
-+#endif
-
- #if defined(__FreeBSD__)
- #include <sys/types.h>
- #endif
-
-+#ifdef _WIN32
-+#include <WS2tcpip.h>
-+#endif
-+
- // C++ Includes
- // Other libraries and framework includes
- // Project includes
-+#include "lldb/lldb-private.h"
-
- namespace lldb_private {
-
-Index: include/lldb/Host/Symbols.h
-===================================================================
---- include/lldb/Host/Symbols.h (revision 163322)
-+++ include/lldb/Host/Symbols.h (working copy)
-@@ -12,7 +12,6 @@
-
- // C Includes
- #include <stdint.h>
--#include <sys/time.h>
-
- // C++ Includes
- // Other libraries and framework includes
-Index: include/lldb/Host/TimeValue.h
-===================================================================
---- include/lldb/Host/TimeValue.h (revision 163322)
-+++ include/lldb/Host/TimeValue.h (working copy)
-@@ -12,6 +12,8 @@
-
- // C Includes
- #include <stdint.h>
-+
-+#ifndef _MSC_VER
- #include <sys/time.h>
-
- // BEGIN: MinGW work around
-@@ -19,6 +21,9 @@
- #include <pthread.h>
- #endif
- // END: MinGW work around
-+#else
-+#include <winsock2.h>
-+#endif
-
- // C++ Includes
- // Other libraries and framework includes
-@@ -61,8 +66,10 @@
- uint64_t
- GetAsSecondsSinceJan1_1970() const;
-
-+#ifdef _POSIX_SOURCE
- struct timespec
- GetAsTimeSpec () const;
-+#endif
-
- struct timeval
- GetAsTimeVal () const;
-Index: include/lldb/Interpreter/Args.h
-===================================================================
---- include/lldb/Interpreter/Args.h (revision 163322)
-+++ include/lldb/Interpreter/Args.h (working copy)
-@@ -10,9 +10,6 @@
- #ifndef liblldb_Command_h_
- #define liblldb_Command_h_
-
--// C Includes
--#include <getopt.h>
--
- // C++ Includes
- #include <list>
- #include <string>
-Index: include/lldb/Interpreter/CommandReturnObject.h
-===================================================================
---- include/lldb/Interpreter/CommandReturnObject.h (revision 163322)
-+++ include/lldb/Interpreter/CommandReturnObject.h (working copy)
-@@ -121,7 +121,7 @@
- AppendMessage (const char *in_string, int len = -1);
-
- void
-- AppendMessageWithFormat (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
-+ AppendMessageWithFormat (const char *format, ...) LLDB_ATTR(__attribute__ ((format (printf, 2, 3))));
-
- void
- AppendRawWarning (const char *in_string, int len = -1);
-@@ -130,7 +130,7 @@
- AppendWarning (const char *in_string, int len = -1);
-
- void
-- AppendWarningWithFormat (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
-+ AppendWarningWithFormat (const char *format, ...) LLDB_ATTR(__attribute__ ((format (printf, 2, 3))));
-
- void
- AppendError (const char *in_string, int len = -1);
-@@ -139,7 +139,7 @@
- AppendRawError (const char *in_string, int len = -1);
-
- void
-- AppendErrorWithFormat (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
-+ AppendErrorWithFormat (const char *format, ...) LLDB_ATTR(__attribute__ ((format (printf, 2, 3))));
-
- void
- SetError (const Error &error,
-Index: include/lldb/Interpreter/Options.h
-===================================================================
---- include/lldb/Interpreter/Options.h (revision 163322)
-+++ include/lldb/Interpreter/Options.h (working copy)
-@@ -11,7 +11,9 @@
- #define liblldb_Options_h_
-
- // C Includes
-+#ifdef _POSIX_SOURCE
- #include <getopt.h>
-+#endif
-
- // C++ Includes
- #include <set>
-Index: include/lldb/Interpreter/OptionValueEnumeration.h
-===================================================================
---- include/lldb/Interpreter/OptionValueEnumeration.h (revision 163322)
-+++ include/lldb/Interpreter/OptionValueEnumeration.h (working copy)
-@@ -34,7 +34,7 @@
- const char *description;
- };
- typedef UniqueCStringMap<EnumeratorInfo> EnumerationMap;
-- typedef typename EnumerationMap::Entry EnumerationMapEntry;
-+ typedef EnumerationMap::Entry EnumerationMapEntry;
-
- OptionValueEnumeration (const OptionEnumValueElement *enumerators, enum_type value);
-
-Index: include/lldb/Interpreter/OptionValueRegex.h
-===================================================================
---- include/lldb/Interpreter/OptionValueRegex.h (revision 163322)
-+++ include/lldb/Interpreter/OptionValueRegex.h (working copy)
-@@ -55,7 +55,7 @@
- virtual bool
- Clear ()
- {
-- m_regex.Clear();
-+ m_regex.Free();
- m_value_was_set = false;
- return true;
- }
-@@ -80,7 +80,7 @@
- if (value && value[0])
- m_regex.Compile (value, regex_flags);
- else
-- m_regex.Clear();
-+ m_regex.Free();
- }
-
- bool
-Index: include/lldb/lldb-defines.h
-===================================================================
---- include/lldb/lldb-defines.h (revision 163322)
-+++ include/lldb/lldb-defines.h (working copy)
-@@ -105,6 +105,13 @@
- #define LLDB_OPT_SET_10 (1U << 9)
- #define LLDB_OPT_SET_FROM_TO(A, B) (((1U << (B)) - 1) ^ (((1U << (A))-1) >> 1))
-
-+#ifdef _MSC_VER
-+// ignore GCC function attributes
-+#define LLDB_ATTR(X)
-+#else
-+#define LLDB_ATTR(X) X
-+#endif
-+
- #if defined(__cplusplus)
-
- //----------------------------------------------------------------------
-Index: include/lldb/lldb-forward.h
-===================================================================
---- include/lldb/lldb-forward.h (revision 163322)
-+++ include/lldb/lldb-forward.h (working copy)
-@@ -14,7 +14,7 @@
-
- #include <ciso646> // detect C++ lib
-
--#ifdef _LIBCPP_VERSION
-+#if defined(_LIBCPP_VERSION) || defined(_MSC_VER)
- #include <memory>
- #define STD_SHARED_PTR(T) std::shared_ptr<T>
- #define STD_WEAK_PTR(T) std::weak_ptr<T>
-Index: include/lldb/lldb-private.h
-===================================================================
---- include/lldb/lldb-private.h (revision 163322)
-+++ include/lldb/lldb-private.h (working copy)
-@@ -12,6 +12,10 @@
-
- #if defined(__cplusplus)
-
-+#ifdef _MSC_VER
-+#include "lldb/lldb-windows.h"
-+#endif
-+
- #include "lldb/lldb-public.h"
- #include "lldb/lldb-private-enumerations.h"
- #include "lldb/lldb-private-interfaces.h"
-Index: include/lldb/lldb-types.h
-===================================================================
---- include/lldb/lldb-types.h (revision 163322)
-+++ include/lldb/lldb-types.h (working copy)
-@@ -14,11 +14,8 @@
- #include "lldb/lldb-forward.h"
-
- #include <assert.h>
--#include <pthread.h>
- #include <signal.h>
- #include <stdint.h>
--#include <stdbool.h>
--#include <unistd.h>
-
- //----------------------------------------------------------------------
- // All host systems must define:
-@@ -39,20 +36,46 @@
- // things should be defined. Currently MacOSX is being assumed by default
- // since that is what lldb was first developed for.
-
--namespace lldb {
-- //----------------------------------------------------------------------
-- // MacOSX Types
-- //----------------------------------------------------------------------
-- typedef ::pthread_mutex_t mutex_t;
-- typedef pthread_cond_t condition_t;
-- typedef pthread_t thread_t; // Host thread type
-- 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
-- typedef void (*LogOutputCallback) (const char *, void *baton);
-- typedef bool (*CommandOverrideCallback)(void *baton, const char **argv);
--} // namespace lldb
-+#if defined(_WIN32) || defined(_WIN64)
-
-+#define WIN32_LEAN_AND_MEAN
-+#define NOMINMAX
-+
-+#include <Windows.h>
-+#include <process.h>
-+
-+namespace lldb
-+{
-+ typedef CRITICAL_SECTION mutex_t;
-+ typedef CONDITION_VARIABLE condition_t;
-+ typedef uintptr_t thread_t; // Host thread type
-+ typedef void * thread_arg_t; // Host thread argument type
-+ typedef unsigned thread_result_t; // Host thread result type
-+ typedef thread_result_t (*thread_func_t)(void *); // Host thread function type
-+ typedef void (*LogOutputCallback) (const char *, void *baton);
-+ typedef bool (*CommandOverrideCallback)(void *baton, const char **argv);
-+}
-+
-+#else
-+
-+#include <stdbool.h>
-+#include <unistd.h>
-+#include <pthread.h>
-+
-+namespace lldb
-+{
-+ typedef ::pthread_mutex_t mutex_t;
-+ typedef pthread_cond_t condition_t;
-+ typedef pthread_t thread_t; // Host thread type
-+ 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
-+ typedef void (*LogOutputCallback) (const char *, void *baton);
-+ typedef bool (*CommandOverrideCallback)(void *baton, const char **argv);
-+}
-+
-+#endif
-+
- #if defined(__MINGW32__)
-
- const lldb::thread_t lldb_invalid_host_thread_const = { NULL, 0 } ;
-Index: include/lldb/lldb-windows.h
-===================================================================
---- include/lldb/lldb-windows.h (revision 0)
-+++ include/lldb/lldb-windows.h (working copy)
-@@ -0,0 +1,101 @@
-+//===-- lldb-windows.h ------------------------------------------*- C++ -*-===//
-+//
-+// The LLVM Compiler Infrastructure
-+//
-+// This file is distributed under the University of Illinois Open Source
-+// License. See LICENSE.TXT for details.
-+//
-+//===----------------------------------------------------------------------===//
-+
-+#ifndef lldb_lldb_windows_h_
-+#define lldb_lldb_windows_h_
-+
-+#if defined(__cplusplus)
-+
-+#ifdef _MSC_VER
-+
-+#define WIN32_LEAN_AND_MEAN
-+#define NOMINMAX
-+#include <Windows.h>
-+
-+// posix utilities
-+#define snprintf _snprintf
-+int vasprintf(char **ret, const char *fmt, va_list ap);
-+
-+int strcasecmp(const char* s1, const char* s2);
-+int strncasecmp(const char* s1, const char* s2, size_t n);
-+char * strcasestr(const char *s, const char* find);
-+
-+long long int strtoll(const char *nptr, char **endptr, int base);
-+unsigned long long int strtoull(const char *nptr, char **endptr, int base);
-+
-+// missing posix declarations
-+enum {
-+ PATH_MAX = MAX_PATH
-+};
-+
-+enum {
-+ REG_EXTENDED
-+};
-+
-+enum {
-+ STDIN_FILENO = 0,
-+ STDOUT_FILENO,
-+ STDERR_FILENO
-+};
-+
-+enum {
-+ O_NOCTTY
-+};
-+
-+enum {
-+ SIGKILL
-+};
-+
-+// missing socket types
-+typedef short sa_family_t;
-+typedef unsigned short in_port_t;
-+
-+// getopt()
-+enum {
-+ no_argument = 0,
-+ required_argument,
-+ optional_argument
-+};
-+
-+struct option {
-+ /* name of long option */
-+ const char *name;
-+ /*
-+ * one of no_argument, required_argument, and optional_argument:
-+ * whether option takes an argument
-+ */
-+ int has_arg;
-+ /* if not NULL, set *flag to val when option found */
-+ int *flag;
-+ /* if flag not NULL, value to set *flag to; else return value */
-+ int val;
-+};
-+
-+int getopt(int argc, char * const argv[],
-+ const char *optstring);
-+
-+extern char *optarg;
-+extern int optind, opterr, optopt;
-+
-+int getopt_long(int argc, char * const *argv,
-+ const char *optstring,
-+ const struct option *longopts, int *longindex);
-+
-+extern int optreset;
-+
-+// missing macros
-+#define __PRETTY_FUNCTION__ __FUNCSIG__
-+#define va_copy(d,s) ((d) = (s))
-+
-+#endif
-+
-+#endif // defined(__cplusplus)
-+
-+
-+#endif // lldb_lldb_windows_h_
-Index: include/lldb/Symbol/ClangNamespaceDecl.h
-===================================================================
---- include/lldb/Symbol/ClangNamespaceDecl.h (revision 163322)
-+++ include/lldb/Symbol/ClangNamespaceDecl.h (working copy)
-@@ -10,6 +10,7 @@
- #ifndef liblldb_ClangNamespaceDecl_h_
- #define liblldb_ClangNamespaceDecl_h_
-
-+#include <string>
- #include "lldb/lldb-public.h"
- #include "lldb/Core/ClangForward.h"
-
-Index: include/lldb/Target/Process.h
-===================================================================
---- include/lldb/Target/Process.h (revision 163322)
-+++ include/lldb/Target/Process.h (working copy)
-@@ -12,7 +12,10 @@
-
- // C Includes
- #include <limits.h>
-+
-+#ifdef _POSIX_SOURCE
- #include <spawn.h>
-+#endif
-
- // C++ Includes
- #include <list>
-@@ -22,6 +25,7 @@
- // Other libraries and framework includes
- // Project includes
- #include "lldb/lldb-private.h"
-+#include "lldb/lldb-types.h"
- #include "lldb/Core/ArchSpec.h"
- #include "lldb/Core/Broadcaster.h"
- #include "lldb/Core/Communication.h"
-@@ -428,11 +432,13 @@
- bool
- Open (int fd, const char *path, bool read, bool write);
-
-+#ifdef _POSIX_SOURCE
- static bool
- AddPosixSpawnFileAction (posix_spawn_file_actions_t *file_actions,
- const FileAction *info,
- Log *log,
- Error& error);
-+#endif
-
- int
- GetFD () const
-@@ -1306,7 +1312,7 @@
- {
- friend class ThreadList;
- friend class ClangFunction; // For WaitForStateChangeEventsPrivate
--friend class CommandObjectProcessLaunch;
-+//friend class CommandObjectProcessLaunch;
- friend class ProcessEventData;
- friend class CommandObjectBreakpointCommand;
- friend class StopInfo;
-@@ -3412,7 +3418,7 @@
- void
- ResumePrivateStateThread ();
-
-- static void *
-+ static lldb::thread_result_t
- PrivateStateThread (void *arg);
-
- void *
-Index: include/lldb/Utility/RefCounter.h
-===================================================================
---- include/lldb/Utility/RefCounter.h (revision 163322)
-+++ include/lldb/Utility/RefCounter.h (working copy)
-@@ -10,6 +10,12 @@
- #ifndef liblldb_RefCounter_h_
- #define liblldb_RefCounter_h_
-
-+#ifdef _MSC_VER
-+#define WIN32_LEAN_AND_MEAN
-+#define NOMINMAX
-+#include <Windows.h>
-+#endif
-+
- #include "lldb/lldb-public.h"
-
- namespace lldb_utility {
-@@ -39,14 +45,22 @@
- inline T
- increment(T* t)
- {
-- return __sync_fetch_and_add(t, 1);
-+#ifdef _MSC_VER
-+ return InterlockedIncrement((LONG*)&t);
-+#else
-+ return __sync_add_and_fetch(&t, 1);
-+#endif
- }
-
- template <class T>
- inline T
- decrement(T* t)
- {
-- return __sync_fetch_and_add(t, -1);
-+#ifdef _MSC_VER
-+ return InterlockedIncrement((LONG*)&t);
-+#else
-+ return __sync_add_and_fetch(&t, 1);
-+#endif
- }
-
- };
-Index: include/lldb/Utility/SharingPtr.h
-===================================================================
---- include/lldb/Utility/SharingPtr.h (revision 163322)
-+++ include/lldb/Utility/SharingPtr.h (working copy)
-@@ -13,6 +13,12 @@
- #include <algorithm>
- #include <memory>
-
-+#ifdef _MSC_VER
-+#define WIN32_LEAN_AND_MEAN
-+#define NOMINMAX
-+#include <Windows.h>
-+#endif
-+
- //#define ENABLE_SP_LOGGING 1 // DON'T CHECK THIS LINE IN UNLESS COMMENTED OUT
- #if defined (ENABLE_SP_LOGGING)
-
-@@ -28,14 +34,22 @@
- inline T
- increment(T& t)
- {
-+#ifdef _MSC_VER
-+ return InterlockedIncrement(&t);
-+#else
- return __sync_add_and_fetch(&t, 1);
-+#endif
- }
-
- template <class T>
- inline T
- decrement(T& t)
- {
-+#ifdef _MSC_VER
-+ return InterlockedDecrement(&t);
-+#else
- return __sync_add_and_fetch(&t, -1);
-+#endif
- }
-
- class shared_count
-Index: scripts/build-llvm.pl
-===================================================================
---- scripts/build-llvm.pl (revision 163322)
-+++ scripts/build-llvm.pl (working copy)
-@@ -21,8 +21,8 @@
-
- our $llvm_configuration = $ENV{LLVM_CONFIGURATION};
-
--our $llvm_revision = "152265";
--our $clang_revision = "152265";
-+our $llvm_revision = "163312";
-+our $clang_revision = "163312";
-
- our $SRCROOT = "$ENV{SRCROOT}";
- our $llvm_dstroot_zip = "$SRCROOT/llvm.zip";
-Index: scripts/CMakeLists.txt
-===================================================================
---- scripts/CMakeLists.txt (revision 0)
-+++ scripts/CMakeLists.txt (working copy)
-@@ -0,0 +1,12 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_custom_command(
-+ OUTPUT ${LLDB_SOURCE_DIR}/source/LLDBWrapPython.cpp
-+ DEPENDS ${LLDB_SOURCE_DIR}/scripts/lldb.swig
-+ COMMAND swig -c++ -shadow -python -I${LLDB_SOURCE_DIR}/include -I./. -outdir ${LLDB_SOURCE_DIR}/scripts/Python -o ${LLDB_SOURCE_DIR}/source/LLDBWrapPython.cpp ${LLDB_SOURCE_DIR}/scripts/lldb.swig
-+ COMMENT "Building lldb pyhton wrapper")
-+set_source_files_properties(${LLDB_SOURCE_DIR}/source/LLDBWrapPython.cpp PROPERTIES GENERATED 1)
-+
-+ADD_CUSTOM_TARGET(swig_wrapper ALL echo
-+ DEPENDS ${LLDB_SOURCE_DIR}/source/LLDBWrapPython.cpp
-+ )
-Index: source/API/CMakeLists.txt
-===================================================================
---- source/API/CMakeLists.txt (revision 0)
-+++ source/API/CMakeLists.txt (working copy)
-@@ -0,0 +1,48 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbAPI
-+ SBAddress.cpp
-+ SBBlock.cpp
-+ SBBreakpoint.cpp
-+ SBBreakpointLocation.cpp
-+ SBBroadcaster.cpp
-+ SBCommandInterpreter.cpp
-+ SBCommandReturnObject.cpp
-+ SBCommunication.cpp
-+ SBCompileUnit.cpp
-+ SBData.cpp
-+ SBDebugger.cpp
-+ SBError.cpp
-+ SBEvent.cpp
-+ SBFileSpec.cpp
-+ SBFileSpecList.cpp
-+ SBFrame.cpp
-+ SBFunction.cpp
-+ SBHostOS.cpp
-+ SBInputReader.cpp
-+ SBInstruction.cpp
-+ SBInstructionList.cpp
-+ SBLineEntry.cpp
-+ SBListener.cpp
-+ SBModule.cpp
-+ SBProcess.cpp
-+ SBSection.cpp
-+ SBSourceManager.cpp
-+ SBStream.cpp
-+ SBStringList.cpp
-+ SBSymbol.cpp
-+ SBSymbolContext.cpp
-+ SBSymbolContextList.cpp
-+ SBTarget.cpp
-+ SBThread.cpp
-+ SBType.cpp
-+ SBTypeCategory.cpp
-+ SBTypeFilter.cpp
-+ SBTypeFormat.cpp
-+ SBTypeNameSpecifier.cpp
-+ SBTypeSummary.cpp
-+ SBTypeSynthetic.cpp
-+ SBValue.cpp
-+ SBValueList.cpp
-+ SBWatchpoint.cpp
-+ )
-Index: source/API/SBDebugger.cpp
-===================================================================
---- source/API/SBDebugger.cpp (revision 163322)
-+++ source/API/SBDebugger.cpp (working copy)
-@@ -464,7 +464,7 @@
- const char *
- SBDebugger::GetVersionString ()
- {
-- return GetVersion();
-+ return lldb_private::GetVersion();
- }
-
- const char *
-Index: source/API/SBHostOS.cpp
-===================================================================
---- source/API/SBHostOS.cpp (revision 163322)
-+++ source/API/SBHostOS.cpp (working copy)
-@@ -30,7 +30,7 @@
- SBHostOS::ThreadCreate
- (
- const char *name,
-- void *(*thread_function)(void *),
-+ thread_func_t thread_function,
- void *thread_arg,
- SBError *error_ptr
- )
-@@ -65,7 +65,7 @@
- }
-
- bool
--SBHostOS::ThreadJoin (lldb::thread_t thread, void **result, SBError *error_ptr)
-+SBHostOS::ThreadJoin (lldb::thread_t thread, thread_result_t *result, SBError *error_ptr)
- {
- return Host::ThreadJoin (thread, result, error_ptr ? error_ptr->get() : NULL);
- }
-Index: source/Breakpoint/CMakeLists.txt
-===================================================================
---- source/Breakpoint/CMakeLists.txt (revision 0)
-+++ source/Breakpoint/CMakeLists.txt (working copy)
-@@ -0,0 +1,25 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbBreakpoint
-+ Breakpoint.cpp
-+ BreakpointID.cpp
-+ BreakpointIDList.cpp
-+ BreakpointList.cpp
-+ BreakpointLocation.cpp
-+ BreakpointLocationCollection.cpp
-+ BreakpointLocationList.cpp
-+ BreakpointOptions.cpp
-+ BreakpointResolver.cpp
-+ BreakpointResolverAddress.cpp
-+ BreakpointResolverFileLine.cpp
-+ BreakpointResolverFileRegex.cpp
-+ BreakpointResolverName.cpp
-+ BreakpointSite.cpp
-+ BreakpointSiteList.cpp
-+ Stoppoint.cpp
-+ StoppointCallbackContext.cpp
-+ StoppointLocation.cpp
-+ Watchpoint.cpp
-+ WatchpointList.cpp
-+ WatchpointOptions.cpp
-+ )
-Index: source/CMakeLists.txt
-===================================================================
---- source/CMakeLists.txt (revision 0)
-+++ source/CMakeLists.txt (working copy)
-@@ -0,0 +1,16 @@
-+add_subdirectory(API)
-+add_subdirectory(Breakpoint)
-+add_subdirectory(Commands)
-+add_subdirectory(Core)
-+add_subdirectory(Expression)
-+add_subdirectory(Host)
-+add_subdirectory(Interpreter)
-+add_subdirectory(Plugins)
-+add_subdirectory(Symbol)
-+add_subdirectory(Target)
-+add_subdirectory(Utility)
-+
-+add_lldb_library(lldbInitAndLog
-+ lldb.cpp
-+ lldb-log.cpp
-+ )
-Index: source/Commands/CMakeLists.txt
-===================================================================
---- source/Commands/CMakeLists.txt (revision 0)
-+++ source/Commands/CMakeLists.txt (working copy)
-@@ -0,0 +1,31 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbCommands
-+ CommandCompletions.cpp
-+ CommandObjectApropos.cpp
-+ CommandObjectArgs.cpp
-+ CommandObjectBreakpoint.cpp
-+ CommandObjectBreakpointCommand.cpp
-+ CommandObjectCommands.cpp
-+ CommandObjectCrossref.cpp
-+ CommandObjectDisassemble.cpp
-+ CommandObjectExpression.cpp
-+ CommandObjectFrame.cpp
-+ CommandObjectHelp.cpp
-+ CommandObjectLog.cpp
-+ CommandObjectMemory.cpp
-+ CommandObjectMultiword.cpp
-+ CommandObjectPlatform.cpp
-+ CommandObjectProcess.cpp
-+ CommandObjectQuit.cpp
-+ CommandObjectRegister.cpp
-+ CommandObjectSettings.cpp
-+ CommandObjectSource.cpp
-+ CommandObjectSyntax.cpp
-+ CommandObjectTarget.cpp
-+ CommandObjectThread.cpp
-+ CommandObjectType.cpp
-+ CommandObjectVersion.cpp
-+ CommandObjectWatchpoint.cpp
-+ CommandObjectWatchpointCommand.cpp
-+ )
-Index: source/Commands/CommandObjectBreakpoint.cpp
-===================================================================
---- source/Commands/CommandObjectBreakpoint.cpp (revision 163322)
-+++ source/Commands/CommandObjectBreakpoint.cpp (working copy)
-@@ -435,10 +435,8 @@
- RegularExpression regexp(m_options.m_func_regexp.c_str());
- if (!regexp.IsValid())
- {
-- char err_str[1024];
-- regexp.GetErrorAsCString(err_str, sizeof(err_str));
- result.AppendErrorWithFormat("Function name regular expression could not be compiled: \"%s\"",
-- err_str);
-+ regexp.GetErrorAsCString().c_str());
- result.SetStatus (eReturnStatusFailed);
- return false;
- }
-@@ -472,10 +470,8 @@
- RegularExpression regexp(m_options.m_source_text_regexp.c_str());
- if (!regexp.IsValid())
- {
-- char err_str[1024];
-- regexp.GetErrorAsCString(err_str, sizeof(err_str));
- result.AppendErrorWithFormat("Source text regular expression could not be compiled: \"%s\"",
-- err_str);
-+ regexp.GetErrorAsCString().c_str());
- result.SetStatus (eReturnStatusFailed);
- return false;
- }
-Index: source/Commands/CommandObjectFrame.cpp
-===================================================================
---- source/Commands/CommandObjectFrame.cpp (revision 163322)
-+++ source/Commands/CommandObjectFrame.cpp (working copy)
-@@ -475,8 +475,8 @@
- }
- else
- {
-- char regex_error[1024];
-- if (regex.GetErrorAsCString(regex_error, sizeof(regex_error)))
-+ std::string regex_error = regex.GetErrorAsCString();
-+ if (!regex_error.empty())
- result.GetErrorStream().Printf ("error: %s\n", regex_error);
- else
- result.GetErrorStream().Printf ("error: unkown regex error when compiling '%s'\n", name_cstr);
-Index: source/Core/AddressResolverName.cpp
-===================================================================
---- source/Core/AddressResolverName.cpp (revision 163322)
-+++ source/Core/AddressResolverName.cpp (working copy)
-@@ -35,12 +35,15 @@
- {
- if (m_match_type == AddressResolver::Regexp)
- {
-- if (!m_regex.Compile (m_func_name.AsCString()))
-+ m_regex = RegularExpression(m_func_name.AsCString());
-+ if (!m_regex.IsValid())
- {
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_BREAKPOINTS));
-
- if (log)
-- log->Warning ("function name regexp: \"%s\" did not compile.", m_func_name.AsCString());
-+ log->Warning ("function name regexp: \"%s\" did not compile: %s.",
-+ m_func_name.AsCString(),
-+ m_regex.GetErrorAsCString().c_str());
- }
- }
- }
-Index: source/Core/CMakeLists.txt
-===================================================================
---- source/Core/CMakeLists.txt (revision 0)
-+++ source/Core/CMakeLists.txt (working copy)
-@@ -0,0 +1,79 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbCore
-+ Address.cpp
-+ AddressRange.cpp
-+ AddressResolver.cpp
-+ AddressResolverFileLine.cpp
-+ AddressResolverName.cpp
-+ ArchSpec.cpp
-+ Baton.cpp
-+ Broadcaster.cpp
-+ Communication.cpp
-+ Connection.cpp
-+ ConnectionFileDescriptor.cpp
-+ ConnectionMachPort.cpp
-+ ConnectionSharedMemory.cpp
-+ ConstString.cpp
-+ cxa_demangle.cpp
-+ CXXFormatterFunctions.cpp
-+ DataBufferHeap.cpp
-+ DataBufferMemoryMap.cpp
-+ DataEncoder.cpp
-+ DataExtractor.cpp
-+ DataVisualization.cpp
-+ Debugger.cpp
-+ Disassembler.cpp
-+ DynamicLoader.cpp
-+ EmulateInstruction.cpp
-+ Error.cpp
-+ Event.cpp
-+ FileLineResolver.cpp
-+ FileSpecList.cpp
-+ FormatClasses.cpp
-+ FormatManager.cpp
-+ History.cpp
-+ InputReader.cpp
-+ InputReaderEZ.cpp
-+ InputReaderStack.cpp
-+ Language.cpp
-+ Listener.cpp
-+ Log.cpp
-+ Mangled.cpp
-+ Module.cpp
-+ ModuleChild.cpp
-+ ModuleList.cpp
-+ Opcode.cpp
-+ PluginManager.cpp
-+ RegisterValue.cpp
-+ RegularExpression.cpp
-+ Scalar.cpp
-+ SearchFilter.cpp
-+ Section.cpp
-+ SourceManager.cpp
-+ State.cpp
-+ Stream.cpp
-+ StreamAsynchronousIO.cpp
-+ StreamCallback.cpp
-+ StreamFile.cpp
-+ StreamString.cpp
-+ StringList.cpp
-+ Timer.cpp
-+ UserID.cpp
-+ UserSettingsController.cpp
-+ UUID.cpp
-+ Value.cpp
-+ ValueObject.cpp
-+ ValueObjectChild.cpp
-+ ValueObjectConstResult.cpp
-+ ValueObjectConstResultChild.cpp
-+ ValueObjectConstResultImpl.cpp
-+ ValueObjectDynamicValue.cpp
-+ ValueObjectList.cpp
-+ ValueObjectMemory.cpp
-+ ValueObjectRegister.cpp
-+ ValueObjectSyntheticFilter.cpp
-+ ValueObjectVariable.cpp
-+ VMRange.cpp
-+ Windows.cpp
-+ )
-Index: source/Core/Communication.cpp
-===================================================================
---- source/Core/Communication.cpp (revision 163322)
-+++ source/Core/Communication.cpp (working copy)
-@@ -333,7 +333,7 @@
- return m_read_thread_enabled;
- }
-
--void *
-+thread_result_t
- Communication::ReadThread (void *p)
- {
- Communication *comm = (Communication *)p;
-Index: source/Core/ConnectionFileDescriptor.cpp
-===================================================================
---- source/Core/ConnectionFileDescriptor.cpp (revision 163322)
-+++ source/Core/ConnectionFileDescriptor.cpp (working copy)
-@@ -12,6 +12,7 @@
- // C Includes
- #include <errno.h>
- #include <fcntl.h>
-+#ifdef _POSIX_SOURCE
- #include <arpa/inet.h>
- #include <netdb.h>
- #include <netinet/in.h>
-@@ -22,6 +23,7 @@
- #include <string.h>
- #include <stdlib.h>
- #include <unistd.h>
-+#endif
-
- // C++ Includes
- // Other libraries and framework includes
-@@ -123,7 +125,11 @@
- LogSP log(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_CONNECTION | LIBLLDB_LOG_OBJECT));
- // Make the command file descriptor here:
- int filedes[2];
-- int result = pipe (filedes);
-+#ifdef _POSIX_SOURCE
-+ int result = pipe (filedes);
-+#else
-+ int result = -1;
-+#endif
- if (result != 0)
- {
- if (log)
-@@ -143,13 +149,17 @@
- {
- if (m_pipe_read != -1)
- {
-+#ifdef _POSIX_SOURCE
- close (m_pipe_read);
-+#endif
- m_pipe_read = -1;
- }
-
- if (m_pipe_write != -1)
- {
-+#ifdef _POSIX_SOURCE
- close (m_pipe_write);
-+#endif
- m_pipe_write = -1;
- }
- }
-@@ -211,7 +221,11 @@
- // get the flags from the file descriptor and making sure it
- // isn't a bad fd.
- errno = 0;
-- int flags = ::fcntl (m_fd_send, F_GETFL, 0);
-+#ifdef _POSIX_SOURCE
-+ int flags = ::fcntl (m_fd_send, F_GETFL, 0);
-+#else
-+ int flags = -1;
-+#endif
- if (flags == -1 || errno == EBADF)
- {
- if (error_ptr)
-@@ -252,7 +266,9 @@
- const char *path = s + strlen("file://");
- do
- {
-+#ifdef _POSIX_SOURCE
- m_fd_send = m_fd_recv = ::open (path, O_RDWR);
-+#endif
- } while (m_fd_send == -1 && errno == EINTR);
- if (m_fd_send == -1)
- {
-@@ -260,15 +276,20 @@
- error_ptr->SetErrorToErrno();
- return eConnectionStatusError;
- }
--
-+#ifdef _POSIX_SOURCE
- int flags = ::fcntl (m_fd_send, F_GETFL, 0);
-+#else
-+ int flags = -1;
-+#endif
- if (flags >= 0)
- {
-+#ifdef _POSIX_SOURCE
- if ((flags & O_NONBLOCK) == 0)
- {
- flags |= O_NONBLOCK;
- ::fcntl (m_fd_send, F_SETFL, flags);
- }
-+#endif
- }
- m_should_close_fd = true;
- return eConnectionStatusSuccess;
-@@ -312,8 +333,10 @@
- {
- if (m_pipe_write != -1 )
- {
-+#ifdef _POSIX_SOURCE
- write (m_pipe_write, "q", 1);
- close (m_pipe_write);
-+#endif
- m_pipe_write = -1;
- }
- locker.Lock (m_mutex);
-@@ -388,7 +411,9 @@
- {
- do
- {
-+#ifdef _POSIX_SOURCE
- bytes_read = ::read (m_fd_recv, dst, dst_len);
-+#endif
- } while (bytes_read < 0 && errno == EINTR);
- }
-
-@@ -490,6 +515,7 @@
-
- ssize_t bytes_sent = 0;
-
-+#ifdef _POSIX_SOURCE
- switch (m_fd_send_type)
- {
- case eFDTypeFile: // Other FD requireing read/write
-@@ -519,6 +545,7 @@
- } while (bytes_sent < 0 && errno == EINTR);
- break;
- }
-+#endif
-
- if (bytes_sent < 0)
- error.SetErrorToErrno ();
-@@ -677,7 +704,9 @@
-
- do
- {
-+#ifdef _POSIX_SOURCE
- bytes_read = ::read (m_pipe_read, buffer, sizeof(buffer));
-+#endif
- } while (bytes_read < 0 && errno == EINTR);
- assert (bytes_read == 1 && buffer[0] == 'q');
-
-@@ -715,7 +744,9 @@
- if (log)
- log->Printf ("%p ConnectionFileDescriptor::Close (fd = %i)", this,fd);
-
-+#ifdef _POSIX_SOURCE
- success = ::close (fd) == 0;
-+#endif
- // A reference to a FD was passed in, set it to an invalid value
- fd = -1;
- if (!success && error_ptr)
-@@ -736,6 +767,7 @@
- ConnectionStatus
- ConnectionFileDescriptor::NamedSocketAccept (const char *socket_name, Error *error_ptr)
- {
-+#ifdef _POSIX_SOURCE
- ConnectionStatus result = eConnectionStatusError;
- struct sockaddr_un saddr_un;
-
-@@ -780,11 +812,15 @@
- // We are done with the listen port
- Close (listen_socket, NULL);
- return result;
-+#else
-+ return eConnectionStatusError;
-+#endif
- }
-
- ConnectionStatus
- ConnectionFileDescriptor::NamedSocketConnect (const char *socket_name, Error *error_ptr)
- {
-+#ifdef _POSIX_SOURCE
- Disconnect (NULL);
- m_fd_send_type = m_fd_recv_type = eFDTypeSocket;
-
-@@ -815,11 +851,15 @@
- if (error_ptr)
- error_ptr->Clear();
- return eConnectionStatusSuccess;
-+#else
-+ return eConnectionStatusError;
-+#endif
- }
-
- ConnectionStatus
- ConnectionFileDescriptor::SocketListen (uint16_t listen_port_num, Error *error_ptr)
- {
-+#if _POSIX_SOURCE
- LogSP log(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_CONNECTION));
- if (log)
- log->Printf ("%p ConnectionFileDescriptor::SocketListen (port = %i)", this, listen_port_num);
-@@ -878,6 +918,9 @@
- if (error_ptr)
- error_ptr->Clear();
- return eConnectionStatusSuccess;
-+#else
-+ return eConnectionStatusError;
-+#endif
- }
-
- ConnectionStatus
-@@ -1051,7 +1094,7 @@
- return eConnectionStatusSuccess;
- }
-
--#if defined(__MINGW32__) || defined(__MINGW64__)
-+#if defined(__MINGW32__) || defined(__MINGW64__) || defined(_MSC_VER)
- typedef const char * set_socket_option_arg_type;
- typedef char * get_socket_option_arg_type;
- #else // #if defined(__MINGW32__) || defined(__MINGW64__)
-@@ -1062,7 +1105,7 @@
- int
- ConnectionFileDescriptor::GetSocketOption(int fd, int level, int option_name, int &option_value)
- {
-- get_socket_option_arg_type option_value_p = static_cast<get_socket_option_arg_type>(&option_value);
-+ get_socket_option_arg_type option_value_p = reinterpret_cast<get_socket_option_arg_type>(&option_value);
- socklen_t option_value_size = sizeof(int);
- return ::getsockopt(fd, level, option_name, option_value_p, &option_value_size);
- }
-@@ -1070,10 +1113,17 @@
- int
- ConnectionFileDescriptor::SetSocketOption(int fd, int level, int option_name, int option_value)
- {
-- set_socket_option_arg_type option_value_p = static_cast<get_socket_option_arg_type>(&option_value);
-+ set_socket_option_arg_type option_value_p = reinterpret_cast<get_socket_option_arg_type>(&option_value);
- return ::setsockopt(fd, level, option_name, option_value_p, sizeof(option_value));
- }
-
-+#ifdef _WIN32
-+static unsigned long int tv2ms(struct timeval *a)
-+{
-+ return ((a->tv_sec * 1000) + (a->tv_usec / 1000));
-+}
-+#endif
-+
- bool
- ConnectionFileDescriptor::SetSocketReceiveTimeout (uint32_t timeout_usec)
- {
-@@ -1108,7 +1158,13 @@
- timeout.tv_sec = timeout_usec / TimeValue::MicroSecPerSec;
- timeout.tv_usec = timeout_usec % TimeValue::MicroSecPerSec;
- }
-- if (::setsockopt (m_fd_recv, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)) == 0)
-+#ifndef _WIN32
-+ const void* timeopt = &timeout;
-+#else
-+ DWORD ms = tv2ms(&timeout);
-+ const char* timeopt = reinterpret_cast<const char*>(ms);
-+#endif
-+ if (::setsockopt (m_fd_recv, SOL_SOCKET, SO_RCVTIMEO, timeopt, sizeof(timeopt)) == 0)
- {
- m_socket_timeout_usec = timeout_usec;
- return true;
-Index: source/Core/ConnectionSharedMemory.cpp
-===================================================================
---- source/Core/ConnectionSharedMemory.cpp (revision 163322)
-+++ source/Core/ConnectionSharedMemory.cpp (working copy)
-@@ -11,12 +11,16 @@
-
- // C Includes
- #include <errno.h>
-+#ifdef LLDB_PTHREAD
- #include <pthread.h>
-+#endif
- #include <stdlib.h>
-+#ifdef _POSIX_SOURCE
- #include <sys/file.h>
- #include <sys/mman.h>
- #include <sys/stat.h>
- #include <sys/types.h>
-+#endif
-
- // C++ Includes
- // Other libraries and framework includes
-@@ -70,12 +74,14 @@
- ConnectionStatus
- ConnectionSharedMemory::Disconnect (Error *error_ptr)
- {
-+#ifdef _POSIX_SOURCE
- m_mmap.Clear();
- if (!m_name.empty())
- {
- shm_unlink (m_name.c_str());
- m_name.clear();
- }
-+#endif
- return eConnectionStatusSuccess;
- }
-
-@@ -106,6 +112,7 @@
- ConnectionStatus
- ConnectionSharedMemory::Open (bool create, const char *name, size_t size, Error *error_ptr)
- {
-+#ifdef _POSIX_SOURCE
- if (m_fd != -1)
- {
- if (error_ptr)
-@@ -126,6 +133,7 @@
- return eConnectionStatusSuccess;
-
- Disconnect(NULL);
-+#endif
- return eConnectionStatusError;
- }
-
-Index: source/Core/cxa_demangle.cpp
-===================================================================
---- source/Core/cxa_demangle.cpp (revision 163322)
-+++ source/Core/cxa_demangle.cpp (working copy)
-@@ -7,6 +7,7 @@
- //
- //===----------------------------------------------------------------------===//
-
-+#if defined(USE_BUILTIN_LIBCXXABI_DEMANGLER)
- #include "lldb/Core/cxa_demangle.h"
-
- #include <stdlib.h>
-@@ -11009,3 +11010,5 @@
- //} // extern "C"
-
- } // lldb_cxxabiv1
-+
-+#endif
-Index: source/Core/CXXFormatterFunctions.cpp
-===================================================================
---- source/Core/CXXFormatterFunctions.cpp (revision 163322)
-+++ source/Core/CXXFormatterFunctions.cpp (working copy)
-@@ -666,7 +666,6 @@
- return true;
-
- }
--
- template bool
- lldb_private::formatters::NSDictionary_SummaryProvider<true> (ValueObject&, Stream&) ;
-
-Index: source/Core/DataBufferMemoryMap.cpp
-===================================================================
---- source/Core/DataBufferMemoryMap.cpp (revision 163322)
-+++ source/Core/DataBufferMemoryMap.cpp (working copy)
-@@ -12,7 +12,10 @@
- #include <fcntl.h>
- #include <limits.h>
- #include <sys/stat.h>
-+
-+#ifdef _POSIX_SOURCE
- #include <sys/mman.h>
-+#endif
-
- #include "lldb/Core/DataBufferMemoryMap.h"
- #include "lldb/Core/Error.h"
-@@ -80,7 +83,9 @@
- {
- if (m_mmap_addr != NULL)
- {
-+#ifdef _POSIX_SOURCE
- ::munmap((void *)m_mmap_addr, m_mmap_size);
-+#endif
- m_mmap_addr = NULL;
- m_mmap_size = 0;
- m_data = NULL;
-@@ -152,6 +157,7 @@
- struct stat stat;
- if (::fstat(fd, &stat) == 0)
- {
-+#ifdef _POSIX_SOURCE
- if (S_ISREG(stat.st_mode) && (stat.st_size > offset))
- {
- const size_t max_bytes_available = stat.st_size - offset;
-@@ -222,6 +228,7 @@
- }
- }
- }
-+#endif
- }
- }
- return GetByteSize ();
-Index: source/Core/FormatManager.cpp
-===================================================================
---- source/Core/FormatManager.cpp (revision 163322)
-+++ source/Core/FormatManager.cpp (working copy)
-@@ -692,7 +692,7 @@
- LoadSystemFormatters();
- LoadSTLFormatters();
- LoadLibcxxFormatters();
-- LoadObjCFormatters();
-+ LoadObjCFormatters();
-
- EnableCategory(m_objc_category_name,CategoryMap::Last);
- EnableCategory(m_corefoundation_category_name,CategoryMap::Last);
-Index: source/Core/getopt.c
-===================================================================
---- source/Core/getopt.c (revision 0)
-+++ source/Core/getopt.c (working copy)
-@@ -0,0 +1,511 @@
-+/* $OpenBSD: getopt_long.c,v 1.25 2011/03/05 22:10:11 guenther Exp $ */
-+/* $NetBSD: getopt_long.c,v 1.15 2002/01/31 22:43:40 tv Exp $ */
-+
-+/*
-+ * Copyright (c) 2002 Todd C. Miller <Todd.Miller at courtesan.com>
-+ *
-+ * Permission to use, copy, modify, and distribute this software for any
-+ * purpose with or without fee is hereby granted, provided that the above
-+ * copyright notice and this permission notice appear in all copies.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-+ *
-+ * Sponsored in part by the Defense Advanced Research Projects
-+ * Agency (DARPA) and Air Force Research Laboratory, Air Force
-+ * Materiel Command, USAF, under agreement number F39502-99-1-0512.
-+ */
-+/*-
-+ * Copyright (c) 2000 The NetBSD Foundation, Inc.
-+ * All rights reserved.
-+ *
-+ * This code is derived from software contributed to The NetBSD Foundation
-+ * by Dieter Baron and Thomas Klausner.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ * notice, this list of conditions and the following disclaimer in the
-+ * documentation and/or other materials provided with the distribution.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
-+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
-+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-+ * POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+#include <errno.h>
-+#include <stdlib.h>
-+#include <string.h>
-+
-+int opterr = 1; /* if error message should be printed */
-+int optind = 1; /* index into parent argv vector */
-+int optopt = '?'; /* character checked for validity */
-+int optreset; /* reset getopt */
-+char *optarg; /* argument associated with option */
-+
-+#define PRINT_ERROR ((opterr) && (*options != ':'))
-+
-+#define FLAG_PERMUTE 0x01 /* permute non-options to the end of argv */
-+#define FLAG_ALLARGS 0x02 /* treat non-options as args to option "-1" */
-+#define FLAG_LONGONLY 0x04 /* operate as getopt_long_only */
-+
-+/* return values */
-+#define BADCH (int)'?'
-+#define BADARG ((*options == ':') ? (int)':' : (int)'?')
-+#define INORDER (int)1
-+
-+#define EMSG ""
-+
-+static int getopt_internal(int, char * const *, const char *,
-+ const struct option *, int *, int);
-+static int parse_long_options(char * const *, const char *,
-+ const struct option *, int *, int);
-+static int gcd(int, int);
-+static void permute_args(int, int, int, char * const *);
-+
-+static char *place = EMSG; /* option letter processing */
-+
-+/* XXX: set optreset to 1 rather than these two */
-+static int nonopt_start = -1; /* first non option argument (for permute) */
-+static int nonopt_end = -1; /* first option after non options (for permute) */
-+
-+/* Error messages */
-+static const char recargchar[] = "option requires an argument -- %c";
-+static const char recargstring[] = "option requires an argument -- %s";
-+static const char ambig[] = "ambiguous option -- %.*s";
-+static const char noarg[] = "option doesn't take an argument -- %.*s";
-+static const char illoptchar[] = "unknown option -- %c";
-+static const char illoptstring[] = "unknown option -- %s";
-+
-+/*
-+ * Compute the greatest common divisor of a and b.
-+ */
-+static int
-+gcd(int a, int b)
-+{
-+ int c;
-+
-+ c = a % b;
-+ while (c != 0) {
-+ a = b;
-+ b = c;
-+ c = a % b;
-+ }
-+
-+ return (b);
-+}
-+
-+static void pass() {}
-+#define warnx(a, ...) pass();
-+
-+/*
-+ * Exchange the block from nonopt_start to nonopt_end with the block
-+ * from nonopt_end to opt_end (keeping the same order of arguments
-+ * in each block).
-+ */
-+static void
-+permute_args(int panonopt_start, int panonopt_end, int opt_end,
-+ char * const *nargv)
-+{
-+ int cstart, cyclelen, i, j, ncycle, nnonopts, nopts, pos;
-+ char *swap;
-+
-+ /*
-+ * compute lengths of blocks and number and size of cycles
-+ */
-+ nnonopts = panonopt_end - panonopt_start;
-+ nopts = opt_end - panonopt_end;
-+ ncycle = gcd(nnonopts, nopts);
-+ cyclelen = (opt_end - panonopt_start) / ncycle;
-+
-+ for (i = 0; i < ncycle; i++) {
-+ cstart = panonopt_end+i;
-+ pos = cstart;
-+ for (j = 0; j < cyclelen; j++) {
-+ if (pos >= panonopt_end)
-+ pos -= nnonopts;
-+ else
-+ pos += nopts;
-+ swap = nargv[pos];
-+ /* LINTED const cast */
-+ ((char **) nargv)[pos] = nargv[cstart];
-+ /* LINTED const cast */
-+ ((char **)nargv)[cstart] = swap;
-+ }
-+ }
-+}
-+
-+/*
-+ * parse_long_options --
-+ * Parse long options in argc/argv argument vector.
-+ * Returns -1 if short_too is set and the option does not match long_options.
-+ */
-+static int
-+parse_long_options(char * const *nargv, const char *options,
-+ const struct option *long_options, int *idx, int short_too)
-+{
-+ char *current_argv, *has_equal;
-+ size_t current_argv_len;
-+ int i, match;
-+
-+ current_argv = place;
-+ match = -1;
-+
-+ optind++;
-+
-+ if ((has_equal = strchr(current_argv, '=')) != NULL) {
-+ /* argument found (--option=arg) */
-+ current_argv_len = has_equal - current_argv;
-+ has_equal++;
-+ } else
-+ current_argv_len = strlen(current_argv);
-+
-+ for (i = 0; long_options[i].name; i++) {
-+ /* find matching long option */
-+ if (strncmp(current_argv, long_options[i].name,
-+ current_argv_len))
-+ continue;
-+
-+ if (strlen(long_options[i].name) == current_argv_len) {
-+ /* exact match */
-+ match = i;
-+ break;
-+ }
-+ /*
-+ * If this is a known short option, don't allow
-+ * a partial match of a single character.
-+ */
-+ if (short_too && current_argv_len == 1)
-+ continue;
-+
-+ if (match == -1) /* partial match */
-+ match = i;
-+ else {
-+ /* ambiguous abbreviation */
-+ if (PRINT_ERROR)
-+ warnx(ambig, (int)current_argv_len,
-+ current_argv);
-+ optopt = 0;
-+ return (BADCH);
-+ }
-+ }
-+ if (match != -1) { /* option found */
-+ if (long_options[match].has_arg == no_argument
-+ && has_equal) {
-+ if (PRINT_ERROR)
-+ warnx(noarg, (int)current_argv_len,
-+ current_argv);
-+ /*
-+ * XXX: GNU sets optopt to val regardless of flag
-+ */
-+ if (long_options[match].flag == NULL)
-+ optopt = long_options[match].val;
-+ else
-+ optopt = 0;
-+ return (BADARG);
-+ }
-+ if (long_options[match].has_arg == required_argument ||
-+ long_options[match].has_arg == optional_argument) {
-+ if (has_equal)
-+ optarg = has_equal;
-+ else if (long_options[match].has_arg ==
-+ required_argument) {
-+ /*
-+ * optional argument doesn't use next nargv
-+ */
-+ optarg = nargv[optind++];
-+ }
-+ }
-+ if ((long_options[match].has_arg == required_argument)
-+ && (optarg == NULL)) {
-+ /*
-+ * Missing argument; leading ':' indicates no error
-+ * should be generated.
-+ */
-+ if (PRINT_ERROR)
-+ warnx(recargstring,
-+ current_argv);
-+ /*
-+ * XXX: GNU sets optopt to val regardless of flag
-+ */
-+ if (long_options[match].flag == NULL)
-+ optopt = long_options[match].val;
-+ else
-+ optopt = 0;
-+ --optind;
-+ return (BADARG);
-+ }
-+ } else { /* unknown option */
-+ if (short_too) {
-+ --optind;
-+ return (-1);
-+ }
-+ if (PRINT_ERROR)
-+ warnx(illoptstring, current_argv);
-+ optopt = 0;
-+ return (BADCH);
-+ }
-+ if (idx)
-+ *idx = match;
-+ if (long_options[match].flag) {
-+ *long_options[match].flag = long_options[match].val;
-+ return (0);
-+ } else
-+ return (long_options[match].val);
-+}
-+
-+/*
-+ * getopt_internal --
-+ * Parse argc/argv argument vector. Called by user level routines.
-+ */
-+static int
-+getopt_internal(int nargc, char * const *nargv, const char *options,
-+ const struct option *long_options, int *idx, int flags)
-+{
-+ const char *oli; /* option letter list index */
-+ int optchar, short_too;
-+ static int posixly_correct = -1;
-+
-+ if (options == NULL)
-+ return (-1);
-+
-+ /*
-+ * XXX Some GNU programs (like cvs) set optind to 0 instead of
-+ * XXX using optreset. Work around this braindamage.
-+ */
-+ if (optind == 0)
-+ optind = optreset = 1;
-+
-+ /*
-+ * Disable GNU extensions if POSIXLY_CORRECT is set or options
-+ * string begins with a '+'.
-+ */
-+ if (posixly_correct == -1 || optreset)
-+ posixly_correct = (getenv("POSIXLY_CORRECT") != NULL);
-+ if (*options == '-')
-+ flags |= FLAG_ALLARGS;
-+ else if (posixly_correct || *options == '+')
-+ flags &= ~FLAG_PERMUTE;
-+ if (*options == '+' || *options == '-')
-+ options++;
-+
-+ optarg = NULL;
-+ if (optreset)
-+ nonopt_start = nonopt_end = -1;
-+start:
-+ if (optreset || !*place) { /* update scanning pointer */
-+ optreset = 0;
-+ if (optind >= nargc) { /* end of argument vector */
-+ place = EMSG;
-+ if (nonopt_end != -1) {
-+ /* do permutation, if we have to */
-+ permute_args(nonopt_start, nonopt_end,
-+ optind, nargv);
-+ optind -= nonopt_end - nonopt_start;
-+ }
-+ else if (nonopt_start != -1) {
-+ /*
-+ * If we skipped non-options, set optind
-+ * to the first of them.
-+ */
-+ optind = nonopt_start;
-+ }
-+ nonopt_start = nonopt_end = -1;
-+ return (-1);
-+ }
-+ if (*(place = nargv[optind]) != '-' ||
-+ (place[1] == '\0' && strchr(options, '-') == NULL)) {
-+ place = EMSG; /* found non-option */
-+ if (flags & FLAG_ALLARGS) {
-+ /*
-+ * GNU extension:
-+ * return non-option as argument to option 1
-+ */
-+ optarg = nargv[optind++];
-+ return (INORDER);
-+ }
-+ if (!(flags & FLAG_PERMUTE)) {
-+ /*
-+ * If no permutation wanted, stop parsing
-+ * at first non-option.
-+ */
-+ return (-1);
-+ }
-+ /* do permutation */
-+ if (nonopt_start == -1)
-+ nonopt_start = optind;
-+ else if (nonopt_end != -1) {
-+ permute_args(nonopt_start, nonopt_end,
-+ optind, nargv);
-+ nonopt_start = optind -
-+ (nonopt_end - nonopt_start);
-+ nonopt_end = -1;
-+ }
-+ optind++;
-+ /* process next argument */
-+ goto start;
-+ }
-+ if (nonopt_start != -1 && nonopt_end == -1)
-+ nonopt_end = optind;
-+
-+ /*
-+ * If we have "-" do nothing, if "--" we are done.
-+ */
-+ if (place[1] != '\0' && *++place == '-' && place[1] == '\0') {
-+ optind++;
-+ place = EMSG;
-+ /*
-+ * We found an option (--), so if we skipped
-+ * non-options, we have to permute.
-+ */
-+ if (nonopt_end != -1) {
-+ permute_args(nonopt_start, nonopt_end,
-+ optind, nargv);
-+ optind -= nonopt_end - nonopt_start;
-+ }
-+ nonopt_start = nonopt_end = -1;
-+ return (-1);
-+ }
-+ }
-+
-+ /*
-+ * Check long options if:
-+ * 1) we were passed some
-+ * 2) the arg is not just "-"
-+ * 3) either the arg starts with -- we are getopt_long_only()
-+ */
-+ if (long_options != NULL && place != nargv[optind] &&
-+ (*place == '-' || (flags & FLAG_LONGONLY))) {
-+ short_too = 0;
-+ if (*place == '-')
-+ place++; /* --foo long option */
-+ else if (*place != ':' && strchr(options, *place) != NULL)
-+ short_too = 1; /* could be short option too */
-+
-+ optchar = parse_long_options(nargv, options, long_options,
-+ idx, short_too);
-+ if (optchar != -1) {
-+ place = EMSG;
-+ return (optchar);
-+ }
-+ }
-+
-+ if ((optchar = (int)*place++) == (int)':' ||
-+ (optchar == (int)'-' && *place != '\0') ||
-+ (oli = strchr(options, optchar)) == NULL) {
-+ /*
-+ * If the user specified "-" and '-' isn't listed in
-+ * options, return -1 (non-option) as per POSIX.
-+ * Otherwise, it is an unknown option character (or ':').
-+ */
-+ if (optchar == (int)'-' && *place == '\0')
-+ return (-1);
-+ if (!*place)
-+ ++optind;
-+ if (PRINT_ERROR)
-+ warnx(illoptchar, optchar);
-+ optopt = optchar;
-+ return (BADCH);
-+ }
-+ if (long_options != NULL && optchar == 'W' && oli[1] == ';') {
-+ /* -W long-option */
-+ if (*place) /* no space */
-+ /* NOTHING */;
-+ else if (++optind >= nargc) { /* no arg */
-+ place = EMSG;
-+ if (PRINT_ERROR)
-+ warnx(recargchar, optchar);
-+ optopt = optchar;
-+ return (BADARG);
-+ } else /* white space */
-+ place = nargv[optind];
-+ optchar = parse_long_options(nargv, options, long_options,
-+ idx, 0);
-+ place = EMSG;
-+ return (optchar);
-+ }
-+ if (*++oli != ':') { /* doesn't take argument */
-+ if (!*place)
-+ ++optind;
-+ } else { /* takes (optional) argument */
-+ optarg = NULL;
-+ if (*place) /* no white space */
-+ optarg = place;
-+ else if (oli[1] != ':') { /* arg not optional */
-+ if (++optind >= nargc) { /* no arg */
-+ place = EMSG;
-+ if (PRINT_ERROR)
-+ warnx(recargchar, optchar);
-+ optopt = optchar;
-+ return (BADARG);
-+ } else
-+ optarg = nargv[optind];
-+ }
-+ place = EMSG;
-+ ++optind;
-+ }
-+ /* dump back option letter */
-+ return (optchar);
-+}
-+
-+/*
-+ * getopt --
-+ * Parse argc/argv argument vector.
-+ *
-+ * [eventually this will replace the BSD getopt]
-+ */
-+int
-+getopt(int nargc, char * const *nargv, const char *options)
-+{
-+
-+ /*
-+ * We don't pass FLAG_PERMUTE to getopt_internal() since
-+ * the BSD getopt(3) (unlike GNU) has never done this.
-+ *
-+ * Furthermore, since many privileged programs call getopt()
-+ * before dropping privileges it makes sense to keep things
-+ * as simple (and bug-free) as possible.
-+ */
-+ return (getopt_internal(nargc, nargv, options, NULL, NULL, 0));
-+}
-+
-+/*
-+ * getopt_long --
-+ * Parse argc/argv argument vector.
-+ */
-+int
-+getopt_long(int nargc, char * const *nargv, const char *options,
-+ const struct option *long_options, int *idx)
-+{
-+ return (getopt_internal(nargc, nargv, options, long_options, idx,
-+ FLAG_PERMUTE));
-+}
-+
-+/*
-+ * getopt_long_only --
-+ * Parse argc/argv argument vector.
-+ */
-+int
-+getopt_long_only(int nargc, char * const *nargv, const char *options,
-+ const struct option *long_options, int *idx)
-+{
-+
-+ return (getopt_internal(nargc, nargv, options, long_options, idx,
-+ FLAG_PERMUTE|FLAG_LONGONLY));
-+}
-\ No newline at end of file
-Index: source/Core/Log.cpp
-===================================================================
---- source/Core/Log.cpp (revision 163322)
-+++ source/Core/Log.cpp (working copy)
-@@ -8,11 +8,19 @@
- //===----------------------------------------------------------------------===//
-
- // C Includes
--#include <pthread.h>
- #include <stdio.h>
- #include <stdarg.h>
- #include <stdlib.h>
-+#include <time.h>
-+#ifdef _POSIX_SOURCE
-+#include <pthread.h>
- #include <unistd.h>
-+#endif
-+#ifdef _WIN32
-+#define NOMINMAX
-+#include <Winsock2.h>
-+#undef interface
-+#endif
-
- // C++ Includes
- #include <map>
-Index: source/Core/Mangled.cpp
-===================================================================
---- source/Core/Mangled.cpp (revision 163322)
-+++ source/Core/Mangled.cpp (working copy)
-@@ -15,8 +15,10 @@
- #if defined(USE_BUILTIN_LIBCXXABI_DEMANGLER)
- #include "lldb/Core/cxa_demangle.h"
- #else
-+#ifdef LLDB_LIBCXXABI
- #include <cxxabi.h>
- #endif
-+#endif
-
-
- #include "llvm/ADT/DenseMap.h"
-@@ -207,8 +209,12 @@
- #if defined(USE_BUILTIN_LIBCXXABI_DEMANGLER)
- char *demangled_name = lldb_cxxabiv1::__cxa_demangle (mangled_cstr, NULL, NULL, NULL);
- #else
-+#ifdef LLDB_LIBCXXABI
- char *demangled_name = abi::__cxa_demangle (mangled_cstr, NULL, NULL, NULL);
-+#else
-+ char *demangled_name = 0;
- #endif
-+#endif
-
- if (demangled_name)
- {
-Index: source/Core/RegularExpression.cpp
-===================================================================
---- source/Core/RegularExpression.cpp (revision 163322)
-+++ source/Core/RegularExpression.cpp (working copy)
-@@ -16,13 +16,9 @@
- // Default constructor
- //----------------------------------------------------------------------
- RegularExpression::RegularExpression() :
-- m_re(),
-- m_comp_err (1),
-- m_preg(),
-- m_compile_flags(REG_EXTENDED),
-- m_matches()
-+ m_re(),
-+ m_regex(llvm::StringRef())
- {
-- memset(&m_preg,0,sizeof(m_preg));
- }
-
- //----------------------------------------------------------------------
-@@ -30,12 +26,9 @@
- // resulting compiled regular expression into this object.
- //----------------------------------------------------------------------
- RegularExpression::RegularExpression(const char* re, int flags) :
-- m_re(),
-- m_comp_err (1),
-- m_preg(),
-- m_compile_flags(flags)
-+ m_re(),
-+ m_regex(llvm::StringRef())
- {
-- memset(&m_preg,0,sizeof(m_preg));
- Compile(re);
- }
-
-@@ -45,20 +38,18 @@
- //----------------------------------------------------------------------
- RegularExpression::RegularExpression(const char* re) :
- m_re(),
-- m_comp_err (1),
-- m_preg(),
-- m_compile_flags(REG_EXTENDED)
-+ m_regex(llvm::StringRef())
- {
-- memset(&m_preg,0,sizeof(m_preg));
- Compile(re);
- }
-
--RegularExpression::RegularExpression(const RegularExpression &rhs)
--{
-- memset(&m_preg,0,sizeof(m_preg));
-- Compile(rhs.GetText(), rhs.GetCompileFlags());
--}
-+RegularExpression::RegularExpression(const RegularExpression &rhs) :
-+ m_regex(llvm::StringRef())
-+ {
-+ Compile(rhs.GetText(), rhs.GetCompileFlags());
-+ }
-
-+
- const RegularExpression &
- RegularExpression::operator= (const RegularExpression &rhs)
- {
-@@ -76,7 +67,7 @@
- //----------------------------------------------------------------------
- RegularExpression::~RegularExpression()
- {
-- Free();
-+
- }
-
- //----------------------------------------------------------------------
-@@ -102,19 +93,10 @@
- {
- Free();
- m_compile_flags = flags;
--
-- if (re && re[0])
-- {
-- m_re = re;
-- m_comp_err = ::regcomp (&m_preg, re, flags);
-- }
-- else
-- {
-- // No valid regular expression
-- m_comp_err = 1;
-- }
--
-- return m_comp_err == 0;
-+ m_re = re;
-+ m_regex = llvm::Regex(llvm::StringRef(re));
-+
-+ return IsValid();
- }
-
- //----------------------------------------------------------------------
-@@ -128,40 +110,16 @@
- bool
- RegularExpression::Execute(const char* s, size_t num_matches, int execute_flags) const
- {
-- int match_result = 1;
-- if (m_comp_err == 0)
-- {
-- if (num_matches > 0)
-- m_matches.resize(num_matches + 1);
-- else
-- m_matches.clear();
--
-- match_result = ::regexec (&m_preg,
-- s,
-- m_matches.size(),
-- &m_matches[0],
-- execute_flags);
-- }
-- return match_result == 0;
-+ return m_regex.match(llvm::StringRef(s), &m_matches);
- }
-
- bool
- RegularExpression::GetMatchAtIndex (const char* s, uint32_t idx, std::string& match_str) const
- {
-- if (idx <= m_preg.re_nsub && idx < m_matches.size())
-+ if (idx < m_matches.size())
- {
-- if (m_matches[idx].rm_eo == m_matches[idx].rm_so)
-- {
-- // Matched the empty string...
-- match_str.clear();
-- return true;
-- }
-- else if (m_matches[idx].rm_eo > m_matches[idx].rm_so)
-- {
-- match_str.assign (s + m_matches[idx].rm_so,
-- m_matches[idx].rm_eo - m_matches[idx].rm_so);
-- return true;
-- }
-+ match_str = m_matches[idx];
-+ return true;
- }
- return false;
- }
-@@ -174,7 +132,8 @@
- bool
- RegularExpression::IsValid () const
- {
-- return m_comp_err == 0;
-+ std::string err;
-+ return m_regex.isValid(err);
- }
-
- //----------------------------------------------------------------------
-@@ -195,26 +154,17 @@
- void
- RegularExpression::Free()
- {
-- if (m_comp_err == 0)
-- {
-- m_re.clear();
-- regfree(&m_preg);
-- // Set a compile error since we no longer have a valid regex
-- m_comp_err = 1;
-- }
-+ m_re.clear();
-+ m_regex = llvm::Regex(llvm::StringRef());
-+ m_matches.clear();
- }
-
--size_t
--RegularExpression::GetErrorAsCString (char *err_str, size_t err_str_max_len) const
-+std::string
-+RegularExpression::GetErrorAsCString () const
- {
-- if (m_comp_err == 0)
-- {
-- if (err_str && err_str_max_len)
-- *err_str = '\0';
-- return 0;
-- }
--
-- return ::regerror (m_comp_err, &m_preg, err_str, err_str_max_len);
-+ std::string err;
-+ m_regex.isValid(err);
-+ return err;
- }
-
- bool
-Index: source/Core/Scalar.cpp
-===================================================================
---- source/Core/Scalar.cpp (revision 163322)
-+++ source/Core/Scalar.cpp (working copy)
-@@ -17,7 +17,7 @@
- #include "lldb/Core/DataExtractor.h"
- #include "lldb/Host/Endian.h"
-
--#include "Plugins/Process/Utility/InstructionUtils.h"
-+//#include "Plugins/Process/Utility/InstructionUtils.h"
-
- using namespace lldb;
- using namespace lldb_private;
-@@ -2019,6 +2019,18 @@
- return bytes_copied;
- }
-
-+int SignedBits(int data, uint32_t a, uint32_t b)
-+{
-+ // TODO
-+ return 0;
-+}
-+
-+int UnsignedBits(int data, uint32_t a, uint32_t b)
-+{
-+ // TODO
-+ return 0;
-+}
-+
- bool
- Scalar::ExtractBitfield (uint32_t bit_size,
- uint32_t bit_offset)
-Index: source/Core/Timer.cpp
-===================================================================
---- source/Core/Timer.cpp (revision 163322)
-+++ source/Core/Timer.cpp (working copy)
-@@ -26,7 +26,12 @@
- FILE * Timer::g_file = NULL;
- typedef std::vector<Timer *> TimerStack;
- typedef std::map<const char *, uint64_t> CategoryMap;
-+
-+#ifdef _POSIX_SOURCE
- static pthread_key_t g_key;
-+#else
-+static DWORD g_key;
-+#endif
-
- static Mutex &
- GetCategoryMutex()
-@@ -46,6 +51,7 @@
- static TimerStack *
- GetTimerStackForCurrentThread ()
- {
-+#ifdef _POSIX_SOURCE
- void *timer_stack = ::pthread_getspecific (g_key);
- if (timer_stack == NULL)
- {
-@@ -53,6 +59,15 @@
- timer_stack = ::pthread_getspecific (g_key);
- }
- return (TimerStack *)timer_stack;
-+#else
-+ void *timer_stack = ::TlsGetValue (g_key);
-+ if (timer_stack == NULL)
-+ {
-+ ::TlsSetValue (g_key, new TimerStack);
-+ timer_stack = ::TlsGetValue (g_key);
-+ }
-+ return (TimerStack *)timer_stack;
-+#endif
- }
-
- void
-@@ -71,8 +86,11 @@
- Timer::Initialize ()
- {
- Timer::g_file = stdout;
-+#ifdef _POSIX_SOURCE
- ::pthread_key_create (&g_key, ThreadSpecificCleanup);
--
-+#else
-+ g_key = ::TlsAlloc();
-+#endif
- }
-
- Timer::Timer (const char *category, const char *format, ...) :
-Index: source/Core/Windows.cpp
-===================================================================
---- source/Core/Windows.cpp (revision 0)
-+++ source/Core/Windows.cpp (working copy)
-@@ -0,0 +1,191 @@
-+//===-- Windows.cpp ---------------------------------------------*- C++ -*-===//
-+//
-+// The LLVM Compiler Infrastructure
-+//
-+// This file is distributed under the University of Illinois Open Source
-+// License. See LICENSE.TXT for details.
-+//
-+//===----------------------------------------------------------------------===//
-+
-+// This file provides Windows support functions
-+
-+#include <ctype.h>
-+#include <cstring>
-+#include <cstdarg>
-+#include <cstdlib>
-+#include <cstdio>
-+#include <cerrno>
-+
-+int strcasecmp(const char* s1, const char* s2)
-+{
-+ while (*s1 != '\0' && tolower(*s1) == tolower(*s2))
-+ {
-+ s1++;
-+ s2++;
-+ }
-+
-+ return tolower(*(unsigned char *) s1) - tolower(*(unsigned char *) s2);
-+}
-+
-+int strncasecmp(const char* s1, const char* s2, size_t n)
-+{
-+ if (n == 0)
-+ return 0;
-+
-+ while (n-- != 0 && tolower(*s1) == tolower(*s2))
-+ {
-+ if (n == 0 || *s1 == '\0' || *s2 == '\0')
-+ break;
-+ s1++;
-+ s2++;
-+ }
-+
-+ return tolower(*(unsigned char *) s1) - tolower(*(unsigned char *) s2);
-+}
-+
-+char * strcasestr(const char *s, const char* find)
-+{
-+ char c, sc;
-+ size_t len;
-+
-+ if ((c = *find++) != 0) {
-+ c = tolower((unsigned char)c);
-+ len = strlen(find);
-+ do {
-+ do {
-+ if ((sc = *s++) == 0)
-+ return 0;
-+ } while ((char)tolower((unsigned char)sc) != c);
-+ } while (strncasecmp(s, find, len) != 0);
-+ s--;
-+ }
-+ return ((char *)s);
-+}
-+
-+int vasprintf(char **ret, const char *fmt, va_list ap)
-+{
-+ char *buf;
-+ int len;
-+ size_t buflen;
-+ va_list ap2;
-+
-+#if defined(_MSC_VER) || defined(__MINGW64)
-+ ap2 = ap;
-+ len = _vscprintf(fmt, ap2);
-+#else
-+ va_copy(ap2, ap);
-+ len = vsnprintf(NULL, 0, fmt, ap2);
-+#endif
-+
-+ if (len >= 0 && (buf = (char*) malloc ((buflen = (size_t) (len + 1)))) != NULL) {
-+ len = vsnprintf(buf, buflen, fmt, ap);
-+ *ret = buf;
-+ } else {
-+ *ret = NULL;
-+ len = -1;
-+ }
-+
-+ va_end(ap2);
-+ return len;
-+}
-+
-+int access(const char *path, int amode)
-+{
-+ return 0;
-+}
-+
-+char* __cdecl realpath( const char * name, char * resolved )
-+{
-+ char *retname = NULL; /* we will return this, if we fail */
-+
-+ /* SUSv3 says we must set `errno = EINVAL', and return NULL,
-+ * if `name' is passed as a NULL pointer.
-+ */
-+
-+ if( name == NULL )
-+ errno = EINVAL;
-+
-+ /* Otherwise, `name' must refer to a readable filesystem object,
-+ * if we are going to resolve its absolute path name.
-+ */
-+
-+ else if( access( name, 4 ) == 0 )
-+ {
-+ /* If `name' didn't point to an existing entity,
-+ * then we don't get to here; we simply fall past this block,
-+ * returning NULL, with `errno' appropriately set by `access'.
-+ *
-+ * When we _do_ get to here, then we can use `_fullpath' to
-+ * resolve the full path for `name' into `resolved', but first,
-+ * check that we have a suitable buffer, in which to return it.
-+ */
-+
-+ if( (retname = resolved) == NULL )
-+ {
-+ /* Caller didn't give us a buffer, so we'll exercise the
-+ * option granted by SUSv3, and allocate one.
-+ *
-+ * `_fullpath' would do this for us, but it uses `malloc', and
-+ * Microsoft's implementation doesn't set `errno' on failure.
-+ * If we don't do this explicitly ourselves, then we will not
-+ * know if `_fullpath' fails on `malloc' failure, or for some
-+ * other reason, and we want to set `errno = ENOMEM' for the
-+ * `malloc' failure case.
-+ */
-+
-+ retname = (char*) malloc( _MAX_PATH );
-+ }
-+
-+ /* By now, we should have a valid buffer.
-+ * If we don't, then we know that `malloc' failed,
-+ * so we can set `errno = ENOMEM' appropriately.
-+ */
-+
-+ if( retname == NULL )
-+ errno = ENOMEM;
-+
-+ /* Otherwise, when we do have a valid buffer,
-+ * `_fullpath' should only fail if the path name is too long.
-+ */
-+
-+ else if( (retname = _fullpath( retname, name, _MAX_PATH )) == NULL )
-+ errno = ENAMETOOLONG;
-+ }
-+
-+ /* By the time we get to here,
-+ * `retname' either points to the required resolved path name,
-+ * or it is NULL, with `errno' set appropriately, either of which
-+ * is our required return condition.
-+ */
-+
-+ return retname;
-+}
-+
-+long long int strtoll(const char *nptr, char **endptr, int base)
-+{
-+ return 0;
-+}
-+
-+unsigned long long int strtoull(const char *nptr, char **endptr, int base)
-+{
-+ return 0;
-+}
-+
-+//char* realpath( const char * name, char * resolved )
-+//{
-+// return 0;
-+//}
-+
-+char* basename(char *path)
-+{
-+ return 0;
-+}
-+
-+char *dirname(char *path)
-+{
-+ return 0;
-+}
-+
-+#include "lldb/lldb-windows.h"
-+
-+#include "getopt.c"
-Index: source/Expression/ClangExpressionDeclMap.cpp
-===================================================================
---- source/Expression/ClangExpressionDeclMap.cpp (revision 163322)
-+++ source/Expression/ClangExpressionDeclMap.cpp (working copy)
-@@ -13,6 +13,7 @@
- // C++ Includes
- // Other libraries and framework includes
- // Project includes
-+#include "clang/AST/ASTContext.h"
- #include "clang/AST/DeclarationName.h"
- #include "clang/AST/Decl.h"
- #include "lldb/lldb-private.h"
-@@ -1595,7 +1596,7 @@
- if (!var_sp)
- {
- err.SetErrorString("Invalid persistent variable");
-- return LLDB_INVALID_ADDRESS;
-+ return /*LLDB_INVALID_ADDRESS*/false;
- }
-
- const size_t pvar_byte_size = var_sp->GetByteSize();
-Index: source/Expression/ClangExpressionParser.cpp
-===================================================================
---- source/Expression/ClangExpressionParser.cpp (revision 163322)
-+++ source/Expression/ClangExpressionParser.cpp (working copy)
-@@ -43,7 +43,12 @@
- #include "clang/Frontend/TextDiagnosticPrinter.h"
- #include "clang/Lex/Preprocessor.h"
- #include "clang/Parse/ParseAST.h"
-+#include "clang/Basic/Version.h"
-+#if CLANG_VERSION_MAJOR > 3 || (CLANG_VERSION_MAJOR == 3 && CLANG_VERSION_MINOR >= 2)
-+#include "clang/Rewrite/Frontend/FrontendActions.h"
-+#else
- #include "clang/Rewrite/FrontendActions.h"
-+#endif
- #include "clang/Sema/SemaConsumer.h"
- #include "clang/StaticAnalyzer/Frontend/FrontendActions.h"
-
-@@ -246,8 +251,10 @@
- {
- if (process_sp->GetObjCLanguageRuntime()->GetRuntimeVersion() == eAppleObjC_V2)
- {
-+#if CLANG_MAJOR_VERSION == 3 && CLANG_MINOR_VERSION < 2
- m_compiler->getLangOpts().ObjCNonFragileABI = true; // NOT i386
- m_compiler->getLangOpts().ObjCNonFragileABI2 = true; // NOT i386
-+#endif
- }
-
- if (process_sp->GetObjCLanguageRuntime()->HasNewLiteralsAndIndexing())
-Index: source/Expression/CMakeLists.txt
-===================================================================
---- source/Expression/CMakeLists.txt (revision 0)
-+++ source/Expression/CMakeLists.txt (working copy)
-@@ -0,0 +1,22 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbExpression
-+ ASTDumper.cpp
-+ ASTResultSynthesizer.cpp
-+ ASTStructExtractor.cpp
-+ ClangASTSource.cpp
-+ ClangExpressionDeclMap.cpp
-+ ClangExpressionParser.cpp
-+ ClangExpressionVariable.cpp
-+ ClangFunction.cpp
-+ ClangPersistentVariables.cpp
-+ ClangUserExpression.cpp
-+ ClangUtilityFunction.cpp
-+ DWARFExpression.cpp
-+ ExpressionSourceCode.cpp
-+ IRDynamicChecks.cpp
-+ IRForTarget.cpp
-+ IRInterpreter.cpp
-+ ProcessDataAllocator.cpp
-+ RecordingMemoryManager.cpp
-+ )
-Index: source/Expression/IRForTarget.cpp
-===================================================================
---- source/Expression/IRForTarget.cpp (revision 163322)
-+++ source/Expression/IRForTarget.cpp (working copy)
-@@ -2679,7 +2679,7 @@
- Constant::getNullValue(intptr_ty),
- "reloc_placeholder",
- NULL /* InsertBefore */,
-- false /* ThreadLocal */,
-+ GlobalVariable::NotThreadLocal /* ThreadLocal */,
- 0 /* AddressSpace */);
-
- Function::iterator bbi;
-Index: source/Expression/IRInterpreter.cpp
-===================================================================
---- source/Expression/IRInterpreter.cpp (revision 163322)
-+++ source/Expression/IRInterpreter.cpp (working copy)
-@@ -1003,6 +1003,12 @@
- return true;
- }
-
-+#ifdef _MSC_VER
-+#define LLDB_ULL
-+#else
-+#define LLDB_ULL ull
-+#endif
-+
- bool
- IRInterpreter::runOnFunction (lldb::ClangExpressionVariableSP &result,
- const lldb_private::ConstString &result_name,
-@@ -1032,12 +1038,12 @@
- err.SetErrorString(interpreter_initialization_error);
- return false;
- case 4:
-- alloc_min = 0x00001000llu;
-- alloc_max = 0x0000ffffllu;
-+ alloc_min = 0x00001000 LLDB_ULL;
-+ alloc_max = 0x0000ffff LLDB_ULL;
- break;
- case 8:
-- alloc_min = 0x0000000000001000llu;
-- alloc_max = 0x000000000000ffffllu;
-+ alloc_min = 0x0000000000001000 LLDB_ULL;
-+ alloc_max = 0x000000000000ffff LLDB_ULL;
- break;
- }
-
-Index: source/Host/CMakeLists.txt
-===================================================================
---- source/Host/CMakeLists.txt (revision 0)
-+++ source/Host/CMakeLists.txt (working copy)
-@@ -0,0 +1,3 @@
-+add_subdirectory(common)
-+#add_subdirectory(linux)
-+add_subdirectory(windows)
-Index: source/Host/common/CMakeLists.txt
-===================================================================
---- source/Host/common/CMakeLists.txt (revision 0)
-+++ source/Host/common/CMakeLists.txt (working copy)
-@@ -0,0 +1,13 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbHostCommon
-+ Condition.cpp
-+ File.cpp
-+ FileSpec.cpp
-+ Host.cpp
-+ Mutex.cpp
-+ SocketAddress.cpp
-+ Symbols.cpp
-+ Terminal.cpp
-+ TimeValue.cpp
-+ )
-Index: source/Host/common/Condition.cpp
-===================================================================
---- source/Host/common/Condition.cpp (revision 163322)
-+++ source/Host/common/Condition.cpp (working copy)
-@@ -24,7 +24,11 @@
- Condition::Condition () :
- m_condition()
- {
-+#ifdef _WIN32
-+ InitializeConditionVariable(&m_condition);
-+#else
- ::pthread_cond_init (&m_condition, NULL);
-+#endif
- }
-
- //----------------------------------------------------------------------
-@@ -34,7 +38,9 @@
- //----------------------------------------------------------------------
- Condition::~Condition ()
- {
-+#ifndef _WIN32
- ::pthread_cond_destroy (&m_condition);
-+#endif
- }
-
- //----------------------------------------------------------------------
-@@ -43,9 +49,14 @@
- int
- Condition::Broadcast ()
- {
-+#ifdef _WIN32
-+ WakeAllConditionVariable(&m_condition);
-+ return 0;
-+#else
- return ::pthread_cond_broadcast (&m_condition);
-+#endif
- }
--
-+#ifndef _WIN32
- //----------------------------------------------------------------------
- // Get accessor to the pthread condition object
- //----------------------------------------------------------------------
-@@ -54,14 +65,19 @@
- {
- return &m_condition;
- }
--
-+#endif
- //----------------------------------------------------------------------
- // Unblocks one thread waiting for the condition variable
- //----------------------------------------------------------------------
- int
- Condition::Signal ()
- {
-+#ifdef _WIN32
-+ WakeConditionVariable(&m_condition);
-+ return 0;
-+#else
- return ::pthread_cond_signal (&m_condition);
-+#endif
- }
-
- //----------------------------------------------------------------------
-@@ -77,9 +93,33 @@
- //
- // The current thread re-acquires the lock on "mutex".
- //----------------------------------------------------------------------
-+
-+/* convert struct timeval to ms(milliseconds) */
-+static unsigned long int tv2ms(struct timeval a) {
-+ return ((a.tv_sec * 1000) + (a.tv_usec / 1000));
-+}
-+
- int
- Condition::Wait (Mutex &mutex, const TimeValue *abstime, bool *timed_out)
- {
-+#ifdef _WIN32
-+ DWORD wait = INFINITE;
-+ if (abstime != NULL)
-+ wait = tv2ms(abstime->GetAsTimeVal());
-+
-+ int err = SleepConditionVariableCS(&m_condition, (PCRITICAL_SECTION)&mutex,
-+ wait);
-+
-+ if (timed_out != NULL)
-+ {
-+ if ((err == 0) && GetLastError() == ERROR_TIMEOUT)
-+ *timed_out = true;
-+ else
-+ *timed_out = false;
-+ }
-+
-+ return err != 0;
-+#else
- int err = 0;
- do
- {
-@@ -100,7 +140,7 @@
- *timed_out = false;
- }
-
--
- return err;
-+#endif
- }
-
-Index: source/Host/common/File.cpp
-===================================================================
---- source/Host/common/File.cpp (revision 163322)
-+++ source/Host/common/File.cpp (working copy)
-@@ -16,6 +16,11 @@
- #include <stdarg.h>
- #include <sys/stat.h>
-
-+#ifdef _WIN32
-+#include <io.h>
-+typedef uint32_t mode_t;
-+#endif
-+
- #include "lldb/Core/DataBufferHeap.h"
- #include "lldb/Core/Error.h"
- #include "lldb/Host/Config.h"
-@@ -167,7 +172,11 @@
-
- if (rhs.DescriptorIsValid())
- {
-+#ifdef _WIN32
-+ m_descriptor = ::_dup(rhs.GetDescriptor());
-+#else
- m_descriptor = ::fcntl(rhs.GetDescriptor(), F_DUPFD);
-+#endif
- if (!DescriptorIsValid())
- error.SetErrorToErrno();
- else
-@@ -217,10 +226,13 @@
- oflag |= O_RDONLY;
- }
-
-+#ifndef _WIN32
- if (options & eOpenOptionNonBlocking)
- oflag |= O_NONBLOCK;
-+#endif
-
- mode_t mode = 0;
-+#ifndef _WIN32
- if (oflag & O_CREAT)
- {
- if (permissions & ePermissionsUserRead) mode |= S_IRUSR;
-@@ -233,6 +245,7 @@
- if (permissions & ePermissionsWorldWrite) mode |= S_IWOTH;
- if (permissions & ePermissionsWorldExecute) mode |= S_IXOTH;
- }
-+#endif
-
- do
- {
-@@ -401,6 +414,11 @@
- Error error;
- if (DescriptorIsValid())
- {
-+#ifdef _WIN32
-+ int err = FlushFileBuffers((HANDLE)_get_osfhandle(m_descriptor));
-+ if (err == 0)
-+ error.SetErrorToGenericError();
-+#else
- int err = 0;
- do
- {
-@@ -409,6 +427,7 @@
-
- if (err == -1)
- error.SetErrorToErrno();
-+#endif
- }
- else
- {
-@@ -508,6 +527,7 @@
- Error
- File::Read (void *buf, size_t &num_bytes, off_t &offset)
- {
-+#ifndef _WIN32
- Error error;
- int fd = GetDescriptor();
- if (fd != kInvalidDescriptor)
-@@ -535,6 +555,13 @@
- error.SetErrorString("invalid file handle");
- }
- return error;
-+#else
-+ long cur = ::lseek(m_descriptor, 0, SEEK_CUR);
-+ Error error = Read(buf, num_bytes);
-+ if (!error.Fail())
-+ SeekFromStart(cur);
-+ return error;
-+#endif
- }
-
- Error
-@@ -597,6 +624,7 @@
- int fd = GetDescriptor();
- if (fd != kInvalidDescriptor)
- {
-+#ifndef _WIN32
- ssize_t bytes_written = -1;
- do
- {
-@@ -613,6 +641,17 @@
- offset += bytes_written;
- num_bytes = bytes_written;
- }
-+#else
-+ long cur = ::lseek(m_descriptor, 0, SEEK_CUR);
-+ error = Write(buf, num_bytes);
-+ long after = ::lseek(m_descriptor, 0, SEEK_CUR);
-+
-+ if (!error.Fail())
-+ SeekFromStart(cur);
-+
-+ ssize_t bytes_written = after - cur;
-+ offset = after;
-+#endif
- }
- else
- {
-Index: source/Host/common/FileSpec.cpp
-===================================================================
---- source/Host/common/FileSpec.cpp (revision 163322)
-+++ source/Host/common/FileSpec.cpp (working copy)
-@@ -10,8 +10,12 @@
-
- #include <dirent.h>
- #include <fcntl.h>
-+
-+#ifdef _POSIX_SOURCE
- #include <libgen.h>
- #include <sys/stat.h>
-+#endif
-+
- #include <string.h>
- #include <fstream>
-
-@@ -46,6 +50,13 @@
- return false;
- }
-
-+#ifdef _WIN32
-+char* realpath( const char * name, char * resolved );
-+char* basename(char *path);
-+char *dirname(char *path);
-+typedef uint32_t mode_t;
-+#endif
-+
- #ifdef LLDB_CONFIG_TILDE_RESOLVES_TO_USER
-
- static const char*
-@@ -917,9 +928,11 @@
- case DT_REG: file_type = eFileTypeRegular; call_callback = find_files; break;
- case DT_LNK: file_type = eFileTypeSymbolicLink; call_callback = find_other; break;
- case DT_SOCK: file_type = eFileTypeSocket; call_callback = find_other; break;
-+#ifndef _WIN32
- #if !defined(__OpenBSD__)
- case DT_WHT: file_type = eFileTypeOther; call_callback = find_other; break;
- #endif
-+#endif
- }
-
- if (call_callback)
-@@ -990,7 +1003,7 @@
- if (extension)
- {
- static RegularExpression g_source_file_regex ("^(c|m|mm|cpp|c\\+\\+|cxx|cc|cp|s|asm|f|f77|f90|f95|f03|for|ftn|fpp|ada|adb|ads)$",
-- REG_EXTENDED | REG_ICASE);
-+ llvm::Regex::IgnoreCase);
- return g_source_file_regex.Execute (extension.GetCString());
- }
- return false;
-Index: source/Host/common/Host.cpp
-===================================================================
---- source/Host/common/Host.cpp (revision 163322)
-+++ source/Host/common/Host.cpp (working copy)
-@@ -25,15 +25,18 @@
- #include "llvm/Support/Host.h"
- #include "llvm/Support/MachO.h"
-
-+#include <errno.h>
-+#include <limits.h>
-+
-+#ifdef __unix__
- #include <dlfcn.h>
--#include <errno.h>
- #include <grp.h>
--#include <limits.h>
- #include <netdb.h>
- #include <pwd.h>
-+#endif
-+
- #include <sys/types.h>
-
--
- #if defined (__APPLE__)
-
- #include <dispatch/dispatch.h>
-@@ -67,7 +70,7 @@
- bool monitor_signals; // If true, call the callback when "pid" gets signaled.
- };
-
--static void *
-+static thread_result_t
- MonitorChildProcessThreadFunction (void *arg);
-
- lldb::thread_t
-@@ -102,6 +105,7 @@
- // constructed, and exception safely restore the previous value it
- // when it goes out of scope.
- //------------------------------------------------------------------
-+#ifndef _WIN32
- class ScopedPThreadCancelDisabler
- {
- public:
-@@ -124,8 +128,8 @@
- private:
- int m_old_state; // Save the old cancelability state.
- };
--
--static void *
-+#endif
-+static thread_result_t
- MonitorChildProcessThreadFunction (void *arg)
- {
- LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
-@@ -144,6 +148,8 @@
-
- int status = -1;
- const int options = 0;
-+
-+#ifndef _WIN32
- while (1)
- {
- log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS);
-@@ -224,12 +230,16 @@
- }
- }
- }
--
-+#endif
- log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS);
- if (log)
- log->Printf ("%s (arg = %p) thread exiting...", __FUNCTION__, arg);
-
-+#ifdef _WIN32
-+ return 0;
-+#else
- return NULL;
-+#endif
- }
-
-
-@@ -253,7 +263,18 @@
- size_t
- Host::GetPageSize()
- {
-+#ifdef _WIN32
-+ static long g_pagesize = 0;
-+ if (!g_pagesize)
-+ {
-+ SYSTEM_INFO systemInfo;
-+ GetNativeSystemInfo(&systemInfo);
-+ g_pagesize = systemInfo.dwPageSize;
-+ }
-+ return g_pagesize;
-+#else
- return ::getpagesize();
-+#endif
- }
-
- const ArchSpec &
-@@ -427,6 +448,8 @@
- return ::mach_thread_self();
- #elif defined(__FreeBSD__)
- return lldb::tid_t(pthread_getthreadid_np());
-+#elif defined(_WIN32)
-+ return lldb::tid_t(::GetCurrentThreadId());
- #else
- return lldb::tid_t(pthread_self());
- #endif
-@@ -435,12 +458,17 @@
- lldb::thread_t
- Host::GetCurrentThread ()
- {
-+#ifdef _WIN32
-+ return lldb::thread_t(::GetCurrentThread());
-+#else
- return lldb::thread_t(pthread_self());
-+#endif
- }
-
- const char *
- Host::GetSignalAsCString (int signo)
- {
-+#ifndef _WIN32
- switch (signo)
- {
- case SIGHUP: return "SIGHUP"; // 1 hangup
-@@ -486,6 +514,7 @@
- default:
- break;
- }
-+#endif
- return NULL;
- }
-
-@@ -530,6 +559,9 @@
- };
-
- static thread_result_t
-+#ifdef _WIN32
-+__stdcall
-+#endif
- ThreadCreateTrampoline (thread_arg_t arg)
- {
- HostThreadCreateInfo *info = (HostThreadCreateInfo *)arg;
-@@ -559,7 +591,13 @@
- // Host::ThreadCreateTrampoline will delete this pointer for us.
- HostThreadCreateInfo *info_ptr = new HostThreadCreateInfo (thread_name, thread_fptr, thread_arg);
-
-+#ifdef _WIN32
-+ thread = ::_beginthreadex(0, 0, ThreadCreateTrampoline, info_ptr, 0, NULL);
-+ int err = thread;
-+#else
- int err = ::pthread_create (&thread, NULL, ThreadCreateTrampoline, info_ptr);
-+#endif
-+
- if (err == 0)
- {
- if (error)
-@@ -576,28 +614,41 @@
- bool
- Host::ThreadCancel (lldb::thread_t thread, Error *error)
- {
-+#ifdef _WIN32
-+ int err = ::TerminateThread((HANDLE)thread, 0);
-+#else
- int err = ::pthread_cancel (thread);
- if (error)
- error->SetError(err, eErrorTypePOSIX);
-+#endif
- return err == 0;
- }
-
- bool
- Host::ThreadDetach (lldb::thread_t thread, Error *error)
- {
-+#ifdef _WIN32
-+ return ThreadCancel(thread, error);
-+#else
- int err = ::pthread_detach (thread);
- if (error)
- error->SetError(err, eErrorTypePOSIX);
- return err == 0;
-+#endif
- }
-
- bool
- Host::ThreadJoin (lldb::thread_t thread, thread_result_t *thread_result_ptr, Error *error)
- {
-+#ifdef _WIN32
-+ WaitForSingleObject((HANDLE) thread, INFINITE);
-+ return true;
-+#else
- int err = ::pthread_join (thread, thread_result_ptr);
- if (error)
- error->SetError(err, eErrorTypePOSIX);
- return err == 0;
-+#endif
- }
-
- // rdar://problem/8153284
-@@ -609,7 +660,9 @@
- // Another approach is to introduce a static guard object which monitors its
- // own destruction and raises a flag, but this incurs more overhead.
-
-+#ifndef _WIN32
- static pthread_once_t g_thread_map_once = PTHREAD_ONCE_INIT;
-+#endif
- static ThreadSafeSTLMap<uint64_t, std::string> *g_thread_names_map_ptr;
-
- static void
-@@ -625,9 +678,11 @@
- static const char *
- ThreadNameAccessor (bool get, lldb::pid_t pid, lldb::tid_t tid, const char *name)
- {
-+#ifndef _WIN32
- int success = ::pthread_once (&g_thread_map_once, InitThreadNamesMap);
- if (success != 0)
- return NULL;
-+#endif
-
- uint64_t pid_tid = ((uint64_t)pid << 32) | (uint64_t)tid;
-
-@@ -753,12 +808,14 @@
- Host::GetModuleFileSpecForHostAddress (const void *host_addr)
- {
- FileSpec module_filespec;
-+#ifdef __unix__
- Dl_info info;
- if (::dladdr (host_addr, &info))
- {
- if (info.dli_fname)
- module_filespec.SetFile(info.dli_fname, true);
- }
-+#endif
- return module_filespec;
- }
-
-@@ -796,6 +853,7 @@
- void *
- Host::DynamicLibraryOpen (const FileSpec &file_spec, uint32_t options, Error &error)
- {
-+#ifndef _WIN32
- char path[PATH_MAX];
- if (file_spec.GetPath(path, sizeof(path)))
- {
-@@ -833,6 +891,7 @@
- {
- error.SetErrorString("failed to extract path");
- }
-+#endif
- return NULL;
- }
-
-@@ -840,6 +899,7 @@
- Host::DynamicLibraryClose (void *opaque)
- {
- Error error;
-+#ifndef _WIN32
- if (opaque == NULL)
- {
- error.SetErrorString ("invalid dynamic library handle");
-@@ -856,6 +916,7 @@
- dylib_info->handle = 0;
- delete dylib_info;
- }
-+#endif
- return error;
- }
-
-@@ -869,7 +930,7 @@
- else
- {
- DynamicLibraryInfo *dylib_info = (DynamicLibraryInfo *) opaque;
--
-+#ifndef _WIN32
- void *symbol_addr = ::dlsym (dylib_info->handle, symbol_name);
- if (symbol_addr)
- {
-@@ -898,6 +959,7 @@
- {
- error.SetErrorString(::dlerror());
- }
-+#endif
- }
- return NULL;
- }
-@@ -1116,6 +1178,7 @@
- const char *
- Host::GetUserName (uint32_t uid, std::string &user_name)
- {
-+#ifndef _WIN32
- struct passwd user_info;
- struct passwd *user_info_ptr = &user_info;
- char user_buffer[PATH_MAX];
-@@ -1133,12 +1196,14 @@
- }
- }
- user_name.clear();
-+#endif
- return NULL;
- }
-
- const char *
- Host::GetGroupName (uint32_t gid, std::string &group_name)
- {
-+#ifndef _WIN32
- char group_buffer[PATH_MAX];
- size_t group_buffer_size = sizeof(group_buffer);
- struct group group_info;
-@@ -1169,6 +1234,7 @@
- }
- }
- group_name.clear();
-+#endif
- return NULL;
- }
-
-@@ -1191,25 +1257,41 @@
- uint32_t
- Host::GetUserID ()
- {
-+#ifdef _WIN32
-+ return 0;
-+#else
- return getuid();
-+#endif
- }
-
- uint32_t
- Host::GetGroupID ()
- {
-+#ifdef _WIN32
-+ return 0;
-+#else
- return getgid();
-+#endif
- }
-
- uint32_t
- Host::GetEffectiveUserID ()
- {
-+#ifdef _WIN32
-+ return 0;
-+#else
- return geteuid();
-+#endif
- }
-
- uint32_t
- Host::GetEffectiveGroupID ()
- {
-+#ifdef _WIN32
-+ return 0;
-+#else
- return getegid();
-+#endif
- }
-
- #if !defined (__APPLE__)
-@@ -1287,8 +1369,10 @@
- // Now wait for a handshake back from that thread running Host::RunShellCommand
- // so we know that we can delete shell_info_ptr
- shell_info->can_delete.WaitForValueEqualTo(true);
-+#ifdef _POSIX_SOURCE
- // Sleep a bit to allow the shell_info->can_delete.SetValue() to complete...
- usleep(1000);
-+#endif
- // Now delete the shell info that was passed into this function
- delete shell_info;
- return true;
-@@ -1357,9 +1441,10 @@
- if (timed_out)
- {
- error.SetErrorString("timed out waiting for shell command to complete");
--
-+#ifdef _POSIX_SOURCE
- // Kill the process since it didn't complete withint the timeout specified
- ::kill (pid, SIGKILL);
-+#endif
- // Wait for the monitor callback to get the message
- timeout_time = TimeValue::Now();
- timeout_time.OffsetWithSeconds(1);
-Index: source/Host/common/Mutex.cpp
-===================================================================
---- source/Host/common/Mutex.cpp (revision 163322)
-+++ source/Host/common/Mutex.cpp (working copy)
-@@ -12,7 +12,6 @@
-
- #include <string.h>
- #include <stdio.h>
--#include <unistd.h>
-
- #if 0
- // This logging is way too verbose to enable even for a log channel.
-@@ -184,6 +183,7 @@
- Mutex::Mutex () :
- m_mutex()
- {
-+#ifdef _POSIX_SOURCE
- int err;
- err = ::pthread_mutex_init (&m_mutex, NULL);
- #if ENABLE_MUTEX_ERROR_CHECKING
-@@ -191,6 +191,7 @@
- error_check_mutex (&m_mutex, eMutexActionInitialized);
- #endif
- assert(err == 0);
-+#endif;
- }
-
- //----------------------------------------------------------------------
-@@ -201,6 +202,7 @@
- Mutex::Mutex (Mutex::Type type) :
- m_mutex()
- {
-+#ifdef _POSIX_SOURCE
- int err;
- ::pthread_mutexattr_t attr;
- err = ::pthread_mutexattr_init (&attr);
-@@ -232,6 +234,7 @@
- assert(err == 0);
- err = ::pthread_mutexattr_destroy (&attr);
- assert(err == 0);
-+#endif
- }
-
- //----------------------------------------------------------------------
-@@ -241,6 +244,7 @@
- //----------------------------------------------------------------------
- Mutex::~Mutex()
- {
-+#ifdef _POSIX_SOURCE
- int err;
- err = ::pthread_mutex_destroy (&m_mutex);
- #if ENABLE_MUTEX_ERROR_CHECKING
-@@ -253,17 +257,19 @@
- }
- memset (&m_mutex, '\xba', sizeof(m_mutex));
- #endif
-+#endif
- }
-
- //----------------------------------------------------------------------
- // Mutex get accessor.
- //----------------------------------------------------------------------
-+#ifdef _POSIX_SOURCE
- pthread_mutex_t *
- Mutex::GetMutex()
- {
- return &m_mutex;
- }
--
-+#endif
- //----------------------------------------------------------------------
- // Locks the mutex owned by this object, if the mutex is already
- // locked, the calling thread will block until the mutex becomes
-@@ -275,6 +281,7 @@
- int
- Mutex::Lock()
- {
-+#ifdef _POSIX_SOURCE
- DEBUG_LOG ("[%4.4llx/%4.4llx] pthread_mutex_lock (%p)...\n", Host::GetCurrentProcessID(), Host::GetCurrentThreadID(), &m_mutex);
-
- #if ENABLE_MUTEX_ERROR_CHECKING
-@@ -293,6 +300,8 @@
- #endif
- DEBUG_LOG ("[%4.4llx/%4.4llx] pthread_mutex_lock (%p) => %i\n", Host::GetCurrentProcessID(), Host::GetCurrentThreadID(), &m_mutex, err);
- return err;
-+#endif
-+ return m_mutex.acquire();
- }
-
- //----------------------------------------------------------------------
-@@ -306,6 +315,7 @@
- int
- Mutex::TryLock(const char *failure_message)
- {
-+#ifdef _POSIX_SOURCE
- #if ENABLE_MUTEX_ERROR_CHECKING
- error_check_mutex (&m_mutex, eMutexActionAssertInitialized);
- #endif
-@@ -313,6 +323,8 @@
- int err = ::pthread_mutex_trylock (&m_mutex);
- DEBUG_LOG ("[%4.4llx/%4.4llx] pthread_mutex_trylock (%p) => %i\n", Host::GetCurrentProcessID(), Host::GetCurrentThreadID(), &m_mutex, err);
- return err;
-+#endif
-+ return m_mutex.tryacquire();
- }
-
- //----------------------------------------------------------------------
-@@ -327,6 +339,7 @@
- int
- Mutex::Unlock()
- {
-+#ifdef _POSIX_SOURCE
- #if ENABLE_MUTEX_ERROR_CHECKING
- error_check_mutex (&m_mutex, eMutexActionAssertInitialized);
- #endif
-@@ -342,6 +355,8 @@
- #endif
- DEBUG_LOG ("[%4.4llx/%4.4llx] pthread_mutex_unlock (%p) => %i\n", Host::GetCurrentProcessID(), Host::GetCurrentThreadID(), &m_mutex, err);
- return err;
-+#endif
-+ return m_mutex.release();
- }
-
- #ifdef LLDB_CONFIGURATION_DEBUG
-Index: source/Host/common/Terminal.cpp
-===================================================================
---- source/Host/common/Terminal.cpp (revision 163322)
-+++ source/Host/common/Terminal.cpp (working copy)
-@@ -11,7 +11,6 @@
- #include "lldb/Host/Config.h"
-
- #include <fcntl.h>
--#include <unistd.h>
- #include <signal.h>
-
- #ifdef LLDB_CONFIG_TERMIOS_SUPPORTED
-@@ -24,7 +23,11 @@
- bool
- Terminal::IsATerminal () const
- {
-+#ifdef _POSIX_SOURCE
- return m_fd >= 0 && ::isatty (m_fd);
-+#else
-+ return false;
-+#endif
- }
-
-
-@@ -131,7 +134,10 @@
- m_tty.SetFileDescriptor(fd);
- if (m_tty.IsATerminal())
- {
-+#ifdef _POSIX_SOURCE
- m_tflags = ::fcntl (fd, F_GETFL, 0);
-+#endif
-+
- #ifdef LLDB_CONFIG_TERMIOS_SUPPORTED
- if (m_termios_ap.get() == NULL)
- m_termios_ap.reset (new struct termios);
-@@ -139,9 +145,11 @@
- if (err != 0)
- m_termios_ap.reset();
- #endif // #ifdef LLDB_CONFIG_TERMIOS_SUPPORTED
-+#ifdef _POSIX_SOURCE
- if (save_process_group)
- m_process_group = ::tcgetpgrp (0);
- else
-+#endif
- m_process_group = -1;
- }
- else
-@@ -164,8 +172,10 @@
- if (IsValid())
- {
- const int fd = m_tty.GetFileDescriptor();
-+#ifdef _POSIX_SOURCE
- if (TFlagsIsValid())
- fcntl (fd, F_SETFL, m_tflags);
-+#endif
-
- #ifdef LLDB_CONFIG_TERMIOS_SUPPORTED
- if (TTYStateIsValid())
-@@ -174,6 +184,7 @@
-
- if (ProcessGroupIsValid())
- {
-+#ifdef _POSIX_SOURCE
- // Save the original signal handler.
- void (*saved_sigttou_callback) (int) = NULL;
- saved_sigttou_callback = (void (*)(int)) signal (SIGTTOU, SIG_IGN);
-@@ -181,6 +192,7 @@
- tcsetpgrp (fd, m_process_group);
- // Restore the original signal handler.
- signal (SIGTTOU, saved_sigttou_callback);
-+#endif
- }
- return true;
- }
-Index: source/Host/common/TimeValue.cpp
-===================================================================
---- source/Host/common/TimeValue.cpp (revision 163322)
-+++ source/Host/common/TimeValue.cpp (working copy)
-@@ -37,11 +37,12 @@
- {
- }
-
-+#ifdef _POSIX_SOURCE
- TimeValue::TimeValue(const struct timespec& ts) :
- m_nano_seconds ((uint64_t) ts.tv_sec * NanoSecPerSec + ts.tv_nsec)
- {
- }
--
-+#endif
- TimeValue::TimeValue(const struct timeval& tv) :
- m_nano_seconds ((uint64_t) tv.tv_sec * NanoSecPerSec + (uint64_t) tv.tv_usec * NanoSecPerMicroSec)
- {
-@@ -73,8 +74,7 @@
- return m_nano_seconds / NanoSecPerSec;
- }
-
--
--
-+#ifdef _POSIX_SOURCE
- struct timespec
- TimeValue::GetAsTimeSpec () const
- {
-@@ -83,6 +83,7 @@
- ts.tv_nsec = m_nano_seconds % NanoSecPerSec;
- return ts;
- }
-+#endif
-
- struct timeval
- TimeValue::GetAsTimeVal () const
-@@ -127,7 +128,9 @@
- TimeValue::Now()
- {
- struct timeval tv;
-+#ifdef _POSIX_SOURCE
- gettimeofday(&tv, NULL);
-+#endif
- TimeValue now(tv);
- return now;
- }
-@@ -148,6 +151,7 @@
- if (s == NULL)
- return;
-
-+#ifdef _POSIX_SOURCE
- char time_buf[32];
- time_t time = GetAsSecondsSinceJan1_1970();
- char *time_cstr = ::ctime_r(&time, time_buf);
-@@ -163,6 +167,7 @@
- }
- else if (width > 0)
- s->Printf("%-*s", width, "");
-+#endif
- }
-
- bool
-Index: source/Host/linux/CMakeLists.txt
-===================================================================
---- source/Host/linux/CMakeLists.txt (revision 0)
-+++ source/Host/linux/CMakeLists.txt (working copy)
-@@ -0,0 +1,5 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbHostLinux
-+ Host.cpp
-+ )
-Index: source/Host/windows/CMakeLists.txt
-===================================================================
---- source/Host/windows/CMakeLists.txt (revision 0)
-+++ source/Host/windows/CMakeLists.txt (working copy)
-@@ -0,0 +1,6 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbHostWindows
-+ Host.cpp
-+ ReadWriteLock.cpp
-+ )
-Index: source/Host/windows/Host.cpp
-===================================================================
---- source/Host/windows/Host.cpp (revision 0)
-+++ source/Host/windows/Host.cpp (working copy)
-@@ -0,0 +1,59 @@
-+//===-- source/Host/linux/Host.cpp ------------------------------*- C++ -*-===//
-+//
-+// The LLVM Compiler Infrastructure
-+//
-+// This file is distributed under the University of Illinois Open Source
-+// License. See LICENSE.TXT for details.
-+//
-+//===----------------------------------------------------------------------===//
-+
-+// C Includes
-+#include <stdio.h>
-+
-+// C++ Includes
-+// Other libraries and framework includes
-+// Project includes
-+#include "lldb/Core/Error.h"
-+#include "lldb/Target/Process.h"
-+
-+#include "lldb/Host/Host.h"
-+#include "lldb/Core/DataBufferHeap.h"
-+#include "lldb/Core/DataExtractor.h"
-+
-+using namespace lldb;
-+using namespace lldb_private;
-+
-+bool
-+Host::GetOSVersion(uint32_t &major,
-+ uint32_t &minor,
-+ uint32_t &update)
-+{
-+ OSVERSIONINFOEX info;
-+
-+ ZeroMemory(&info, sizeof(OSVERSIONINFOEX));
-+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
-+
-+ if (GetVersionEx((LPOSVERSIONINFO) &info) == 0) {
-+ return false;
-+ }
-+
-+ major = (uint32_t) info.dwMajorVersion;
-+ minor = (uint32_t) info.dwMinorVersion;
-+ update = (uint32_t) info.wServicePackMajor;
-+
-+ return true;
-+}
-+
-+Error
-+Host::LaunchProcess (ProcessLaunchInfo &launch_info)
-+{
-+ Error error;
-+ assert(!"Not implemented yet!!!");
-+ return error;
-+}
-+
-+lldb::DataBufferSP
-+Host::GetAuxvData(lldb_private::Process *process)
-+{
-+ return 0;
-+}
-Index: source/Host/windows/ReadWriteLock.cpp
-===================================================================
---- source/Host/windows/ReadWriteLock.cpp (revision 0)
-+++ source/Host/windows/ReadWriteLock.cpp (working copy)
-@@ -0,0 +1,173 @@
-+#include "lldb/Host/ReadWriteLock.h"
-+
-+namespace lldb_private {
-+
-+// Windows has slim read-writer lock support on Vista and higher, so we
-+// will attempt to load the APIs. If they exist, we will use them, and
-+// if not, we will fall back on critical sections. When we drop support
-+// for XP, we can stop lazy-loading these APIs and just use them directly.
-+#if defined(__MINGW32__)
-+ // Taken from WinNT.h
-+ typedef struct _RTL_SRWLOCK {
-+ PVOID Ptr;
-+ } RTL_SRWLOCK, *PRTL_SRWLOCK;
-+
-+ // Taken from WinBase.h
-+ typedef RTL_SRWLOCK SRWLOCK, *PSRWLOCK;
-+#endif
-+
-+
-+typedef struct Win32RWLOCK {
-+ unsigned long int readlockcount;
-+ HANDLE writable;
-+ CRITICAL_SECTION writelock;
-+} Win32RWLOCK;
-+
-+typedef Win32RWLOCK* PWin32RWLOCK;
-+
-+static VOID (WINAPI *fpInitializeSRWLock)(PSRWLOCK lock) = NULL;
-+static VOID (WINAPI *fpAcquireSRWLockExclusive)(PSRWLOCK lock) = NULL;
-+static VOID (WINAPI *fpAcquireSRWLockShared)(PSRWLOCK lock) = NULL;
-+static VOID (WINAPI *fpReleaseSRWLockExclusive)(PSRWLOCK lock) = NULL;
-+static VOID (WINAPI *fpReleaseSRWLockShared)(PSRWLOCK lock) = NULL;
-+static BOOL (WINAPI *fpTryAcquireSRWLockExclusive)(PSRWLOCK lock) = NULL;
-+static BOOL (WINAPI *fpTryAcquireSRWLockShared)(PSRWLOCK lock) = NULL;
-+
-+static bool sHasSRW = false;
-+
-+static bool loadSRW() {
-+ static bool sChecked = false;
-+ if (!sChecked) {
-+ sChecked = true;
-+
-+ HMODULE hLib = ::LoadLibrary(TEXT("Kernel32"));
-+ if (hLib) {
-+ fpInitializeSRWLock =
-+ (VOID (WINAPI *)(PSRWLOCK))::GetProcAddress(hLib,
-+ "InitializeSRWLock");
-+ fpAcquireSRWLockExclusive =
-+ (VOID (WINAPI *)(PSRWLOCK))::GetProcAddress(hLib,
-+ "AcquireSRWLockExclusive");
-+ fpAcquireSRWLockShared =
-+ (VOID (WINAPI *)(PSRWLOCK))::GetProcAddress(hLib,
-+ "AcquireSRWLockShared");
-+ fpReleaseSRWLockExclusive =
-+ (VOID (WINAPI *)(PSRWLOCK))::GetProcAddress(hLib,
-+ "ReleaseSRWLockExclusive");
-+ fpReleaseSRWLockShared =
-+ (VOID (WINAPI *)(PSRWLOCK))::GetProcAddress(hLib,
-+ "ReleaseSRWLockShared");
-+ fpTryAcquireSRWLockExclusive =
-+ (BOOL (WINAPI *)(PSRWLOCK))::GetProcAddress(hLib,
-+ "TryAcquireSRWLockExclusive");
-+ fpTryAcquireSRWLockShared =
-+ (BOOL (WINAPI *)(PSRWLOCK))::GetProcAddress(hLib,
-+ "TryAcquireSRWLockShared");
-+
-+ ::FreeLibrary(hLib);
-+
-+ if (fpInitializeSRWLock != NULL) {
-+ sHasSRW = true;
-+ }
-+ }
-+ }
-+ return sHasSRW;
-+}
-+
-+ReadWriteLock::ReadWriteLock () {
-+ if (loadSRW()) {
-+ m_data = calloc(1, sizeof(SRWLOCK));
-+ fpInitializeSRWLock(static_cast<PSRWLOCK>(m_data));
-+ } else {
-+ m_data = calloc(1, sizeof(Win32RWLOCK));
-+ static_cast<PWin32RWLOCK>(m_data)->readlockcount = 0;
-+ static_cast<PWin32RWLOCK>(m_data)->writable = CreateEvent(NULL, true, true, NULL);
-+ InitializeCriticalSection(&static_cast<PWin32RWLOCK>(m_data)->writelock);
-+ }
-+}
-+
-+ReadWriteLock::~ReadWriteLock () {
-+ if (!sHasSRW) {
-+ CloseHandle(static_cast<PWin32RWLOCK>(m_data)->writable);
-+ DeleteCriticalSection(&static_cast<PWin32RWLOCK>(m_data)->writelock);
-+ }
-+ free(m_data);
-+}
-+
-+bool ReadWriteLock::ReadLock () {
-+ if (sHasSRW) {
-+ fpAcquireSRWLockShared(static_cast<PSRWLOCK>(m_data));
-+ return true;
-+ } else {
-+ EnterCriticalSection(&static_cast<PWin32RWLOCK>(m_data)->writelock);
-+ InterlockedIncrement(&static_cast<PWin32RWLOCK>(m_data)->readlockcount);
-+ ResetEvent(static_cast<PWin32RWLOCK>(m_data)->writable);
-+ LeaveCriticalSection(&static_cast<PWin32RWLOCK>(m_data)->writelock);
-+ return true;
-+ }
-+}
-+
-+bool ReadWriteLock::ReadTryLock () {
-+ if (sHasSRW) {
-+ return fpTryAcquireSRWLockShared(static_cast<PSRWLOCK>(m_data)) != 0;
-+ } else {
-+ if (TryEnterCriticalSection(&static_cast<PWin32RWLOCK>(m_data)->writelock)) {
-+ InterlockedIncrement(&static_cast<PWin32RWLOCK>(m_data)->readlockcount);
-+ ResetEvent(static_cast<PWin32RWLOCK>(m_data)->writable);
-+ LeaveCriticalSection(&static_cast<PWin32RWLOCK>(m_data)->writelock);
-+ return true;
-+ }
-+ return false;
-+ }
-+}
-+
-+bool ReadWriteLock::ReadUnlock () {
-+ if (sHasSRW) {
-+ fpReleaseSRWLockShared(static_cast<PSRWLOCK>(m_data));
-+ return true;
-+ } else {
-+ if (InterlockedDecrement(&static_cast<PWin32RWLOCK>(m_data)->readlockcount) == 0)
-+ SetEvent(static_cast<PWin32RWLOCK>(m_data)->writable);
-+ return true;
-+ }
-+}
-+
-+bool ReadWriteLock::WriteLock () {
-+ if (sHasSRW) {
-+ fpAcquireSRWLockExclusive(static_cast<PSRWLOCK>(m_data));
-+ return true;
-+ } else {
-+ EnterCriticalSection(&static_cast<PWin32RWLOCK>(m_data)->writelock);
-+ WaitForSingleObject(static_cast<PWin32RWLOCK>(m_data)->writable, INFINITE);
-+ return true;
-+ }
-+}
-+
-+bool ReadWriteLock::WriteTryLock () {
-+ if (sHasSRW) {
-+ return fpTryAcquireSRWLockExclusive(static_cast<PSRWLOCK>(m_data)) != 0;
-+ } else {
-+ if (TryEnterCriticalSection(&static_cast<PWin32RWLOCK>(m_data)->writelock)) {
-+ if (!WaitForSingleObject(static_cast<PWin32RWLOCK>(m_data)->writable, 0)) {
-+ LeaveCriticalSection(&static_cast<PWin32RWLOCK>(m_data)->writelock);
-+ return false;
-+ }
-+ return true;
-+ }
-+ return false;
-+ }
-+}
-+
-+bool ReadWriteLock::WriteUnlock () {
-+ if (sHasSRW) {
-+ fpReleaseSRWLockExclusive(static_cast<PSRWLOCK>(m_data));
-+ return true;
-+ } else {
-+ LeaveCriticalSection(&static_cast<PWin32RWLOCK>(m_data)->writelock);
-+ return true;
-+ }
-+}
-+
-+
-+
-+}
-Index: source/Interpreter/Args.cpp
-===================================================================
---- source/Interpreter/Args.cpp (revision 163322)
-+++ source/Interpreter/Args.cpp (working copy)
-@@ -8,7 +8,9 @@
- //===----------------------------------------------------------------------===//
-
- // C Includes
-+#ifdef _POSIX_SOURCE
- #include <getopt.h>
-+#endif
- #include <cstdlib>
- // C++ Includes
- // Other libraries and framework includes
-Index: source/Interpreter/CMakeLists.txt
-===================================================================
---- source/Interpreter/CMakeLists.txt (revision 0)
-+++ source/Interpreter/CMakeLists.txt (working copy)
-@@ -0,0 +1,44 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbInterpreter
-+ Args.cpp
-+ CommandInterpreter.cpp
-+ CommandObject.cpp
-+ CommandObjectRegexCommand.cpp
-+ CommandObjectScript.cpp
-+ CommandReturnObject.cpp
-+ OptionGroupArchitecture.cpp
-+ OptionGroupBoolean.cpp
-+ OptionGroupFile.cpp
-+ OptionGroupFormat.cpp
-+ OptionGroupOutputFile.cpp
-+ OptionGroupPlatform.cpp
-+ OptionGroupUInt64.cpp
-+ OptionGroupUUID.cpp
-+ OptionGroupValueObjectDisplay.cpp
-+ OptionValue.cpp
-+ OptionValueArch.cpp
-+ OptionValueArgs.cpp
-+ OptionValueArray.cpp
-+ OptionValueBoolean.cpp
-+ OptionValueDictionary.cpp
-+ OptionValueEnumeration.cpp
-+ OptionValueFileSpec.cpp
-+ OptionValueFileSpecLIst.cpp
-+ OptionValueFormat.cpp
-+ OptionValuePathMappings.cpp
-+ OptionValueProperties.cpp
-+ OptionValueRegex.cpp
-+ OptionValueSInt64.cpp
-+ OptionValueString.cpp
-+ OptionValueUInt64.cpp
-+ OptionValueUUID.cpp
-+ OptionGroupVariable.cpp
-+ OptionGroupWatchpoint.cpp
-+ Options.cpp
-+ Property.cpp
-+ PythonDataObjects.cpp
-+ ScriptInterpreter.cpp
-+ ScriptInterpreterNone.cpp
-+ ScriptInterpreterPython.cpp
-+ )
-Index: source/Interpreter/CommandInterpreter.cpp
-===================================================================
---- source/Interpreter/CommandInterpreter.cpp (revision 163322)
-+++ source/Interpreter/CommandInterpreter.cpp (working copy)
-@@ -10,7 +10,9 @@
- #include <string>
- #include <vector>
-
-+#ifdef _POSIX_SOURCE
- #include <getopt.h>
-+#endif
- #include <stdlib.h>
-
- #include "CommandObjectScript.h"
-Index: source/Interpreter/CommandObject.cpp
-===================================================================
---- source/Interpreter/CommandObject.cpp (revision 163322)
-+++ source/Interpreter/CommandObject.cpp (working copy)
-@@ -12,7 +12,9 @@
- #include <string>
- #include <map>
-
-+#ifdef _POSIX_SOURCE
- #include <getopt.h>
-+#endif
- #include <stdlib.h>
- #include <ctype.h>
-
-Index: source/Interpreter/OptionValueProperties.cpp
-===================================================================
---- source/Interpreter/OptionValueProperties.cpp (revision 163322)
-+++ source/Interpreter/OptionValueProperties.cpp (working copy)
-@@ -647,6 +647,7 @@
- OptionValueProperties::DeepCopy () const
- {
- assert(!"this shouldn't happen");
-+ return NULL;
- }
-
- const Property *
-Index: source/Interpreter/OptionValueRegex.cpp
-===================================================================
---- source/Interpreter/OptionValueRegex.cpp (revision 163322)
-+++ source/Interpreter/OptionValueRegex.cpp (working copy)
-@@ -67,11 +67,7 @@
- }
- else
- {
-- char regex_error[1024];
-- if (m_regex.GetErrorAsCString(regex_error, sizeof(regex_error)))
-- error.SetErrorString (regex_error);
-- else
-- error.SetErrorStringWithFormat ("regex error %u", m_regex.GetErrorCode());
-+ error.SetErrorString (m_regex.GetErrorAsCString().data());
- }
- break;
- }
-Index: source/lldb.cpp
-===================================================================
---- source/lldb.cpp (revision 163322)
-+++ source/lldb.cpp (working copy)
-@@ -22,8 +22,6 @@
-
- #include "llvm/ADT/StringRef.h"
-
--#include "Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.h"
--#include "Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.h"
- #include "Plugins/ABI/SysV-x86_64/ABISysV_x86_64.h"
- #include "Plugins/Disassembler/llvm/DisassemblerLLVM.h"
- #include "Plugins/Disassembler/llvm/DisassemblerLLVMC.h"
-@@ -38,12 +36,12 @@
- #include "Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.h"
- #include "Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.h"
- #include "Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.h"
--#include "Plugins/Platform/FreeBSD/PlatformFreeBSD.h"
--#include "Plugins/Platform/Linux/PlatformLinux.h"
- #ifndef LLDB_DISABLE_PYTHON
- #include "Plugins/OperatingSystem/Python/OperatingSystemPython.h"
- #endif
- #if defined (__APPLE__)
-+#include "Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.h"
-+#include "Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.h"
- #include "Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h"
- #include "Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h"
- #include "Plugins/OperatingSystem/Darwin-Kernel/OperatingSystemDarwinKernel.h"
-@@ -62,15 +60,21 @@
- #include "Plugins/Process/mach-core/ProcessMachCore.h"
-
- #if defined (__linux__)
-+#include "Plugins/Platform/Linux/PlatformLinux.h"
- #include "Plugins/Process/Linux/ProcessLinux.h"
- #endif
-
- #if defined (__FreeBSD__)
-+#include "Plugins/Platform/FreeBSD/PlatformFreeBSD.h"
- #include "Plugins/Process/gdb-remote/ProcessGDBRemote.h"
- #include "Plugins/Process/POSIX/ProcessPOSIX.h"
- #include "Plugins/Process/FreeBSD/ProcessFreeBSD.h"
- #endif
-
-+#if defined(_WIN32) || defined(_WIN64)
-+#include "Plugins/Platform/Windows/PlatformWindows.h"
-+#endif
-+
- #include "Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h"
- #include "Plugins/DynamicLoader/Static/DynamicLoaderStatic.h"
-
-@@ -92,6 +96,11 @@
- Timer::Initialize ();
- Timer scoped_timer (__PRETTY_FUNCTION__, __PRETTY_FUNCTION__);
-
-+#ifdef _WIN32
-+ PlatformWindows::Initialize();
-+#endif
-+
-+#ifndef _WIN32
- ABIMacOSX_i386::Initialize();
- ABIMacOSX_arm::Initialize();
- ABISysV_x86_64::Initialize();
-@@ -106,8 +115,7 @@
- EmulateInstructionARM::Initialize ();
- ObjectFilePECOFF::Initialize ();
- DynamicLoaderPOSIXDYLD::Initialize ();
-- PlatformFreeBSD::Initialize();
-- PlatformLinux::Initialize();
-+#endif
- #ifndef LLDB_DISABLE_PYTHON
- OperatingSystemPython::Initialize();
- #endif
-@@ -146,9 +154,12 @@
- //----------------------------------------------------------------------
- // Platform agnostic plugins
- //----------------------------------------------------------------------
-+#ifndef _WIN32 // TODO: Enable this for Windows later
- PlatformRemoteGDBServer::Initialize ();
-+#endif
-+
- DynamicLoaderStatic::Initialize();
--
-+
- // Scan for any system or user LLDB plug-ins
- PluginManager::Initialize();
-
-@@ -173,6 +184,7 @@
- // Terminate and unload and loaded system or user LLDB plug-ins
- PluginManager::Terminate();
-
-+#ifndef _WIN32
- ABIMacOSX_i386::Terminate();
- ABIMacOSX_arm::Terminate();
- ABISysV_x86_64::Terminate();
-@@ -187,8 +199,7 @@
- EmulateInstructionARM::Terminate ();
- ObjectFilePECOFF::Terminate ();
- DynamicLoaderPOSIXDYLD::Terminate ();
-- PlatformFreeBSD::Terminate();
-- PlatformLinux::Terminate();
-+#endif
- #ifndef LLDB_DISABLE_PYTHON
- OperatingSystemPython::Terminate();
- #endif
-@@ -215,10 +226,12 @@
- Debugger::SettingsTerminate ();
-
- #if defined (__linux__)
-+ PlatformLinux::Terminate();
- ProcessLinux::Terminate();
- #endif
-
- #if defined (__FreeBSD__)
-+ PlatformFreeBSD::Terminate();
- ProcessFreeBSD::Terminate();
- ProcessGDBRemote::Terminate();
- #endif
-@@ -228,7 +241,13 @@
- Log::Terminate();
- }
-
--extern "C" const double liblldb_coreVersionNumber;
-+#ifndef _WIN32
-+ extern "C" const double liblldb_coreVersionNumber;
-+#else
-+const unsigned char liblldb_coreVersionString[] = "LLDB-win32-1";
-+const double liblldb_coreVersionNumber = (double) 1.0;
-+#endif
-+
- const char *
- lldb_private::GetVersion ()
- {
-Index: source/Plugins/ABI/CMakeLists.txt
-===================================================================
---- source/Plugins/ABI/CMakeLists.txt (revision 0)
-+++ source/Plugins/ABI/CMakeLists.txt (working copy)
-@@ -0,0 +1 @@
-+add_subdirectory(SysV-x86_64)
-Index: source/Plugins/ABI/SysV-x86_64/CMakeLists.txt
-===================================================================
---- source/Plugins/ABI/SysV-x86_64/CMakeLists.txt (revision 0)
-+++ source/Plugins/ABI/SysV-x86_64/CMakeLists.txt (working copy)
-@@ -0,0 +1,5 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbPluginABISysV_x86_64
-+ ABISysV_x86_64.cpp
-+ )
-Index: source/Plugins/CMakeLists.txt
-===================================================================
---- source/Plugins/CMakeLists.txt (revision 0)
-+++ source/Plugins/CMakeLists.txt (working copy)
-@@ -0,0 +1,13 @@
-+add_subdirectory(ABI)
-+add_subdirectory(Disassembler)
-+add_subdirectory(DynamicLoader)
-+add_subdirectory(Instruction)
-+add_subdirectory(LanguageRuntime)
-+add_subdirectory(ObjectContainer)
-+add_subdirectory(ObjectFile)
-+add_subdirectory(OperatingSystem)
-+add_subdirectory(Platform)
-+add_subdirectory(Process)
-+add_subdirectory(SymbolFile)
-+add_subdirectory(SymbolVendor)
-+add_subdirectory(UnwindAssembly)
-Index: source/Plugins/Disassembler/CMakeLists.txt
-===================================================================
---- source/Plugins/Disassembler/CMakeLists.txt (revision 0)
-+++ source/Plugins/Disassembler/CMakeLists.txt (working copy)
-@@ -0,0 +1 @@
-+add_subdirectory(llvm)
-Index: source/Plugins/Disassembler/llvm/CMakeLists.txt
-===================================================================
---- source/Plugins/Disassembler/llvm/CMakeLists.txt (revision 0)
-+++ source/Plugins/Disassembler/llvm/CMakeLists.txt (working copy)
-@@ -0,0 +1,6 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbPluginDisassemblerLLVM
-+ DisassemblerLLVM.cpp
-+ DisassemblerLLVMC.cpp
-+ )
-Index: source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp
-===================================================================
---- source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp (revision 163322)
-+++ source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp (working copy)
-@@ -23,7 +23,7 @@
- #include "lldb/Target/Target.h"
- #include "lldb/Target/StackFrame.h"
-
--#include <regex.h>
-+#include "lldb/Core/RegularExpression.h"
-
- using namespace lldb;
- using namespace lldb_private;
-@@ -303,7 +303,7 @@
- m_does_branch = eLazyBoolNo;
- }
- }
--
-+#if 0
- if (!s_regex_compiled)
- {
- ::regcomp(&s_regex, "[ \t]*([^ ^\t]+)[ \t]*([^ ^\t].*)?", REG_EXTENDED);
-@@ -319,6 +319,7 @@
- if (matches[2].rm_so != -1)
- m_mnemocics.assign(out_string + matches[2].rm_so, matches[2].rm_eo - matches[2].rm_so);
- }
-+#endif
- }
- }
-
-@@ -423,11 +424,11 @@
- LazyBool m_does_branch;
-
- static bool s_regex_compiled;
-- static ::regex_t s_regex;
-+ static lldb::RegularExpressionSP s_regex;
- };
-
- bool InstructionLLVMC::s_regex_compiled = false;
--::regex_t InstructionLLVMC::s_regex;
-+lldb::RegularExpressionSP InstructionLLVMC::s_regex;
-
- Disassembler *
- DisassemblerLLVMC::CreateInstance (const ArchSpec &arch)
-@@ -597,7 +598,7 @@
- default:
- break;
- case 1:
-- bzero (tag_bug, sizeof(::LLVMOpInfo1));
-+ memset (tag_bug, '\0', sizeof(::LLVMOpInfo1));
- break;
- }
- return 0;
-Index: source/Plugins/DynamicLoader/CMakeLists.txt
-===================================================================
---- source/Plugins/DynamicLoader/CMakeLists.txt (revision 0)
-+++ source/Plugins/DynamicLoader/CMakeLists.txt (working copy)
-@@ -0,0 +1,4 @@
-+#add_subdirectory(Darwin-Kernel)
-+#add_subdirectory(MacOSX-DYLD)
-+#add_subdirectory(POSIX-DYLD)
-+add_subdirectory(Static)
-Index: source/Plugins/DynamicLoader/Static/CMakeLists.txt
-===================================================================
---- source/Plugins/DynamicLoader/Static/CMakeLists.txt (revision 0)
-+++ source/Plugins/DynamicLoader/Static/CMakeLists.txt (working copy)
-@@ -0,0 +1,5 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbPluginDynamicLoaderStatic
-+ DynamicLoaderStatic.cpp
-+ )
-Index: source/Plugins/Instruction/CMakeLists.txt
-===================================================================
---- source/Plugins/Instruction/CMakeLists.txt (revision 0)
-+++ source/Plugins/Instruction/CMakeLists.txt (working copy)
-@@ -0,0 +1 @@
-+#add_subdirectory(ARM)
-Index: source/Plugins/LanguageRuntime/CMakeLists.txt
-===================================================================
---- source/Plugins/LanguageRuntime/CMakeLists.txt (revision 0)
-+++ source/Plugins/LanguageRuntime/CMakeLists.txt (working copy)
-@@ -0,0 +1,2 @@
-+add_subdirectory(CPlusPlus)
-+#add_subdirectory(ObjC)
-Index: source/Plugins/LanguageRuntime/CPlusPlus/CMakeLists.txt
-===================================================================
---- source/Plugins/LanguageRuntime/CPlusPlus/CMakeLists.txt (revision 0)
-+++ source/Plugins/LanguageRuntime/CPlusPlus/CMakeLists.txt (working copy)
-@@ -0,0 +1,2 @@
-+add_subdirectory(ItaniumABI)
-+#add_subdirectory(MicrosoftABI)
-Index: source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/CMakeLists.txt
-===================================================================
---- source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/CMakeLists.txt (revision 0)
-+++ source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/CMakeLists.txt (working copy)
-@@ -0,0 +1,5 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbPluginCXXItaniumABI
-+ ItaniumABILanguageRuntime.cpp
-+ )
-Index: source/Plugins/ObjectContainer/BSD-Archive/CMakeLists.txt
-===================================================================
---- source/Plugins/ObjectContainer/BSD-Archive/CMakeLists.txt (revision 0)
-+++ source/Plugins/ObjectContainer/BSD-Archive/CMakeLists.txt (working copy)
-@@ -0,0 +1,5 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbPluginObjectContainerBSDArchive
-+ ObjectContainerBSDArchive.cpp
-+ )
-Index: source/Plugins/ObjectContainer/CMakeLists.txt
-===================================================================
---- source/Plugins/ObjectContainer/CMakeLists.txt (revision 0)
-+++ source/Plugins/ObjectContainer/CMakeLists.txt (working copy)
-@@ -0,0 +1,2 @@
-+#add_subdirectory(BSD-Archive)
-+#add_subdirectory(Universal-Mach-O)
-Index: source/Plugins/ObjectFile/CMakeLists.txt
-===================================================================
---- source/Plugins/ObjectFile/CMakeLists.txt (revision 0)
-+++ source/Plugins/ObjectFile/CMakeLists.txt (working copy)
-@@ -0,0 +1,3 @@
-+add_subdirectory(ELF)
-+add_subdirectory(Mach-O)
-+add_subdirectory(PECOFF)
-Index: source/Plugins/ObjectFile/ELF/CMakeLists.txt
-===================================================================
---- source/Plugins/ObjectFile/ELF/CMakeLists.txt (revision 0)
-+++ source/Plugins/ObjectFile/ELF/CMakeLists.txt (working copy)
-@@ -0,0 +1,6 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbPluginObjectFileELF
-+ ELFHeader.cpp
-+ ObjectFileELF.cpp
-+ )
-Index: source/Plugins/ObjectFile/Mach-O/CMakeLists.txt
-===================================================================
---- source/Plugins/ObjectFile/Mach-O/CMakeLists.txt (revision 0)
-+++ source/Plugins/ObjectFile/Mach-O/CMakeLists.txt (working copy)
-@@ -0,0 +1,5 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbPluginObjectFileMachO
-+ ObjectFileMachO.cpp
-+ )
-Index: source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
-===================================================================
---- source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp (revision 163322)
-+++ source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp (working copy)
-@@ -36,6 +36,7 @@
- #include "Plugins/Process/Utility/RegisterContextDarwin_i386.h"
- #include "Plugins/Process/Utility/RegisterContextDarwin_x86_64.h"
-
-+
- using namespace lldb;
- using namespace lldb_private;
- using namespace llvm::MachO;
-@@ -1246,7 +1247,7 @@
- function_starts_load_command.cmd = lc.cmd;
- function_starts_load_command.cmdsize = lc.cmdsize;
- if (m_data.GetU32(&offset, &function_starts_load_command.dataoff, 2) == NULL) // fill in symoff, nsyms, stroff, strsize fields
-- bzero (&function_starts_load_command, sizeof(function_starts_load_command));
-+ memset (&function_starts_load_command, 0, sizeof(function_starts_load_command));
- break;
-
- default:
-Index: source/Plugins/ObjectFile/PECOFF/CMakeLists.txt
-===================================================================
---- source/Plugins/ObjectFile/PECOFF/CMakeLists.txt (revision 0)
-+++ source/Plugins/ObjectFile/PECOFF/CMakeLists.txt (working copy)
-@@ -0,0 +1,5 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbPluginObjectFilePECOFF
-+ ObjectFilePECOFF.cpp
-+ )
-Index: source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp
-===================================================================
---- source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp (revision 163322)
-+++ source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp (working copy)
-@@ -26,6 +26,7 @@
-
- static uint32_t COFFMachineToMachCPU(uint16_t machine);
-
-+#ifndef IMAGE_FILE_MACHINE_UNKNOWN
- #define IMAGE_FILE_MACHINE_UNKNOWN 0x0000
- #define IMAGE_FILE_MACHINE_AM33 0x01d3 // Matsushita AM33
- #define IMAGE_FILE_MACHINE_AMD64 0x8664 // x64
-@@ -52,9 +53,8 @@
- #define IMAGE_OS2_SIGNATURE 0x454E // NE
- #define IMAGE_OS2_SIGNATURE_LE 0x454C // LE
- #define IMAGE_NT_SIGNATURE 0x00004550 // PE00
--#define OPT_HEADER_MAGIC_PE32 0x010b
--#define OPT_HEADER_MAGIC_PE32_PLUS 0x020b
-
-+
- #define IMAGE_FILE_RELOCS_STRIPPED 0x0001
- #define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002
- #define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004
-@@ -71,7 +71,10 @@
- #define IMAGE_FILE_DLL 0x2000
- #define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000
- #define IMAGE_FILE_BYTES_REVERSED_HI 0x8000
-+#endif
-
-+#define OPT_HEADER_MAGIC_PE32 0x010b
-+#define OPT_HEADER_MAGIC_PE32_PLUS 0x020b
-
- // Section Flags
- // The section flags in the Characteristics field of the section header indicate
-Index: source/Plugins/OperatingSystem/CMakeLists.txt
-===================================================================
---- source/Plugins/OperatingSystem/CMakeLists.txt (revision 0)
-+++ source/Plugins/OperatingSystem/CMakeLists.txt (working copy)
-@@ -0,0 +1 @@
-+#add_subdirectory(Darwin-Kernel)
-Index: source/Plugins/OperatingSystem/Darwin-Kernel/CMakeLists.txt
-===================================================================
---- source/Plugins/OperatingSystem/Darwin-Kernel/CMakeLists.txt (revision 0)
-+++ source/Plugins/OperatingSystem/Darwin-Kernel/CMakeLists.txt (working copy)
-@@ -0,0 +1,5 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbPluginOSDarwinKernel
-+ OperatingSystemDarwinKernel.cpp
-+ )
-Index: source/Plugins/Platform/CMakeLists.txt
-===================================================================
---- source/Plugins/Platform/CMakeLists.txt (revision 0)
-+++ source/Plugins/Platform/CMakeLists.txt (working copy)
-@@ -0,0 +1,5 @@
-+#add_subdirectory(FreeBSD)
-+#add_subdirectory(gdb-server)
-+#add_subdirectory(Linux)
-+#add_subdirectory(MacOSX)
-+add_subdirectory(Windows)
-Index: source/Plugins/Platform/Windows/CMakeLists.txt
-===================================================================
---- source/Plugins/Platform/Windows/CMakeLists.txt (revision 0)
-+++ source/Plugins/Platform/Windows/CMakeLists.txt (working copy)
-@@ -0,0 +1,5 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbPluginPlatformWindows
-+ PlatformWindows.cpp
-+ )
-Index: source/Plugins/Platform/Windows/PlatformWindows.cpp
-===================================================================
---- source/Plugins/Platform/Windows/PlatformWindows.cpp (revision 0)
-+++ source/Plugins/Platform/Windows/PlatformWindows.cpp (working copy)
-@@ -0,0 +1,648 @@
-+//===-- PlatformWindows.cpp ---------------------------------------*- C++ -*-===//
-+//
-+// The LLVM Compiler Infrastructure
-+//
-+// This file is distributed under the University of Illinois Open Source
-+// License. See LICENSE.TXT for details.
-+//
-+//===----------------------------------------------------------------------===//
-+
-+#include "PlatformWindows.h"
-+
-+// C Includes
-+#include <stdio.h>
-+
-+// C++ Includes
-+// Other libraries and framework includes
-+// Project includes
-+#include "lldb/Core/Error.h"
-+#include "lldb/Core/Debugger.h"
-+#include "lldb/Core/PluginManager.h"
-+#include "lldb/Host/Host.h"
-+#include "lldb/Core/ModuleSpec.h"
-+#include "lldb/Core/Module.h"
-+
-+using namespace lldb;
-+using namespace lldb_private;
-+
-+Platform *
-+PlatformWindows::CreateInstance (bool force, const lldb_private::ArchSpec *arch)
-+{
-+ // The only time we create an instance is when we are creating a remote
-+ // windows platform
-+ const bool is_host = false;
-+
-+ bool create = force;
-+ if (create == false && arch && arch->IsValid())
-+ {
-+ const llvm::Triple &triple = arch->GetTriple();
-+ switch (triple.getVendor())
-+ {
-+ case llvm::Triple::PC:
-+ create = true;
-+ break;
-+
-+ case llvm::Triple::UnknownArch:
-+ create = !arch->TripleVendorWasSpecified();
-+ break;
-+
-+ default:
-+ break;
-+ }
-+
-+ if (create)
-+ {
-+ switch (triple.getOS())
-+ {
-+ case llvm::Triple::Win32:
-+ case llvm::Triple::MinGW32:
-+ break;
-+
-+ case llvm::Triple::UnknownOS:
-+ create = arch->TripleOSWasSpecified();
-+ break;
-+
-+ default:
-+ create = false;
-+ break;
-+ }
-+ }
-+ }
-+ if (create)
-+ return new PlatformWindows (is_host);
-+ return NULL;
-+
-+}
-+
-+const char *
-+PlatformWindows::GetPluginNameStatic()
-+{
-+ return "plugin.platform.windows";
-+}
-+
-+const char *
-+PlatformWindows::GetShortPluginNameStatic (bool is_host)
-+{
-+ if (is_host)
-+ return Platform::GetHostPlatformName ();
-+ else
-+ return "remote-windows";
-+}
-+
-+const char *
-+PlatformWindows::GetDescriptionStatic (bool is_host)
-+{
-+ if (is_host)
-+ return "Local Windows user platform plug-in.";
-+ else
-+ return "Remote Windows user platform plug-in.";
-+}
-+
-+static uint32_t g_initialize_count = 0;
-+
-+void
-+PlatformWindows::Initialize ()
-+{
-+ if (g_initialize_count++ == 0)
-+ {
-+#if defined (_WIN32)
-+ // Force a host flag to true for the default platform object.
-+ PlatformSP default_platform_sp (new PlatformWindows(true));
-+ default_platform_sp->SetSystemArchitecture (Host::GetArchitecture());
-+ Platform::SetDefaultPlatform (default_platform_sp);
-+#endif
-+ PluginManager::RegisterPlugin(PlatformWindows::GetShortPluginNameStatic(false),
-+ PlatformWindows::GetDescriptionStatic(false),
-+ PlatformWindows::CreateInstance);
-+ }
-+}
-+
-+void
-+PlatformWindows::Terminate ()
-+{
-+ if (g_initialize_count > 0 && --g_initialize_count == 0)
-+ PluginManager::UnregisterPlugin (PlatformWindows::CreateInstance);
-+}
-+
-+//------------------------------------------------------------------
-+/// Default Constructor
-+//------------------------------------------------------------------
-+PlatformWindows::PlatformWindows (bool is_host) :
-+Platform(is_host)
-+{
-+}
-+
-+//------------------------------------------------------------------
-+/// Destructor.
-+///
-+/// The destructor is virtual since this class is designed to be
-+/// inherited from by the plug-in instance.
-+//------------------------------------------------------------------
-+PlatformWindows::~PlatformWindows()
-+{
-+}
-+
-+
-+Error
-+PlatformWindows::ResolveExecutable (const FileSpec &exe_file,
-+ const ArchSpec &exe_arch,
-+ lldb::ModuleSP &exe_module_sp,
-+ const FileSpecList *module_search_paths_ptr)
-+{
-+ Error error;
-+ // Nothing special to do here, just use the actual file and architecture
-+
-+ char exe_path[PATH_MAX];
-+ FileSpec resolved_exe_file (exe_file);
-+
-+ if (IsHost())
-+ {
-+ // If we have "ls" as the exe_file, resolve the executable loation based on
-+ // the current path variables
-+ if (!resolved_exe_file.Exists())
-+ {
-+ exe_file.GetPath(exe_path, sizeof(exe_path));
-+ resolved_exe_file.SetFile(exe_path, true);
-+ }
-+
-+ if (!resolved_exe_file.Exists())
-+ resolved_exe_file.ResolveExecutableLocation ();
-+
-+ if (resolved_exe_file.Exists())
-+ error.Clear();
-+ else
-+ {
-+ exe_file.GetPath(exe_path, sizeof(exe_path));
-+ error.SetErrorStringWithFormat("unable to find executable for '%s'", exe_path);
-+ }
-+ }
-+ else
-+ {
-+ if (m_remote_platform_sp)
-+ {
-+ error = m_remote_platform_sp->ResolveExecutable (exe_file,
-+ exe_arch,
-+ exe_module_sp,
-+ module_search_paths_ptr);
-+ }
-+ else
-+ {
-+ // We may connect to a process and use the provided executable (Don't use local $PATH).
-+
-+ // Resolve any executable within a bundle on MacOSX
-+ Host::ResolveExecutableInBundle (resolved_exe_file);
-+
-+ if (resolved_exe_file.Exists()) {
-+ error.Clear();
-+ }
-+ else
-+ {
-+ exe_file.GetPath(exe_path, sizeof(exe_path));
-+ error.SetErrorStringWithFormat("the platform is not currently connected, and '%s' doesn't exist in the system root.", exe_path);
-+ }
-+ }
-+ }
-+
-+
-+ if (error.Success())
-+ {
-+ ModuleSpec module_spec (resolved_exe_file, exe_arch);
-+ if (module_spec.GetArchitecture().IsValid())
-+ {
-+ error = ModuleList::GetSharedModule (module_spec,
-+ exe_module_sp,
-+ module_search_paths_ptr,
-+ NULL,
-+ NULL);
-+
-+ if (exe_module_sp->GetObjectFile() == NULL)
-+ {
-+ exe_module_sp.reset();
-+ error.SetErrorStringWithFormat ("'%s%s%s' doesn't contain the architecture %s",
-+ exe_file.GetDirectory().AsCString(""),
-+ exe_file.GetDirectory() ? "/" : "",
-+ exe_file.GetFilename().AsCString(""),
-+ exe_arch.GetArchitectureName());
-+ }
-+ }
-+ else
-+ {
-+ // No valid architecture was specified, ask the platform for
-+ // the architectures that we should be using (in the correct order)
-+ // and see if we can find a match that way
-+ StreamString arch_names;
-+ ArchSpec platform_arch;
-+ for (uint32_t idx = 0; GetSupportedArchitectureAtIndex (idx, platform_arch); ++idx)
-+ {
-+ error = ModuleList::GetSharedModule (module_spec,
-+ exe_module_sp,
-+ module_search_paths_ptr,
-+ NULL,
-+ NULL);
-+ // Did we find an executable using one of the
-+ if (error.Success())
-+ {
-+ if (exe_module_sp && exe_module_sp->GetObjectFile())
-+ break;
-+ else
-+ error.SetErrorToGenericError();
-+ }
-+
-+ if (idx > 0)
-+ arch_names.PutCString (", ");
-+ arch_names.PutCString (platform_arch.GetArchitectureName());
-+ }
-+
-+ if (error.Fail() || !exe_module_sp)
-+ {
-+ error.SetErrorStringWithFormat ("'%s%s%s' doesn't contain any '%s' platform architectures: %s",
-+ exe_file.GetDirectory().AsCString(""),
-+ exe_file.GetDirectory() ? "/" : "",
-+ exe_file.GetFilename().AsCString(""),
-+ GetShortPluginName(),
-+ arch_names.GetString().c_str());
-+ }
-+ }
-+ }
-+ else
-+ {
-+ error.SetErrorStringWithFormat ("'%s%s%s' does not exist",
-+ exe_file.GetDirectory().AsCString(""),
-+ exe_file.GetDirectory() ? "/" : "",
-+ exe_file.GetFilename().AsCString(""));
-+ }
-+
-+ return error;
-+}
-+
-+size_t
-+PlatformWindows::GetSoftwareBreakpointTrapOpcode (Target &target, BreakpointSite *bp_site)
-+{
-+ ArchSpec arch = target.GetArchitecture();
-+ const uint8_t *trap_opcode = NULL;
-+ size_t trap_opcode_size = 0;
-+
-+ switch (arch.GetCore())
-+ {
-+ default:
-+ assert(false && "Unhandled architecture in PlatformWindows::GetSoftwareBreakpointTrapOpcode()");
-+ break;
-+
-+ case ArchSpec::eCore_x86_32_i386:
-+ case ArchSpec::eCore_x86_64_x86_64:
-+ {
-+ static const uint8_t g_i386_opcode[] = { 0xCC };
-+ trap_opcode = g_i386_opcode;
-+ trap_opcode_size = sizeof(g_i386_opcode);
-+ }
-+ break;
-+ }
-+
-+ if (bp_site->SetTrapOpcode(trap_opcode, trap_opcode_size))
-+ return trap_opcode_size;
-+
-+ return 0;
-+}
-+
-+bool
-+PlatformWindows::GetRemoteOSVersion ()
-+{
-+ if (m_remote_platform_sp)
-+ return m_remote_platform_sp->GetOSVersion (m_major_os_version,
-+ m_minor_os_version,
-+ m_update_os_version);
-+ return false;
-+}
-+
-+bool
-+PlatformWindows::GetRemoteOSBuildString (std::string &s)
-+{
-+ if (m_remote_platform_sp)
-+ return m_remote_platform_sp->GetRemoteOSBuildString (s);
-+ s.clear();
-+ return false;
-+}
-+
-+bool
-+PlatformWindows::GetRemoteOSKernelDescription (std::string &s)
-+{
-+ if (m_remote_platform_sp)
-+ return m_remote_platform_sp->GetRemoteOSKernelDescription (s);
-+ s.clear();
-+ return false;
-+}
-+
-+// Remote Platform subclasses need to override this function
-+ArchSpec
-+PlatformWindows::GetRemoteSystemArchitecture ()
-+{
-+ if (m_remote_platform_sp)
-+ return m_remote_platform_sp->GetRemoteSystemArchitecture ();
-+ return ArchSpec();
-+}
-+
-+
-+const char *
-+PlatformWindows::GetHostname ()
-+{
-+ if (IsHost())
-+ return Platform::GetHostname();
-+
-+ if (m_remote_platform_sp)
-+ return m_remote_platform_sp->GetHostname ();
-+ return NULL;
-+}
-+
-+bool
-+PlatformWindows::IsConnected () const
-+{
-+ if (IsHost())
-+ return true;
-+ else if (m_remote_platform_sp)
-+ return m_remote_platform_sp->IsConnected();
-+ return false;
-+}
-+
-+Error
-+PlatformWindows::ConnectRemote (Args& args)
-+{
-+ Error error;
-+ if (IsHost())
-+ {
-+ error.SetErrorStringWithFormat ("can't connect to the host platform '%s', always connected", GetShortPluginName());
-+ }
-+ else
-+ {
-+ if (!m_remote_platform_sp)
-+ m_remote_platform_sp = Platform::Create ("remote-gdb-server", error);
-+
-+ if (m_remote_platform_sp)
-+ {
-+ if (error.Success())
-+ {
-+ if (m_remote_platform_sp)
-+ {
-+ error = m_remote_platform_sp->ConnectRemote (args);
-+ }
-+ else
-+ {
-+ error.SetErrorString ("\"platform connect\" takes a single argument: <connect-url>");
-+ }
-+ }
-+ }
-+ else
-+ error.SetErrorString ("failed to create a 'remote-gdb-server' platform");
-+
-+ if (error.Fail())
-+ m_remote_platform_sp.reset();
-+ }
-+
-+ return error;
-+}
-+
-+Error
-+PlatformWindows::DisconnectRemote ()
-+{
-+ Error error;
-+
-+ if (IsHost())
-+ {
-+ error.SetErrorStringWithFormat ("can't disconnect from the host platform '%s', always connected", GetShortPluginName());
-+ }
-+ else
-+ {
-+ if (m_remote_platform_sp)
-+ error = m_remote_platform_sp->DisconnectRemote ();
-+ else
-+ error.SetErrorString ("the platform is not currently connected");
-+ }
-+ return error;
-+}
-+
-+bool
-+PlatformWindows::GetProcessInfo (lldb::pid_t pid, ProcessInstanceInfo &process_info)
-+{
-+ bool success = false;
-+ if (IsHost())
-+ {
-+ success = Platform::GetProcessInfo (pid, process_info);
-+ }
-+ else if (m_remote_platform_sp)
-+ {
-+ success = m_remote_platform_sp->GetProcessInfo (pid, process_info);
-+ }
-+ return success;
-+}
-+
-+
-+
-+uint32_t
-+PlatformWindows::FindProcesses (const ProcessInstanceInfoMatch &match_info,
-+ ProcessInstanceInfoList &process_infos)
-+{
-+ uint32_t match_count = 0;
-+ if (IsHost())
-+ {
-+ // Let the base class figure out the host details
-+ match_count = Platform::FindProcesses (match_info, process_infos);
-+ }
-+ else
-+ {
-+ // If we are remote, we can only return results if we are connected
-+ if (m_remote_platform_sp)
-+ match_count = m_remote_platform_sp->FindProcesses (match_info, process_infos);
-+ }
-+ return match_count;
-+}
-+
-+Error
-+PlatformWindows::LaunchProcess (ProcessLaunchInfo &launch_info)
-+{
-+ Error error;
-+ if (IsHost())
-+ {
-+ error = Platform::LaunchProcess (launch_info);
-+ }
-+ else
-+ {
-+ if (m_remote_platform_sp)
-+ error = m_remote_platform_sp->LaunchProcess (launch_info);
-+ else
-+ error.SetErrorString ("the platform is not currently connected");
-+ }
-+ return error;
-+}
-+
-+lldb::ProcessSP
-+PlatformWindows::Attach(ProcessAttachInfo &attach_info,
-+ Debugger &debugger,
-+ Target *target,
-+ Listener &listener,
-+ Error &error)
-+{
-+ lldb::ProcessSP process_sp;
-+ if (IsHost())
-+ {
-+ if (target == NULL)
-+ {
-+ TargetSP new_target_sp;
-+ FileSpec emptyFileSpec;
-+ ArchSpec emptyArchSpec;
-+
-+ error = debugger.GetTargetList().CreateTarget (debugger,
-+ emptyFileSpec,
-+ emptyArchSpec,
-+ false,
-+ m_remote_platform_sp,
-+ new_target_sp);
-+ target = new_target_sp.get();
-+ }
-+ else
-+ error.Clear();
-+
-+ if (target && error.Success())
-+ {
-+ debugger.GetTargetList().SetSelectedTarget(target);
-+ // The freebsd always currently uses the GDB remote debugger plug-in
-+ // so even when debugging locally we are debugging remotely!
-+ // Just like the darwin plugin.
-+ process_sp = target->CreateProcess (listener, "gdb-remote", NULL);
-+
-+ if (process_sp)
-+ error = process_sp->Attach (attach_info);
-+ }
-+ }
-+ else
-+ {
-+ if (m_remote_platform_sp)
-+ process_sp = m_remote_platform_sp->Attach (attach_info, debugger, target, listener, error);
-+ else
-+ error.SetErrorString ("the platform is not currently connected");
-+ }
-+ return process_sp;
-+}
-+
-+const char *
-+PlatformWindows::GetUserName (uint32_t uid)
-+{
-+ // Check the cache in Platform in case we have already looked this uid up
-+ const char *user_name = Platform::GetUserName(uid);
-+ if (user_name)
-+ return user_name;
-+
-+ if (IsRemote() && m_remote_platform_sp)
-+ return m_remote_platform_sp->GetUserName(uid);
-+ return NULL;
-+}
-+
-+const char *
-+PlatformWindows::GetGroupName (uint32_t gid)
-+{
-+ const char *group_name = Platform::GetGroupName(gid);
-+ if (group_name)
-+ return group_name;
-+
-+ if (IsRemote() && m_remote_platform_sp)
-+ return m_remote_platform_sp->GetGroupName(gid);
-+ return NULL;
-+}
-+
-+Error
-+PlatformWindows::GetFile (const FileSpec &platform_file,
-+ const UUID *uuid_ptr,
-+ FileSpec &local_file)
-+{
-+ if (IsRemote())
-+ {
-+ if (m_remote_platform_sp)
-+ return m_remote_platform_sp->GetFile (platform_file, uuid_ptr, local_file);
-+ }
-+
-+ // Default to the local case
-+ local_file = platform_file;
-+ return Error();
-+}
-+
-+Error
-+PlatformWindows::GetSharedModule (const ModuleSpec &module_spec,
-+ ModuleSP &module_sp,
-+ const FileSpecList *module_search_paths_ptr,
-+ ModuleSP *old_module_sp_ptr,
-+ bool *did_create_ptr)
-+{
-+ Error error;
-+ module_sp.reset();
-+
-+ if (IsRemote())
-+ {
-+ // If we have a remote platform always, let it try and locate
-+ // the shared module first.
-+ if (m_remote_platform_sp)
-+ {
-+ error = m_remote_platform_sp->GetSharedModule (module_spec,
-+ module_sp,
-+ module_search_paths_ptr,
-+ old_module_sp_ptr,
-+ did_create_ptr);
-+ }
-+ }
-+
-+ if (!module_sp)
-+ {
-+ // Fall back to the local platform and find the file locally
-+ error = Platform::GetSharedModule (module_spec,
-+ module_sp,
-+ module_search_paths_ptr,
-+ old_module_sp_ptr,
-+ did_create_ptr);
-+ }
-+ if (module_sp)
-+ module_sp->SetPlatformFileSpec(module_spec.GetFileSpec());
-+ return error;
-+}
-+
-+
-+bool
-+PlatformWindows::GetSupportedArchitectureAtIndex (uint32_t idx, ArchSpec &arch)
-+{
-+ // From macosx;s plugin code. For FreeBSD we may want to support more archs.
-+ if (idx == 0)
-+ {
-+ arch = Host::GetArchitecture (Host::eSystemDefaultArchitecture);
-+ return arch.IsValid();
-+ }
-+ else if (idx == 1)
-+ {
-+ ArchSpec platform_arch (Host::GetArchitecture (Host::eSystemDefaultArchitecture));
-+ ArchSpec platform_arch64 (Host::GetArchitecture (Host::eSystemDefaultArchitecture64));
-+ if (platform_arch == platform_arch64)
-+ {
-+ // This freebsd platform supports both 32 and 64 bit. Since we already
-+ // returned the 64 bit arch for idx == 0, return the 32 bit arch
-+ // for idx == 1
-+ arch = Host::GetArchitecture (Host::eSystemDefaultArchitecture32);
-+ return arch.IsValid();
-+ }
-+ }
-+ return false;
-+}
-+
-+void
-+PlatformWindows::GetStatus (Stream &strm)
-+{
-+ OSVERSIONINFO info;
-+
-+ ZeroMemory(&info, sizeof(OSVERSIONINFO));
-+ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
-+
-+ if (GetVersionEx(&info) == 0) {
-+ strm << "Windows";
-+ return;
-+ }
-+
-+ strm << "Host: Windows " << (int) info.dwMajorVersion
-+ << '.' << (int) info.dwMinorVersion
-+ << " Build: " << (int) info.dwBuildNumber << '\n';
-+
-+ Platform::GetStatus(strm);
-+}
-Index: source/Plugins/Platform/Windows/PlatformWindows.h
-===================================================================
---- source/Plugins/Platform/Windows/PlatformWindows.h (revision 0)
-+++ source/Plugins/Platform/Windows/PlatformWindows.h (working copy)
-@@ -0,0 +1,166 @@
-+//===-- PlatformWindows.h --------------------------------------/*- C++ -*-===//
-+//
-+// The LLVM Compiler Infrastructure
-+//
-+// This file is distributed under the University of Illinois Open Source
-+// License. See LICENSE.TXT for details.
-+//
-+//===----------------------------------------------------------------------===//
-+
-+#ifndef liblldb_PlatformWindows_h_
-+#define liblldb_PlatformWindows_h_
-+
-+// C Includes
-+// C++ Includes
-+// Other libraries and framework includes
-+// Project includes
-+#include "lldb/Target/Platform.h"
-+
-+class PlatformWindows : public lldb_private::Platform
-+{
-+public:
-+
-+ //------------------------------------------------------------
-+ // Class functions
-+ //------------------------------------------------------------
-+ static lldb_private::Platform*
-+ CreateInstance (bool force, const lldb_private::ArchSpec *arch);
-+
-+ static void
-+ Initialize ();
-+
-+ static void
-+ Terminate ();
-+
-+ static const char *
-+ GetPluginNameStatic();
-+
-+ static const char *
-+ GetShortPluginNameStatic(bool is_host);
-+
-+ static const char *
-+ GetDescriptionStatic(bool is_host);
-+
-+ //------------------------------------------------------------
-+ // Class Methods
-+ //------------------------------------------------------------
-+ PlatformWindows (bool is_host);
-+
-+ virtual
-+ ~PlatformWindows();
-+
-+ //------------------------------------------------------------
-+ // lldb_private::PluginInterface functions
-+ //------------------------------------------------------------
-+ virtual const char *
-+ GetPluginName()
-+ {
-+ return GetPluginNameStatic();
-+ }
-+
-+ virtual const char *
-+ GetShortPluginName()
-+ {
-+ return GetShortPluginNameStatic (IsHost());
-+ }
-+
-+ virtual uint32_t
-+ GetPluginVersion()
-+ {
-+ return 1;
-+ }
-+
-+ virtual const char *
-+ GetDescription ()
-+ {
-+ return GetDescriptionStatic(IsHost());
-+ }
-+
-+ //------------------------------------------------------------
-+ // lldb_private::Platform functions
-+ //------------------------------------------------------------
-+ virtual lldb_private::Error
-+ ResolveExecutable (const lldb_private::FileSpec &exe_file,
-+ const lldb_private::ArchSpec &arch,
-+ lldb::ModuleSP &module_sp,
-+ const lldb_private::FileSpecList *module_search_paths_ptr);
-+
-+ virtual size_t
-+ GetSoftwareBreakpointTrapOpcode (lldb_private::Target &target,
-+ lldb_private::BreakpointSite *bp_site);
-+
-+ virtual bool
-+ GetRemoteOSVersion ();
-+
-+ virtual bool
-+ GetRemoteOSBuildString (std::string &s);
-+
-+ virtual bool
-+ GetRemoteOSKernelDescription (std::string &s);
-+
-+ // Remote Platform subclasses need to override this function
-+ virtual lldb_private::ArchSpec
-+ GetRemoteSystemArchitecture ();
-+
-+ virtual bool
-+ IsConnected () const;
-+
-+ virtual lldb_private::Error
-+ ConnectRemote (lldb_private::Args& args);
-+
-+ virtual lldb_private::Error
-+ DisconnectRemote ();
-+
-+ virtual const char *
-+ GetHostname ();
-+
-+ virtual const char *
-+ GetUserName (uint32_t uid);
-+
-+ virtual const char *
-+ GetGroupName (uint32_t gid);
-+
-+ virtual bool
-+ GetProcessInfo (lldb::pid_t pid,
-+ lldb_private::ProcessInstanceInfo &proc_info);
-+
-+ virtual uint32_t
-+ FindProcesses (const lldb_private::ProcessInstanceInfoMatch &match_info,
-+ lldb_private::ProcessInstanceInfoList &process_infos);
-+
-+ virtual lldb_private::Error
-+ LaunchProcess (lldb_private::ProcessLaunchInfo &launch_info);
-+
-+ virtual lldb::ProcessSP
-+ Attach(lldb_private::ProcessAttachInfo &attach_info,
-+ lldb_private::Debugger &debugger,
-+ lldb_private::Target *target,
-+ lldb_private::Listener &listener,
-+ lldb_private::Error &error);
-+
-+ // FIXME: Only on PlatformMacOSX:
-+ virtual lldb_private::Error
-+ GetFile (const lldb_private::FileSpec &platform_file,
-+ const lldb_private::UUID* uuid, lldb_private::FileSpec &local_file);
-+
-+ lldb_private::Error
-+ GetSharedModule (const lldb_private::ModuleSpec &module_spec,
-+ lldb::ModuleSP &module_sp,
-+ const lldb_private::FileSpecList *module_search_paths_ptr,
-+ lldb::ModuleSP *old_module_sp_ptr,
-+ bool *did_create_ptr);
-+
-+ virtual bool
-+ GetSupportedArchitectureAtIndex (uint32_t idx, lldb_private::ArchSpec &arch);
-+
-+ virtual void
-+ GetStatus (lldb_private::Stream &strm);
-+
-+protected:
-+ lldb::PlatformSP m_remote_platform_sp; // Allow multiple ways to connect to a remote freebsd OS
-+
-+private:
-+ DISALLOW_COPY_AND_ASSIGN (PlatformWindows);
-+};
-+
-+#endif // liblldb_PlatformWindows_h_
-Index: source/Plugins/Process/CMakeLists.txt
-===================================================================
---- source/Plugins/Process/CMakeLists.txt (revision 0)
-+++ source/Plugins/Process/CMakeLists.txt (working copy)
-@@ -0,0 +1,7 @@
-+#add_subdirectory(FreeBSD)
-+#add_subdirectory(gdb-remote)
-+#add_subdirectory(Linux)
-+#add_subdirectory(mach-core)
-+#add_subdirectory(MacOSx-Kernel)
-+#add_subdirectory(POSIX)
-+#add_subdirectory(Utility)
-Index: source/Plugins/Process/gdb-remote/CMakeLists.txt
-===================================================================
---- source/Plugins/Process/gdb-remote/CMakeLists.txt (revision 0)
-+++ source/Plugins/Process/gdb-remote/CMakeLists.txt (working copy)
-@@ -0,0 +1,11 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbPluginProcessGDBRemote
-+ GDBRemoteCommunication.cpp
-+ GDBRemoteRegisterContext.cpp
-+ GDBServer.cpp
-+ GDBServerLog.cpp
-+ ProcessGDBRemote.cpp
-+ ProcessGDBRemoteLog.cpp
-+ ThreadGDBRemote.cpp
-+ )
-Index: source/Plugins/Process/Utility/RegisterContextDarwin_arm.h
-===================================================================
---- source/Plugins/Process/Utility/RegisterContextDarwin_arm.h (revision 163322)
-+++ source/Plugins/Process/Utility/RegisterContextDarwin_arm.h (working copy)
-@@ -137,6 +137,10 @@
- // } v3;
- // uint32_t fpscr;
- // };
-+// windows defines far as nothing
-+#if defined(far)
-+#undef far
-+#endif
-
- struct EXC
- {
-Index: source/Plugins/SymbolFile/CMakeLists.txt
-===================================================================
---- source/Plugins/SymbolFile/CMakeLists.txt (revision 0)
-+++ source/Plugins/SymbolFile/CMakeLists.txt (working copy)
-@@ -0,0 +1,2 @@
-+add_subdirectory(DWARF)
-+add_subdirectory(Symtab)
-Index: source/Plugins/SymbolFile/DWARF/CMakeLists.txt
-===================================================================
---- source/Plugins/SymbolFile/DWARF/CMakeLists.txt (revision 0)
-+++ source/Plugins/SymbolFile/DWARF/CMakeLists.txt (working copy)
-@@ -0,0 +1,28 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbPluginSymbolFileDWARF
-+ DWARFAbbreviationDeclaration.cpp
-+ DWARFCompileUnit.cpp
-+ DWARFDebugAbbrev.cpp
-+ DWARFDebugAranges.cpp
-+ DWARFDebugArangeSet.cpp
-+ DWARFDebugInfo.cpp
-+ DWARFDebugInfoEntry.cpp
-+ DWARFDebugLine.cpp
-+ DWARFDebugMacinfo.cpp
-+ DWARFDebugMacinfoEntry.cpp
-+ DWARFDebugPubnames.cpp
-+ DWARFDebugPubnamesSet.cpp
-+ DWARFDebugRanges.cpp
-+ DWARFDeclContext.cpp
-+ DWARFDefines.cpp
-+ DWARFDIECollection.cpp
-+ DWARFFormValue.cpp
-+ DWARFLocationDescription.cpp
-+ DWARFLocationList.cpp
-+ LogChannelDWARF.cpp
-+ NameToDIE.cpp
-+ SymbolFileDWARF.cpp
-+ SymbolFileDWARFDebugMap.cpp
-+ UniqueDWARFASTType.cpp
-+ )
-Index: source/Plugins/SymbolFile/DWARF/DWARFDebugPubnamesSet.h
-===================================================================
---- source/Plugins/SymbolFile/DWARF/DWARFDebugPubnamesSet.h (revision 163322)
-+++ source/Plugins/SymbolFile/DWARF/DWARFDebugPubnamesSet.h (working copy)
-@@ -16,8 +16,12 @@
- #if __cplusplus >= 201103L
- #include <unordered_map>
- #else
--#include <ext/hash_map>
-+#if defined __GNUC__ || defined __APPLE__
-+ #include <ext/hash_map>
-+#else
-+#include <unordered_map>
- #endif
-+#endif
-
- class DWARFDebugPubnamesSet
- {
-@@ -87,11 +91,15 @@
-
- dw_offset_t m_offset;
- Header m_header;
--#if __cplusplus >= 201103L
-+#if __cplusplus >= 201103L
- typedef std::unordered_multimap<const char*, uint32_t, std::hash<const char*>, CStringEqualBinaryPredicate> cstr_to_index_mmap;
- #else
-- typedef __gnu_cxx::hash_multimap<const char*, uint32_t, __gnu_cxx::hash<const char*>, CStringEqualBinaryPredicate> cstr_to_index_mmap;
-+#if defined __GNUC__ || defined __APPLE__
-+ typedef __gnu_cxx::hash_multimap<const char*, uint32_t, __gnu_cxx::hash<const char*>, CStringEqualBinaryPredicate> cstr_to_index_mmap;
-+#else
-+ typedef std::unordered_multimap<const char*, uint32_t, std::hash<const char*>, CStringEqualBinaryPredicate> cstr_to_index_mmap;
- #endif
-+#endif
- DescriptorColl m_descriptors;
- mutable cstr_to_index_mmap m_name_to_descriptor_index;
- };
-Index: source/Plugins/SymbolFile/DWARF/DWARFDefines.h
-===================================================================
---- source/Plugins/SymbolFile/DWARF/DWARFDefines.h (revision 163322)
-+++ source/Plugins/SymbolFile/DWARF/DWARFDefines.h (working copy)
-@@ -11,7 +11,6 @@
- #define SymbolFileDWARF_DWARFDefines_h_
-
- #include <stdint.h>
--#include <stdbool.h>
- #include "lldb/Core/dwarf.h"
-
- namespace lldb_private {
-Index: source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
-===================================================================
---- source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp (revision 163322)
-+++ source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp (working copy)
-@@ -1388,7 +1388,8 @@
- if (tag == DW_TAG_template_value_parameter && ClangASTContext::IsIntegerType (clang_type, is_signed) && uval64_valid)
- {
- llvm::APInt apint (lldb_type->GetByteSize() * 8, uval64, is_signed);
-- template_param_infos.args.push_back (clang::TemplateArgument (llvm::APSInt(apint), clang_qual_type));
-+ template_param_infos.args.push_back (clang::TemplateArgument (
-+ *GetClangASTContext().getASTContext(), llvm::APSInt(apint), clang_qual_type));
- }
- else
- {
-@@ -1547,7 +1548,7 @@
- switch (tag)
- {
- case DW_TAG_member:
-- case DW_TAG_APPLE_Property:
-+ case DW_TAG_APPLE_property:
- {
- DWARFDebugInfoEntry::Attributes attributes;
- const size_t num_attributes = die->GetAttributes (this,
-Index: source/Plugins/SymbolFile/Symtab/CMakeLists.txt
-===================================================================
---- source/Plugins/SymbolFile/Symtab/CMakeLists.txt (revision 0)
-+++ source/Plugins/SymbolFile/Symtab/CMakeLists.txt (working copy)
-@@ -0,0 +1,5 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbPluginSymbolFileSymtab
-+ SymbolFileSymtab.cpp
-+ )
-Index: source/Plugins/SymbolVendor/CMakeLists.txt
-===================================================================
---- source/Plugins/SymbolVendor/CMakeLists.txt (revision 0)
-+++ source/Plugins/SymbolVendor/CMakeLists.txt (working copy)
-@@ -0,0 +1 @@
-+#add_subdirectory(MacOSX)
-Index: source/Plugins/SymbolVendor/MacOSX/CMakeLists.txt
-===================================================================
---- source/Plugins/SymbolVendor/MacOSX/CMakeLists.txt (revision 0)
-+++ source/Plugins/SymbolVendor/MacOSX/CMakeLists.txt (working copy)
-@@ -0,0 +1,5 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbPluginSymbolVendorMacOSX
-+ SymbolVendorMacOSX.cpp
-+ )
-Index: source/Plugins/UnwindAssembly/CMakeLists.txt
-===================================================================
---- source/Plugins/UnwindAssembly/CMakeLists.txt (revision 0)
-+++ source/Plugins/UnwindAssembly/CMakeLists.txt (working copy)
-@@ -0,0 +1,2 @@
-+#add_subdirectory(InstEmulation)
-+#add_subdirectory(x86)
-Index: source/Symbol/ClangASTContext.cpp
-===================================================================
---- source/Symbol/ClangASTContext.cpp (revision 163322)
-+++ source/Symbol/ClangASTContext.cpp (working copy)
-@@ -48,6 +48,7 @@
- #include "clang/Basic/TargetOptions.h"
- #include "clang/Frontend/FrontendOptions.h"
- #include "clang/Frontend/LangStandard.h"
-+#include "clang/Basic/Version.h"
-
- #ifdef LLDB_DEFINED_NDEBUG_FOR_CLANG
- #undef NDEBUG
-@@ -358,7 +359,9 @@
- // inlining enabled.
- //
- // FIXME: This is affected by other options (-fno-inline).
-+#if (CLANG_VERSION_MAJOR <= 3 && CLANG_VERSION_MINOR < 2)
- Opts.NoInline = !Opt;
-+#endif
-
- // unsigned SSP = getLastArgIntValue(Args, OPT_stack_protector, 0, Diags);
- // switch (SSP) {
-@@ -1177,7 +1180,7 @@
- for (size_t i=0; i<num_template_params; ++i)
- {
- const char *name = template_param_infos.names[i];
-- if (template_param_infos.args[i].getAsIntegral())
-+ if (template_param_infos.args[i].getAsIntegral().getBoolValue())
- {
- template_param_decls.push_back (NonTypeTemplateParmDecl::Create (*ast,
- ast->getTranslationUnitDecl(), // Is this the right decl context?, SourceLocation StartLoc,
-@@ -1956,7 +1959,7 @@
- NULL, // TInfo *
- bit_width, // BitWidth
- false, // Mutable
-- false); // HasInit
-+ ICIS_NoInit); // HasInit
-
- if (!name) {
- // Determine whether this field corresponds to an anonymous
-Index: source/Symbol/ClangASTType.cpp
-===================================================================
---- source/Symbol/ClangASTType.cpp (revision 163322)
-+++ source/Symbol/ClangASTType.cpp (working copy)
-@@ -23,6 +23,7 @@
- #include "clang/Basic/LangOptions.h"
- #include "clang/Basic/SourceManager.h"
- #include "clang/Basic/TargetInfo.h"
-+#include "clang/Basic/Version.h"
-
- #include "llvm/Support/FormattedStream.h"
- #include "llvm/Support/raw_ostream.h"
-@@ -1271,7 +1272,11 @@
- if (class_interface_decl)
- {
- clang::PrintingPolicy policy = ast_context->getPrintingPolicy();
-+
-+#if CLANG_VERSION_MAJOR > 3 || (CLANG_VERSION_MAJOR == 3 && CLANG_VERSION_MINOR >= 2)
-+#else
- policy.Dump = 1;
-+#endif
- class_interface_decl->print(llvm_ostrm, policy, s->GetIndentLevel());
- }
- }
-Index: source/Symbol/CMakeLists.txt
-===================================================================
---- source/Symbol/CMakeLists.txt (revision 0)
-+++ source/Symbol/CMakeLists.txt (working copy)
-@@ -0,0 +1,32 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbSymbol
-+ Block.cpp
-+ ClangASTContext.cpp
-+ ClangASTImporter.cpp
-+ ClangASTType.cpp
-+ ClangExternalASTSourceCallbacks.cpp
-+ ClangExternalASTSourceCommon.cpp
-+ ClangNamespaceDecl.cpp
-+ CompileUnit.cpp
-+ Declaration.cpp
-+ DWARFCallFrameInfo.cpp
-+ Function.cpp
-+ FuncUnwinders.cpp
-+ LineEntry.cpp
-+ LineTable.cpp
-+ ObjectFile.cpp
-+ Symbol.cpp
-+ SymbolContext.cpp
-+ SymbolFile.cpp
-+ SymbolVendor.cpp
-+ Symtab.cpp
-+ Type.cpp
-+ TypeHierarchyNavigator.cpp
-+ TypeList.cpp
-+ UnwindPlan.cpp
-+ UnwindTable.cpp
-+ Variable.cpp
-+ VariableList.cpp
-+ VerifyDecl.cpp
-+ )
-Index: source/Symbol/TypeHierarchyNavigator.cpp
-===================================================================
---- source/Symbol/TypeHierarchyNavigator.cpp (revision 163322)
-+++ source/Symbol/TypeHierarchyNavigator.cpp (working copy)
-@@ -11,6 +11,7 @@
- #include "lldb/Core/ValueObject.h"
- #include "lldb/Symbol/ClangASTContext.h"
- #include "lldb/Symbol/TypeHierarchyNavigator.h"
-+#include "clang/AST/ASTContext.h"
-
- using namespace lldb;
- using namespace lldb_private;
-Index: source/Target/CMakeLists.txt
-===================================================================
---- source/Target/CMakeLists.txt (revision 0)
-+++ source/Target/CMakeLists.txt (working copy)
-@@ -0,0 +1,42 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbTarget
-+ ABI.cpp
-+ CPPLanguageRuntime.cpp
-+ ExecutionContext.cpp
-+ LanguageRuntime.cpp
-+ Memory.cpp
-+ ObjCLanguageRuntime.cpp
-+ OperatingSystem.cpp
-+ PathMappingList.cpp
-+ Platform.cpp
-+ Process.cpp
-+ RegisterContext.cpp
-+ SectionLoadList.cpp
-+ StackFrame.cpp
-+ StackFrameList.cpp
-+ StackID.cpp
-+ StopInfo.cpp
-+ Target.cpp
-+ TargetList.cpp
-+ Thread.cpp
-+ ThreadList.cpp
-+ ThreadPlan.cpp
-+ ThreadPlanBase.cpp
-+ ThreadPlanCallFunction.cpp
-+ ThreadPlanCallUserExpression.cpp
-+ ThreadPlanRunToAddress.cpp
-+ ThreadPlanShouldStopHere.cpp
-+ ThreadPlanStepInRange.cpp
-+ ThreadPlanStepInstruction.cpp
-+ ThreadPlanStepOut.cpp
-+ ThreadPlanStepOverBreakpoint.cpp
-+ ThreadPlanStepOverRange.cpp
-+ ThreadPlanStepRange.cpp
-+ ThreadPlanStepThrough.cpp
-+ ThreadPlanStepUntil.cpp
-+ ThreadPlanTracer.cpp
-+ ThreadSpec.cpp
-+ UnixSignals.cpp
-+ UnwindAssembly.cpp
-+ )
-Index: source/Target/Process.cpp
-===================================================================
---- source/Target/Process.cpp (revision 163322)
-+++ source/Target/Process.cpp (working copy)
-@@ -563,7 +563,7 @@
- }
-
-
--
-+#ifdef _POSIX_SOURCE
- bool
- ProcessLaunchInfo::FileAction::AddPosixSpawnFileAction (posix_spawn_file_actions_t *file_actions,
- const FileAction *info,
-@@ -638,6 +638,7 @@
- }
- return error.Success();
- }
-+#endif
-
- Error
- ProcessLaunchCommandOptions::SetOptionValue (uint32_t option_idx, const char *option_arg)
-@@ -3509,12 +3510,16 @@
- m_currently_handling_event.SetValue(false, eBroadcastAlways);
- }
-
--void *
-+thread_result_t
- Process::PrivateStateThread (void *arg)
- {
- Process *proc = static_cast<Process*> (arg);
- void *result = proc->RunPrivateStateThread ();
-+#ifdef _WIN32
-+ return 0;
-+#else
- return result;
-+#endif
- }
-
- void *
-Index: source/Target/Thread.cpp
-===================================================================
---- source/Target/Thread.cpp (revision 163322)
-+++ source/Target/Thread.cpp (working copy)
-@@ -37,7 +37,7 @@
- #include "lldb/Target/ThreadSpec.h"
- #include "lldb/Target/Unwind.h"
- #include "Plugins/Process/Utility/UnwindLLDB.h"
--#include "UnwindMacOSXFrameBackchain.h"
-+//#include "UnwindMacOSXFrameBackchain.h"
-
-
- using namespace lldb;
-@@ -1450,12 +1450,16 @@
- case llvm::Triple::x86:
- case llvm::Triple::arm:
- case llvm::Triple::thumb:
-+#ifndef _WIN32
- m_unwinder_ap.reset (new UnwindLLDB (*this));
-+#endif
- break;
-
- default:
-+#ifdef __APPLE__
- if (target_arch.GetTriple().getVendor() == llvm::Triple::Apple)
- m_unwinder_ap.reset (new UnwindMacOSXFrameBackchain (*this));
-+#endif
- break;
- }
- }
-Index: source/Utility/CMakeLists.txt
-===================================================================
---- source/Utility/CMakeLists.txt (revision 0)
-+++ source/Utility/CMakeLists.txt (working copy)
-@@ -0,0 +1,10 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbUtility
-+ ARM_DWARF_Registers.cpp
-+ PseudoTerminal.cpp
-+ RefCounter.cpp
-+ SharingPtr.cpp
-+ StringExtractor.cpp
-+ StringExtractorGDBRemote.cpp
-+ )
-Index: source/Utility/PseudoTerminal.cpp
-===================================================================
---- source/Utility/PseudoTerminal.cpp (revision 163322)
-+++ source/Utility/PseudoTerminal.cpp (working copy)
-@@ -17,6 +17,25 @@
- #include <sys/ioctl.h>
- #endif
-
-+#ifdef _WIN32
-+#include "lldb/lldb-windows.h"
-+int posix_openpt(int flag) { return 0; }
-+
-+int strerror_r(int errnum, char *buf, size_t buflen) { return 0; }
-+
-+int unlockpt(int fd) { return 0; }
-+int grantpt(int fd) { return 0; }
-+char *ptsname(int fd) { return 0; }
-+
-+int open(const char *pathname, int flags) { return 0; }
-+void close(int fd) {}
-+int dup(int oldfd);int dup2(int oldfd, int newfd) { return 0; }
-+
-+typedef uint32_t pid_t;
-+pid_t fork(void) { return 0; }
-+pid_t setsid(void) { return 0; }
-+#endif
-+
- using namespace lldb_utility;
-
- //----------------------------------------------------------------------
-Index: tools/CMakeLists.txt
-===================================================================
---- tools/CMakeLists.txt (revision 0)
-+++ tools/CMakeLists.txt (working copy)
-@@ -0,0 +1,2 @@
-+#add_subdirectory(debugserver)
-+add_subdirectory(driver)
-Index: tools/driver/CMakeLists.txt
-===================================================================
---- tools/driver/CMakeLists.txt (revision 0)
-+++ tools/driver/CMakeLists.txt (working copy)
-@@ -0,0 +1,82 @@
-+set(LLVM_NO_RTTI 1)
-+
-+set( LLDB_USED_LIBS
-+ lldbAPI
-+ lldbBreakpoint
-+ lldbCommands
-+ lldbCore
-+ lldbExpression
-+ lldbHostCommon
-+ lldbInitAndLog
-+ lldbInterpreter
-+ lldbSymbol
-+ lldbTarget
-+ lldbUtility
-+
-+ # Plugins
-+ lldbPluginDisassemblerLLVM
-+ lldbPluginSymbolFileDWARF
-+ lldbPluginSymbolFileSymtab
-+ lldbPluginDynamicLoaderStatic
-+
-+ #lldbPluginObjectFileELF
-+ #lldbPluginObjectContainerBSDArchive
-+ #lldbPluginSymbolVendorMacOSX
-+
-+ # Windows
-+ lldbHostWindows
-+ lldbPluginPlatformWindows
-+ lldbPluginObjectFilePECOFF
-+
-+ # Linux
-+ #lldbHostLinux
-+
-+ Ws2_32
-+ )
-+
-+set( CLANG_USED_LIBS
-+ clangAnalysis
-+ clangAST
-+ clangBasic
-+ clangCodeGen
-+ clangDriver
-+ clangEdit
-+ clangFrontend
-+ clangLex
-+ clangParse
-+ clangRewrite
-+ clangSema
-+ clangSerialization
-+ )
-+
-+set( LLDB_DRIVER_LIBS
-+ #edit
-+ #python2.6
-+ )
-+
-+set( LLVM_LINK_COMPONENTS
-+ ${LLVM_TARGETS_TO_BUILD}
-+ jit
-+ interpreter
-+ nativecodegen
-+ asmparser
-+ bitreader
-+ bitwriter
-+ codegen
-+ ipo
-+ selectiondag
-+ bitreader
-+ mc
-+ core
-+ )
-+
-+add_lldb_executable(lldb
-+ Driver.cpp
-+ DriverEvents.cpp
-+ DriverOptions.cpp
-+ DriverPosix.cpp
-+ IOChannel.cpp
-+ )
-+
-+install(TARGETS lldb
-+ RUNTIME DESTINATION bin)
-Index: tools/driver/Driver.cpp
-===================================================================
---- tools/driver/Driver.cpp (revision 163322)
-+++ tools/driver/Driver.cpp (working copy)
-@@ -9,18 +9,17 @@
-
- #include "Driver.h"
-
--#include <getopt.h>
--#include <libgen.h>
--#include <sys/ioctl.h>
--#include <termios.h>
--#include <unistd.h>
-+#ifdef _WIN32
-+#include "lldb/lldb-windows.h"
-+#include "lldb/lldb-private-log.h"
-+#include "lldb/Core/StreamCallback.h"
-+#include "lldb/Core/Log.h"
-+#endif
- #include <string.h>
- #include <stdlib.h>
- #include <limits.h>
- #include <fcntl.h>
-
--#include <string>
--
- #include "IOChannel.h"
- #include "lldb/API/SBBreakpoint.h"
- #include "lldb/API/SBCommandInterpreter.h"
-@@ -38,80 +37,10 @@
- using namespace lldb;
-
- static void reset_stdin_termios ();
--static bool g_old_stdin_termios_is_valid = false;
--static struct termios g_old_stdin_termios;
-
--static char *g_debugger_name = (char *) "";
--static Driver *g_driver = NULL;
--
--// In the Driver::MainLoop, we change the terminal settings. This function is
--// added as an atexit handler to make sure we clean them up.
--static void
--reset_stdin_termios ()
--{
-- if (g_old_stdin_termios_is_valid)
-- {
-- g_old_stdin_termios_is_valid = false;
-- ::tcsetattr (STDIN_FILENO, TCSANOW, &g_old_stdin_termios);
-- }
--}
--
--typedef struct
--{
-- uint32_t usage_mask; // Used to mark options that can be used together. If (1 << n & usage_mask) != 0
-- // then this option belongs to option set n.
-- bool required; // This option is required (in the current usage level)
-- const char * long_option; // Full name for this option.
-- char short_option; // Single character for this option.
-- int option_has_arg; // no_argument, required_argument or optional_argument
-- uint32_t completion_type; // Cookie the option class can use to do define the argument completion.
-- lldb::CommandArgumentType argument_type; // Type of argument this option takes
-- const char * usage_text; // Full text explaining what this options does and what (if any) argument to
-- // pass it.
--} OptionDefinition;
--
--#define LLDB_3_TO_5 LLDB_OPT_SET_3|LLDB_OPT_SET_4|LLDB_OPT_SET_5
--#define LLDB_4_TO_5 LLDB_OPT_SET_4|LLDB_OPT_SET_5
--
--static OptionDefinition g_options[] =
--{
-- { LLDB_OPT_SET_1, true , "help" , 'h', no_argument , NULL, eArgTypeNone,
-- "Prints out the usage information for the LLDB debugger." },
-- { LLDB_OPT_SET_2, true , "version" , 'v', no_argument , NULL, eArgTypeNone,
-- "Prints out the current version number of the LLDB debugger." },
-- { LLDB_OPT_SET_3, true , "arch" , 'a', required_argument, NULL, eArgTypeArchitecture,
-- "Tells the debugger to use the specified architecture when starting and running the program. <architecture> must "
-- "be one of the architectures for which the program was compiled." },
-- { LLDB_OPT_SET_3, true , "file" , 'f', required_argument, NULL, eArgTypeFilename,
-- "Tells the debugger to use the file <filename> as the program to be debugged." },
-- { LLDB_OPT_SET_3, false, "core" , 'c', required_argument, NULL, eArgTypePath,
-- "Tells the debugger to use the fullpath to <path> as the core file." },
-- { LLDB_OPT_SET_4, true , "attach-name" , 'n', required_argument, NULL, eArgTypeProcessName,
-- "Tells the debugger to attach to a process with the given name." },
-- { LLDB_OPT_SET_4, true , "wait-for" , 'w', no_argument , NULL, eArgTypeNone,
-- "Tells the debugger to wait for a process with the given pid or name to launch before attaching." },
-- { LLDB_OPT_SET_5, true , "attach-pid" , 'p', required_argument, NULL, eArgTypePid,
-- "Tells the debugger to attach to a process with the given pid." },
-- { LLDB_3_TO_5, false, "script-language", 'l', required_argument, NULL, eArgTypeScriptLang,
-- "Tells the debugger to use the specified scripting language for user-defined scripts, rather than the default. "
-- "Valid scripting languages that can be specified include Python, Perl, Ruby and Tcl. Currently only the Python "
-- "extensions have been implemented." },
-- { LLDB_3_TO_5, false, "debug" , 'd', no_argument , NULL, eArgTypeNone,
-- "Tells the debugger to print out extra information for debugging itself." },
-- { LLDB_3_TO_5, false, "source" , 's', required_argument, NULL, eArgTypeFilename,
-- "Tells the debugger to read in and execute the file <file>, which should contain lldb commands." },
-- { LLDB_3_TO_5, false, "editor" , 'e', no_argument , NULL, eArgTypeNone,
-- "Tells the debugger to open source files using the host's \"external editor\" mechanism." },
-- { LLDB_3_TO_5, false, "no-lldbinit" , 'x', no_argument , NULL, eArgTypeNone,
-- "Do not automatically parse any '.lldbinit' files." },
-- { 0, false, NULL , 0 , 0 , NULL, eArgTypeNone, NULL }
--};
--
--static const uint32_t last_option_set_with_args = 2;
--
- Driver::Driver () :
- SBBroadcaster ("Driver"),
-- m_debugger (SBDebugger::Create(false)),
-+ m_debugger (NULL),
- m_editline_pty (),
- m_editline_slave_fh (NULL),
- m_editline_reader (),
-@@ -119,307 +48,12 @@
- m_option_data (),
- m_waiting_for_command (false)
- {
-- // We want to be able to handle CTRL+D in the terminal to have it terminate
-- // certain input
-- m_debugger.SetCloseInputOnEOF (false);
-- g_debugger_name = (char *) m_debugger.GetInstanceName();
-- if (g_debugger_name == NULL)
-- g_debugger_name = (char *) "";
-- g_driver = this;
- }
-
- Driver::~Driver ()
- {
-- g_driver = NULL;
-- g_debugger_name = NULL;
- }
-
--void
--Driver::CloseIOChannelFile ()
--{
-- // Write an End of File sequence to the file descriptor to ensure any
-- // read functions can exit.
-- char eof_str[] = "\x04";
-- ::write (m_editline_pty.GetMasterFileDescriptor(), eof_str, strlen(eof_str));
--
-- m_editline_pty.CloseMasterFileDescriptor();
--
-- if (m_editline_slave_fh)
-- {
-- ::fclose (m_editline_slave_fh);
-- m_editline_slave_fh = NULL;
-- }
--}
--
--// This function takes INDENT, which tells how many spaces to output at the front
--// of each line; TEXT, which is the text that is to be output. It outputs the
--// text, on multiple lines if necessary, to RESULT, with INDENT spaces at the
--// front of each line. It breaks lines on spaces, tabs or newlines, shortening
--// the line if necessary to not break in the middle of a word. It assumes that
--// each output line should contain a maximum of OUTPUT_MAX_COLUMNS characters.
--
--void
--OutputFormattedUsageText (FILE *out, int indent, const char *text, int output_max_columns)
--{
-- int len = strlen (text);
-- std::string text_string (text);
--
-- // Force indentation to be reasonable.
-- if (indent >= output_max_columns)
-- indent = 0;
--
-- // Will it all fit on one line?
--
-- if (len + indent < output_max_columns)
-- // Output as a single line
-- fprintf (out, "%*s%s\n", indent, "", text);
-- else
-- {
-- // We need to break it up into multiple lines.
-- int text_width = output_max_columns - indent - 1;
-- int start = 0;
-- int end = start;
-- int final_end = len;
-- int sub_len;
--
-- while (end < final_end)
-- {
-- // Dont start the 'text' on a space, since we're already outputting the indentation.
-- while ((start < final_end) && (text[start] == ' '))
-- start++;
--
-- end = start + text_width;
-- if (end > final_end)
-- end = final_end;
-- else
-- {
-- // If we're not at the end of the text, make sure we break the line on white space.
-- while (end > start
-- && text[end] != ' ' && text[end] != '\t' && text[end] != '\n')
-- end--;
-- }
-- sub_len = end - start;
-- std::string substring = text_string.substr (start, sub_len);
-- fprintf (out, "%*s%s\n", indent, "", substring.c_str());
-- start = end + 1;
-- }
-- }
--}
--
--void
--ShowUsage (FILE *out, OptionDefinition *option_table, Driver::OptionData data)
--{
-- uint32_t screen_width = 80;
-- uint32_t indent_level = 0;
-- const char *name = "lldb";
--
-- fprintf (out, "\nUsage:\n\n");
--
-- indent_level += 2;
--
--
-- // First, show each usage level set of options, e.g. <cmd> [options-for-level-0]
-- // <cmd> [options-for-level-1]
-- // etc.
--
-- uint32_t num_options;
-- uint32_t num_option_sets = 0;
--
-- for (num_options = 0; option_table[num_options].long_option != NULL; ++num_options)
-- {
-- uint32_t this_usage_mask = option_table[num_options].usage_mask;
-- if (this_usage_mask == LLDB_OPT_SET_ALL)
-- {
-- if (num_option_sets == 0)
-- num_option_sets = 1;
-- }
-- else
-- {
-- for (uint32_t j = 0; j < LLDB_MAX_NUM_OPTION_SETS; j++)
-- {
-- if (this_usage_mask & 1 << j)
-- {
-- if (num_option_sets <= j)
-- num_option_sets = j + 1;
-- }
-- }
-- }
-- }
--
-- for (uint32_t opt_set = 0; opt_set < num_option_sets; opt_set++)
-- {
-- uint32_t opt_set_mask;
--
-- opt_set_mask = 1 << opt_set;
--
-- if (opt_set > 0)
-- fprintf (out, "\n");
-- fprintf (out, "%*s%s", indent_level, "", name);
-- bool is_help_line = false;
--
-- for (uint32_t i = 0; i < num_options; ++i)
-- {
-- if (option_table[i].usage_mask & opt_set_mask)
-- {
-- CommandArgumentType arg_type = option_table[i].argument_type;
-- const char *arg_name = SBCommandInterpreter::GetArgumentTypeAsCString (arg_type);
-- // This is a bit of a hack, but there's no way to say certain options don't have arguments yet...
-- // so we do it by hand here.
-- if (option_table[i].short_option == 'h')
-- is_help_line = true;
--
-- if (option_table[i].required)
-- {
-- if (option_table[i].option_has_arg == required_argument)
-- fprintf (out, " -%c <%s>", option_table[i].short_option, arg_name);
-- else if (option_table[i].option_has_arg == optional_argument)
-- fprintf (out, " -%c [<%s>]", option_table[i].short_option, arg_name);
-- else
-- fprintf (out, " -%c", option_table[i].short_option);
-- }
-- else
-- {
-- if (option_table[i].option_has_arg == required_argument)
-- fprintf (out, " [-%c <%s>]", option_table[i].short_option, arg_name);
-- else if (option_table[i].option_has_arg == optional_argument)
-- fprintf (out, " [-%c [<%s>]]", option_table[i].short_option, arg_name);
-- else
-- fprintf (out, " [-%c]", option_table[i].short_option);
-- }
-- }
-- }
-- if (!is_help_line && (opt_set <= last_option_set_with_args))
-- fprintf (out, " [[--] <PROGRAM-ARG-1> [<PROGRAM_ARG-2> ...]]");
-- }
--
-- fprintf (out, "\n\n");
--
-- // Now print out all the detailed information about the various options: long form, short form and help text:
-- // -- long_name <argument>
-- // - short <argument>
-- // help text
--
-- // This variable is used to keep track of which options' info we've printed out, because some options can be in
-- // more than one usage level, but we only want to print the long form of its information once.
--
-- Driver::OptionData::OptionSet options_seen;
-- Driver::OptionData::OptionSet::iterator pos;
--
-- indent_level += 5;
--
-- for (uint32_t i = 0; i < num_options; ++i)
-- {
-- // Only print this option if we haven't already seen it.
-- pos = options_seen.find (option_table[i].short_option);
-- if (pos == options_seen.end())
-- {
-- CommandArgumentType arg_type = option_table[i].argument_type;
-- const char *arg_name = SBCommandInterpreter::GetArgumentTypeAsCString (arg_type);
--
-- options_seen.insert (option_table[i].short_option);
-- fprintf (out, "%*s-%c ", indent_level, "", option_table[i].short_option);
-- if (arg_type != eArgTypeNone)
-- fprintf (out, "<%s>", arg_name);
-- fprintf (out, "\n");
-- fprintf (out, "%*s--%s ", indent_level, "", option_table[i].long_option);
-- if (arg_type != eArgTypeNone)
-- fprintf (out, "<%s>", arg_name);
-- fprintf (out, "\n");
-- indent_level += 5;
-- OutputFormattedUsageText (out, indent_level, option_table[i].usage_text, screen_width);
-- indent_level -= 5;
-- fprintf (out, "\n");
-- }
-- }
--
-- indent_level -= 5;
--
-- fprintf (out, "\n%*s(If you don't provide -f then the first argument will be the file to be debugged"
-- "\n%*s so '%s -- <filename> [<ARG1> [<ARG2>]]' also works."
-- "\n%*s Remember to end the options with \"--\" if any of your arguments have a \"-\" in them.)\n\n",
-- indent_level, "",
-- indent_level, "",
-- name,
-- indent_level, "");
--}
--
--void
--BuildGetOptTable (OptionDefinition *expanded_option_table, std::vector<struct option> &getopt_table,
-- uint32_t num_options)
--{
-- if (num_options == 0)
-- return;
--
-- uint32_t i;
-- uint32_t j;
-- std::bitset<256> option_seen;
--
-- getopt_table.resize (num_options + 1);
--
-- for (i = 0, j = 0; i < num_options; ++i)
-- {
-- char short_opt = expanded_option_table[i].short_option;
--
-- if (option_seen.test(short_opt) == false)
-- {
-- getopt_table[j].name = expanded_option_table[i].long_option;
-- getopt_table[j].has_arg = expanded_option_table[i].option_has_arg;
-- getopt_table[j].flag = NULL;
-- getopt_table[j].val = expanded_option_table[i].short_option;
-- option_seen.set(short_opt);
-- ++j;
-- }
-- }
--
-- getopt_table[j].name = NULL;
-- getopt_table[j].has_arg = 0;
-- getopt_table[j].flag = NULL;
-- getopt_table[j].val = 0;
--
--}
--
--Driver::OptionData::OptionData () :
-- m_args(),
-- m_script_lang (lldb::eScriptLanguageDefault),
-- m_core_file (),
-- m_crash_log (),
-- m_source_command_files (),
-- m_debug_mode (false),
-- m_print_version (false),
-- m_print_help (false),
-- m_wait_for(false),
-- m_process_name(),
-- m_process_pid(LLDB_INVALID_PROCESS_ID),
-- m_use_external_editor(false),
-- m_seen_options()
--{
--}
--
--Driver::OptionData::~OptionData ()
--{
--}
--
--void
--Driver::OptionData::Clear ()
--{
-- m_args.clear ();
-- m_script_lang = lldb::eScriptLanguageDefault;
-- m_source_command_files.clear ();
-- m_debug_mode = false;
-- m_print_help = false;
-- m_print_version = false;
-- m_use_external_editor = false;
-- m_wait_for = false;
-- m_process_name.erase();
-- m_process_pid = LLDB_INVALID_PROCESS_ID;
--}
--
--void
--Driver::ResetOptionValues ()
--{
-- m_option_data.Clear ();
--}
--
- const char *
- Driver::GetFilename() const
- {
-@@ -462,282 +96,6 @@
- return m_option_data.m_debug_mode;
- }
-
--
--// Check the arguments that were passed to this program to make sure they are valid and to get their
--// argument values (if any). Return a boolean value indicating whether or not to start up the full
--// debugger (i.e. the Command Interpreter) or not. Return FALSE if the arguments were invalid OR
--// if the user only wanted help or version information.
--
--SBError
--Driver::ParseArgs (int argc, const char *argv[], FILE *out_fh, bool &exit)
--{
-- ResetOptionValues ();
--
-- SBCommandReturnObject result;
--
-- SBError error;
-- std::string option_string;
-- struct option *long_options = NULL;
-- std::vector<struct option> long_options_vector;
-- uint32_t num_options;
--
-- for (num_options = 0; g_options[num_options].long_option != NULL; ++num_options)
-- /* Do Nothing. */;
--
-- if (num_options == 0)
-- {
-- if (argc > 1)
-- error.SetErrorStringWithFormat ("invalid number of options");
-- return error;
-- }
--
-- BuildGetOptTable (g_options, long_options_vector, num_options);
--
-- if (long_options_vector.empty())
-- long_options = NULL;
-- else
-- long_options = &long_options_vector.front();
--
-- if (long_options == NULL)
-- {
-- error.SetErrorStringWithFormat ("invalid long options");
-- return error;
-- }
--
-- // Build the option_string argument for call to getopt_long.
--
-- for (int i = 0; long_options[i].name != NULL; ++i)
-- {
-- if (long_options[i].flag == NULL)
-- {
-- option_string.push_back ((char) long_options[i].val);
-- switch (long_options[i].has_arg)
-- {
-- default:
-- case no_argument:
-- break;
-- case required_argument:
-- option_string.push_back (':');
-- break;
-- case optional_argument:
-- option_string.append ("::");
-- break;
-- }
-- }
-- }
--
-- // This is kind of a pain, but since we make the debugger in the Driver's constructor, we can't
-- // know at that point whether we should read in init files yet. So we don't read them in in the
-- // Driver constructor, then set the flags back to "read them in" here, and then if we see the
-- // "-n" flag, we'll turn it off again. Finally we have to read them in by hand later in the
-- // main loop.
--
-- m_debugger.SkipLLDBInitFiles (false);
-- m_debugger.SkipAppInitFiles (false);
--
-- // Prepare for & make calls to getopt_long.
--#if __GLIBC__
-- optind = 0;
--#else
-- optreset = 1;
-- optind = 1;
--#endif
-- int val;
-- while (1)
-- {
-- int long_options_index = -1;
-- val = ::getopt_long (argc, const_cast<char **>(argv), option_string.c_str(), long_options, &long_options_index);
--
-- if (val == -1)
-- break;
-- else if (val == '?')
-- {
-- m_option_data.m_print_help = true;
-- error.SetErrorStringWithFormat ("unknown or ambiguous option");
-- break;
-- }
-- else if (val == 0)
-- continue;
-- else
-- {
-- m_option_data.m_seen_options.insert ((char) val);
-- if (long_options_index == -1)
-- {
-- for (int i = 0;
-- long_options[i].name || long_options[i].has_arg || long_options[i].flag || long_options[i].val;
-- ++i)
-- {
-- if (long_options[i].val == val)
-- {
-- long_options_index = i;
-- break;
-- }
-- }
-- }
--
-- if (long_options_index >= 0)
-- {
-- const char short_option = (char) g_options[long_options_index].short_option;
--
-- switch (short_option)
-- {
-- case 'h':
-- m_option_data.m_print_help = true;
-- break;
--
-- case 'v':
-- m_option_data.m_print_version = true;
-- break;
--
-- case 'c':
-- {
-- SBFileSpec file(optarg);
-- if (file.Exists())
-- {
-- m_option_data.m_core_file = optarg;
-- }
-- else
-- error.SetErrorStringWithFormat("file specified in --core (-c) option doesn't exist: '%s'", optarg);
-- }
-- break;
--
-- case 'e':
-- m_option_data.m_use_external_editor = true;
-- break;
--
-- case 'x':
-- m_debugger.SkipLLDBInitFiles (true);
-- m_debugger.SkipAppInitFiles (true);
-- break;
--
-- case 'f':
-- {
-- SBFileSpec file(optarg);
-- if (file.Exists())
-- {
-- m_option_data.m_args.push_back (optarg);
-- }
-- else if (file.ResolveExecutableLocation())
-- {
-- char path[PATH_MAX];
-- file.GetPath (path, sizeof(path));
-- m_option_data.m_args.push_back (path);
-- }
-- else
-- error.SetErrorStringWithFormat("file specified in --file (-f) option doesn't exist: '%s'", optarg);
-- }
-- break;
--
-- case 'a':
-- if (!m_debugger.SetDefaultArchitecture (optarg))
-- error.SetErrorStringWithFormat("invalid architecture in the -a or --arch option: '%s'", optarg);
-- break;
--
-- case 'l':
-- m_option_data.m_script_lang = m_debugger.GetScriptingLanguage (optarg);
-- break;
--
-- case 'd':
-- m_option_data.m_debug_mode = true;
-- break;
--
-- case 'n':
-- m_option_data.m_process_name = optarg;
-- break;
--
-- case 'w':
-- m_option_data.m_wait_for = true;
-- break;
--
-- case 'p':
-- {
-- char *remainder;
-- m_option_data.m_process_pid = strtol (optarg, &remainder, 0);
-- if (remainder == optarg || *remainder != '\0')
-- error.SetErrorStringWithFormat ("Could not convert process PID: \"%s\" into a pid.",
-- optarg);
-- }
-- break;
-- case 's':
-- {
-- SBFileSpec file(optarg);
-- if (file.Exists())
-- m_option_data.m_source_command_files.push_back (optarg);
-- else if (file.ResolveExecutableLocation())
-- {
-- char final_path[PATH_MAX];
-- file.GetPath (final_path, sizeof(final_path));
-- std::string path_str (final_path);
-- m_option_data.m_source_command_files.push_back (path_str);
-- }
-- else
-- error.SetErrorStringWithFormat("file specified in --source (-s) option doesn't exist: '%s'", optarg);
-- }
-- break;
--
-- default:
-- m_option_data.m_print_help = true;
-- error.SetErrorStringWithFormat ("unrecognized option %c", short_option);
-- break;
-- }
-- }
-- else
-- {
-- error.SetErrorStringWithFormat ("invalid option with value %i", val);
-- }
-- if (error.Fail())
-- {
-- return error;
-- }
-- }
-- }
--
-- if (error.Fail() || m_option_data.m_print_help)
-- {
-- ShowUsage (out_fh, g_options, m_option_data);
-- exit = true;
-- }
-- else if (m_option_data.m_print_version)
-- {
-- ::fprintf (out_fh, "%s\n", m_debugger.GetVersionString());
-- exit = true;
-- }
-- else if (m_option_data.m_process_name.empty() && m_option_data.m_process_pid == LLDB_INVALID_PROCESS_ID)
-- {
-- // Any arguments that are left over after option parsing are for
-- // the program. If a file was specified with -f then the filename
-- // is already in the m_option_data.m_args array, and any remaining args
-- // are arguments for the inferior program. If no file was specified with
-- // -f, then what is left is the program name followed by any arguments.
--
-- // Skip any options we consumed with getopt_long
-- argc -= optind;
-- argv += optind;
--
-- if (argc > 0)
-- {
-- for (int arg_idx=0; arg_idx<argc; ++arg_idx)
-- {
-- const char *arg = argv[arg_idx];
-- if (arg)
-- m_option_data.m_args.push_back (arg);
-- }
-- }
--
-- }
-- else
-- {
-- // Skip any options we consumed with getopt_long
-- argc -= optind;
-- //argv += optind; // Commented out to keep static analyzer happy
--
-- if (argc > 0)
-- ::fprintf (out_fh, "Warning: program arguments are ignored when attaching.\n");
-- }
--
-- return error;
--}
--
- size_t
- Driver::GetProcessSTDOUT ()
- {
-@@ -773,733 +131,186 @@
- {
- using namespace lldb;
- SBProcess process(m_debugger.GetSelectedTarget().GetProcess());
-- if (process.IsValid())
-- {
-- SBThread curr_thread (process.GetSelectedThread());
-- SBThread thread;
-- StopReason curr_thread_stop_reason = eStopReasonInvalid;
-- curr_thread_stop_reason = curr_thread.GetStopReason();
--
-- if (!curr_thread.IsValid() ||
-- curr_thread_stop_reason == eStopReasonInvalid ||
-- curr_thread_stop_reason == eStopReasonNone)
-- {
-- // Prefer a thread that has just completed its plan over another thread as current thread.
-- SBThread plan_thread;
-- SBThread other_thread;
-- const size_t num_threads = process.GetNumThreads();
-- size_t i;
-- for (i = 0; i < num_threads; ++i)
-- {
-- thread = process.GetThreadAtIndex(i);
-- StopReason thread_stop_reason = thread.GetStopReason();
-- switch (thread_stop_reason)
-- {
-- default:
-- case eStopReasonInvalid:
-- case eStopReasonNone:
-- break;
--
-- case eStopReasonTrace:
-- case eStopReasonBreakpoint:
-- case eStopReasonWatchpoint:
-- case eStopReasonSignal:
-- case eStopReasonException:
-- if (!other_thread.IsValid())
-- other_thread = thread;
-- break;
-- case eStopReasonPlanComplete:
-- if (!plan_thread.IsValid())
-- plan_thread = thread;
-- break;
-- }
-- }
-- if (plan_thread.IsValid())
-- process.SetSelectedThread (plan_thread);
-- else if (other_thread.IsValid())
-- process.SetSelectedThread (other_thread);
-- else
-- {
-- if (curr_thread.IsValid())
-- thread = curr_thread;
-- else
-- thread = process.GetThreadAtIndex(0);
--
-- if (thread.IsValid())
-- process.SetSelectedThread (thread);
-- }
-- }
-- }
--}
--
--// This function handles events that were broadcast by the process.
--void
--Driver::HandleBreakpointEvent (const SBEvent &event)
--{
-- using namespace lldb;
-- const uint32_t event_type = SBBreakpoint::GetBreakpointEventTypeFromEvent (event);
-+ if (!process.IsValid())
-+ return;
-
-- if (event_type & eBreakpointEventTypeAdded
-- || event_type & eBreakpointEventTypeRemoved
-- || event_type & eBreakpointEventTypeEnabled
-- || event_type & eBreakpointEventTypeDisabled
-- || event_type & eBreakpointEventTypeCommandChanged
-- || event_type & eBreakpointEventTypeConditionChanged
-- || event_type & eBreakpointEventTypeIgnoreChanged
-- || event_type & eBreakpointEventTypeLocationsResolved)
-- {
-- // Don't do anything about these events, since the breakpoint commands already echo these actions.
-- }
-- else if (event_type & eBreakpointEventTypeLocationsAdded)
-- {
-- char message[256];
-- uint32_t num_new_locations = SBBreakpoint::GetNumBreakpointLocationsFromEvent(event);
-- if (num_new_locations > 0)
-- {
-- SBBreakpoint breakpoint = SBBreakpoint::GetBreakpointFromEvent(event);
-- int message_len = ::snprintf (message, sizeof(message), "%d location%s added to breakpoint %d\n",
-- num_new_locations,
-- num_new_locations == 1 ? " " : "s ",
-- breakpoint.GetID());
-- m_io_channel_ap->OutWrite(message, message_len, ASYNC);
-- }
-- }
-- else if (event_type & eBreakpointEventTypeLocationsRemoved)
-- {
-- // These locations just get disabled, not sure it is worth spamming folks about this on the command line.
-- }
-- else if (event_type & eBreakpointEventTypeLocationsResolved)
-- {
-- // This might be an interesting thing to note, but I'm going to leave it quiet for now, it just looked noisy.
-- }
--}
-+ SBThread curr_thread (process.GetSelectedThread());
-+ SBThread thread;
-+ StopReason curr_thread_stop_reason = eStopReasonInvalid;
-+ curr_thread_stop_reason = curr_thread.GetStopReason();
-
--// This function handles events that were broadcast by the process.
--void
--Driver::HandleProcessEvent (const SBEvent &event)
--{
-- using namespace lldb;
-- const uint32_t event_type = event.GetType();
--
-- if (event_type & SBProcess::eBroadcastBitSTDOUT)
-+ if (!curr_thread.IsValid() ||
-+ curr_thread_stop_reason == eStopReasonInvalid ||
-+ curr_thread_stop_reason == eStopReasonNone)
- {
-- // The process has stdout available, get it and write it out to the
-- // appropriate place.
-- GetProcessSTDOUT ();
-- }
-- else if (event_type & SBProcess::eBroadcastBitSTDERR)
-- {
-- // The process has stderr available, get it and write it out to the
-- // appropriate place.
-- GetProcessSTDERR ();
-- }
-- else if (event_type & SBProcess::eBroadcastBitStateChanged)
-- {
-- // Drain all stout and stderr so we don't see any output come after
-- // we print our prompts
-- GetProcessSTDOUT ();
-- GetProcessSTDERR ();
-- // Something changed in the process; get the event and report the process's current status and location to
-- // the user.
-- StateType event_state = SBProcess::GetStateFromEvent (event);
-- if (event_state == eStateInvalid)
-- return;
--
-- SBProcess process (SBProcess::GetProcessFromEvent (event));
-- assert (process.IsValid());
--
-- switch (event_state)
-+ // Prefer a thread that has just completed its plan over another thread as current thread.
-+ SBThread plan_thread;
-+ SBThread other_thread;
-+ const size_t num_threads = process.GetNumThreads();
-+ size_t i;
-+ for (i = 0; i < num_threads; ++i)
- {
-- case eStateInvalid:
-- case eStateUnloaded:
-- case eStateConnected:
-- case eStateAttaching:
-- case eStateLaunching:
-- case eStateStepping:
-- case eStateDetached:
-- {
-- char message[1024];
-- int message_len = ::snprintf (message, sizeof(message), "Process %llu %s\n", process.GetProcessID(),
-- m_debugger.StateAsCString (event_state));
-- m_io_channel_ap->OutWrite(message, message_len, ASYNC);
-- }
-- break;
-+ thread = process.GetThreadAtIndex(i);
-+ StopReason thread_stop_reason = thread.GetStopReason();
-+ switch (thread_stop_reason)
-+ {
-+ default:
-+ case eStopReasonInvalid:
-+ case eStopReasonNone:
-+ break;
-
-- case eStateRunning:
-- // Don't be chatty when we run...
-- break;
--
-- case eStateExited:
-- {
-- SBCommandReturnObject result;
-- m_debugger.GetCommandInterpreter().HandleCommand("process status", result, false);
-- m_io_channel_ap->ErrWrite (result.GetError(), result.GetErrorSize(), ASYNC);
-- m_io_channel_ap->OutWrite (result.GetOutput(), result.GetOutputSize(), ASYNC);
-+ case eStopReasonTrace:
-+ case eStopReasonBreakpoint:
-+ case eStopReasonWatchpoint:
-+ case eStopReasonSignal:
-+ case eStopReasonException:
-+ if (!other_thread.IsValid())
-+ other_thread = thread;
-+ break;
-+ case eStopReasonPlanComplete:
-+ if (!plan_thread.IsValid())
-+ plan_thread = thread;
-+ break;
- }
-- break;
--
-- case eStateStopped:
-- case eStateCrashed:
-- case eStateSuspended:
-- // Make sure the program hasn't been auto-restarted:
-- if (SBProcess::GetRestartedFromEvent (event))
-- {
-- // FIXME: Do we want to report this, or would that just be annoyingly chatty?
-- char message[1024];
-- int message_len = ::snprintf (message, sizeof(message), "Process %llu stopped and was programmatically restarted.\n",
-- process.GetProcessID());
-- m_io_channel_ap->OutWrite(message, message_len, ASYNC);
-- }
-- else
-- {
-- if (GetDebugger().GetSelectedTarget() == process.GetTarget())
-- {
-- SBCommandReturnObject result;
-- UpdateSelectedThread ();
-- m_debugger.GetCommandInterpreter().HandleCommand("process status", result, false);
-- m_io_channel_ap->ErrWrite (result.GetError(), result.GetErrorSize(), ASYNC);
-- m_io_channel_ap->OutWrite (result.GetOutput(), result.GetOutputSize(), ASYNC);
-- }
-- else
-- {
-- SBStream out_stream;
-- uint32_t target_idx = GetDebugger().GetIndexOfTarget(process.GetTarget());
-- if (target_idx != UINT32_MAX)
-- out_stream.Printf ("Target %d: (", target_idx);
-- else
-- out_stream.Printf ("Target <unknown index>: (");
-- process.GetTarget().GetDescription (out_stream, eDescriptionLevelBrief);
-- out_stream.Printf (") stopped.\n");
-- m_io_channel_ap->OutWrite (out_stream.GetData(), out_stream.GetSize(), ASYNC);
-- }
-- }
-- break;
- }
-- }
--}
-+ if (plan_thread.IsValid())
-+ process.SetSelectedThread (plan_thread);
-+ else if (other_thread.IsValid())
-+ process.SetSelectedThread (other_thread);
-+ else
-+ {
-+ if (curr_thread.IsValid())
-+ thread = curr_thread;
-+ else
-+ thread = process.GetThreadAtIndex(0);
-
--// This function handles events broadcast by the IOChannel (HasInput, UserInterrupt, or ThreadShouldExit).
--
--bool
--Driver::HandleIOEvent (const SBEvent &event)
--{
-- bool quit = false;
--
-- const uint32_t event_type = event.GetType();
--
-- if (event_type & IOChannel::eBroadcastBitHasUserInput)
-- {
-- // We got some input (i.e. a command string) from the user; pass it off to the command interpreter for
-- // handling.
--
-- const char *command_string = SBEvent::GetCStringFromEvent(event);
-- if (command_string == NULL)
-- command_string = "";
-- SBCommandReturnObject result;
--
-- // We don't want the result to bypass the OutWrite function in IOChannel, as this can result in odd
-- // output orderings and problems with the prompt.
-- m_debugger.GetCommandInterpreter().HandleCommand (command_string, result, true);
--
-- if (result.GetOutputSize() > 0)
-- m_io_channel_ap->OutWrite (result.GetOutput(), result.GetOutputSize(), NO_ASYNC);
--
-- if (result.GetErrorSize() > 0)
-- m_io_channel_ap->OutWrite (result.GetError(), result.GetErrorSize(), NO_ASYNC);
--
-- // We are done getting and running our command, we can now clear the
-- // m_waiting_for_command so we can get another one.
-- m_waiting_for_command = false;
--
-- // If our editline input reader is active, it means another input reader
-- // got pushed onto the input reader and caused us to become deactivated.
-- // When the input reader above us gets popped, we will get re-activated
-- // and our prompt will refresh in our callback
-- if (m_editline_reader.IsActive())
-- {
-- ReadyForCommand ();
-+ if (thread.IsValid())
-+ process.SetSelectedThread (thread);
- }
- }
-- else if (event_type & IOChannel::eBroadcastBitUserInterrupt)
-- {
-- // This is here to handle control-c interrupts from the user. It has not yet really been implemented.
-- // TO BE DONE: PROPERLY HANDLE CONTROL-C FROM USER
-- //m_io_channel_ap->CancelInput();
-- // Anything else? Send Interrupt to process?
-- }
-- else if ((event_type & IOChannel::eBroadcastBitThreadShouldExit) ||
-- (event_type & IOChannel::eBroadcastBitThreadDidExit))
-- {
-- // If the IOChannel thread is trying to go away, then it is definitely
-- // time to end the debugging session.
-- quit = true;
-- }
--
-- return quit;
- }
-
--void
--Driver::MasterThreadBytesReceived (void *baton, const void *src, size_t src_len)
-+void LogOutput(const char * msg, void *baton)
- {
-- Driver *driver = (Driver*)baton;
-- driver->GetFromMaster ((const char *)src, src_len);
-+ puts(msg);
- }
-
--void
--Driver::GetFromMaster (const char *src, size_t src_len)
-+void Driver::Initialize()
- {
-- // Echo the characters back to the Debugger's stdout, that way if you
-- // type characters while a command is running, you'll see what you've typed.
-- FILE *out_fh = m_debugger.GetOutputFileHandle();
-- if (out_fh)
-- ::fwrite (src, 1, src_len, out_fh);
--}
-+ m_debugger = SBDebugger::Create(false, LogOutput, 0);
-+ // We want to be able to handle CTRL+D in the terminal to have it terminate
-+ // certain input
-+ m_debugger.SetCloseInputOnEOF (false);
-+ InitializePseudoTerminal();
-+
-
--size_t
--Driver::EditLineInputReaderCallback
--(
-- void *baton,
-- SBInputReader *reader,
-- InputReaderAction notification,
-- const char *bytes,
-- size_t bytes_len
--)
--{
-- Driver *driver = (Driver *)baton;
--
-- switch (notification)
-- {
-- case eInputReaderActivate:
-- break;
--
-- case eInputReaderReactivate:
-- driver->ReadyForCommand();
-- break;
--
-- case eInputReaderDeactivate:
-- break;
--
-- case eInputReaderAsynchronousOutputWritten:
-- if (driver->m_io_channel_ap.get() != NULL)
-- driver->m_io_channel_ap->RefreshPrompt();
-- break;
--
-- case eInputReaderInterrupt:
-- if (driver->m_io_channel_ap.get() != NULL)
-- {
-- SBProcess process(driver->GetDebugger().GetSelectedTarget().GetProcess());
-- if (!driver->m_io_channel_ap->EditLineHasCharacters()
-- && process.IsValid()
-- && (process.GetState() == lldb::eStateRunning || process.GetState() == lldb::eStateAttaching))
-- {
-- process.SendAsyncInterrupt ();
-- }
-- else
-- {
-- driver->m_io_channel_ap->OutWrite ("^C\n", 3, NO_ASYNC);
-- // I wish I could erase the entire input line, but there's no public API for that.
-- driver->m_io_channel_ap->EraseCharsBeforeCursor();
-- driver->m_io_channel_ap->RefreshPrompt();
-- }
-- }
-- break;
--
-- case eInputReaderEndOfFile:
-- if (driver->m_io_channel_ap.get() != NULL)
-- {
-- driver->m_io_channel_ap->OutWrite ("^D\n", 3, NO_ASYNC);
-- driver->m_io_channel_ap->RefreshPrompt ();
-- }
-- write (driver->m_editline_pty.GetMasterFileDescriptor(), "quit\n", 5);
-- break;
--
-- case eInputReaderGotToken:
-- write (driver->m_editline_pty.GetMasterFileDescriptor(), bytes, bytes_len);
-- break;
--
-- case eInputReaderDone:
-- break;
-- }
-- return bytes_len;
--}
--
--void
--Driver::MainLoop ()
--{
-- char error_str[1024];
-- if (m_editline_pty.OpenFirstAvailableMaster(O_RDWR|O_NOCTTY, error_str, sizeof(error_str)) == false)
-- {
-- ::fprintf (stderr, "error: failed to open driver pseudo terminal : %s", error_str);
-- exit(1);
-- }
-- else
-- {
-- const char *driver_slave_name = m_editline_pty.GetSlaveName (error_str, sizeof(error_str));
-- if (driver_slave_name == NULL)
-- {
-- ::fprintf (stderr, "error: failed to get slave name for driver pseudo terminal : %s", error_str);
-- exit(2);
-- }
-- else
-- {
-- m_editline_slave_fh = ::fopen (driver_slave_name, "r+");
-- if (m_editline_slave_fh == NULL)
-- {
-- SBError error;
-- error.SetErrorToErrno();
-- ::fprintf (stderr, "error: failed to get open slave for driver pseudo terminal : %s",
-- error.GetCString());
-- exit(3);
-- }
--
-- ::setbuf (m_editline_slave_fh, NULL);
-- }
-- }
--
-- lldb_utility::PseudoTerminal editline_output_pty;
-- FILE *editline_output_slave_fh = NULL;
--
-- if (editline_output_pty.OpenFirstAvailableMaster (O_RDWR|O_NOCTTY, error_str, sizeof (error_str)) == false)
-- {
-- ::fprintf (stderr, "error: failed to open output pseudo terminal : %s", error_str);
-- exit(1);
-- }
-- else
-- {
-- const char *output_slave_name = editline_output_pty.GetSlaveName (error_str, sizeof(error_str));
-- if (output_slave_name == NULL)
-- {
-- ::fprintf (stderr, "error: failed to get slave name for output pseudo terminal : %s", error_str);
-- exit(2);
-- }
-- else
-- {
-- editline_output_slave_fh = ::fopen (output_slave_name, "r+");
-- if (editline_output_slave_fh == NULL)
-- {
-- SBError error;
-- error.SetErrorToErrno();
-- ::fprintf (stderr, "error: failed to get open slave for output pseudo terminal : %s",
-- error.GetCString());
-- exit(3);
-- }
-- ::setbuf (editline_output_slave_fh, NULL);
-- }
-- }
--
-- // struct termios stdin_termios;
--
-- if (::tcgetattr(STDIN_FILENO, &g_old_stdin_termios) == 0)
-- {
-- g_old_stdin_termios_is_valid = true;
-- atexit (reset_stdin_termios);
-- }
--
-- ::setbuf (stdin, NULL);
-- ::setbuf (stdout, NULL);
--
- m_debugger.SetErrorFileHandle (stderr, false);
- m_debugger.SetOutputFileHandle (stdout, false);
- m_debugger.SetInputFileHandle (stdin, true);
--
-+
- m_debugger.SetUseExternalEditor(m_option_data.m_use_external_editor);
-
-- // You have to drain anything that comes to the master side of the PTY. master_out_comm is
-- // for that purpose. The reason you need to do this is a curious reason... editline will echo
-- // characters to the PTY when it gets characters while el_gets is not running, and then when
-- // you call el_gets (or el_getc) it will try to reset the terminal back to raw mode which blocks
-- // if there are unconsumed characters in the out buffer.
-- // However, you don't need to do anything with the characters, since editline will dump these
-- // unconsumed characters after printing the prompt again in el_gets.
-+ InitializeEditLineIO();
-
-- SBCommunication master_out_comm("driver.editline");
-- master_out_comm.SetCloseOnEOF (false);
-- master_out_comm.AdoptFileDesriptor(m_editline_pty.GetMasterFileDescriptor(), false);
-- master_out_comm.SetReadThreadBytesReceivedCallback(Driver::MasterThreadBytesReceived, this);
-+
-+ SBCommandInterpreter sb_interpreter = m_debugger.GetCommandInterpreter();
-+ m_interpreter = &sb_interpreter;
-
-- if (master_out_comm.ReadThreadStart () == false)
-- {
-- ::fprintf (stderr, "error: failed to start master out read thread");
-- exit(5);
-- }
-+ SBListener listener(m_debugger.GetListener());
-+ listener.StartListeningForEventClass(m_debugger,
-+ SBTarget::GetBroadcasterClassName(),
-+ SBTarget::eBroadcastBitBreakpointChanged);
-+ if (!listener.IsValid())
-+ return;
-
-- SBCommandInterpreter sb_interpreter = m_debugger.GetCommandInterpreter();
-+ listener.StartListeningForEvents (*m_io_channel_ap,
-+ IOChannel::eBroadcastBitHasUserInput |
-+ IOChannel::eBroadcastBitUserInterrupt |
-+ IOChannel::eBroadcastBitThreadShouldExit |
-+ IOChannel::eBroadcastBitThreadDidStart |
-+ IOChannel::eBroadcastBitThreadDidExit);
-
-- m_io_channel_ap.reset (new IOChannel(m_editline_slave_fh, editline_output_slave_fh, stdout, stderr, this));
-+ if (!m_io_channel_ap->Start ())
-+ return;
-+
-+ iochannel_thread_exited = false;
-+
-+ listener.StartListeningForEvents (sb_interpreter.GetBroadcaster(),
-+ SBCommandInterpreter::eBroadcastBitQuitCommandReceived |
-+ SBCommandInterpreter::eBroadcastBitAsynchronousOutputData |
-+ SBCommandInterpreter::eBroadcastBitAsynchronousErrorData);
-
-- SBCommunication out_comm_2("driver.editline_output");
-- out_comm_2.SetCloseOnEOF (false);
-- out_comm_2.AdoptFileDesriptor (editline_output_pty.GetMasterFileDescriptor(), false);
-- out_comm_2.SetReadThreadBytesReceivedCallback (IOChannel::LibeditOutputBytesReceived, m_io_channel_ap.get());
-+ // Before we handle any options from the command line, we parse the
-+ // .lldbinit file in the user's home directory.
-+ SBCommandReturnObject result;
-+ sb_interpreter.SourceInitFileInHomeDirectory(result);
-
-- if (out_comm_2.ReadThreadStart () == false)
-+ if (GetDebugMode())
- {
-- ::fprintf (stderr, "error: failed to start libedit output read thread");
-- exit (5);
-+ result.PutError (m_debugger.GetErrorFileHandle());
-+ result.PutOutput (m_debugger.GetOutputFileHandle());
- }
-+ HandleCommandLine(result);
-
--
-- struct winsize window_size;
-- if (isatty (STDIN_FILENO)
-- && ::ioctl (STDIN_FILENO, TIOCGWINSZ, &window_size) == 0)
-+ // Now that all option parsing is done, we try and parse the .lldbinit
-+ // file in the current working directory
-+ sb_interpreter.SourceInitFileInCurrentWorkingDirectory (result);
-+ if (GetDebugMode())
- {
-- if (window_size.ws_col > 0)
-- m_debugger.SetTerminalWidth (window_size.ws_col);
-+ result.PutError(m_debugger.GetErrorFileHandle());
-+ result.PutOutput(m_debugger.GetOutputFileHandle());
- }
--
-- // Since input can be redirected by the debugger, we must insert our editline
-- // input reader in the queue so we know when our reader should be active
-- // and so we can receive bytes only when we are supposed to.
-- SBError err (m_editline_reader.Initialize (m_debugger,
-- Driver::EditLineInputReaderCallback, // callback
-- this, // baton
-- eInputReaderGranularityByte, // token_size
-- NULL, // end token - NULL means never done
-- NULL, // prompt - taken care of elsewhere
-- false)); // echo input - don't need Debugger
-- // to do this, we handle it elsewhere
-+ SBEvent event;
-+ // Make sure the IO channel is started up before we try to tell it we
-+ // are ready for input
-+ listener.WaitForEventForBroadcasterWithType (UINT32_MAX,
-+ *m_io_channel_ap,
-+ IOChannel::eBroadcastBitThreadDidStart,
-+ event);
-
-- if (err.Fail())
-+ // If we were asked to attach, then do that here:
-+ // I'm going to use the command string rather than directly
-+ // calling the API's because then I don't have to recode the
-+ // event handling here.
-+ if (!m_option_data.m_process_name.empty()
-+ || m_option_data.m_process_pid != LLDB_INVALID_PROCESS_ID)
- {
-- ::fprintf (stderr, "error: %s", err.GetCString());
-- exit (6);
-+ AttachToProcess();
- }
-
-- m_debugger.PushInputReader (m_editline_reader);
-+ ReadyForCommand ();
-+}
-
-- SBListener listener(m_debugger.GetListener());
-- listener.StartListeningForEventClass(m_debugger,
-- SBTarget::GetBroadcasterClassName(),
-- SBTarget::eBroadcastBitBreakpointChanged);
-- if (listener.IsValid())
-+void
-+Driver::MainLoop ()
-+{
-+ SBEvent event;
-+ while (!GetIsDone())
- {
--
-- listener.StartListeningForEvents (*m_io_channel_ap,
-- IOChannel::eBroadcastBitHasUserInput |
-- IOChannel::eBroadcastBitUserInterrupt |
-- IOChannel::eBroadcastBitThreadShouldExit |
-- IOChannel::eBroadcastBitThreadDidStart |
-- IOChannel::eBroadcastBitThreadDidExit);
--
-- if (m_io_channel_ap->Start ())
-+ m_listener->WaitForEvent (UINT32_MAX, event);
-+ if (event.IsValid())
-+ {
-+ ProcessEvent(event);
-+ }
-+ }
-+
-+
-+ DestroyPseudoTerminal();
-+ CloseIOChannelFile ();
-+
-+ if (!iochannel_thread_exited)
-+ {
-+ event.Clear();
-+ m_listener->GetNextEventForBroadcasterWithType (*m_io_channel_ap,
-+ IOChannel::eBroadcastBitThreadDidExit,
-+ event);
-+ if (!event.IsValid())
- {
-- bool iochannel_thread_exited = false;
--
-- listener.StartListeningForEvents (sb_interpreter.GetBroadcaster(),
-- SBCommandInterpreter::eBroadcastBitQuitCommandReceived |
-- SBCommandInterpreter::eBroadcastBitAsynchronousOutputData |
-- SBCommandInterpreter::eBroadcastBitAsynchronousErrorData);
--
-- // Before we handle any options from the command line, we parse the
-- // .lldbinit file in the user's home directory.
-- SBCommandReturnObject result;
-- sb_interpreter.SourceInitFileInHomeDirectory(result);
-- if (GetDebugMode())
-- {
-- result.PutError (m_debugger.GetErrorFileHandle());
-- result.PutOutput (m_debugger.GetOutputFileHandle());
-- }
--
-- // Now we handle options we got from the command line
-- char command_string[PATH_MAX * 2];
-- const size_t num_source_command_files = GetNumSourceCommandFiles();
-- if (num_source_command_files > 0)
-- {
-- for (size_t i=0; i < num_source_command_files; ++i)
-- {
-- const char *command_file = GetSourceCommandFileAtIndex(i);
-- ::snprintf (command_string, sizeof(command_string), "command source '%s'", command_file);
-- m_debugger.GetCommandInterpreter().HandleCommand (command_string, result, false);
-- if (GetDebugMode())
-- {
-- result.PutError (m_debugger.GetErrorFileHandle());
-- result.PutOutput (m_debugger.GetOutputFileHandle());
-- }
-- }
-- }
--
-- // Was there a core file specified?
-- std::string core_file_spec("");
-- if (!m_option_data.m_core_file.empty())
-- core_file_spec.append("--core ").append(m_option_data.m_core_file);
--
-- const size_t num_args = m_option_data.m_args.size();
-- if (num_args > 0)
-- {
-- char arch_name[64];
-- if (m_debugger.GetDefaultArchitecture (arch_name, sizeof (arch_name)))
-- ::snprintf (command_string,
-- sizeof (command_string),
-- "target create --arch=%s %s \"%s\"",
-- arch_name,
-- core_file_spec.c_str(),
-- m_option_data.m_args[0].c_str());
-- else
-- ::snprintf (command_string,
-- sizeof(command_string),
-- "target create %s \"%s\"",
-- core_file_spec.c_str(),
-- m_option_data.m_args[0].c_str());
--
-- m_debugger.HandleCommand (command_string);
--
-- if (num_args > 1)
-- {
-- m_debugger.HandleCommand ("settings clear target.run-args");
-- char arg_cstr[1024];
-- for (size_t arg_idx = 1; arg_idx < num_args; ++arg_idx)
-- {
-- ::snprintf (arg_cstr,
-- sizeof(arg_cstr),
-- "settings append target.run-args \"%s\"",
-- m_option_data.m_args[arg_idx].c_str());
-- m_debugger.HandleCommand (arg_cstr);
-- }
-- }
-- }
-- else if (!core_file_spec.empty())
-- {
-- ::snprintf (command_string,
-- sizeof(command_string),
-- "target create %s",
-- core_file_spec.c_str());
-- m_debugger.HandleCommand (command_string);;
-- }
--
-- // Now that all option parsing is done, we try and parse the .lldbinit
-- // file in the current working directory
-- sb_interpreter.SourceInitFileInCurrentWorkingDirectory (result);
-- if (GetDebugMode())
-- {
-- result.PutError(m_debugger.GetErrorFileHandle());
-- result.PutOutput(m_debugger.GetOutputFileHandle());
-- }
--
-- SBEvent event;
--
-- // Make sure the IO channel is started up before we try to tell it we
-- // are ready for input
-- listener.WaitForEventForBroadcasterWithType (UINT32_MAX,
-- *m_io_channel_ap,
-- IOChannel::eBroadcastBitThreadDidStart,
-- event);
-- // If we were asked to attach, then do that here:
-- // I'm going to use the command string rather than directly
-- // calling the API's because then I don't have to recode the
-- // event handling here.
-- if (!m_option_data.m_process_name.empty()
-- || m_option_data.m_process_pid != LLDB_INVALID_PROCESS_ID)
-- {
-- std::string command_str("process attach ");
-- if (m_option_data.m_process_pid != LLDB_INVALID_PROCESS_ID)
-- {
-- command_str.append("-p ");
-- char pid_buffer[32];
-- ::snprintf (pid_buffer, sizeof(pid_buffer), "%llu", m_option_data.m_process_pid);
-- command_str.append(pid_buffer);
-- }
-- else
-- {
-- command_str.append("-n \"");
-- command_str.append(m_option_data.m_process_name);
-- command_str.push_back('\"');
-- if (m_option_data.m_wait_for)
-- command_str.append(" -w");
-- }
--
-- if (m_debugger.GetOutputFileHandle())
-- ::fprintf (m_debugger.GetOutputFileHandle(),
-- "Attaching to process with:\n %s\n",
-- command_str.c_str());
--
-- // Force the attach to be synchronous:
-- bool orig_async = m_debugger.GetAsync();
-- m_debugger.SetAsync(true);
-- m_debugger.HandleCommand(command_str.c_str());
-- m_debugger.SetAsync(orig_async);
-- }
--
-- ReadyForCommand ();
--
-- while (!GetIsDone())
-- {
-- listener.WaitForEvent (UINT32_MAX, event);
-- if (event.IsValid())
-- {
-- if (event.GetBroadcaster().IsValid())
-- {
-- uint32_t event_type = event.GetType();
-- if (event.BroadcasterMatchesRef (*m_io_channel_ap))
-- {
-- if ((event_type & IOChannel::eBroadcastBitThreadShouldExit) ||
-- (event_type & IOChannel::eBroadcastBitThreadDidExit))
-- {
-- SetIsDone();
-- if (event_type & IOChannel::eBroadcastBitThreadDidExit)
-- iochannel_thread_exited = true;
-- }
-- else
-- {
-- if (HandleIOEvent (event))
-- SetIsDone();
-- }
-- }
-- else if (SBProcess::EventIsProcessEvent (event))
-- {
-- HandleProcessEvent (event);
-- }
-- else if (SBBreakpoint::EventIsBreakpointEvent (event))
-- {
-- HandleBreakpointEvent (event);
-- }
-- else if (event.BroadcasterMatchesRef (sb_interpreter.GetBroadcaster()))
-- {
-- // TODO: deprecate the eBroadcastBitQuitCommandReceived event
-- // now that we have SBCommandInterpreter::SetCommandOverrideCallback()
-- // that can take over a command
-- if (event_type & SBCommandInterpreter::eBroadcastBitQuitCommandReceived)
-- {
-- SetIsDone();
-- }
-- else if (event_type & SBCommandInterpreter::eBroadcastBitAsynchronousErrorData)
-- {
-- const char *data = SBEvent::GetCStringFromEvent (event);
-- m_io_channel_ap->ErrWrite (data, strlen(data), ASYNC);
-- }
-- else if (event_type & SBCommandInterpreter::eBroadcastBitAsynchronousOutputData)
-- {
-- const char *data = SBEvent::GetCStringFromEvent (event);
-- m_io_channel_ap->OutWrite (data, strlen(data), ASYNC);
-- }
-- }
-- }
-- }
-- }
--
-- editline_output_pty.CloseMasterFileDescriptor();
-- master_out_comm.Disconnect();
-- out_comm_2.Disconnect();
-- reset_stdin_termios();
-- fclose (stdin);
--
-- CloseIOChannelFile ();
--
-- if (!iochannel_thread_exited)
-- {
-- event.Clear();
-- listener.GetNextEventForBroadcasterWithType (*m_io_channel_ap,
-- IOChannel::eBroadcastBitThreadDidExit,
-- event);
-- if (!event.IsValid())
-- {
-- // Send end EOF to the driver file descriptor
-- m_io_channel_ap->Stop();
-- }
-- }
--
-- SBDebugger::Destroy (m_debugger);
-+ // Send end EOF to the driver file descriptor
-+ m_io_channel_ap->Stop();
- }
- }
-+ SBDebugger::Destroy (m_debugger);
- }
-
-
-@@ -1513,57 +324,30 @@
- }
- }
-
-+// defined in DriverPosix.cpp
-+void SetupPosixSignals();
-
--void
--sigwinch_handler (int signo)
--{
-- struct winsize window_size;
-- if (isatty (STDIN_FILENO)
-- && ::ioctl (STDIN_FILENO, TIOCGWINSZ, &window_size) == 0)
-- {
-- if ((window_size.ws_col > 0) && g_driver != NULL)
-- {
-- g_driver->GetDebugger().SetTerminalWidth (window_size.ws_col);
-- }
-- }
--}
--
--void
--sigint_handler (int signo)
--{
-- static bool g_interrupt_sent = false;
-- if (g_driver)
-- {
-- if (!g_interrupt_sent)
-- {
-- g_interrupt_sent = true;
-- g_driver->GetDebugger().DispatchInputInterrupt();
-- g_interrupt_sent = false;
-- return;
-- }
-- }
--
-- exit (signo);
--}
--
- int
- main (int argc, char const *argv[], const char *envp[])
- {
-+#if 1 // Enable for debug logging
-+ lldb::StreamSP logStream(new lldb_private::StreamCallback(LogOutput, 0));
-+ const char* logCategories[] = { 0 };
-+ lldb::LogSP log = lldb_private::EnableLog(logStream, 0, logCategories, 0);
-+ log->GetMask().Reset(LIBLLDB_LOG_ALL);
-+#endif
- SBDebugger::Initialize();
-
- SBHostOS::ThreadCreated ("<lldb.driver.main-thread>");
-
-- signal (SIGPIPE, SIG_IGN);
-- signal (SIGWINCH, sigwinch_handler);
-- signal (SIGINT, sigint_handler);
--
-+ SetupPosixSignals();
- // Create a scope for driver so that the driver object will destroy itself
- // before SBDebugger::Terminate() is called.
- {
- Driver driver;
-
- bool exit = false;
-- SBError error (driver.ParseArgs (argc, argv, stdout, exit));
-+ SBError error = driver.ParseArgs (argc, argv, stdout, exit);
- if (error.Fail())
- {
- const char *error_cstr = error.GetCString ();
-@@ -1572,7 +356,7 @@
- }
- else if (!exit)
- {
-- driver.MainLoop ();
-+ driver.Initialize();
- }
- }
-
-Index: tools/driver/Driver.h
-===================================================================
---- tools/driver/Driver.h (revision 163322)
-+++ tools/driver/Driver.h (working copy)
-@@ -10,8 +10,6 @@
- #ifndef lldb_Driver_h_
- #define lldb_Driver_h_
-
--#include "lldb/Utility/PseudoTerminal.h"
--
- #include <set>
- #include <bitset>
- #include <string>
-@@ -22,6 +20,10 @@
- #include "lldb/API/SBDebugger.h"
- #include "lldb/API/SBError.h"
- #include "lldb/API/SBInputReader.h"
-+#include "lldb/API/SBEvent.h"
-+#include "lldb/API/SBCommandInterpreter.h"
-+#include "lldb/API/SBCommandReturnObject.h"
-+#include "lldb/Utility/PseudoTerminal.h"
-
- #define ASYNC true
- #define NO_ASYNC false
-@@ -33,7 +35,6 @@
- class SBInputReader;
- }
-
--
- class Driver : public lldb::SBBroadcaster
- {
- public:
-@@ -48,6 +49,9 @@
- ~Driver ();
-
- void
-+ Initialize();
-+
-+ void
- MainLoop ();
-
- void
-@@ -150,6 +154,9 @@
-
- private:
- lldb::SBDebugger m_debugger;
-+ lldb::SBCommandInterpreter* m_interpreter;
-+ lldb::SBListener* m_listener;
-+
- lldb_utility::PseudoTerminal m_editline_pty;
- FILE *m_editline_slave_fh;
- lldb::SBInputReader m_editline_reader;
-@@ -158,6 +165,8 @@
- bool m_waiting_for_command;
- bool m_done;
-
-+ bool iochannel_thread_exited;
-+
- void
- ResetOptionValues ();
-
-@@ -173,6 +182,24 @@
- void
- CloseIOChannelFile ();
-
-+ void
-+ InitializePseudoTerminal();
-+
-+ void
-+ DestroyPseudoTerminal();
-+
-+ void
-+ InitializeEditLineIO();
-+
-+ void
-+ ProcessEvent(lldb::SBEvent& event);
-+
-+ void
-+ AttachToProcess();
-+
-+ void
-+ HandleCommandLine(lldb::SBCommandReturnObject& result);
-+
- static size_t
- EditLineInputReaderCallback (void *baton,
- lldb::SBInputReader *reader,
-Index: tools/driver/DriverEvents.cpp
-===================================================================
---- tools/driver/DriverEvents.cpp (revision 0)
-+++ tools/driver/DriverEvents.cpp (working copy)
-@@ -0,0 +1,413 @@
-+//===-- Driver.cpp ----------------------------------------------*- C++ -*-===//
-+//
-+// The LLVM Compiler Infrastructure
-+//
-+// This file is distributed under the University of Illinois Open Source
-+// License. See LICENSE.TXT for details.
-+//
-+//===----------------------------------------------------------------------===//
-+
-+#include "Driver.h"
-+
-+#ifdef _WIN32
-+#include "lldb/lldb-windows.h"
-+#endif
-+
-+#include <string.h>
-+#include <stdlib.h>
-+#include <limits.h>
-+#include <fcntl.h>
-+
-+#include "IOChannel.h"
-+#include "lldb/API/SBBreakpoint.h"
-+#include "lldb/API/SBCommandInterpreter.h"
-+#include "lldb/API/SBCommandReturnObject.h"
-+#include "lldb/API/SBCommunication.h"
-+#include "lldb/API/SBDebugger.h"
-+#include "lldb/API/SBEvent.h"
-+#include "lldb/API/SBHostOS.h"
-+#include "lldb/API/SBListener.h"
-+#include "lldb/API/SBStream.h"
-+#include "lldb/API/SBTarget.h"
-+#include "lldb/API/SBThread.h"
-+#include "lldb/API/SBProcess.h"
-+
-+using namespace lldb;
-+
-+// This function handles events that were broadcast by the process.
-+void
-+Driver::HandleBreakpointEvent (const SBEvent &event)
-+{
-+ const uint32_t event_type = SBBreakpoint::GetBreakpointEventTypeFromEvent (event);
-+
-+ if (event_type & eBreakpointEventTypeAdded
-+ || event_type & eBreakpointEventTypeRemoved
-+ || event_type & eBreakpointEventTypeEnabled
-+ || event_type & eBreakpointEventTypeDisabled
-+ || event_type & eBreakpointEventTypeCommandChanged
-+ || event_type & eBreakpointEventTypeConditionChanged
-+ || event_type & eBreakpointEventTypeIgnoreChanged
-+ || event_type & eBreakpointEventTypeLocationsResolved)
-+ return;
-+ // Don't do anything about these events, since the breakpoint commands already echo these actions.
-+
-+ if (event_type & eBreakpointEventTypeLocationsAdded)
-+ {
-+ uint32_t num_new_locations = SBBreakpoint::GetNumBreakpointLocationsFromEvent(event);
-+ if (num_new_locations > 0)
-+ {
-+ SBBreakpoint breakpoint = SBBreakpoint::GetBreakpointFromEvent(event);
-+
-+ char message[256];
-+ int message_len = ::snprintf (message, sizeof(message), "%d location%s added to breakpoint %d\n",
-+ num_new_locations,
-+ num_new_locations == 1 ? " " : "s ",
-+ breakpoint.GetID());
-+ m_io_channel_ap->OutWrite(message, message_len, ASYNC);
-+ }
-+ }
-+ else if (event_type & eBreakpointEventTypeLocationsRemoved)
-+ {
-+ // These locations just get disabled, not sure it is worth spamming folks about this on the command line.
-+ }
-+ else if (event_type & eBreakpointEventTypeLocationsResolved)
-+ {
-+ // This might be an interesting thing to note, but I'm going to leave it quiet for now, it just looked noisy.
-+ }
-+}
-+
-+// This function handles events that were broadcast by the process.
-+void
-+Driver::HandleProcessEvent (const SBEvent &event)
-+{
-+ using namespace lldb;
-+ const uint32_t event_type = event.GetType();
-+
-+ if (event_type & SBProcess::eBroadcastBitSTDOUT)
-+ {
-+ // The process has stdout available, get it and write it out to the
-+ // appropriate place.
-+ GetProcessSTDOUT ();
-+ }
-+ else if (event_type & SBProcess::eBroadcastBitSTDERR)
-+ {
-+ // The process has stderr available, get it and write it out to the
-+ // appropriate place.
-+ GetProcessSTDERR ();
-+ }
-+ else if (event_type & SBProcess::eBroadcastBitStateChanged)
-+ {
-+ // Drain all stout and stderr so we don't see any output come after
-+ // we print our prompts
-+ GetProcessSTDOUT ();
-+ GetProcessSTDERR ();
-+ // Something changed in the process; get the event and report the process's current status and location to
-+ // the user.
-+ StateType event_state = SBProcess::GetStateFromEvent (event);
-+ if (event_state == eStateInvalid)
-+ return;
-+
-+ SBProcess process (SBProcess::GetProcessFromEvent (event));
-+ assert (process.IsValid());
-+
-+ switch (event_state)
-+ {
-+ case eStateInvalid:
-+ case eStateUnloaded:
-+ case eStateConnected:
-+ case eStateAttaching:
-+ case eStateLaunching:
-+ case eStateStepping:
-+ case eStateDetached:
-+ {
-+ char message[1024];
-+ int message_len = ::snprintf (message, sizeof(message), "Process %llu %s\n", process.GetProcessID(),
-+ m_debugger.StateAsCString (event_state));
-+ m_io_channel_ap->OutWrite(message, message_len, ASYNC);
-+ }
-+ break;
-+
-+ case eStateRunning:
-+ // Don't be chatty when we run...
-+ break;
-+
-+ case eStateExited:
-+ {
-+ SBCommandReturnObject result;
-+ m_debugger.GetCommandInterpreter().HandleCommand("process status", result, false);
-+ m_io_channel_ap->ErrWrite (result.GetError(), result.GetErrorSize(), ASYNC);
-+ m_io_channel_ap->OutWrite (result.GetOutput(), result.GetOutputSize(), ASYNC);
-+ }
-+ break;
-+
-+ case eStateStopped:
-+ case eStateCrashed:
-+ case eStateSuspended:
-+ // Make sure the program hasn't been auto-restarted:
-+ if (SBProcess::GetRestartedFromEvent (event))
-+ {
-+ // FIXME: Do we want to report this, or would that just be annoyingly chatty?
-+ char message[1024];
-+ int message_len = ::snprintf (message, sizeof(message), "Process %llu stopped and was programmatically restarted.\n",
-+ process.GetProcessID());
-+ m_io_channel_ap->OutWrite(message, message_len, ASYNC);
-+ }
-+ else
-+ {
-+ if (GetDebugger().GetSelectedTarget() == process.GetTarget())
-+ {
-+ SBCommandReturnObject result;
-+ UpdateSelectedThread ();
-+ m_debugger.GetCommandInterpreter().HandleCommand("process status", result, false);
-+ m_io_channel_ap->ErrWrite (result.GetError(), result.GetErrorSize(), ASYNC);
-+ m_io_channel_ap->OutWrite (result.GetOutput(), result.GetOutputSize(), ASYNC);
-+ }
-+ else
-+ {
-+ SBStream out_stream;
-+ uint32_t target_idx = GetDebugger().GetIndexOfTarget(process.GetTarget());
-+ if (target_idx != UINT32_MAX)
-+ out_stream.Printf ("Target %d: (", target_idx);
-+ else
-+ out_stream.Printf ("Target <unknown index>: (");
-+ process.GetTarget().GetDescription (out_stream, eDescriptionLevelBrief);
-+ out_stream.Printf (") stopped.\n");
-+ m_io_channel_ap->OutWrite (out_stream.GetData(), out_stream.GetSize(), ASYNC);
-+ }
-+ }
-+ break;
-+ }
-+ }
-+}
-+
-+// This function handles events broadcast by the IOChannel (HasInput, UserInterrupt, or ThreadShouldExit).
-+
-+bool
-+Driver::HandleIOEvent (const SBEvent &event)
-+{
-+ bool quit = false;
-+
-+ const uint32_t event_type = event.GetType();
-+
-+ if (event_type & IOChannel::eBroadcastBitHasUserInput)
-+ {
-+ // We got some input (i.e. a command string) from the user; pass it off to the command interpreter for
-+ // handling.
-+
-+ const char *command_string = SBEvent::GetCStringFromEvent(event);
-+ if (command_string == NULL)
-+ command_string = "";
-+ SBCommandReturnObject result;
-+
-+ // We don't want the result to bypass the OutWrite function in IOChannel, as this can result in odd
-+ // output orderings and problems with the prompt.
-+ m_debugger.GetCommandInterpreter().HandleCommand (command_string, result, true);
-+
-+ if (result.GetOutputSize() > 0)
-+ m_io_channel_ap->OutWrite (result.GetOutput(), result.GetOutputSize(), NO_ASYNC);
-+
-+ if (result.GetErrorSize() > 0)
-+ m_io_channel_ap->OutWrite (result.GetError(), result.GetErrorSize(), NO_ASYNC);
-+
-+ // We are done getting and running our command, we can now clear the
-+ // m_waiting_for_command so we can get another one.
-+ m_waiting_for_command = false;
-+
-+ // If our editline input reader is active, it means another input reader
-+ // got pushed onto the input reader and caused us to become deactivated.
-+ // When the input reader above us gets popped, we will get re-activated
-+ // and our prompt will refresh in our callback
-+ if (m_editline_reader.IsActive())
-+ {
-+ ReadyForCommand ();
-+ }
-+ }
-+ else if (event_type & IOChannel::eBroadcastBitUserInterrupt)
-+ {
-+ // This is here to handle control-c interrupts from the user. It has not yet really been implemented.
-+ // TO BE DONE: PROPERLY HANDLE CONTROL-C FROM USER
-+ //m_io_channel_ap->CancelInput();
-+ // Anything else? Send Interrupt to process?
-+ }
-+ else if ((event_type & IOChannel::eBroadcastBitThreadShouldExit) ||
-+ (event_type & IOChannel::eBroadcastBitThreadDidExit))
-+ {
-+ // If the IOChannel thread is trying to go away, then it is definitely
-+ // time to end the debugging session.
-+ quit = true;
-+ }
-+
-+ return quit;
-+}
-+
-+void
-+Driver::MasterThreadBytesReceived (void *baton, const void *src, size_t src_len)
-+{
-+ Driver *driver = (Driver*)baton;
-+ driver->GetFromMaster ((const char *)src, src_len);
-+}
-+
-+void
-+Driver::GetFromMaster (const char *src, size_t src_len)
-+{
-+ // Echo the characters back to the Debugger's stdout, that way if you
-+ // type characters while a command is running, you'll see what you've typed.
-+ FILE *out_fh = m_debugger.GetOutputFileHandle();
-+ if (out_fh)
-+ ::fwrite (src, 1, src_len, out_fh);
-+}
-+
-+size_t
-+Driver::EditLineInputReaderCallback
-+(
-+ void *baton,
-+ SBInputReader *reader,
-+ InputReaderAction notification,
-+ const char *bytes,
-+ size_t bytes_len
-+)
-+{
-+ Driver *driver = (Driver *)baton;
-+
-+ switch (notification)
-+ {
-+ case eInputReaderActivate:
-+ break;
-+
-+ case eInputReaderReactivate:
-+ driver->ReadyForCommand();
-+ break;
-+
-+ case eInputReaderDeactivate:
-+ break;
-+
-+ case eInputReaderAsynchronousOutputWritten:
-+ if (driver->m_io_channel_ap.get() != NULL)
-+ driver->m_io_channel_ap->RefreshPrompt();
-+ break;
-+
-+ case eInputReaderInterrupt:
-+ if (driver->m_io_channel_ap.get() != NULL)
-+ {
-+ SBProcess process = driver->GetDebugger().GetSelectedTarget().GetProcess();
-+ if (!driver->m_io_channel_ap->EditLineHasCharacters()
-+ && process.IsValid() && process.GetState() == lldb::eStateRunning)
-+ {
-+ process.Stop();
-+ }
-+ else
-+ {
-+ driver->m_io_channel_ap->OutWrite ("^C\n", 3, NO_ASYNC);
-+ // I wish I could erase the entire input line, but there's no public API for that.
-+ driver->m_io_channel_ap->EraseCharsBeforeCursor();
-+ driver->m_io_channel_ap->RefreshPrompt();
-+ }
-+ }
-+ break;
-+
-+ case eInputReaderEndOfFile:
-+ if (driver->m_io_channel_ap.get() != NULL)
-+ {
-+ driver->m_io_channel_ap->OutWrite ("^D\n", 3, NO_ASYNC);
-+ driver->m_io_channel_ap->RefreshPrompt ();
-+ }
-+#ifdef __unix__
-+ write (driver->m_editline_pty.GetMasterFileDescriptor(), "quit\n", 5);
-+#endif
-+ break;
-+
-+ case eInputReaderGotToken:
-+#ifdef __unix__
-+ write (driver->m_editline_pty.GetMasterFileDescriptor(), bytes, bytes_len);
-+#endif
-+ break;
-+
-+ case eInputReaderDone:
-+ break;
-+ }
-+ return bytes_len;
-+}
-+
-+void
-+Driver::AttachToProcess()
-+{
-+ std::string command_str("process attach ");
-+ if (m_option_data.m_process_pid != LLDB_INVALID_PROCESS_ID)
-+ {
-+ command_str.append("-p ");
-+ char pid_buffer[32];
-+ ::snprintf (pid_buffer, sizeof(pid_buffer), "%llu", m_option_data.m_process_pid);
-+ command_str.append(pid_buffer);
-+ }
-+ else
-+ {
-+ command_str.append("-n \"");
-+ command_str.append(m_option_data.m_process_name);
-+ command_str.push_back('\"');
-+ if (m_option_data.m_wait_for)
-+ command_str.append(" -w");
-+ }
-+
-+ if (m_debugger.GetOutputFileHandle())
-+ ::fprintf (m_debugger.GetOutputFileHandle(),
-+ "Attaching to process with:\n %s\n",
-+ command_str.c_str());
-+
-+ // Force the attach to be synchronous:
-+ bool orig_async = m_debugger.GetAsync();
-+ m_debugger.SetAsync(true);
-+ m_debugger.HandleCommand(command_str.c_str());
-+ m_debugger.SetAsync(orig_async);
-+}
-+
-+void
-+Driver::ProcessEvent(SBEvent& event)
-+{
-+ if (!event.GetBroadcaster().IsValid())
-+ return;
-+
-+ uint32_t event_type = event.GetType();
-+ if (event.BroadcasterMatchesRef (*m_io_channel_ap))
-+ {
-+ if ((event_type & IOChannel::eBroadcastBitThreadShouldExit) ||
-+ (event_type & IOChannel::eBroadcastBitThreadDidExit))
-+ {
-+ SetIsDone();
-+ if (event_type & IOChannel::eBroadcastBitThreadDidExit)
-+ iochannel_thread_exited = true;
-+ }
-+ else
-+ {
-+ if (HandleIOEvent (event))
-+ SetIsDone();
-+ }
-+ }
-+ else if (SBProcess::EventIsProcessEvent (event))
-+ {
-+ HandleProcessEvent (event);
-+ }
-+ else if (SBBreakpoint::EventIsBreakpointEvent (event))
-+ {
-+ HandleBreakpointEvent (event);
-+ }
-+ else if (event.BroadcasterMatchesRef (m_interpreter->GetBroadcaster()))
-+ {
-+ // TODO: deprecate the eBroadcastBitQuitCommandReceived event
-+ // now that we have SBCommandInterpreter::SetCommandOverrideCallback()
-+ // that can take over a command
-+ if (event_type & SBCommandInterpreter::eBroadcastBitQuitCommandReceived)
-+ {
-+ SetIsDone();
-+ }
-+ else if (event_type & SBCommandInterpreter::eBroadcastBitAsynchronousErrorData)
-+ {
-+ const char *data = SBEvent::GetCStringFromEvent (event);
-+ m_io_channel_ap->ErrWrite (data, strlen(data), ASYNC);
-+ }
-+ else if (event_type & SBCommandInterpreter::eBroadcastBitAsynchronousOutputData)
-+ {
-+ const char *data = SBEvent::GetCStringFromEvent (event);
-+ m_io_channel_ap->OutWrite (data, strlen(data), ASYNC);
-+ }
-+ }
-+}
-Index: tools/driver/DriverOptions.cpp
-===================================================================
---- tools/driver/DriverOptions.cpp (revision 0)
-+++ tools/driver/DriverOptions.cpp (working copy)
-@@ -0,0 +1,664 @@
-+//===-- Driver.cpp ----------------------------------------------*- C++ -*-===//
-+//
-+// The LLVM Compiler Infrastructure
-+//
-+// This file is distributed under the University of Illinois Open Source
-+// License. See LICENSE.TXT for details.
-+//
-+//===----------------------------------------------------------------------===//
-+
-+#include "Driver.h"
-+
-+#ifdef _WIN32
-+#include "lldb/lldb-windows.h"
-+#endif
-+
-+#include "lldb/API/SBHostOS.h"
-+using namespace lldb;
-+
-+typedef struct
-+{
-+ uint32_t usage_mask; // Used to mark options that can be used together. If (1 << n & usage_mask) != 0
-+ // then this option belongs to option set n.
-+ bool required; // This option is required (in the current usage level)
-+ const char * long_option; // Full name for this option.
-+ char short_option; // Single character for this option.
-+ int option_has_arg; // no_argument, required_argument or optional_argument
-+ uint32_t completion_type; // Cookie the option class can use to do define the argument completion.
-+ lldb::CommandArgumentType argument_type; // Type of argument this option takes
-+ const char * usage_text; // Full text explaining what this options does and what (if any) argument to
-+ // pass it.
-+} OptionDefinition;
-+
-+#define LLDB_3_TO_5 LLDB_OPT_SET_3|LLDB_OPT_SET_4|LLDB_OPT_SET_5
-+#define LLDB_4_TO_5 LLDB_OPT_SET_4|LLDB_OPT_SET_5
-+
-+static OptionDefinition g_options[] =
-+{
-+ { LLDB_OPT_SET_1, true , "help" , 'h', no_argument , NULL, eArgTypeNone,
-+ "Prints out the usage information for the LLDB debugger." },
-+ { LLDB_OPT_SET_2, true , "version" , 'v', no_argument , NULL, eArgTypeNone,
-+ "Prints out the current version number of the LLDB debugger." },
-+ { LLDB_OPT_SET_3, true , "arch" , 'a', required_argument, NULL, eArgTypeArchitecture,
-+ "Tells the debugger to use the specified architecture when starting and running the program. <architecture> must "
-+ "be one of the architectures for which the program was compiled." },
-+ { LLDB_OPT_SET_3, true , "file" , 'f', required_argument, NULL, eArgTypeFilename,
-+ "Tells the debugger to use the file <filename> as the program to be debugged." },
-+ { LLDB_OPT_SET_4, true , "attach-name" , 'n', required_argument, NULL, eArgTypeProcessName,
-+ "Tells the debugger to attach to a process with the given name." },
-+ { LLDB_OPT_SET_4, true , "wait-for" , 'w', no_argument , NULL, eArgTypeNone,
-+ "Tells the debugger to wait for a process with the given pid or name to launch before attaching." },
-+ { LLDB_OPT_SET_5, true , "attach-pid" , 'p', required_argument, NULL, eArgTypePid,
-+ "Tells the debugger to attach to a process with the given pid." },
-+ { LLDB_3_TO_5, false, "script-language", 'l', required_argument, NULL, eArgTypeScriptLang,
-+ "Tells the debugger to use the specified scripting language for user-defined scripts, rather than the default. "
-+ "Valid scripting languages that can be specified include Python, Perl, Ruby and Tcl. Currently only the Python "
-+ "extensions have been implemented." },
-+ { LLDB_3_TO_5, false, "debug" , 'd', no_argument , NULL, eArgTypeNone,
-+ "Tells the debugger to print out extra information for debugging itself." },
-+ { LLDB_3_TO_5, false, "source" , 's', required_argument, NULL, eArgTypeFilename,
-+ "Tells the debugger to read in and execute the file <file>, which should contain lldb commands." },
-+ { LLDB_3_TO_5, false, "editor" , 'e', no_argument , NULL, eArgTypeNone,
-+ "Tells the debugger to open source files using the host's \"external editor\" mechanism." },
-+ { LLDB_3_TO_5, false, "no-lldbinit" , 'x', no_argument , NULL, eArgTypeNone,
-+ "Do not automatically parse any '.lldbinit' files." },
-+ { 0, false, NULL , 0 , 0 , NULL, eArgTypeNone, NULL }
-+};
-+
-+static const uint32_t last_option_set_with_args = 2;
-+
-+// This function takes INDENT, which tells how many spaces to output at the front
-+// of each line; TEXT, which is the text that is to be output. It outputs the
-+// text, on multiple lines if necessary, to RESULT, with INDENT spaces at the
-+// front of each line. It breaks lines on spaces, tabs or newlines, shortening
-+// the line if necessary to not break in the middle of a word. It assumes that
-+// each output line should contain a maximum of OUTPUT_MAX_COLUMNS characters.
-+
-+void
-+OutputFormattedUsageText (FILE *out, int indent, const char *text, int output_max_columns)
-+{
-+ int len = strlen (text);
-+ std::string text_string (text);
-+
-+ // Force indentation to be reasonable.
-+ if (indent >= output_max_columns)
-+ indent = 0;
-+
-+ // Will it all fit on one line?
-+
-+ if (len + indent < output_max_columns)
-+ // Output as a single line
-+ fprintf (out, "%*s%s\n", indent, "", text);
-+ else
-+ {
-+ // We need to break it up into multiple lines.
-+ int text_width = output_max_columns - indent - 1;
-+ int start = 0;
-+ int end = start;
-+ int final_end = len;
-+ int sub_len;
-+
-+ while (end < final_end)
-+ {
-+ // Dont start the 'text' on a space, since we're already outputting the indentation.
-+ while ((start < final_end) && (text[start] == ' '))
-+ start++;
-+
-+ end = start + text_width;
-+ if (end > final_end)
-+ end = final_end;
-+ else
-+ {
-+ // If we're not at the end of the text, make sure we break the line on white space.
-+ while (end > start
-+ && text[end] != ' ' && text[end] != '\t' && text[end] != '\n')
-+ end--;
-+ }
-+ sub_len = end - start;
-+ std::string substring = text_string.substr (start, sub_len);
-+ fprintf (out, "%*s%s\n", indent, "", substring.c_str());
-+ start = end + 1;
-+ }
-+ }
-+}
-+
-+void
-+ShowUsage (FILE *out, OptionDefinition *option_table, Driver::OptionData data)
-+{
-+ uint32_t screen_width = 80;
-+ uint32_t indent_level = 0;
-+ const char *name = "lldb";
-+
-+ fprintf (out, "\nUsage:\n\n");
-+
-+ indent_level += 2;
-+
-+
-+ // First, show each usage level set of options, e.g. <cmd> [options-for-level-0]
-+ // <cmd> [options-for-level-1]
-+ // etc.
-+
-+ uint32_t num_options;
-+ uint32_t num_option_sets = 0;
-+
-+ for (num_options = 0; option_table[num_options].long_option != NULL; ++num_options)
-+ {
-+ uint32_t this_usage_mask = option_table[num_options].usage_mask;
-+ if (this_usage_mask == LLDB_OPT_SET_ALL)
-+ {
-+ if (num_option_sets == 0)
-+ num_option_sets = 1;
-+ }
-+ else
-+ {
-+ for (uint32_t j = 0; j < LLDB_MAX_NUM_OPTION_SETS; j++)
-+ {
-+ if (this_usage_mask & 1 << j)
-+ {
-+ if (num_option_sets <= j)
-+ num_option_sets = j + 1;
-+ }
-+ }
-+ }
-+ }
-+
-+ for (uint32_t opt_set = 0; opt_set < num_option_sets; opt_set++)
-+ {
-+ uint32_t opt_set_mask;
-+
-+ opt_set_mask = 1 << opt_set;
-+
-+ if (opt_set > 0)
-+ fprintf (out, "\n");
-+ fprintf (out, "%*s%s", indent_level, "", name);
-+ bool is_help_line = false;
-+
-+ for (uint32_t i = 0; i < num_options; ++i)
-+ {
-+ if (option_table[i].usage_mask & opt_set_mask)
-+ {
-+ CommandArgumentType arg_type = option_table[i].argument_type;
-+ const char *arg_name = SBCommandInterpreter::GetArgumentTypeAsCString (arg_type);
-+ // This is a bit of a hack, but there's no way to say certain options don't have arguments yet...
-+ // so we do it by hand here.
-+ if (option_table[i].short_option == 'h')
-+ is_help_line = true;
-+
-+ if (option_table[i].required)
-+ {
-+ if (option_table[i].option_has_arg == required_argument)
-+ fprintf (out, " -%c <%s>", option_table[i].short_option, arg_name);
-+ else if (option_table[i].option_has_arg == optional_argument)
-+ fprintf (out, " -%c [<%s>]", option_table[i].short_option, arg_name);
-+ else
-+ fprintf (out, " -%c", option_table[i].short_option);
-+ }
-+ else
-+ {
-+ if (option_table[i].option_has_arg == required_argument)
-+ fprintf (out, " [-%c <%s>]", option_table[i].short_option, arg_name);
-+ else if (option_table[i].option_has_arg == optional_argument)
-+ fprintf (out, " [-%c [<%s>]]", option_table[i].short_option, arg_name);
-+ else
-+ fprintf (out, " [-%c]", option_table[i].short_option);
-+ }
-+ }
-+ }
-+ if (!is_help_line && (opt_set <= last_option_set_with_args))
-+ fprintf (out, " [[--] <PROGRAM-ARG-1> [<PROGRAM_ARG-2> ...]]");
-+ }
-+
-+ fprintf (out, "\n\n");
-+
-+ // Now print out all the detailed information about the various options: long form, short form and help text:
-+ // -- long_name <argument>
-+ // - short <argument>
-+ // help text
-+
-+ // This variable is used to keep track of which options' info we've printed out, because some options can be in
-+ // more than one usage level, but we only want to print the long form of its information once.
-+
-+ Driver::OptionData::OptionSet options_seen;
-+ Driver::OptionData::OptionSet::iterator pos;
-+
-+ indent_level += 5;
-+
-+ for (uint32_t i = 0; i < num_options; ++i)
-+ {
-+ // Only print this option if we haven't already seen it.
-+ pos = options_seen.find (option_table[i].short_option);
-+ if (pos == options_seen.end())
-+ {
-+ CommandArgumentType arg_type = option_table[i].argument_type;
-+ const char *arg_name = SBCommandInterpreter::GetArgumentTypeAsCString (arg_type);
-+
-+ options_seen.insert (option_table[i].short_option);
-+ fprintf (out, "%*s-%c ", indent_level, "", option_table[i].short_option);
-+ if (arg_type != eArgTypeNone)
-+ fprintf (out, "<%s>", arg_name);
-+ fprintf (out, "\n");
-+ fprintf (out, "%*s--%s ", indent_level, "", option_table[i].long_option);
-+ if (arg_type != eArgTypeNone)
-+ fprintf (out, "<%s>", arg_name);
-+ fprintf (out, "\n");
-+ indent_level += 5;
-+ OutputFormattedUsageText (out, indent_level, option_table[i].usage_text, screen_width);
-+ indent_level -= 5;
-+ fprintf (out, "\n");
-+ }
-+ }
-+
-+ indent_level -= 5;
-+
-+ fprintf (out, "\n%*s(If you don't provide -f then the first argument will be the file to be debugged"
-+ "\n%*s so '%s -- <filename> [<ARG1> [<ARG2>]]' also works."
-+ "\n%*s Remember to end the options with \"--\" if any of your arguments have a \"-\" in them.)\n\n",
-+ indent_level, "",
-+ indent_level, "",
-+ name,
-+ indent_level, "");
-+}
-+
-+void
-+BuildGetOptTable (OptionDefinition *expanded_option_table, std::vector<struct option> &getopt_table,
-+ uint32_t num_options)
-+{
-+ if (num_options == 0)
-+ return;
-+
-+ uint32_t i;
-+ uint32_t j;
-+ std::bitset<256> option_seen;
-+
-+ getopt_table.resize (num_options + 1);
-+
-+ for (i = 0, j = 0; i < num_options; ++i)
-+ {
-+ char short_opt = expanded_option_table[i].short_option;
-+
-+ if (option_seen.test(short_opt) == false)
-+ {
-+ getopt_table[j].name = expanded_option_table[i].long_option;
-+ getopt_table[j].has_arg = expanded_option_table[i].option_has_arg;
-+ getopt_table[j].flag = NULL;
-+ getopt_table[j].val = expanded_option_table[i].short_option;
-+ option_seen.set(short_opt);
-+ ++j;
-+ }
-+ }
-+
-+ getopt_table[j].name = NULL;
-+ getopt_table[j].has_arg = 0;
-+ getopt_table[j].flag = NULL;
-+ getopt_table[j].val = 0;
-+
-+}
-+
-+Driver::OptionData::OptionData () :
-+ m_args(),
-+ m_script_lang (lldb::eScriptLanguageDefault),
-+ m_crash_log (),
-+ m_source_command_files (),
-+ m_debug_mode (false),
-+ m_print_version (false),
-+ m_print_help (false),
-+ m_wait_for(false),
-+ m_process_name(),
-+ m_process_pid(LLDB_INVALID_PROCESS_ID),
-+ m_use_external_editor(false),
-+ m_seen_options()
-+{
-+}
-+
-+Driver::OptionData::~OptionData ()
-+{
-+}
-+
-+void
-+Driver::OptionData::Clear ()
-+{
-+ m_args.clear ();
-+ m_script_lang = lldb::eScriptLanguageDefault;
-+ m_source_command_files.clear ();
-+ m_debug_mode = false;
-+ m_print_help = false;
-+ m_print_version = false;
-+ m_use_external_editor = false;
-+ m_wait_for = false;
-+ m_process_name.erase();
-+ m_process_pid = LLDB_INVALID_PROCESS_ID;
-+}
-+
-+void
-+Driver::ResetOptionValues ()
-+{
-+ m_option_data.Clear ();
-+}
-+
-+// Check the arguments that were passed to this program to make sure they are valid and to get their
-+// argument values (if any). Return a boolean value indicating whether or not to start up the full
-+// debugger (i.e. the Command Interpreter) or not. Return FALSE if the arguments were invalid OR
-+// if the user only wanted help or version information.
-+
-+SBError
-+Driver::ParseArgs (int argc, const char *argv[], FILE *out_fh, bool &exit)
-+{
-+ ResetOptionValues ();
-+
-+ SBCommandReturnObject result;
-+
-+ SBError error;
-+ std::string option_string;
-+ struct option *long_options = NULL;
-+ std::vector<struct option> long_options_vector;
-+ uint32_t num_options;
-+
-+ for (num_options = 0; g_options[num_options].long_option != NULL; ++num_options)
-+ /* Do Nothing. */;
-+
-+ if (num_options == 0)
-+ {
-+ if (argc > 1)
-+ error.SetErrorStringWithFormat ("invalid number of options");
-+ return error;
-+ }
-+
-+ BuildGetOptTable (g_options, long_options_vector, num_options);
-+
-+ if (long_options_vector.empty())
-+ long_options = NULL;
-+ else
-+ long_options = &long_options_vector.front();
-+
-+ if (long_options == NULL)
-+ {
-+ error.SetErrorStringWithFormat ("invalid long options");
-+ return error;
-+ }
-+
-+ // Build the option_string argument for call to getopt_long.
-+
-+ for (int i = 0; long_options[i].name != NULL; ++i)
-+ {
-+ if (long_options[i].flag == NULL)
-+ {
-+ option_string.push_back ((char) long_options[i].val);
-+ switch (long_options[i].has_arg)
-+ {
-+ default:
-+ case no_argument:
-+ break;
-+ case required_argument:
-+ option_string.push_back (':');
-+ break;
-+ case optional_argument:
-+ option_string.append ("::");
-+ break;
-+ }
-+ }
-+ }
-+
-+ // This is kind of a pain, but since we make the debugger in the Driver's constructor, we can't
-+ // know at that point whether we should read in init files yet. So we don't read them in in the
-+ // Driver constructor, then set the flags back to "read them in" here, and then if we see the
-+ // "-n" flag, we'll turn it off again. Finally we have to read them in by hand later in the
-+ // main loop.
-+
-+ m_debugger.SkipLLDBInitFiles (false);
-+ m_debugger.SkipAppInitFiles (false);
-+
-+ // Prepare for & make calls to getopt_long.
-+#if __GLIBC__
-+ optind = 0;
-+#else
-+ optreset = 1;
-+ optind = 1;
-+#endif
-+ int val;
-+ while (1)
-+ {
-+ int long_options_index = -1;
-+ val = ::getopt_long (argc, const_cast<char **>(argv), option_string.c_str(), long_options, &long_options_index);
-+
-+ if (val == -1)
-+ break;
-+ else if (val == '?')
-+ {
-+ m_option_data.m_print_help = true;
-+ error.SetErrorStringWithFormat ("unknown or ambiguous option");
-+ break;
-+ }
-+ else if (val == 0)
-+ continue;
-+ else
-+ {
-+ m_option_data.m_seen_options.insert ((char) val);
-+ if (long_options_index == -1)
-+ {
-+ for (int i = 0;
-+ long_options[i].name || long_options[i].has_arg || long_options[i].flag || long_options[i].val;
-+ ++i)
-+ {
-+ if (long_options[i].val == val)
-+ {
-+ long_options_index = i;
-+ break;
-+ }
-+ }
-+ }
-+
-+ if (long_options_index >= 0)
-+ {
-+ const char short_option = (char) g_options[long_options_index].short_option;
-+
-+ switch (short_option)
-+ {
-+ case 'h':
-+ m_option_data.m_print_help = true;
-+ break;
-+
-+ case 'v':
-+ m_option_data.m_print_version = true;
-+ break;
-+
-+ case 'c':
-+ m_option_data.m_crash_log = optarg;
-+ break;
-+
-+ case 'e':
-+ m_option_data.m_use_external_editor = true;
-+ break;
-+
-+ case 'x':
-+ m_debugger.SkipLLDBInitFiles (true);
-+ m_debugger.SkipAppInitFiles (true);
-+ break;
-+
-+ case 'f':
-+ {
-+ SBFileSpec file(optarg);
-+ if (file.Exists())
-+ {
-+ m_option_data.m_args.push_back (optarg);
-+ }
-+ else if (file.ResolveExecutableLocation())
-+ {
-+ char path[PATH_MAX];
-+ file.GetPath (path, sizeof(path));
-+ m_option_data.m_args.push_back (path);
-+ }
-+ else
-+ error.SetErrorStringWithFormat("file specified in --file (-f) option doesn't exist: '%s'", optarg);
-+ }
-+ break;
-+
-+ case 'a':
-+ if (!m_debugger.SetDefaultArchitecture (optarg))
-+ error.SetErrorStringWithFormat("invalid architecture in the -a or --arch option: '%s'", optarg);
-+ break;
-+
-+ case 'l':
-+ m_option_data.m_script_lang = m_debugger.GetScriptingLanguage (optarg);
-+ break;
-+
-+ case 'd':
-+ m_option_data.m_debug_mode = true;
-+ break;
-+
-+ case 'n':
-+ m_option_data.m_process_name = optarg;
-+ break;
-+
-+ case 'w':
-+ m_option_data.m_wait_for = true;
-+ break;
-+
-+ case 'p':
-+ {
-+ char *remainder;
-+ m_option_data.m_process_pid = strtol (optarg, &remainder, 0);
-+ if (remainder == optarg || *remainder != '\0')
-+ error.SetErrorStringWithFormat ("Could not convert process PID: \"%s\" into a pid.",
-+ optarg);
-+ }
-+ break;
-+ case 's':
-+ {
-+ SBFileSpec file(optarg);
-+ if (file.Exists())
-+ m_option_data.m_source_command_files.push_back (optarg);
-+ else if (file.ResolveExecutableLocation())
-+ {
-+ char final_path[PATH_MAX];
-+ file.GetPath (final_path, sizeof(final_path));
-+ std::string path_str (final_path);
-+ m_option_data.m_source_command_files.push_back (path_str);
-+ }
-+ else
-+ error.SetErrorStringWithFormat("file specified in --source (-s) option doesn't exist: '%s'", optarg);
-+ }
-+ break;
-+
-+ default:
-+ m_option_data.m_print_help = true;
-+ error.SetErrorStringWithFormat ("unrecognized option %c", short_option);
-+ break;
-+ }
-+ }
-+ else
-+ {
-+ error.SetErrorStringWithFormat ("invalid option with value %i", val);
-+ }
-+ if (error.Fail())
-+ {
-+ return error;
-+ }
-+ }
-+ }
-+
-+ if (error.Fail() || m_option_data.m_print_help)
-+ {
-+ ShowUsage (out_fh, g_options, m_option_data);
-+ exit = true;
-+ }
-+ else if (m_option_data.m_print_version)
-+ {
-+ ::fprintf (out_fh, "%s\n", m_debugger.GetVersionString());
-+ exit = true;
-+ }
-+ else if (! m_option_data.m_crash_log.empty())
-+ {
-+ // Handle crash log stuff here.
-+ }
-+ else if (m_option_data.m_process_name.empty() && m_option_data.m_process_pid == LLDB_INVALID_PROCESS_ID)
-+ {
-+ // Any arguments that are left over after option parsing are for
-+ // the program. If a file was specified with -f then the filename
-+ // is already in the m_option_data.m_args array, and any remaining args
-+ // are arguments for the inferior program. If no file was specified with
-+ // -f, then what is left is the program name followed by any arguments.
-+
-+ // Skip any options we consumed with getopt_long
-+ argc -= optind;
-+ argv += optind;
-+
-+ if (argc > 0)
-+ {
-+ for (int arg_idx=0; arg_idx<argc; ++arg_idx)
-+ {
-+ const char *arg = argv[arg_idx];
-+ if (arg)
-+ m_option_data.m_args.push_back (arg);
-+ }
-+ }
-+
-+ }
-+ else
-+ {
-+ // Skip any options we consumed with getopt_long
-+ argc -= optind;
-+ //argv += optind; // Commented out to keep static analyzer happy
-+
-+ if (argc > 0)
-+ ::fprintf (out_fh, "Warning: program arguments are ignored when attaching.\n");
-+ }
-+
-+ return error;
-+}
-+
-+void
-+Driver::HandleCommandLine(SBCommandReturnObject& result)
-+{
-+ // Now we handle options we got from the command line
-+ char command_string[PATH_MAX * 2];
-+ const size_t num_source_command_files = GetNumSourceCommandFiles();
-+ if (num_source_command_files > 0)
-+ {
-+ for (size_t i=0; i < num_source_command_files; ++i)
-+ {
-+ const char *command_file = GetSourceCommandFileAtIndex(i);
-+ ::snprintf (command_string, sizeof(command_string), "command source '%s'", command_file);
-+ m_debugger.GetCommandInterpreter().HandleCommand (command_string, result, false);
-+ if (GetDebugMode())
-+ {
-+ result.PutError (m_debugger.GetErrorFileHandle());
-+ result.PutOutput (m_debugger.GetOutputFileHandle());
-+ }
-+ }
-+ }
-+
-+ const size_t num_args = m_option_data.m_args.size();
-+
-+ if (!num_args)
-+ return;
-+
-+ char arch_name[64];
-+ if (m_debugger.GetDefaultArchitecture (arch_name, sizeof (arch_name)))
-+ ::snprintf (command_string,
-+ sizeof (command_string),
-+ "target create --arch=%s \"%s\"",
-+ arch_name,
-+ m_option_data.m_args[0].c_str());
-+ else
-+ ::snprintf (command_string,
-+ sizeof(command_string),
-+ "target create \"%s\"",
-+ m_option_data.m_args[0].c_str());
-+
-+ m_debugger.HandleCommand (command_string);
-+
-+ if (num_args > 1)
-+ {
-+ m_debugger.HandleCommand ("settings clear target.run-args");
-+ char arg_cstr[1024];
-+ for (size_t arg_idx = 1; arg_idx < num_args; ++arg_idx)
-+ {
-+ ::snprintf (arg_cstr,
-+ sizeof(arg_cstr),
-+ "settings append target.run-args \"%s\"",
-+ m_option_data.m_args[arg_idx].c_str());
-+ m_debugger.HandleCommand (arg_cstr);
-+ }
-+ }
-+}
-+
-Index: tools/driver/DriverPosix.cpp
-===================================================================
---- tools/driver/DriverPosix.cpp (revision 0)
-+++ tools/driver/DriverPosix.cpp (working copy)
-@@ -0,0 +1,257 @@
-+//===-- Driver.cpp ----------------------------------------------*- C++ -*-===//
-+//
-+// The LLVM Compiler Infrastructure
-+//
-+// This file is distributed under the University of Illinois Open Source
-+// License. See LICENSE.TXT for details.
-+//
-+//===----------------------------------------------------------------------===//
-+
-+#include "Driver.h"
-+
-+#ifdef _POSIX_SOURCE
-+#include <getopt.h>
-+#include <libgen.h>
-+#include <sys/ioctl.h>
-+#include <termios.h>
-+#include <unistd.h>
-+#endif
-+
-+#ifdef __unix__
-+static void reset_stdin_termios ();
-+static bool g_old_stdin_termios_is_valid = false;
-+static struct termios g_old_stdin_termios;
-+#endif
-+
-+// In the Driver::MainLoop, we change the terminal settings. This function is
-+// added as an atexit handler to make sure we clean them up.
-+static void
-+reset_stdin_termios ()
-+{
-+#ifdef _POSIX_SOURCE
-+ if (g_old_stdin_termios_is_valid)
-+ {
-+ g_old_stdin_termios_is_valid = false;
-+ ::tcsetattr (STDIN_FILENO, TCSANOW, &g_old_stdin_termios);
-+ }
-+#endif
-+}
-+
-+void
-+Driver::InitializePseudoTerminal()
-+{
-+#ifndef _WIN32
-+ char error_str[1024];
-+ if (m_editline_pty.OpenFirstAvailableMaster(O_RDWR|O_NOCTTY, error_str, sizeof(error_str)) == false)
-+ {
-+ ::fprintf (stderr, "error: failed to open driver pseudo terminal : %s", error_str);
-+ exit(1);
-+ }
-+ else
-+ {
-+ const char *driver_slave_name = m_editline_pty.GetSlaveName (error_str, sizeof(error_str));
-+ if (driver_slave_name == NULL)
-+ {
-+ ::fprintf (stderr, "error: failed to get slave name for driver pseudo terminal : %s", error_str);
-+ exit(2);
-+ }
-+ else
-+ {
-+ m_editline_slave_fh = ::fopen (driver_slave_name, "r+");
-+ if (m_editline_slave_fh == NULL)
-+ {
-+ SBError error;
-+ error.SetErrorToErrno();
-+ ::fprintf (stderr, "error: failed to get open slave for driver pseudo terminal : %s",
-+ error.GetCString());
-+ exit(3);
-+ }
-+
-+ ::setbuf (m_editline_slave_fh, NULL);
-+ }
-+ }
-+
-+ lldb_utility::PseudoTerminal editline_output_pty;
-+ FILE *editline_output_slave_fh = NULL;
-+
-+ if (editline_output_pty.OpenFirstAvailableMaster (O_RDWR|O_NOCTTY, error_str, sizeof (error_str)) == false)
-+ {
-+ ::fprintf (stderr, "error: failed to open output pseudo terminal : %s", error_str);
-+ exit(1);
-+ }
-+ else
-+ {
-+ const char *output_slave_name = editline_output_pty.GetSlaveName (error_str, sizeof(error_str));
-+ if (output_slave_name == NULL)
-+ {
-+ ::fprintf (stderr, "error: failed to get slave name for output pseudo terminal : %s", error_str);
-+ exit(2);
-+ }
-+ else
-+ {
-+ editline_output_slave_fh = ::fopen (output_slave_name, "r+");
-+ if (editline_output_slave_fh == NULL)
-+ {
-+ SBError error;
-+ error.SetErrorToErrno();
-+ ::fprintf (stderr, "error: failed to get open slave for output pseudo terminal : %s",
-+ error.GetCString());
-+ exit(3);
-+ }
-+ ::setbuf (editline_output_slave_fh, NULL);
-+ }
-+ }
-+
-+ struct termios stdin_termios;
-+
-+ if (::tcgetattr(STDIN_FILENO, &g_old_stdin_termios) == 0)
-+ {
-+ g_old_stdin_termios_is_valid = true;
-+ atexit (reset_stdin_termios);
-+ }
-+
-+ ::setbuf (stdin, NULL);
-+ ::setbuf (stdout, NULL);
-+#endif
-+}
-+
-+void
-+Driver::InitializeEditLineIO()
-+{
-+#ifndef _WIN32
-+ // You have to drain anything that comes to the master side of the PTY. master_out_comm is
-+ // for that purpose. The reason you need to do this is a curious reason... editline will echo
-+ // characters to the PTY when it gets characters while el_gets is not running, and then when
-+ // you call el_gets (or el_getc) it will try to reset the terminal back to raw mode which blocks
-+ // if there are unconsumed characters in the out buffer.
-+ // However, you don't need to do anything with the characters, since editline will dump these
-+ // unconsumed characters after printing the prompt again in el_gets.
-+
-+ SBCommunication master_out_comm("driver.editline");
-+ master_out_comm.SetCloseOnEOF (false);
-+ master_out_comm.AdoptFileDesriptor(m_editline_pty.GetMasterFileDescriptor(), false);
-+ master_out_comm.SetReadThreadBytesReceivedCallback(Driver::MasterThreadBytesReceived, this);
-+
-+ if (master_out_comm.ReadThreadStart () == false)
-+ {
-+ ::fprintf (stderr, "error: failed to start master out read thread");
-+ exit(5);
-+ }
-+
-+ m_io_channel_ap.reset (new IOChannel(m_editline_slave_fh, editline_output_slave_fh, stdout, stderr, this));
-+
-+ SBCommunication out_comm_2("driver.editline_output");
-+ out_comm_2.SetCloseOnEOF (false);
-+ out_comm_2.AdoptFileDesriptor (editline_output_pty.GetMasterFileDescriptor(), false);
-+ out_comm_2.SetReadThreadBytesReceivedCallback (IOChannel::LibeditOutputBytesReceived, m_io_channel_ap.get());
-+
-+ if (out_comm_2.ReadThreadStart () == false)
-+ {
-+ ::fprintf (stderr, "error: failed to start libedit output read thread");
-+ exit (5);
-+ }
-+
-+ struct winsize window_size;
-+ if (isatty (STDIN_FILENO)
-+ && ::ioctl (STDIN_FILENO, TIOCGWINSZ, &window_size) == 0)
-+ {
-+ if (window_size.ws_col > 0)
-+ m_debugger.SetTerminalWidth (window_size.ws_col);
-+ }
-+
-+ // Since input can be redirected by the debugger, we must insert our editline
-+ // input reader in the queue so we know when our reader should be active
-+ // and so we can receive bytes only when we are supposed to.
-+ SBError err (m_editline_reader.Initialize (m_debugger,
-+ Driver::EditLineInputReaderCallback, // callback
-+ this, // baton
-+ eInputReaderGranularityByte, // token_size
-+ NULL, // end token - NULL means never done
-+ NULL, // prompt - taken care of elsewhere
-+ false)); // echo input - don't need Debugger
-+ // to do this, we handle it elsewhere
-+
-+ if (err.Fail())
-+ {
-+ ::fprintf (stderr, "error: %s", err.GetCString());
-+ exit (6);
-+ }
-+
-+ m_debugger.PushInputReader (m_editline_reader);
-+#endif
-+}
-+
-+void
-+Driver::DestroyPseudoTerminal()
-+{
-+#ifndef _WIN32
-+ editline_output_pty.CloseMasterFileDescriptor();
-+ master_out_comm.Disconnect();
-+ out_comm_2.Disconnect();
-+ reset_stdin_termios();
-+ fclose (stdin);
-+#endif
-+}
-+
-+void
-+Driver::CloseIOChannelFile ()
-+{
-+#ifdef __unix__
-+ // Write an End of File sequence to the file descriptor to ensure any
-+ // read functions can exit.
-+ char eof_str[] = "\x04";
-+ ::write (m_editline_pty.GetMasterFileDescriptor(), eof_str, strlen(eof_str));
-+
-+ m_editline_pty.CloseMasterFileDescriptor();
-+
-+ if (m_editline_slave_fh)
-+ {
-+ ::fclose (m_editline_slave_fh);
-+ m_editline_slave_fh = NULL;
-+ }
-+#endif
-+}
-+
-+#ifdef __unix__
-+void
-+sigwinch_handler (int signo)
-+{
-+ struct winsize window_size;
-+ if (isatty (STDIN_FILENO)
-+ && ::ioctl (STDIN_FILENO, TIOCGWINSZ, &window_size) == 0)
-+ {
-+ if ((window_size.ws_col > 0) && g_driver != NULL)
-+ {
-+ g_driver->GetDebugger().SetTerminalWidth (window_size.ws_col);
-+ }
-+ }
-+}
-+
-+void
-+sigint_handler (int signo)
-+{
-+ static bool g_interrupt_sent = false;
-+ if (g_driver)
-+ {
-+ if (!g_interrupt_sent)
-+ {
-+ g_interrupt_sent = true;
-+ g_driver->GetDebugger().DispatchInputInterrupt();
-+ g_interrupt_sent = false;
-+ return;
-+ }
-+ }
-+
-+ exit (signo);
-+}
-+#endif
-+
-+void
-+SetupPosixSignals()
-+{
-+#ifdef __unix__
-+ signal (SIGPIPE, SIG_IGN);
-+ signal (SIGWINCH, sigwinch_handler);
-+ signal (SIGINT, sigint_handler);
-+#endif
-+}
-Index: tools/driver/IOChannel.cpp
-===================================================================
---- tools/driver/IOChannel.cpp (revision 163322)
-+++ tools/driver/IOChannel.cpp (working copy)
-@@ -23,6 +23,17 @@
- #include <string.h>
- #include <limits.h>
-
-+#ifdef _WIN32
-+enum
-+{
-+ CC_ERROR,
-+ CC_REDISPLAY,
-+ CC_REFRESH_BEEP,
-+};
-+#endif
-+
-+
-+
- using namespace lldb;
-
- typedef std::map<EditLine *, std::string> PromptMap;
-@@ -53,6 +64,7 @@
- bool
- IOChannel::EditLineHasCharacters ()
- {
-+#ifdef __unix__
- const LineInfo *line_info = el_line(m_edit_line);
- if (line_info)
- {
-@@ -65,26 +77,31 @@
- return line_info->cursor != line_info->buffer;
- }
- else
-- return false;
-+#endif
-+ return false;
- }
-
-
- void
- IOChannel::EraseCharsBeforeCursor ()
- {
-+#ifdef __unix__
- const LineInfo *line_info = el_line(m_edit_line);
- el_deletestr(m_edit_line, line_info->cursor - line_info->buffer);
-+#endif
- }
-
- unsigned char
- IOChannel::ElCompletionFn (EditLine *e, int ch)
- {
-+#ifdef __unix__
- IOChannel *io_channel;
- if (el_get(e, EL_CLIENTDATA, &io_channel) == 0)
- {
- return io_channel->HandleCompletion (e, ch);
- }
- else
-+#endif
- {
- return CC_ERROR;
- }
-@@ -94,7 +111,7 @@
- IOChannel::HandleCompletion (EditLine *e, int ch)
- {
- assert (e == m_edit_line);
--
-+#ifdef __unix__
- const LineInfo *line_info = el_line(m_edit_line);
- SBStringList completions;
- int page_size = 40;
-@@ -180,7 +197,8 @@
- if (num_completions == 0)
- return CC_REFRESH_BEEP;
- else
-- return CC_REDISPLAY;
-+#endif
-+ return CC_REDISPLAY;
- }
-
- IOChannel::IOChannel
-@@ -201,14 +219,17 @@
- m_err_file (err),
- m_command_queue (),
- m_completion_key ("\t"),
-+#ifdef __unix__
- m_edit_line (::el_init (SBHostOS::GetProgramFileSpec().GetFilename(), editline_in, editline_out, editline_out)),
- m_history (history_init()),
-+#endif
- m_history_event(),
- m_getting_command (false),
- m_expecting_prompt (false),
- m_prompt_str (),
- m_refresh_request_pending (false)
- {
-+#ifdef __unix__
- assert (m_edit_line);
- ::el_set (m_edit_line, EL_PROMPT, el_prompt);
- ::el_set (m_edit_line, EL_EDITOR, "emacs");
-@@ -247,7 +268,7 @@
- assert (error == 0);
-
- // Initialize time that ::el_gets was last called.
--
-+#endif
- m_enter_elgets_time.tv_sec = 0;
- m_enter_elgets_time.tv_usec = 0;
- }
-@@ -257,6 +278,7 @@
- // Save history
- HistorySaveLoad (true);
-
-+#ifdef __unix__
- if (m_history != NULL)
- {
- ::history_end (m_history);
-@@ -270,6 +292,7 @@
- }
-
- ::pthread_mutex_destroy (&m_output_mutex);
-+#endif
- }
-
- void
-@@ -277,6 +300,7 @@
- {
- if (m_history != NULL)
- {
-+#ifdef __unix__
- char history_path[PATH_MAX];
- ::snprintf (history_path, sizeof(history_path), "~/.%s-history", SBHostOS::GetProgramFileSpec().GetFilename());
- if ((size_t)SBFileSpec::ResolvePath (history_path, history_path, sizeof(history_path)) < sizeof(history_path) - 1)
-@@ -287,7 +311,8 @@
- else
- ::history (m_history, &m_history_event, H_LOAD, path_ptr);
- }
-- }
-+#endif
-+ }
- }
-
- void
-@@ -326,7 +351,8 @@
- bool
- IOChannel::LibeditGetInput (std::string &new_line)
- {
-- if (m_edit_line != NULL)
-+ #ifdef __unix__
-+ if (m_edit_line != NULL)
- {
- int line_len = 0;
-
-@@ -360,13 +386,15 @@
- return true;
- }
- }
-+#endif
- // Return false to indicate failure. This can happen when the file handle
- // is closed (EOF).
- new_line.clear();
- return false;
-+
- }
-
--void *
-+thread_result_t
- IOChannel::IOReadThread (void *ptr)
- {
- IOChannel *myself = static_cast<IOChannel *> (ptr);
-@@ -520,8 +548,9 @@
-
- if (m_refresh_request_pending)
- return;
--
-+#ifdef __unix__
- ::el_set (m_edit_line, EL_REFRESH);
-+#endif
- m_refresh_request_pending = true;
- }
-
-@@ -611,16 +640,14 @@
- m_getting_command = new_value;
- }
-
--IOLocker::IOLocker (pthread_mutex_t &mutex) :
-+IOLocker::IOLocker (llvm::sys::Mutex &mutex) :
- m_mutex_ptr (&mutex)
- {
-- if (m_mutex_ptr)
-- ::pthread_mutex_lock (m_mutex_ptr);
-+ mutex.acquire();
-
- }
-
- IOLocker::~IOLocker ()
- {
-- if (m_mutex_ptr)
-- ::pthread_mutex_unlock (m_mutex_ptr);
-+ m_mutex_ptr->release();
- }
-Index: tools/driver/IOChannel.h
-===================================================================
---- tools/driver/IOChannel.h (revision 163322)
-+++ tools/driver/IOChannel.h (working copy)
-@@ -16,11 +16,28 @@
- #if defined(__FreeBSD__)
- #include <readline/readline.h>
- #else
-+#ifndef _WIN32
- #include <editline/readline.h>
- #endif
-+#endif
-+
-+#ifndef _WIN32
- #include <histedit.h>
-+#else
-+struct EditLine;
-+struct History;
-+struct HistEvent {};
-+#include <Winsock2.h>
-+#endif
-+
-+#include "llvm/Support/Mutex.h"
-+
-+#ifdef _POSIX_SOURCE
- #include <pthread.h>
- #include <sys/time.h>
-+#else
-+#include <ctime>
-+#endif
-
- #include "Driver.h"
-
-@@ -54,7 +71,7 @@
- bool
- Stop ();
-
-- static void *
-+ static lldb::thread_result_t
- IOReadThread (void *);
-
- void
-@@ -115,7 +132,7 @@
-
- private:
-
-- pthread_mutex_t m_output_mutex;
-+ llvm::sys::Mutex m_output_mutex;
- struct timeval m_enter_elgets_time;
-
- Driver *m_driver;
-@@ -131,7 +148,7 @@
- HistEvent m_history_event;
- bool m_getting_command;
- bool m_expecting_prompt;
-- std::string m_prompt_str; // for accumlating the prompt as it gets written out by editline
-+ std::string m_prompt_str; // for accumlating the prompt as it gets written out by editline
- bool m_refresh_request_pending;
-
- void
-@@ -145,13 +162,13 @@
- {
- public:
-
-- IOLocker (pthread_mutex_t &mutex);
-+ IOLocker (llvm::sys::Mutex &mutex);
-
- ~IOLocker ();
-
- protected:
-
-- pthread_mutex_t *m_mutex_ptr;
-+ llvm::sys::Mutex *m_mutex_ptr;
-
- private:
-
Removed: lldb/branches/windows/lldb-changes-that-make-it-work-better-on-windows-2.patch
URL: http://llvm.org/viewvc/llvm-project/lldb/branches/windows/lldb-changes-that-make-it-work-better-on-windows-2.patch?rev=167219&view=auto
==============================================================================
--- lldb/branches/windows/lldb-changes-that-make-it-work-better-on-windows-2.patch (original)
+++ lldb/branches/windows/lldb-changes-that-make-it-work-better-on-windows-2.patch (removed)
@@ -1,795 +0,0 @@
-Index: include/lldb/Core/DataBufferMemoryMap.h
-===================================================================
---- include/lldb/Core/DataBufferMemoryMap.h (revision 163819)
-+++ include/lldb/Core/DataBufferMemoryMap.h (working copy)
-@@ -149,6 +149,9 @@
- size_t m_mmap_size; ///< The actual number of bytes that were mapped when \c mmap() was called
- uint8_t *m_data; ///< The data the user requested somewhere within the memory mapped data.
- size_t m_size; ///< The size of the data the user got when data was requested
-+#ifdef _WIN32
-+ HANDLE m_mmap_handle;
-+#endif
-
- private:
- DISALLOW_COPY_AND_ASSIGN (DataBufferMemoryMap);
-Index: include/lldb/Core/RegularExpression.h
-===================================================================
---- include/lldb/Core/RegularExpression.h (revision 163819)
-+++ include/lldb/Core/RegularExpression.h (working copy)
-@@ -178,7 +178,7 @@
- // Member variables
- //------------------------------------------------------------------
- mutable std::string m_re; ///< A copy of the original regular expression text
-- mutable llvm::Regex m_regex; ///< The compiled regular expression
-+ mutable llvm::Regex* m_regex; ///< The compiled regular expression
- int m_compile_flags; ///< Stores the flags from the last compile.
-
- typedef llvm::SmallVectorImpl<llvm::StringRef> MatchVectorImpl;
-Index: source/Core/ConnectionFileDescriptor.cpp
-===================================================================
---- source/Core/ConnectionFileDescriptor.cpp (revision 163819)
-+++ source/Core/ConnectionFileDescriptor.cpp (working copy)
-@@ -413,6 +413,18 @@
- {
- #ifdef _POSIX_SOURCE
- bytes_read = ::read (m_fd_recv, dst, dst_len);
-+#else
-+ switch (m_fd_send_type) {
-+ case eFDTypeSocket:
-+ case eFDTypeSocketUDP:
-+ bytes_read = ::recv(m_fd_recv, (char*) dst, dst_len, 0);
-+ break;
-+ default:
-+ bytes_read = -1;
-+ break;
-+
-+ }
-+
- #endif
- } while (bytes_read < 0 && errno == EINTR);
- }
-@@ -515,20 +527,20 @@
-
- ssize_t bytes_sent = 0;
-
--#ifdef _POSIX_SOURCE
- switch (m_fd_send_type)
- {
-+#ifdef _POSIX_SOURCE
- case eFDTypeFile: // Other FD requireing read/write
- do
- {
- bytes_sent = ::write (m_fd_send, src, src_len);
- } while (bytes_sent < 0 && errno == EINTR);
- break;
--
-+#endif
- case eFDTypeSocket: // Socket requiring send/recv
- do
- {
-- bytes_sent = ::send (m_fd_send, src, src_len, 0);
-+ bytes_sent = ::send (m_fd_send, (char*)src, src_len, 0);
- } while (bytes_sent < 0 && errno == EINTR);
- break;
-
-@@ -537,15 +549,16 @@
- do
- {
- bytes_sent = ::sendto (m_fd_send,
-- src,
-+ (char*)src,
- src_len,
- 0,
- m_udp_send_sockaddr,
- m_udp_send_sockaddr.GetLength());
- } while (bytes_sent < 0 && errno == EINTR);
- break;
-+ default:
-+ bytes_sent = 0;
- }
--#endif
-
- if (bytes_sent < 0)
- error.SetErrorToErrno ();
-Index: source/Core/DataBufferMemoryMap.cpp
-===================================================================
---- source/Core/DataBufferMemoryMap.cpp (revision 163819)
-+++ source/Core/DataBufferMemoryMap.cpp (working copy)
-@@ -16,6 +16,9 @@
- #ifdef _POSIX_SOURCE
- #include <sys/mman.h>
- #endif
-+#ifdef _WIN32
-+#include <io.h>
-+#endif
-
- #include "lldb/Core/DataBufferMemoryMap.h"
- #include "lldb/Core/Error.h"
-@@ -83,7 +86,13 @@
- {
- if (m_mmap_addr != NULL)
- {
--#ifdef _POSIX_SOURCE
-+#ifdef _WIN32
-+ if (m_mmap_addr)
-+ UnmapViewOfFile(m_mmap_addr);
-+ if (m_mmap_handle)
-+ CloseHandle(m_mmap_handle);
-+ m_mmap_handle = NULL;
-+#else
- ::munmap((void *)m_mmap_addr, m_mmap_size);
- #endif
- m_mmap_addr = NULL;
-@@ -157,7 +166,43 @@
- struct stat stat;
- if (::fstat(fd, &stat) == 0)
- {
--#ifdef _POSIX_SOURCE
-+#ifdef _WIN32
-+ if ((stat.st_mode & _S_IFREG) && (stat.st_size > offset))
-+ {
-+ const size_t max_bytes_available = stat.st_size - offset;
-+ if (length == SIZE_MAX)
-+ {
-+ length = max_bytes_available;
-+ }
-+ else if (length > max_bytes_available)
-+ {
-+ // Cap the length if too much data was requested
-+ length = max_bytes_available;
-+ }
-+
-+ if (length > 0)
-+ {
-+ HANDLE handle = (HANDLE)_get_osfhandle(fd);
-+ m_mmap_handle = CreateFileMapping(handle, NULL, writeable ? PAGE_READWRITE : PAGE_READONLY, 0, 0, NULL);
-+ if (m_mmap_handle <= 0)
-+ {
-+ Error error;
-+ error.SetErrorToErrno ();
-+ return 0;
-+ }
-+ LPVOID data = MapViewOfFile(m_mmap_handle, writeable ? FILE_MAP_WRITE : FILE_MAP_READ, 0, offset, length);
-+ m_mmap_addr = (uint8_t *)data;
-+ m_data = m_mmap_addr;
-+ if (!m_data) {
-+ Error error;
-+ error.SetErrorToErrno ();
-+ return 0;
-+ }
-+ m_mmap_size = length;
-+ m_size = length;
-+ }
-+ }
-+#else
- if (S_ISREG(stat.st_mode) && (stat.st_size > offset))
- {
- const size_t max_bytes_available = stat.st_size - offset;
-Index: source/Core/Debugger.cpp
-===================================================================
---- source/Core/Debugger.cpp (revision 163819)
-+++ source/Core/Debugger.cpp (working copy)
-@@ -86,6 +86,7 @@
- { eScriptLanguageNone, "none", "Disable scripting languages."},
- { eScriptLanguagePython, "python", "Select python as the default scripting language."},
- { eScriptLanguageDefault, "default", "Select the lldb default as the default scripting language."},
-+ { 0, NULL, NULL }
- };
-
- #define MODULE_WITH_FUNC "{ ${module.file.basename}{`${function.name-with-args}${function.pc-offset}}}"
-Index: source/Core/Error.cpp
-===================================================================
---- source/Core/Error.cpp (revision 163819)
-+++ source/Core/Error.cpp (working copy)
-@@ -277,7 +277,11 @@
- void
- Error::SetErrorToErrno()
- {
-+#ifdef _WIN32
-+ m_code = GetLastError();
-+#else
- m_code = errno;
-+#endif
- m_type = eErrorTypePOSIX;
- m_string.clear();
- }
-Index: source/Core/RegularExpression.cpp
-===================================================================
---- source/Core/RegularExpression.cpp (revision 163819)
-+++ source/Core/RegularExpression.cpp (working copy)
-@@ -16,9 +16,9 @@
- // Default constructor
- //----------------------------------------------------------------------
- RegularExpression::RegularExpression() :
-- m_re(),
-- m_regex(llvm::StringRef())
-+ m_re()
- {
-+ m_regex = NULL;
- }
-
- //----------------------------------------------------------------------
-@@ -26,9 +26,9 @@
- // resulting compiled regular expression into this object.
- //----------------------------------------------------------------------
- RegularExpression::RegularExpression(const char* re, int flags) :
-- m_re(),
-- m_regex(llvm::StringRef())
-+ m_re()
- {
-+ m_regex = NULL;
- Compile(re);
- }
-
-@@ -37,16 +37,19 @@
- // resulting compiled regular expression into this object.
- //----------------------------------------------------------------------
- RegularExpression::RegularExpression(const char* re) :
-- m_re(),
-- m_regex(llvm::StringRef())
-+ m_re()
- {
-+ m_regex = NULL;
- Compile(re);
- }
-
- RegularExpression::RegularExpression(const RegularExpression &rhs) :
-- m_regex(llvm::StringRef())
-+ m_re()
- {
-- Compile(rhs.GetText(), rhs.GetCompileFlags());
-+ m_regex = NULL;
-+ const char* data = rhs.GetText();
-+ if (data)
-+ Compile(data, rhs.GetCompileFlags());
- }
-
-
-@@ -67,7 +70,11 @@
- //----------------------------------------------------------------------
- RegularExpression::~RegularExpression()
- {
--
-+ if (m_regex)
-+ {
-+ delete m_regex;
-+ m_regex = NULL;
-+ }
- }
-
- //----------------------------------------------------------------------
-@@ -94,7 +101,9 @@
- Free();
- m_compile_flags = flags;
- m_re = re;
-- m_regex = llvm::Regex(llvm::StringRef(re));
-+ if (m_regex)
-+ delete m_regex;
-+ m_regex = new llvm::Regex(llvm::StringRef(re));
-
- return IsValid();
- }
-@@ -110,7 +119,9 @@
- bool
- RegularExpression::Execute(const char* s, size_t num_matches, int execute_flags) const
- {
-- return m_regex.match(llvm::StringRef(s), &m_matches);
-+ if (!m_regex)
-+ return false;
-+ return m_regex->match(llvm::StringRef(s), &m_matches);
- }
-
- bool
-@@ -133,7 +144,8 @@
- RegularExpression::IsValid () const
- {
- std::string err;
-- return m_regex.isValid(err);
-+ if (!m_regex) return false;
-+ return m_regex->isValid(err);
- }
-
- //----------------------------------------------------------------------
-@@ -155,7 +167,9 @@
- RegularExpression::Free()
- {
- m_re.clear();
-- m_regex = llvm::Regex(llvm::StringRef());
-+ if (m_regex)
-+ delete m_regex;
-+ m_regex = NULL;
- m_matches.clear();
- }
-
-@@ -163,7 +177,8 @@
- RegularExpression::GetErrorAsCString () const
- {
- std::string err;
-- m_regex.isValid(err);
-+ if (m_regex)
-+ m_regex->isValid(err);
- return err;
- }
-
-Index: source/Host/common/Host.cpp
-===================================================================
---- source/Host/common/Host.cpp (revision 163819)
-+++ source/Host/common/Host.cpp (working copy)
-@@ -593,7 +593,7 @@
-
- #ifdef _WIN32
- thread = ::_beginthreadex(0, 0, ThreadCreateTrampoline, info_ptr, 0, NULL);
-- int err = thread;
-+ int err = thread <= 0 ? GetLastError() : 0;
- #else
- int err = ::pthread_create (&thread, NULL, ThreadCreateTrampoline, info_ptr);
- #endif
-Index: source/Host/common/Mutex.cpp
-===================================================================
---- source/Host/common/Mutex.cpp (revision 163819)
-+++ source/Host/common/Mutex.cpp (working copy)
-@@ -324,7 +324,7 @@
- DEBUG_LOG ("[%4.4llx/%4.4llx] pthread_mutex_trylock (%p) => %i\n", Host::GetCurrentProcessID(), Host::GetCurrentThreadID(), &m_mutex, err);
- return err;
- #endif
-- return m_mutex.tryacquire();
-+ return 0 == m_mutex.tryacquire(); // try acquire returns <> 0 for success
- }
-
- //----------------------------------------------------------------------
-Index: source/lldb.cpp
-===================================================================
---- source/lldb.cpp (revision 163819)
-+++ source/lldb.cpp (working copy)
-@@ -39,6 +39,10 @@
- #ifndef LLDB_DISABLE_PYTHON
- #include "Plugins/OperatingSystem/Python/OperatingSystemPython.h"
- #endif
-+
-+#include "Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h"
-+#include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h"
-+
- #if defined (__APPLE__)
- #include "Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.h"
- #include "Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.h"
-@@ -48,14 +52,12 @@
- #include "Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h"
- #include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h"
- #include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h"
--#include "Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h"
--#include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h"
- #include "Plugins/Process/MacOSX-Kernel/ProcessKDP.h"
- #include "Plugins/Process/gdb-remote/ProcessGDBRemote.h"
-+#endif
- #include "Plugins/Platform/MacOSX/PlatformMacOSX.h"
- #include "Plugins/Platform/MacOSX/PlatformRemoteiOS.h"
- #include "Plugins/Platform/MacOSX/PlatformiOSSimulator.h"
--#endif
-
- #include "Plugins/Process/mach-core/ProcessMachCore.h"
-
-@@ -73,6 +75,7 @@
-
- #if defined(_WIN32) || defined(_WIN64)
- #include "Plugins/Platform/Windows/PlatformWindows.h"
-+#include "Plugins/Process/gdb-remote/ProcessGDBRemote.h"
- #endif
-
- #include "Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h"
-@@ -120,6 +123,8 @@
- OperatingSystemPython::Initialize();
- #endif
-
-+ ObjectContainerUniversalMachO::Initialize();
-+ ObjectFileMachO::Initialize();
- #if defined (__APPLE__)
- //----------------------------------------------------------------------
- // Apple/Darwin hosted plugins
-@@ -131,16 +136,14 @@
- ItaniumABILanguageRuntime::Initialize();
- AppleObjCRuntimeV2::Initialize();
- AppleObjCRuntimeV1::Initialize();
-- ObjectContainerUniversalMachO::Initialize();
-- ObjectFileMachO::Initialize();
- ProcessGDBRemote::Initialize();
- ProcessKDP::Initialize();
- ProcessMachCore::Initialize();
- SymbolVendorMacOSX::Initialize();
-+#endif
- PlatformRemoteiOS::Initialize();
- PlatformMacOSX::Initialize();
- PlatformiOSSimulator::Initialize();
--#endif
- #if defined (__linux__)
- //----------------------------------------------------------------------
- // Linux hosted plugins
-@@ -154,9 +157,10 @@
- //----------------------------------------------------------------------
- // Platform agnostic plugins
- //----------------------------------------------------------------------
--#ifndef _WIN32 // TODO: Enable this for Windows later
-+#ifdef _WIN32 // TODO: Enable this for Windows later
-+ ProcessGDBRemote::Initialize();
-+#endif
- PlatformRemoteGDBServer::Initialize ();
--#endif
-
- DynamicLoaderStatic::Initialize();
-
-Index: source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp
-===================================================================
---- source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp (revision 163819)
-+++ source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp (working copy)
-@@ -9,8 +9,6 @@
-
- #include "ObjectContainerBSDArchive.h"
-
--#include <ar.h>
--
- #include "lldb/Core/Stream.h"
- #include "lldb/Core/ArchSpec.h"
- #include "lldb/Core/Module.h"
-@@ -23,7 +21,25 @@
- using namespace lldb_private;
-
-
-+#ifdef _POSIX_SOURCE
-+#include <ar.h>
-+#else
-+// Defines from ar, missing on Windows
-+#define ARMAG "!<arch>\n"
-+#define SARMAG 8
-+#define ARFMAG "`\n"
-
-+typedef struct ar_hdr
-+ {
-+ char ar_name[16];
-+ char ar_date[12];
-+ char ar_uid[6], ar_gid[6];
-+ char ar_mode[8];
-+ char ar_size[10];
-+ char ar_fmag[2];
-+ } ar_hdr;
-+#endif
-+
- ObjectContainerBSDArchive::Object::Object() :
- ar_name(),
- ar_date(0),
-Index: source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
-===================================================================
---- source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp (revision 163819)
-+++ source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp (working copy)
-@@ -3530,7 +3530,7 @@
- DataExtractor data (m_data,
- thread_context_file_range->GetRangeBase(),
- thread_context_file_range->GetByteSize());
--
-+#if defined(__APPLE__)
- switch (m_header.cputype)
- {
- case llvm::MachO::CPUTypeARM:
-@@ -3545,6 +3545,9 @@
- reg_ctx_sp.reset (new RegisterContextDarwin_x86_64_Mach (thread, data));
- break;
- }
-+#else
-+ llvm_unreachable("Should only occur for host debugging");
-+#endif
- }
- return reg_ctx_sp;
- }
-Index: source/Plugins/Platform/CMakeLists.txt
-===================================================================
---- source/Plugins/Platform/CMakeLists.txt (revision 163822)
-+++ source/Plugins/Platform/CMakeLists.txt (working copy)
-@@ -1,5 +1,5 @@
- #add_subdirectory(FreeBSD)
- add_subdirectory(gdb-server)
- #add_subdirectory(Linux)
--#add_subdirectory(MacOSX)
-+add_subdirectory(MacOSX)
- add_subdirectory(Windows)
-Index: source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp
-===================================================================
---- source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp (revision 163819)
-+++ source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp (working copy)
-@@ -10,7 +10,9 @@
- #include "PlatformRemoteGDBServer.h"
-
- // C Includes
-+#ifdef _POSIX_SOURCE
- #include <sys/sysctl.h>
-+#endif
-
- // C++ Includes
- // Other libraries and framework includes
-@@ -27,6 +29,9 @@
- #include "lldb/Host/Host.h"
- #include "lldb/Target/Process.h"
- #include "lldb/Target/Target.h"
-+#ifdef _WIN32
-+#include <Winsock2.h>
-+#endif
-
- using namespace lldb;
- using namespace lldb_private;
-@@ -39,7 +44,7 @@
- if (g_initialized == false)
- {
- g_initialized = true;
-- PluginManager::RegisterPlugin (PlatformRemoteGDBServer::GetShortPluginNameStatic(),
-+ PluginManager::RegisterPlugin (PlatformRemoteGDBServer::GetShortPluginNameStatic(),
- PlatformRemoteGDBServer::GetDescriptionStatic(),
- PlatformRemoteGDBServer::CreateInstance);
- }
-Index: source/Plugins/Platform/MacOSX/CMakeLists.txt
-===================================================================
---- source/Plugins/Platform/MacOSX/CMakeLists.txt (revision 0)
-+++ source/Plugins/Platform/MacOSX/CMakeLists.txt (working copy)
-@@ -0,0 +1,8 @@
-+set(LLVM_NO_RTTI 1)
-+
-+add_lldb_library(lldbPluginPlatformMacOSX
-+ PlatformDarwin.cpp
-+ PlatformiOSSimulator.cpp
-+ PlatformMacOSX.cpp
-+ PlatformRemoteiOS.cpp
-+ )
-Index: source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp
-===================================================================
---- source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp (revision 163819)
-+++ source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp (working copy)
-@@ -10,7 +10,9 @@
- #include "PlatformMacOSX.h"
-
- // C Includes
-+#ifdef _POSIX_SOURCE
- #include <sys/sysctl.h>
-+#endif
-
- // C++ Includes
- // Other libraries and framework includes
-Index: source/Plugins/Platform/Windows/PlatformWindows.cpp
-===================================================================
---- source/Plugins/Platform/Windows/PlatformWindows.cpp (revision 163822)
-+++ source/Plugins/Platform/Windows/PlatformWindows.cpp (working copy)
-@@ -106,6 +106,8 @@
- if (g_initialize_count++ == 0)
- {
- #if defined (_WIN32)
-+ WSADATA dummy;
-+ WSAStartup(0x202, &dummy);
- // Force a host flag to true for the default platform object.
- PlatformSP default_platform_sp (new PlatformWindows(true));
- default_platform_sp->SetSystemArchitecture (Host::GetArchitecture());
-@@ -120,8 +122,12 @@
- void
- PlatformWindows::Terminate ()
- {
-- if (g_initialize_count > 0 && --g_initialize_count == 0)
-+ if (g_initialize_count > 0 && --g_initialize_count == 0) {
-+#ifdef _WIN32
-+ WSACleanup();
-+#endif
- PluginManager::UnregisterPlugin (PlatformWindows::CreateInstance);
-+ }
- }
-
- //------------------------------------------------------------------
-Index: source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
-===================================================================
---- source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp (revision 163819)
-+++ source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp (working copy)
-@@ -31,6 +31,10 @@
- using namespace lldb;
- using namespace lldb_private;
-
-+#ifndef _POSIX_SOURCE
-+#define SIGSTOP 17
-+#endif
-+
- //----------------------------------------------------------------------
- // GDBRemoteCommunicationClient constructor
- //----------------------------------------------------------------------
-Index: source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp
-===================================================================
---- source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp (revision 163819)
-+++ source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp (working copy)
-@@ -668,6 +668,10 @@
- bool
- GDBRemoteCommunicationServer::Handle_qLaunchGDBServer (StringExtractorGDBRemote &packet)
- {
-+#ifdef _WIN32
-+ return false;
-+ // No unix sockets on windows
-+#else
- // Spawn a local debugserver as a platform so we can then attach or launch
- // a process...
-
-@@ -731,6 +735,7 @@
- }
- }
- return SendErrorResponse (13);
-+#endif
- }
-
- bool
-Index: source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
-===================================================================
---- source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp (revision 163819)
-+++ source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp (working copy)
-@@ -9,12 +9,20 @@
-
- // C Includes
- #include <errno.h>
-+
-+#ifdef _POSIX_SOURCE
- #include <spawn.h>
-+#endif
- #include <stdlib.h>
-+#ifdef _POSIX_SOURCE
- #include <netinet/in.h>
- #include <sys/mman.h> // for mmap
- #include <sys/stat.h>
- #include <sys/types.h>
-+#endif
-+#ifndef _POSIX_SOURCE
-+#define SIGTRAP 5
-+#endif
- #include <time.h>
-
- // C++ Includes
-@@ -94,6 +102,11 @@
- #define HIGH_PORT (49151u)
- #endif
-
-+#ifdef _WIN32
-+#define usleep(usec) Sleep ((usec) / 1000)
-+#endif
-+
-+
- static inline uint16_t
- get_random_port ()
- {
-@@ -686,7 +699,7 @@
- if (retry_count >= max_retry_count)
- break;
-
-- usleep (100000);
-+ usleep (100000);
- }
- }
-
-@@ -721,7 +734,7 @@
- for (size_t idx = 0; idx < num_cmds; idx++)
- {
- StringExtractorGDBRemote response;
-- printf ("Sending command: \%s.\n", GetExtraStartupCommands().GetArgumentAtIndex(idx));
-+ printf ("Sending command: \\%s.\n", GetExtraStartupCommands().GetArgumentAtIndex(idx));
- m_gdb_comm.SendPacketAndWaitForResponse (GetExtraStartupCommands().GetArgumentAtIndex(idx), response, false);
- }
- return error;
-@@ -1721,7 +1734,11 @@
- // FIXME: These should be ConstStrings so we aren't doing strcmp'ing.
- if (platform_sp
- && platform_sp->GetName()
-+#if defined (__APPLE__)
- && strcmp (platform_sp->GetName(), PlatformRemoteiOS::GetShortPluginNameStatic()) == 0)
-+#else
-+ && false)
-+#endif
- {
- if (m_destroy_tried_resuming)
- {
-@@ -2553,7 +2570,11 @@
- {
- if (m_debugserver_pid != LLDB_INVALID_PROCESS_ID)
- {
-- ::kill (m_debugserver_pid, SIGINT);
-+#if _WIN32
-+ TerminateProcess ((HANDLE)m_debugserver_pid, 1);
-+#else
-+ ::kill (m_debugserver_pid, SIGINT);
-+#endif
- m_debugserver_pid = LLDB_INVALID_PROCESS_ID;
- }
- }
-@@ -2615,7 +2636,7 @@
- }
-
-
--void *
-+thread_result_t
- ProcessGDBRemote::AsyncThread (void *arg)
- {
- ProcessGDBRemote *process = (ProcessGDBRemote*) arg;
-Index: source/Plugins/Process/gdb-remote/ProcessGDBRemote.h
-===================================================================
---- source/Plugins/Process/gdb-remote/ProcessGDBRemote.h (revision 163819)
-+++ source/Plugins/Process/gdb-remote/ProcessGDBRemote.h (working copy)
-@@ -332,7 +332,7 @@
- void
- StopAsyncThread ();
-
-- static void *
-+ static lldb::thread_result_t
- AsyncThread (void *arg);
-
- static bool
-Index: source/Plugins/Process/Utility/DynamicRegisterInfo.cpp
-===================================================================
---- source/Plugins/Process/Utility/DynamicRegisterInfo.cpp (revision 163819)
-+++ source/Plugins/Process/Utility/DynamicRegisterInfo.cpp (working copy)
-@@ -6,6 +6,7 @@
- // License. See LICENSE.TXT for details.
- //
- //===----------------------------------------------------------------------===//
-+#ifndef LLDB_DISABLE_PYTHON
-
- #include "DynamicRegisterInfo.h"
-
-@@ -267,3 +268,4 @@
- m_set_reg_nums.clear();
- m_set_names.clear();
- }
-+#endif
-Index: source/Plugins/Process/Utility/InferiorCallPOSIX.cpp
-===================================================================
---- source/Plugins/Process/Utility/InferiorCallPOSIX.cpp (revision 163819)
-+++ source/Plugins/Process/Utility/InferiorCallPOSIX.cpp (working copy)
-@@ -17,7 +17,17 @@
- #include "lldb/Target/Target.h"
- #include "lldb/Target/ThreadPlanCallFunction.h"
-
-+#ifdef _POSIX_SOURCE
- #include <sys/mman.h>
-+#else
-+// define them
-+#define PROT_NONE 0
-+#define PROT_READ 1
-+#define PROT_WRITE 2
-+#define PROT_EXEC 4
-+#define MAP_PRIVATE 2
-+#define MAP_ANON 0x1000
-+#endif
-
- using namespace lldb;
- using namespace lldb_private;
-Index: source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.cpp
-===================================================================
---- source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.cpp (revision 163819)
-+++ source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.cpp (working copy)
-@@ -149,7 +149,7 @@
-
- // TOOD: need a better way to detect when "long double" types are
- // the same bytes size as "double"
--#if !defined(__arm__)
-+#if !defined(__arm__) && !defined(_MSC_VER)
- case sizeof (long double):
- if (sizeof (long double) == sizeof(uint32_t))
- {
-Index: source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp
-===================================================================
---- source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp (revision 163819)
-+++ source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp (working copy)
-@@ -13,7 +13,7 @@
- #include <libxml/tree.h>
- #include <string.h>
-
--#include <AvailabilityMacros.h>
-+//#include <AvailabilityMacros.h>
-
- #include "lldb/Core/Module.h"
- #include "lldb/Core/ModuleSpec.h"
-Index: tools/driver/CMakeLists.txt
-===================================================================
---- tools/driver/CMakeLists.txt (revision 163822)
-+++ tools/driver/CMakeLists.txt (working copy)
-@@ -29,6 +29,7 @@
- lldbPluginObjectFileMachO
- lldbPluginObjectContainerMachOArchive
- lldbPluginObjectContainerBSDArchive
-+ lldbPluginPlatformMacOSX
-
- # Windows
- lldbHostWindows
Removed: lldb/branches/windows/lldb-changes-that-make-it-work-better-on-windows.patch
URL: http://llvm.org/viewvc/llvm-project/lldb/branches/windows/lldb-changes-that-make-it-work-better-on-windows.patch?rev=167219&view=auto
==============================================================================
--- lldb/branches/windows/lldb-changes-that-make-it-work-better-on-windows.patch (original)
+++ lldb/branches/windows/lldb-changes-that-make-it-work-better-on-windows.patch (removed)
@@ -1,658 +0,0 @@
-Index: .
-===================================================================
---- . (revision 163819)
-+++ . (working copy)
-
-Property changes on: .
-___________________________________________________________________
-Added: svn:ignore
-## -0,0 +1 ##
-+build
-Index: include/lldb/Core/RegularExpression.h
-===================================================================
---- include/lldb/Core/RegularExpression.h (revision 163819)
-+++ include/lldb/Core/RegularExpression.h (working copy)
-@@ -71,7 +71,7 @@
- RegularExpression (const RegularExpression &rhs);
-
- const RegularExpression & operator=(const RegularExpression &rhs);
--
-+
- //------------------------------------------------------------------
- /// Compile a regular expression.
- ///
-@@ -178,7 +178,7 @@
- // Member variables
- //------------------------------------------------------------------
- mutable std::string m_re; ///< A copy of the original regular expression text
-- mutable llvm::Regex m_regex; ///< The compiled regular expression
-+ mutable llvm::Regex* m_regex; ///< The compiled regular expression
- int m_compile_flags; ///< Stores the flags from the last compile.
-
- typedef llvm::SmallVectorImpl<llvm::StringRef> MatchVectorImpl;
-Index: source/Core/ConnectionFileDescriptor.cpp
-===================================================================
---- source/Core/ConnectionFileDescriptor.cpp (revision 163819)
-+++ source/Core/ConnectionFileDescriptor.cpp (working copy)
-@@ -413,6 +413,18 @@
- {
- #ifdef _POSIX_SOURCE
- bytes_read = ::read (m_fd_recv, dst, dst_len);
-+#else
-+ switch (m_fd_send_type) {
-+ case eFDTypeSocket:
-+ case eFDTypeSocketUDP:
-+ bytes_read = ::recv(m_fd_recv, (char*) dst, dst_len, 0);
-+ break;
-+ default:
-+ bytes_read = -1;
-+ break;
-+
-+ }
-+
- #endif
- } while (bytes_read < 0 && errno == EINTR);
- }
-@@ -515,20 +527,24 @@
-
- ssize_t bytes_sent = 0;
-
--#ifdef _POSIX_SOURCE
- switch (m_fd_send_type)
- {
-+#ifdef _POSIX_SOURCE
- case eFDTypeFile: // Other FD requireing read/write
- do
- {
- bytes_sent = ::write (m_fd_send, src, src_len);
- } while (bytes_sent < 0 && errno == EINTR);
- break;
--
-+#endif
- case eFDTypeSocket: // Socket requiring send/recv
- do
- {
-+#ifdef _WIN32
-+ bytes_sent = ::send (m_fd_send, (char*)src, src_len, 0);
-+#else
- bytes_sent = ::send (m_fd_send, src, src_len, 0);
-+#endif
- } while (bytes_sent < 0 && errno == EINTR);
- break;
-
-@@ -536,16 +552,26 @@
- assert (m_udp_send_sockaddr.GetFamily() != 0);
- do
- {
-+#ifdef _WIN32
- bytes_sent = ::sendto (m_fd_send,
-+ (char*)src,
-+ src_len,
-+ 0,
-+ m_udp_send_sockaddr,
-+ m_udp_send_sockaddr.GetLength());
-+#else
-+ bytes_sent = ::sendto (m_fd_send,
- src,
- src_len,
- 0,
- m_udp_send_sockaddr,
- m_udp_send_sockaddr.GetLength());
-+#endif
- } while (bytes_sent < 0 && errno == EINTR);
- break;
-+ default:
-+ bytes_sent = 0;
- }
--#endif
-
- if (bytes_sent < 0)
- error.SetErrorToErrno ();
-Index: source/Core/Debugger.cpp
-===================================================================
---- source/Core/Debugger.cpp (revision 163819)
-+++ source/Core/Debugger.cpp (working copy)
-@@ -86,6 +86,7 @@
- { eScriptLanguageNone, "none", "Disable scripting languages."},
- { eScriptLanguagePython, "python", "Select python as the default scripting language."},
- { eScriptLanguageDefault, "default", "Select the lldb default as the default scripting language."},
-+ { 0, NULL, NULL }
- };
-
- #define MODULE_WITH_FUNC "{ ${module.file.basename}{`${function.name-with-args}${function.pc-offset}}}"
-Index: source/Core/Error.cpp
-===================================================================
---- source/Core/Error.cpp (revision 163819)
-+++ source/Core/Error.cpp (working copy)
-@@ -277,7 +277,11 @@
- void
- Error::SetErrorToErrno()
- {
-+#ifdef _WIN32
-+ m_code = GetLastError();
-+#else
- m_code = errno;
-+#endif
- m_type = eErrorTypePOSIX;
- m_string.clear();
- }
-Index: source/Core/RegularExpression.cpp
-===================================================================
---- source/Core/RegularExpression.cpp (revision 163819)
-+++ source/Core/RegularExpression.cpp (working copy)
-@@ -16,9 +16,9 @@
- // Default constructor
- //----------------------------------------------------------------------
- RegularExpression::RegularExpression() :
-- m_re(),
-- m_regex(llvm::StringRef())
-+ m_re()
- {
-+ m_regex = NULL;
- }
-
- //----------------------------------------------------------------------
-@@ -26,9 +26,9 @@
- // resulting compiled regular expression into this object.
- //----------------------------------------------------------------------
- RegularExpression::RegularExpression(const char* re, int flags) :
-- m_re(),
-- m_regex(llvm::StringRef())
-+ m_re()
- {
-+ m_regex = NULL;
- Compile(re);
- }
-
-@@ -37,16 +37,19 @@
- // resulting compiled regular expression into this object.
- //----------------------------------------------------------------------
- RegularExpression::RegularExpression(const char* re) :
-- m_re(),
-- m_regex(llvm::StringRef())
-+ m_re()
- {
-+ m_regex = NULL;
- Compile(re);
- }
-
- RegularExpression::RegularExpression(const RegularExpression &rhs) :
-- m_regex(llvm::StringRef())
-+ m_re()
- {
-- Compile(rhs.GetText(), rhs.GetCompileFlags());
-+ m_regex = NULL;
-+ const char* data = rhs.GetText();
-+ if (data)
-+ Compile(data, rhs.GetCompileFlags());
- }
-
-
-@@ -67,7 +70,11 @@
- //----------------------------------------------------------------------
- RegularExpression::~RegularExpression()
- {
--
-+ if (m_regex)
-+ {
-+ delete m_regex;
-+ m_regex = NULL;
-+ }
- }
-
- //----------------------------------------------------------------------
-@@ -94,7 +101,9 @@
- Free();
- m_compile_flags = flags;
- m_re = re;
-- m_regex = llvm::Regex(llvm::StringRef(re));
-+ if (m_regex)
-+ delete m_regex;
-+ m_regex = new llvm::Regex(llvm::StringRef(re));
-
- return IsValid();
- }
-@@ -110,7 +119,9 @@
- bool
- RegularExpression::Execute(const char* s, size_t num_matches, int execute_flags) const
- {
-- return m_regex.match(llvm::StringRef(s), &m_matches);
-+ if (!m_regex)
-+ return false;
-+ return m_regex->match(llvm::StringRef(s), &m_matches);
- }
-
- bool
-@@ -133,7 +144,8 @@
- RegularExpression::IsValid () const
- {
- std::string err;
-- return m_regex.isValid(err);
-+ if (!m_regex) return false;
-+ return m_regex->isValid(err);
- }
-
- //----------------------------------------------------------------------
-@@ -155,7 +167,9 @@
- RegularExpression::Free()
- {
- m_re.clear();
-- m_regex = llvm::Regex(llvm::StringRef());
-+ if (m_regex)
-+ delete m_regex;
-+ m_regex = NULL;
- m_matches.clear();
- }
-
-@@ -163,7 +177,8 @@
- RegularExpression::GetErrorAsCString () const
- {
- std::string err;
-- m_regex.isValid(err);
-+ if (m_regex)
-+ m_regex->isValid(err);
- return err;
- }
-
-Index: source/Host/common/Host.cpp
-===================================================================
---- source/Host/common/Host.cpp (revision 163819)
-+++ source/Host/common/Host.cpp (working copy)
-@@ -593,7 +593,7 @@
-
- #ifdef _WIN32
- thread = ::_beginthreadex(0, 0, ThreadCreateTrampoline, info_ptr, 0, NULL);
-- int err = thread;
-+ int err = thread <= 0 ? GetLastError() : 0;
- #else
- int err = ::pthread_create (&thread, NULL, ThreadCreateTrampoline, info_ptr);
- #endif
-Index: source/Host/common/Mutex.cpp
-===================================================================
---- source/Host/common/Mutex.cpp (revision 163819)
-+++ source/Host/common/Mutex.cpp (working copy)
-@@ -324,7 +324,7 @@
- DEBUG_LOG ("[%4.4llx/%4.4llx] pthread_mutex_trylock (%p) => %i\n", Host::GetCurrentProcessID(), Host::GetCurrentThreadID(), &m_mutex, err);
- return err;
- #endif
-- return m_mutex.tryacquire();
-+ return 0 == m_mutex.tryacquire(); // try acquire returns <> 0 for success
- }
-
- //----------------------------------------------------------------------
-Index: source/lldb.cpp
-===================================================================
---- source/lldb.cpp (revision 163819)
-+++ source/lldb.cpp (working copy)
-@@ -39,6 +39,10 @@
- #ifndef LLDB_DISABLE_PYTHON
- #include "Plugins/OperatingSystem/Python/OperatingSystemPython.h"
- #endif
-+
-+#include "Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h"
-+#include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h"
-+
- #if defined (__APPLE__)
- #include "Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.h"
- #include "Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.h"
-@@ -48,8 +52,6 @@
- #include "Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h"
- #include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h"
- #include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h"
--#include "Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h"
--#include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h"
- #include "Plugins/Process/MacOSX-Kernel/ProcessKDP.h"
- #include "Plugins/Process/gdb-remote/ProcessGDBRemote.h"
- #include "Plugins/Platform/MacOSX/PlatformMacOSX.h"
-@@ -73,6 +75,7 @@
-
- #if defined(_WIN32) || defined(_WIN64)
- #include "Plugins/Platform/Windows/PlatformWindows.h"
-+#include "Plugins/Process/gdb-remote/ProcessGDBRemote.h"
- #endif
-
- #include "Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h"
-@@ -120,6 +123,8 @@
- OperatingSystemPython::Initialize();
- #endif
-
-+ ObjectContainerUniversalMachO::Initialize();
-+ ObjectFileMachO::Initialize();
- #if defined (__APPLE__)
- //----------------------------------------------------------------------
- // Apple/Darwin hosted plugins
-@@ -131,8 +136,6 @@
- ItaniumABILanguageRuntime::Initialize();
- AppleObjCRuntimeV2::Initialize();
- AppleObjCRuntimeV1::Initialize();
-- ObjectContainerUniversalMachO::Initialize();
-- ObjectFileMachO::Initialize();
- ProcessGDBRemote::Initialize();
- ProcessKDP::Initialize();
- ProcessMachCore::Initialize();
-@@ -154,9 +157,10 @@
- //----------------------------------------------------------------------
- // Platform agnostic plugins
- //----------------------------------------------------------------------
--#ifndef _WIN32 // TODO: Enable this for Windows later
-+#ifdef _WIN32 // TODO: Enable this for Windows later
-+ ProcessGDBRemote::Initialize();
-+#endif
- PlatformRemoteGDBServer::Initialize ();
--#endif
-
- DynamicLoaderStatic::Initialize();
-
-Index: source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp
-===================================================================
---- source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp (revision 163819)
-+++ source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp (working copy)
-@@ -9,7 +9,7 @@
-
- #include "ObjectContainerBSDArchive.h"
-
--#include <ar.h>
-+//#include <ar.h>
-
- #include "lldb/Core/Stream.h"
- #include "lldb/Core/ArchSpec.h"
-@@ -22,7 +22,20 @@
- using namespace lldb;
- using namespace lldb_private;
-
-+// Defines from ar, missing on Windows
-+#define ARMAG "!<arch>\n"
-+#define SARMAG 8
-+#define ARFMAG "`\n"
-
-+typedef struct ar_hdr
-+ {
-+ char ar_name[16];
-+ char ar_date[12];
-+ char ar_uid[6], ar_gid[6];
-+ char ar_mode[8];
-+ char ar_size[10];
-+ char ar_fmag[2];
-+ } ar_hdr;
-
- ObjectContainerBSDArchive::Object::Object() :
- ar_name(),
-Index: source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
-===================================================================
---- source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp (revision 163819)
-+++ source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp (working copy)
-@@ -3530,7 +3530,7 @@
- DataExtractor data (m_data,
- thread_context_file_range->GetRangeBase(),
- thread_context_file_range->GetByteSize());
--
-+#if defined(__APPLE__)
- switch (m_header.cputype)
- {
- case llvm::MachO::CPUTypeARM:
-@@ -3545,6 +3545,9 @@
- reg_ctx_sp.reset (new RegisterContextDarwin_x86_64_Mach (thread, data));
- break;
- }
-+#else
-+ abort();
-+#endif
- }
- return reg_ctx_sp;
- }
-Index: source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp
-===================================================================
---- source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp (revision 163819)
-+++ source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp (working copy)
-@@ -10,7 +10,9 @@
- #include "PlatformRemoteGDBServer.h"
-
- // C Includes
-+#ifdef _POSIX_SOURCE
- #include <sys/sysctl.h>
-+#endif
-
- // C++ Includes
- // Other libraries and framework includes
-@@ -27,6 +29,9 @@
- #include "lldb/Host/Host.h"
- #include "lldb/Target/Process.h"
- #include "lldb/Target/Target.h"
-+#ifdef _WIN32
-+#include <Winsock2.h>
-+#endif
-
- using namespace lldb;
- using namespace lldb_private;
-@@ -39,7 +44,11 @@
- if (g_initialized == false)
- {
- g_initialized = true;
-- PluginManager::RegisterPlugin (PlatformRemoteGDBServer::GetShortPluginNameStatic(),
-+#ifdef _WIN32
-+ WSADATA dummy;
-+ WSAStartup(0x202, &dummy);
-+#endif
-+ PluginManager::RegisterPlugin (PlatformRemoteGDBServer::GetShortPluginNameStatic(),
- PlatformRemoteGDBServer::GetDescriptionStatic(),
- PlatformRemoteGDBServer::CreateInstance);
- }
-@@ -52,6 +61,9 @@
- {
- g_initialized = false;
- PluginManager::UnregisterPlugin (PlatformRemoteGDBServer::CreateInstance);
-+#ifdef _WIN32
-+ WSACleanup();
-+#endif
- }
- }
-
-Index: source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
-===================================================================
---- source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp (revision 163819)
-+++ source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp (working copy)
-@@ -31,6 +31,10 @@
- using namespace lldb;
- using namespace lldb_private;
-
-+#ifndef _POSIX_SOURCE
-+#define SIGSTOP 17
-+#endif
-+
- //----------------------------------------------------------------------
- // GDBRemoteCommunicationClient constructor
- //----------------------------------------------------------------------
-Index: source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp
-===================================================================
---- source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp (revision 163819)
-+++ source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp (working copy)
-@@ -668,6 +668,10 @@
- bool
- GDBRemoteCommunicationServer::Handle_qLaunchGDBServer (StringExtractorGDBRemote &packet)
- {
-+#ifdef _WIN32
-+ return false;
-+ // No unix sockets on windows
-+#else
- // Spawn a local debugserver as a platform so we can then attach or launch
- // a process...
-
-@@ -731,6 +735,7 @@
- }
- }
- return SendErrorResponse (13);
-+#endif
- }
-
- bool
-Index: source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
-===================================================================
---- source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp (revision 163819)
-+++ source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp (working copy)
-@@ -9,12 +9,20 @@
-
- // C Includes
- #include <errno.h>
-+
-+#ifdef _POSIX_SOURCE
- #include <spawn.h>
-+#endif
- #include <stdlib.h>
-+#ifdef _POSIX_SOURCE
- #include <netinet/in.h>
- #include <sys/mman.h> // for mmap
- #include <sys/stat.h>
- #include <sys/types.h>
-+#endif
-+#ifndef _POSIX_SOURCE
-+#define SIGTRAP 5
-+#endif
- #include <time.h>
-
- // C++ Includes
-@@ -686,7 +694,11 @@
- if (retry_count >= max_retry_count)
- break;
-
-- usleep (100000);
-+#ifdef _WIN32
-+ Sleep (100);
-+#else
-+ usleep (100000);
-+#endif
- }
- }
-
-@@ -721,7 +733,7 @@
- for (size_t idx = 0; idx < num_cmds; idx++)
- {
- StringExtractorGDBRemote response;
-- printf ("Sending command: \%s.\n", GetExtraStartupCommands().GetArgumentAtIndex(idx));
-+ printf ("Sending command: \\%s.\n", GetExtraStartupCommands().GetArgumentAtIndex(idx));
- m_gdb_comm.SendPacketAndWaitForResponse (GetExtraStartupCommands().GetArgumentAtIndex(idx), response, false);
- }
- return error;
-@@ -1721,7 +1733,11 @@
- // FIXME: These should be ConstStrings so we aren't doing strcmp'ing.
- if (platform_sp
- && platform_sp->GetName()
-+#if defined (__APPLE__)
- && strcmp (platform_sp->GetName(), PlatformRemoteiOS::GetShortPluginNameStatic()) == 0)
-+#else
-+ && false)
-+#endif
- {
- if (m_destroy_tried_resuming)
- {
-@@ -2513,7 +2529,11 @@
- // Sleep for a half a second to make sure our inferior process has
- // time to set its exit status before we set it incorrectly when
- // both the debugserver and the inferior process shut down.
-+#if _WIN32
-+ Sleep (500);
-+#else
- usleep (500000);
-+#endif
- // If our process hasn't yet exited, debugserver might have died.
- // If the process did exit, the we are reaping it.
- const StateType state = process->GetState();
-@@ -2553,7 +2573,11 @@
- {
- if (m_debugserver_pid != LLDB_INVALID_PROCESS_ID)
- {
-- ::kill (m_debugserver_pid, SIGINT);
-+#if _WIN32
-+ TerminateProcess ((HANDLE)m_debugserver_pid, 1);
-+#else
-+ ::kill (m_debugserver_pid, SIGINT);
-+#endif
- m_debugserver_pid = LLDB_INVALID_PROCESS_ID;
- }
- }
-@@ -2615,7 +2639,7 @@
- }
-
-
--void *
-+thread_result_t
- ProcessGDBRemote::AsyncThread (void *arg)
- {
- ProcessGDBRemote *process = (ProcessGDBRemote*) arg;
-Index: source/Plugins/Process/gdb-remote/ProcessGDBRemote.h
-===================================================================
---- source/Plugins/Process/gdb-remote/ProcessGDBRemote.h (revision 163819)
-+++ source/Plugins/Process/gdb-remote/ProcessGDBRemote.h (working copy)
-@@ -332,7 +332,7 @@
- void
- StopAsyncThread ();
-
-- static void *
-+ static lldb::thread_result_t
- AsyncThread (void *arg);
-
- static bool
-Index: source/Plugins/Process/Utility/DynamicRegisterInfo.cpp
-===================================================================
---- source/Plugins/Process/Utility/DynamicRegisterInfo.cpp (revision 163819)
-+++ source/Plugins/Process/Utility/DynamicRegisterInfo.cpp (working copy)
-@@ -6,6 +6,7 @@
- // License. See LICENSE.TXT for details.
- //
- //===----------------------------------------------------------------------===//
-+#ifndef LLDB_DISABLE_PYTHON
-
- #include "DynamicRegisterInfo.h"
-
-@@ -267,3 +268,4 @@
- m_set_reg_nums.clear();
- m_set_names.clear();
- }
-+#endif
-Index: source/Plugins/Process/Utility/InferiorCallPOSIX.cpp
-===================================================================
---- source/Plugins/Process/Utility/InferiorCallPOSIX.cpp (revision 163819)
-+++ source/Plugins/Process/Utility/InferiorCallPOSIX.cpp (working copy)
-@@ -17,7 +17,17 @@
- #include "lldb/Target/Target.h"
- #include "lldb/Target/ThreadPlanCallFunction.h"
-
-+#ifdef _POSIX_SOURCE
- #include <sys/mman.h>
-+#else
-+// define them
-+#define PROT_NONE 0
-+#define PROT_READ 1
-+#define PROT_WRITE 2
-+#define PROT_EXEC 4
-+#define MAP_PRIVATE 2
-+#define MAP_ANON 0x1000
-+#endif
-
- using namespace lldb;
- using namespace lldb_private;
-Index: source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.cpp
-===================================================================
---- source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.cpp (revision 163819)
-+++ source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.cpp (working copy)
-@@ -149,7 +149,7 @@
-
- // TOOD: need a better way to detect when "long double" types are
- // the same bytes size as "double"
--#if !defined(__arm__)
-+#if !defined(__arm__) && !defined(_MSC_VER)
- case sizeof (long double):
- if (sizeof (long double) == sizeof(uint32_t))
- {
-Index: source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp
-===================================================================
---- source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp (revision 163819)
-+++ source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp (working copy)
-@@ -13,7 +13,7 @@
- #include <libxml/tree.h>
- #include <string.h>
-
--#include <AvailabilityMacros.h>
-+//#include <AvailabilityMacros.h>
-
- #include "lldb/Core/Module.h"
- #include "lldb/Core/ModuleSpec.h"
Removed: lldb/branches/windows/lldb-get-access-to-type-original-name.patch
URL: http://llvm.org/viewvc/llvm-project/lldb/branches/windows/lldb-get-access-to-type-original-name.patch?rev=167219&view=auto
==============================================================================
--- lldb/branches/windows/lldb-get-access-to-type-original-name.patch (original)
+++ lldb/branches/windows/lldb-get-access-to-type-original-name.patch (removed)
@@ -1,399 +0,0 @@
-Index: include/lldb/API/SBType.h
-===================================================================
---- include/lldb/API/SBType.h (revision 165942)
-+++ include/lldb/API/SBType.h (working copy)
-@@ -143,6 +143,9 @@
-
- const char*
- GetName();
-+
-+ const char*
-+ GetOriginalName();
-
- lldb::TypeClass
- GetTypeClass ();
-Index: include/lldb/Core/ValueObject.h
-===================================================================
---- include/lldb/Core/ValueObject.h (revision 166275)
-+++ include/lldb/Core/ValueObject.h (working copy)
-@@ -1071,6 +1071,9 @@
- m_did_calculate_complete_objc_class_type = true;
- }
-
-+ virtual lldb::TypeSP
-+ GetType () = 0;
-+
- protected:
- typedef ClusterManager<ValueObject> ValueObjectManager;
-
-Index: include/lldb/Core/ValueObjectChild.h
-===================================================================
---- include/lldb/Core/ValueObjectChild.h (revision 165938)
-+++ include/lldb/Core/ValueObjectChild.h (working copy)
-@@ -77,6 +77,9 @@
- return m_is_deref_of_parent;
- }
-
-+ virtual lldb::TypeSP
-+ GetType ();
-+
- protected:
- virtual bool
- UpdateValue ();
-Index: include/lldb/Core/ValueObjectConstResult.h
-===================================================================
---- include/lldb/Core/ValueObjectConstResult.h (revision 165938)
-+++ include/lldb/Core/ValueObjectConstResult.h (working copy)
-@@ -135,6 +135,9 @@
- virtual lldb::ValueObjectSP
- GetDynamicValue (lldb::DynamicValueType valueType);
-
-+ virtual lldb::TypeSP
-+ GetType ();
-+
- protected:
- virtual bool
- UpdateValue ();
-Index: include/lldb/Core/ValueObjectDynamicValue.h
-===================================================================
---- include/lldb/Core/ValueObjectDynamicValue.h (revision 165938)
-+++ include/lldb/Core/ValueObjectDynamicValue.h (working copy)
-@@ -72,6 +72,9 @@
- return m_parent->GetSP();
- }
-
-+ virtual lldb::TypeSP
-+ GetType ();
-+
- protected:
- virtual bool
- UpdateValue ();
-@@ -162,6 +165,9 @@
-
- virtual bool
- SetValueFromCString (const char *value_str, Error& error);
-+
-+ virtual lldb::TypeSP
-+ GetType ();
-
- protected:
- virtual bool
-Index: include/lldb/Core/ValueObjectMemory.h
-===================================================================
---- include/lldb/Core/ValueObjectMemory.h (revision 165938)
-+++ include/lldb/Core/ValueObjectMemory.h (working copy)
-@@ -59,6 +59,9 @@
- virtual lldb::ModuleSP
- GetModule();
-
-+ virtual lldb::TypeSP
-+ GetType ();
-+
- protected:
- virtual bool
- UpdateValue ();
-Index: include/lldb/Core/ValueObjectRegister.h
-===================================================================
---- include/lldb/Core/ValueObjectRegister.h (revision 165938)
-+++ include/lldb/Core/ValueObjectRegister.h (working copy)
-@@ -52,6 +52,9 @@
- virtual ValueObject *
- CreateChildAtIndex (uint32_t idx, bool synthetic_array_member, int32_t synthetic_index);
-
-+ virtual lldb::TypeSP
-+ GetType ();
-+
- protected:
- virtual bool
- UpdateValue ();
-@@ -108,6 +111,8 @@
- virtual uint32_t
- GetIndexOfChildWithName (const ConstString &name);
-
-+ virtual lldb::TypeSP
-+ GetType ();
-
- protected:
- virtual bool
-@@ -166,6 +171,9 @@
- virtual void
- GetExpressionPath (Stream &s, bool qualify_cxx_base_classes, GetExpressionPathFormat epformat = eGetExpressionPathFormatDereferencePointers);
-
-+ virtual lldb::TypeSP
-+ GetType ();
-+
- protected:
- virtual bool
- UpdateValue ();
-Index: include/lldb/Core/ValueObjectSyntheticFilter.h
-===================================================================
---- include/lldb/Core/ValueObjectSyntheticFilter.h (revision 165942)
-+++ include/lldb/Core/ValueObjectSyntheticFilter.h (working copy)
-@@ -108,6 +108,9 @@
- return m_parent->ResolveValue(scalar);
- return false;
- }
-+
-+ virtual lldb::TypeSP
-+ GetType ();
-
- protected:
- virtual bool
-Index: include/lldb/Core/ValueObjectVariable.h
-===================================================================
---- include/lldb/Core/ValueObjectVariable.h (revision 165938)
-+++ include/lldb/Core/ValueObjectVariable.h (working copy)
-@@ -58,6 +58,9 @@
- virtual bool
- GetDeclaration (Declaration &decl);
-
-+ virtual lldb::TypeSP
-+ GetType ();
-+
- protected:
- virtual bool
- UpdateValue ();
-Index: include/lldb/Symbol/Type.h
-===================================================================
---- include/lldb/Symbol/Type.h (revision 165938)
-+++ include/lldb/Symbol/Type.h (working copy)
-@@ -384,6 +384,8 @@
- }
-
- TypeImpl(const lldb_private::ClangASTType& type);
-+
-+ TypeImpl(const lldb_private::ClangASTType& clang_type, const lldb::TypeSP& type);
-
- TypeImpl(const lldb::TypeSP& type);
-
-Index: source/API/SBType.cpp
-===================================================================
---- source/API/SBType.cpp (revision 165942)
-+++ source/API/SBType.cpp (working copy)
-@@ -468,6 +468,18 @@
- m_opaque_sp->GetOpaqueQualType()).GetCString();
- }
-
-+const char*
-+SBType::GetOriginalName()
-+{
-+ if (!IsValid())
-+ return "";
-+
-+ lldb::TypeSP type = m_opaque_sp->GetTypeSP();
-+ if (type)
-+ return type->GetName().AsCString();
-+ return "";
-+}
-+
- lldb::TypeClass
- SBType::GetTypeClass ()
- {
-Index: source/API/SBValue.cpp
-===================================================================
---- source/API/SBValue.cpp (revision 166275)
-+++ source/API/SBValue.cpp (working copy)
-@@ -357,7 +357,7 @@
- if (target_sp)
- {
- Mutex::Locker api_locker (target_sp->GetAPIMutex());
-- type_sp.reset (new TypeImpl(ClangASTType (value_sp->GetClangAST(), value_sp->GetClangType())));
-+ type_sp.reset (new TypeImpl(ClangASTType (value_sp->GetClangAST(), value_sp->GetClangType()), value_sp->GetType()));
- sb_type.SetSP(type_sp);
- }
- }
-Index: source/Core/ValueObjectChild.cpp
-===================================================================
---- source/Core/ValueObjectChild.cpp (revision 165938)
-+++ source/Core/ValueObjectChild.cpp (working copy)
-@@ -111,6 +111,18 @@
- return qualified_name;
- }
-
-+lldb::TypeSP
-+ValueObjectChild::GetType ()
-+{
-+ if (UpdateValueIfNeeded(false)) {
-+ Type* type = m_value.GetType();
-+ if (type)
-+ return type->shared_from_this();
-+ }
-+ return lldb::TypeSP();
-+}
-+
-+
- bool
- ValueObjectChild::UpdateValue ()
- {
-Index: source/Core/ValueObjectConstResult.cpp
-===================================================================
---- source/Core/ValueObjectConstResult.cpp (revision 165938)
-+++ source/Core/ValueObjectConstResult.cpp (working copy)
-@@ -281,6 +281,15 @@
- return m_value.GetClangType();
- }
-
-+lldb::TypeSP
-+ValueObjectConstResult::GetType()
-+{
-+ Type* type = m_value.GetType();
-+ if (type)
-+ return type->shared_from_this();
-+ return lldb::TypeSP();
-+}
-+
- lldb::ValueType
- ValueObjectConstResult::GetValueType() const
- {
-Index: source/Core/ValueObjectDynamicValue.cpp
-===================================================================
---- source/Core/ValueObjectDynamicValue.cpp (revision 166275)
-+++ source/Core/ValueObjectDynamicValue.cpp (working copy)
-@@ -67,6 +67,12 @@
- return m_cast_type.GetOpaqueQualType();
- }
-
-+lldb::TypeSP
-+ValueObjectCast::GetType ()
-+{
-+ return lldb::TypeSP();
-+}
-+
- uint32_t
- ValueObjectCast::CalculateNumChildren()
- {
-@@ -162,6 +168,15 @@
- return m_parent->GetClangType();
- }
-
-+lldb::TypeSP
-+ValueObjectDynamicValue::GetType ()
-+{
-+ if (m_type_sp)
-+ return m_type_sp;
-+ else
-+ return m_parent->GetType();
-+}
-+
- ConstString
- ValueObjectDynamicValue::GetTypeName()
- {
-Index: source/Core/ValueObjectMemory.cpp
-===================================================================
---- source/Core/ValueObjectMemory.cpp (revision 165938)
-+++ source/Core/ValueObjectMemory.cpp (working copy)
-@@ -165,6 +165,12 @@
- return m_clang_type.GetASTContext();
- }
-
-+lldb::TypeSP
-+ValueObjectMemory::GetType ()
-+{
-+ return m_type_sp;
-+}
-+
- size_t
- ValueObjectMemory::GetByteSize()
- {
-Index: source/Core/ValueObjectRegister.cpp
-===================================================================
---- source/Core/ValueObjectRegister.cpp (revision 165938)
-+++ source/Core/ValueObjectRegister.cpp (working copy)
-@@ -48,6 +48,12 @@
- return NULL;
- }
-
-+lldb::TypeSP
-+ValueObjectRegisterContext::GetType ()
-+{
-+ return lldb::TypeSP();
-+}
-+
- ConstString
- ValueObjectRegisterContext::GetTypeName()
- {
-@@ -150,6 +156,12 @@
- return NULL;
- }
-
-+lldb::TypeSP
-+ValueObjectRegisterSet::GetType ()
-+{
-+ return lldb::TypeSP();
-+}
-+
- ConstString
- ValueObjectRegisterSet::GetTypeName()
- {
-@@ -333,6 +345,17 @@
- return m_clang_type;
- }
-
-+lldb::TypeSP
-+ValueObjectRegister::GetType ()
-+{
-+ if (UpdateValueIfNeeded(false)) {
-+ lldb_private::Type* type = m_value.GetType();
-+ if (type)
-+ return type->shared_from_this();
-+ }
-+ return lldb::TypeSP();
-+}
-+
- ConstString
- ValueObjectRegister::GetTypeName()
- {
-Index: source/Core/ValueObjectSyntheticFilter.cpp
-===================================================================
---- source/Core/ValueObjectSyntheticFilter.cpp (revision 165942)
-+++ source/Core/ValueObjectSyntheticFilter.cpp (working copy)
-@@ -86,6 +86,12 @@
- return m_parent->GetTypeName();
- }
-
-+lldb::TypeSP
-+ValueObjectSynthetic::GetType()
-+{
-+ return m_parent->GetType();
-+}
-+
- uint32_t
- ValueObjectSynthetic::CalculateNumChildren()
- {
-Index: source/Core/ValueObjectVariable.cpp
-===================================================================
---- source/Core/ValueObjectVariable.cpp (revision 165938)
-+++ source/Core/ValueObjectVariable.cpp (working copy)
-@@ -102,6 +102,15 @@
- return 0;
- }
-
-+lldb::TypeSP
-+ValueObjectVariable::GetType ()
-+{
-+ Type* type = m_variable_sp->GetType();
-+ if (type)
-+ return type->shared_from_this();
-+ return lldb::TypeSP();
-+}
-+
- size_t
- ValueObjectVariable::GetByteSize()
- {
-Index: source/Symbol/Type.cpp
-===================================================================
---- source/Symbol/Type.cpp (revision 165938)
-+++ source/Symbol/Type.cpp (working copy)
-@@ -846,6 +846,12 @@
- {
- }
-
-+TypeImpl::TypeImpl(const lldb_private::ClangASTType& clang_type, const lldb::TypeSP& type) :
-+m_clang_ast_type(clang_type),
-+ m_type_sp(type)
-+{
-+}
-+
- void
- TypeImpl::SetType (const lldb::TypeSP &type_sp)
- {
Removed: lldb/branches/windows/lldb-mutex-fix.patch
URL: http://llvm.org/viewvc/llvm-project/lldb/branches/windows/lldb-mutex-fix.patch?rev=167219&view=auto
==============================================================================
--- lldb/branches/windows/lldb-mutex-fix.patch (original)
+++ lldb/branches/windows/lldb-mutex-fix.patch (removed)
@@ -1,208 +0,0 @@
-Index: include/lldb/API/SBCommandInterpreter.h
-===================================================================
---- include/lldb/API/SBCommandInterpreter.h (revision 163819)
-+++ include/lldb/API/SBCommandInterpreter.h (working copy)
-@@ -26,6 +26,8 @@
- eBroadcastBitAsynchronousErrorData = (1 << 4)
- };
-
-+ SBCommandInterpreter ();
-+
- SBCommandInterpreter (const lldb::SBCommandInterpreter &rhs);
-
- const lldb::SBCommandInterpreter &
-@@ -112,7 +114,7 @@
- private:
- friend class SBDebugger;
-
-- SBCommandInterpreter (lldb_private::CommandInterpreter *interpreter_ptr = NULL); // Access using SBDebugger::GetCommandInterpreter();
-+ SBCommandInterpreter (lldb_private::CommandInterpreter *interpreter_ptr); // Access using SBDebugger::GetCommandInterpreter();
-
- static void
- InitializeSWIG ();
-Index: include/lldb/Host/Mutex.h
-===================================================================
---- include/lldb/Host/Mutex.h (revision 163819)
-+++ include/lldb/Host/Mutex.h (working copy)
-@@ -16,6 +16,11 @@
- #ifdef _POSIX_SOURCE
- #include <pthread.h>
- #endif
-+#ifdef _WIN32
-+#define WIN32_LEAN_AND_MEAN
-+#define NOMINMAX
-+#include <Windows.h>
-+#endif
-
- #include <assert.h>
-
-@@ -257,8 +262,12 @@
- #endif
-
- #ifndef _POSIX_SOURCE
-+#ifdef _WIN32
-+ CRITICAL_SECTION* m_mutex;
-+#else
- llvm::sys::MutexImpl m_mutex;
- #endif
-+#endif
-
- Mutex(const Mutex&);
- const Mutex& operator=(const Mutex&);
-Index: source/API/SBCommandInterpreter.cpp
-===================================================================
---- source/API/SBCommandInterpreter.cpp (revision 163819)
-+++ source/API/SBCommandInterpreter.cpp (working copy)
-@@ -29,6 +29,10 @@
- using namespace lldb_private;
-
-
-+SBCommandInterpreter::SBCommandInterpreter()
-+{
-+}
-+
- SBCommandInterpreter::SBCommandInterpreter (CommandInterpreter *interpreter) :
- m_opaque_ptr (interpreter)
- {
-Index: source/Core/Windows.cpp
-===================================================================
---- source/Core/Windows.cpp (revision 163822)
-+++ source/Core/Windows.cpp (working copy)
-@@ -163,12 +163,12 @@
-
- long long int strtoll(const char *nptr, char **endptr, int base)
- {
-- return 0;
-+ return _strtoi64(nptr, endptr, base);
- }
-
- unsigned long long int strtoull(const char *nptr, char **endptr, int base)
- {
-- return 0;
-+ return _strtoui64(nptr, endptr, base);
- }
-
- //char* realpath( const char * name, char * resolved )
-Index: source/Host/common/Condition.cpp
-===================================================================
---- source/Host/common/Condition.cpp (revision 163819)
-+++ source/Host/common/Condition.cpp (working copy)
-@@ -104,11 +104,15 @@
- {
- #ifdef _WIN32
- DWORD wait = INFINITE;
-- if (abstime != NULL)
-- wait = tv2ms(abstime->GetAsTimeVal());
-+ if (abstime != NULL) {
-+ int wval = (*abstime - TimeValue::Now()) / 1000000;
-+ if (wval < 0) wval = 0;
-
-- int err = SleepConditionVariableCS(&m_condition, (PCRITICAL_SECTION)&mutex,
-- wait);
-+ wait = wval;
-+ }
-+
-+
-+ int err = SleepConditionVariableCS(&m_condition, mutex.m_mutex, wait);
-
- if (timed_out != NULL)
- {
-Index: source/Host/common/Mutex.cpp
-===================================================================
---- source/Host/common/Mutex.cpp (revision 163901)
-+++ source/Host/common/Mutex.cpp (working copy)
-@@ -183,7 +183,10 @@
- Mutex::Mutex () :
- m_mutex()
- {
--#ifdef _POSIX_SOURCE
-+#ifdef _WIN32
-+ m_mutex = new CRITICAL_SECTION();
-+ InitializeCriticalSection(m_mutex);
-+#else
- int err;
- err = ::pthread_mutex_init (&m_mutex, NULL);
- #if ENABLE_MUTEX_ERROR_CHECKING
-@@ -202,7 +205,10 @@
- Mutex::Mutex (Mutex::Type type) :
- m_mutex()
- {
--#ifdef _POSIX_SOURCE
-+#ifdef _WIN32
-+ m_mutex = new CRITICAL_SECTION();
-+ InitializeCriticalSection(m_mutex);
-+#else
- int err;
- ::pthread_mutexattr_t attr;
- err = ::pthread_mutexattr_init (&attr);
-@@ -244,7 +250,10 @@
- //----------------------------------------------------------------------
- Mutex::~Mutex()
- {
--#ifdef _POSIX_SOURCE
-+#ifdef _WIN32
-+ DeleteCriticalSection(m_mutex);
-+ delete m_mutex;
-+#else
- int err;
- err = ::pthread_mutex_destroy (&m_mutex);
- #if ENABLE_MUTEX_ERROR_CHECKING
-@@ -281,7 +290,10 @@
- int
- Mutex::Lock()
- {
--#ifdef _POSIX_SOURCE
-+#ifdef _WIN32
-+ EnterCriticalSection(m_mutex);
-+ return 0;
-+#else
- DEBUG_LOG ("[%4.4llx/%4.4llx] pthread_mutex_lock (%p)...\n", Host::GetCurrentProcessID(), Host::GetCurrentThreadID(), &m_mutex);
-
- #if ENABLE_MUTEX_ERROR_CHECKING
-@@ -301,7 +313,6 @@
- DEBUG_LOG ("[%4.4llx/%4.4llx] pthread_mutex_lock (%p) => %i\n", Host::GetCurrentProcessID(), Host::GetCurrentThreadID(), &m_mutex, err);
- return err;
- #endif
-- return m_mutex.acquire();
- }
-
- //----------------------------------------------------------------------
-@@ -315,7 +326,9 @@
- int
- Mutex::TryLock(const char *failure_message)
- {
--#ifdef _POSIX_SOURCE
-+#ifdef _WIN32
-+ return 0 == TryEnterCriticalSection(m_mutex);
-+#else
- #if ENABLE_MUTEX_ERROR_CHECKING
- error_check_mutex (&m_mutex, eMutexActionAssertInitialized);
- #endif
-@@ -324,7 +337,6 @@
- DEBUG_LOG ("[%4.4llx/%4.4llx] pthread_mutex_trylock (%p) => %i\n", Host::GetCurrentProcessID(), Host::GetCurrentThreadID(), &m_mutex, err);
- return err;
- #endif
-- return 0 == m_mutex.tryacquire(); // try acquire returns <> 0 for success
- }
-
- //----------------------------------------------------------------------
-@@ -339,7 +351,10 @@
- int
- Mutex::Unlock()
- {
--#ifdef _POSIX_SOURCE
-+#ifdef _WIN32
-+ LeaveCriticalSection(m_mutex);
-+ return 0;
-+#else
- #if ENABLE_MUTEX_ERROR_CHECKING
- error_check_mutex (&m_mutex, eMutexActionAssertInitialized);
- #endif
-@@ -356,7 +371,6 @@
- DEBUG_LOG ("[%4.4llx/%4.4llx] pthread_mutex_unlock (%p) => %i\n", Host::GetCurrentProcessID(), Host::GetCurrentThreadID(), &m_mutex, err);
- return err;
- #endif
-- return m_mutex.release();
- }
-
- #ifdef LLDB_CONFIGURATION_DEBUG
Removed: lldb/branches/windows/patch_to_getfunction_types.patch
URL: http://llvm.org/viewvc/llvm-project/lldb/branches/windows/patch_to_getfunction_types.patch?rev=167219&view=auto
==============================================================================
--- lldb/branches/windows/patch_to_getfunction_types.patch (original)
+++ lldb/branches/windows/patch_to_getfunction_types.patch (removed)
@@ -1,86 +0,0 @@
-Index: include/lldb/API/SBType.h
-===================================================================
---- include/lldb/API/SBType.h (revision 165942)
-+++ include/lldb/API/SBType.h (working copy)
-@@ -141,6 +141,18 @@
- lldb::TemplateArgumentKind
- GetTemplateArgumentKind (uint32_t idx);
-
-+ bool
-+ IsFunctionType ();
-+
-+ lldb::SBType
-+ GetFunctionReturnType ();
-+
-+ int
-+ GetNumberOfFunctionArguments ();
-+
-+ lldb::SBType
-+ GetFunctionArgumentTypeAtIndex (int no);
-+
- const char*
- GetName();
-
-Index: source/API/SBType.cpp
-===================================================================
---- source/API/SBType.cpp (revision 165942)
-+++ source/API/SBType.cpp (working copy)
-@@ -219,7 +219,58 @@
- return SBType(ClangASTType(m_opaque_sp->GetASTContext(),qt.getNonReferenceType().getAsOpaquePtr()));
- }
-
-+bool
-+SBType::IsFunctionType ()
-+{
-+ if (!IsValid())
-+ return false;
-+ QualType qt = QualType::getFromOpaquePtr(m_opaque_sp->GetOpaqueQualType());
-+
-+ return qt->isFunctionProtoType();
-+}
-+
-+lldb::SBType
-+SBType::GetFunctionReturnType ()
-+{
-+ if (!IsValid())
-+ return lldb::SBType();
-+ QualType qt = QualType::getFromOpaquePtr(m_opaque_sp->GetOpaqueQualType());
-+
-+ if (qt->isFunctionProtoType())
-+ return SBType(ClangASTType(m_opaque_sp->GetASTContext(), cast<FunctionProtoType>(qt.getTypePtr())->getResultType().getAsOpaquePtr()));
-+ return lldb::SBType();
-+}
-+
-+int
-+SBType::GetNumberOfFunctionArguments ()
-+{
-+ if (!IsValid())
-+ return 0;
-+ QualType qt = QualType::getFromOpaquePtr(m_opaque_sp->GetOpaqueQualType());
-+
-+ if (qt->isFunctionProtoType())
-+ return cast<FunctionProtoType>(qt.getTypePtr())->getNumArgs();
-+ return 0;
-+}
-+
- lldb::SBType
-+SBType::GetFunctionArgumentTypeAtIndex (int no)
-+{
-+ if (!IsValid())
-+ return lldb::SBType();
-+ QualType qt = QualType::getFromOpaquePtr(m_opaque_sp->GetOpaqueQualType());
-+
-+ if (qt->isFunctionProtoType()) {
-+ const FunctionProtoType* func = cast<FunctionProtoType>(qt.getTypePtr());
-+ if (no >= 0 && no < func->getNumArgs())
-+ {
-+ return SBType(ClangASTType(m_opaque_sp->GetASTContext(), func->getArgType(no).getAsOpaquePtr()));
-+ }
-+ }
-+ return lldb::SBType();
-+}
-+
-+lldb::SBType
- SBType::GetUnqualifiedType()
- {
- if (!IsValid())
Removed: lldb/branches/windows/scripts/csharp-typemaps.swig
URL: http://llvm.org/viewvc/llvm-project/lldb/branches/windows/scripts/csharp-typemaps.swig?rev=167219&view=auto
==============================================================================
--- lldb/branches/windows/scripts/csharp-typemaps.swig (original)
+++ lldb/branches/windows/scripts/csharp-typemaps.swig (removed)
@@ -1,57 +0,0 @@
-%define %cs_marshal_intptr(TYPE, ARGNAME...)
- %typemap(ctype) TYPE ARGNAME "void*"
- %typemap(imtype) TYPE ARGNAME "IntPtr"
- %typemap(cstype) TYPE ARGNAME "IntPtr"
- %typemap(in) TYPE ARGNAME %{ $1 = ($1_ltype)$input; /* IntPtr */ %}
- %typemap(csin) TYPE ARGNAME "$csinput"
-
- %typemap(out) TYPE ARGNAME %{ $result = $1; %}
- %typemap(csout, excode=SWIGEXCODE) TYPE ARGNAME {
- IntPtr cPtr = $imcall;$excode
- return cPtr;
- }
- %typemap(csvarout, excode=SWIGEXCODE2) TYPE ARGNAME %{
- get {
- IntPtr cPtr = $imcall;$excode
- return cPtr;
- }
- %}
-
- %typemap(ctype) TYPE& ARGNAME "void**"
- %typemap(imtype) TYPE& ARGNAME "ref IntPtr"
- %typemap(cstype) TYPE& ARGNAME "ref IntPtr"
- %typemap(in) TYPE& ARGNAME %{ $1 = ($1_ltype)$input; %}
- %typemap(csin) TYPE& ARGNAME "ref $csinput"
-%enddef
-
-%INTEGRAL_ARRAY_TYPEMAP(unsigned int, bool);
-%INTEGRAL_ARRAY_TYPEMAP(char, char);
-%INTEGRAL_ARRAY_TYPEMAP(signed char, sbyte);
-%INTEGRAL_ARRAY_TYPEMAP(unsigned char, byte);
-%INTEGRAL_ARRAY_TYPEMAP(short, short);
-%INTEGRAL_ARRAY_TYPEMAP(unsigned short, ushort);
-%INTEGRAL_ARRAY_TYPEMAP(int, int);
-%INTEGRAL_ARRAY_TYPEMAP(unsigned int, uint);
-%INTEGRAL_ARRAY_TYPEMAP(long, int);
-%INTEGRAL_ARRAY_TYPEMAP(unsigned long, uint);
-%INTEGRAL_ARRAY_TYPEMAP(long long, long);
-%INTEGRAL_ARRAY_TYPEMAP(unsigned long long, ulong);
-%INTEGRAL_ARRAY_TYPEMAP(float, float);
-%INTEGRAL_ARRAY_TYPEMAP(double, double);
-
-
-
-%INTEGRAL_ARRAY_TYPEMAP(int8_t, sbyte);
-%INTEGRAL_ARRAY_TYPEMAP(uint8_t, byte);
-%INTEGRAL_ARRAY_TYPEMAP(short, short);
-%INTEGRAL_ARRAY_TYPEMAP(unsigned short, ushort);
-%INTEGRAL_ARRAY_TYPEMAP(int, int);
-%INTEGRAL_ARRAY_TYPEMAP(unsigned int, uint);
-%INTEGRAL_ARRAY_TYPEMAP(long, int);
-%INTEGRAL_ARRAY_TYPEMAP(unsigned long, uint);
-%INTEGRAL_ARRAY_TYPEMAP(long long, long);
-%INTEGRAL_ARRAY_TYPEMAP(unsigned long long, ulong);
-%INTEGRAL_ARRAY_TYPEMAP(float, float);
-%INTEGRAL_ARRAY_TYPEMAP(double, double);
-
-%cs_marshal_intptr(void*)
\ No newline at end of file
More information about the lldb-commits
mailing list