svn commit: r258884 - in head: contrib/llvm/tools/lldb/include/lldb contrib/llvm/tools/lldb/include/lldb/API contrib/llvm/tools/lldb/include/lldb/Breakpoint contrib/llvm/tools/lldb/include/lldb/Cor...

Ed Maste emaste at FreeBSD.org
Tue Dec 3 19:23:59 UTC 2013


Author: emaste
Date: Tue Dec  3 19:23:54 2013
New Revision: 258884
URL: http://svnweb.freebsd.org/changeset/base/258884

Log:
  Update LLDB to upstream r196259 snapshot
  
  Sponsored by:	DARPA, AFRL

Added:
  head/contrib/llvm/tools/lldb/include/lldb/API/SBPlatform.h
     - copied unchanged from r258883, vendor/lldb/dist/include/lldb/API/SBPlatform.h
  head/contrib/llvm/tools/lldb/include/lldb/Host/Debug.h
     - copied unchanged from r258883, vendor/lldb/dist/include/lldb/Host/Debug.h
  head/contrib/llvm/tools/lldb/include/lldb/Target/RegisterCheckpoint.h
     - copied unchanged from r258883, vendor/lldb/dist/include/lldb/Target/RegisterCheckpoint.h
  head/contrib/llvm/tools/lldb/include/lldb/Utility/Iterable.h
     - copied unchanged from r258883, vendor/lldb/dist/include/lldb/Utility/Iterable.h
  head/contrib/llvm/tools/lldb/source/API/SBPlatform.cpp
     - copied unchanged from r258883, vendor/lldb/dist/source/API/SBPlatform.cpp
  head/contrib/llvm/tools/lldb/source/Plugins/Process/Utility/HistoryThread.cpp
     - copied unchanged from r258883, vendor/lldb/dist/source/Plugins/Process/Utility/HistoryThread.cpp
  head/contrib/llvm/tools/lldb/source/Plugins/Process/Utility/HistoryThread.h
     - copied unchanged from r258883, vendor/lldb/dist/source/Plugins/Process/Utility/HistoryThread.h
  head/contrib/llvm/tools/lldb/source/Plugins/Process/Utility/HistoryUnwind.cpp
     - copied unchanged from r258883, vendor/lldb/dist/source/Plugins/Process/Utility/HistoryUnwind.cpp
  head/contrib/llvm/tools/lldb/source/Plugins/Process/Utility/HistoryUnwind.h
     - copied unchanged from r258883, vendor/lldb/dist/source/Plugins/Process/Utility/HistoryUnwind.h
  head/contrib/llvm/tools/lldb/source/Plugins/Process/Utility/RegisterContextHistory.cpp
     - copied unchanged from r258883, vendor/lldb/dist/source/Plugins/Process/Utility/RegisterContextHistory.cpp
  head/contrib/llvm/tools/lldb/source/Plugins/Process/Utility/RegisterContextHistory.h
     - copied unchanged from r258883, vendor/lldb/dist/source/Plugins/Process/Utility/RegisterContextHistory.h
Modified:
  head/contrib/llvm/tools/lldb/include/lldb/API/SBDebugger.h
  head/contrib/llvm/tools/lldb/include/lldb/API/SBError.h
  head/contrib/llvm/tools/lldb/include/lldb/API/SBExpressionOptions.h
  head/contrib/llvm/tools/lldb/include/lldb/API/SBFileSpec.h
  head/contrib/llvm/tools/lldb/include/lldb/API/SBModule.h
  head/contrib/llvm/tools/lldb/include/lldb/API/SBTarget.h
  head/contrib/llvm/tools/lldb/include/lldb/API/SBThread.h
  head/contrib/llvm/tools/lldb/include/lldb/Breakpoint/Breakpoint.h
  head/contrib/llvm/tools/lldb/include/lldb/Breakpoint/BreakpointList.h
  head/contrib/llvm/tools/lldb/include/lldb/Breakpoint/BreakpointLocationList.h
  head/contrib/llvm/tools/lldb/include/lldb/Core/Address.h
  head/contrib/llvm/tools/lldb/include/lldb/Core/Debugger.h
  head/contrib/llvm/tools/lldb/include/lldb/Core/Module.h
  head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/CXXFormatterFunctions.h
  head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/FormatCache.h
  head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/FormatClasses.h
  head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/FormatManager.h
  head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/FormatNavigator.h
  head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/TypeCategory.h
  head/contrib/llvm/tools/lldb/include/lldb/Expression/ClangFunction.h
  head/contrib/llvm/tools/lldb/include/lldb/Expression/ClangUserExpression.h
  head/contrib/llvm/tools/lldb/include/lldb/Host/File.h
  head/contrib/llvm/tools/lldb/include/lldb/Host/FileSpec.h
  head/contrib/llvm/tools/lldb/include/lldb/Host/Host.h
  head/contrib/llvm/tools/lldb/include/lldb/Host/OptionParser.h
  head/contrib/llvm/tools/lldb/include/lldb/Interpreter/PythonDataObjects.h
  head/contrib/llvm/tools/lldb/include/lldb/Interpreter/ScriptInterpreterPython.h
  head/contrib/llvm/tools/lldb/include/lldb/Symbol/TypeList.h
  head/contrib/llvm/tools/lldb/include/lldb/Target/ABI.h
  head/contrib/llvm/tools/lldb/include/lldb/Target/LanguageRuntime.h
  head/contrib/llvm/tools/lldb/include/lldb/Target/Platform.h
  head/contrib/llvm/tools/lldb/include/lldb/Target/Process.h
  head/contrib/llvm/tools/lldb/include/lldb/Target/RegisterContext.h
  head/contrib/llvm/tools/lldb/include/lldb/Target/SystemRuntime.h
  head/contrib/llvm/tools/lldb/include/lldb/Target/Target.h
  head/contrib/llvm/tools/lldb/include/lldb/Target/Thread.h
  head/contrib/llvm/tools/lldb/include/lldb/Target/ThreadList.h
  head/contrib/llvm/tools/lldb/include/lldb/Target/ThreadPlanCallFunction.h
  head/contrib/llvm/tools/lldb/include/lldb/Target/ThreadPlanCallUserExpression.h
  head/contrib/llvm/tools/lldb/include/lldb/Utility/PythonPointer.h
  head/contrib/llvm/tools/lldb/include/lldb/lldb-enumerations.h
  head/contrib/llvm/tools/lldb/include/lldb/lldb-forward.h
  head/contrib/llvm/tools/lldb/include/lldb/lldb-private-enumerations.h
  head/contrib/llvm/tools/lldb/include/lldb/lldb-python.h
  head/contrib/llvm/tools/lldb/source/API/SBDebugger.cpp
  head/contrib/llvm/tools/lldb/source/API/SBExpressionOptions.cpp
  head/contrib/llvm/tools/lldb/source/API/SBFileSpec.cpp
  head/contrib/llvm/tools/lldb/source/API/SBModule.cpp
  head/contrib/llvm/tools/lldb/source/API/SBProcess.cpp
  head/contrib/llvm/tools/lldb/source/API/SBStream.cpp
  head/contrib/llvm/tools/lldb/source/API/SBTarget.cpp
  head/contrib/llvm/tools/lldb/source/API/SBThread.cpp
  head/contrib/llvm/tools/lldb/source/Breakpoint/Breakpoint.cpp
  head/contrib/llvm/tools/lldb/source/Breakpoint/BreakpointList.cpp
  head/contrib/llvm/tools/lldb/source/Breakpoint/BreakpointLocation.cpp
  head/contrib/llvm/tools/lldb/source/Breakpoint/BreakpointLocationList.cpp
  head/contrib/llvm/tools/lldb/source/Commands/CommandObjectExpression.cpp
  head/contrib/llvm/tools/lldb/source/Commands/CommandObjectMemory.cpp
  head/contrib/llvm/tools/lldb/source/Commands/CommandObjectPlatform.cpp
  head/contrib/llvm/tools/lldb/source/Commands/CommandObjectPlugin.cpp
  head/contrib/llvm/tools/lldb/source/Commands/CommandObjectProcess.cpp
  head/contrib/llvm/tools/lldb/source/Commands/CommandObjectTarget.cpp
  head/contrib/llvm/tools/lldb/source/Commands/CommandObjectThread.cpp
  head/contrib/llvm/tools/lldb/source/Commands/CommandObjectWatchpoint.cpp
  head/contrib/llvm/tools/lldb/source/Core/Address.cpp
  head/contrib/llvm/tools/lldb/source/Core/ConnectionFileDescriptor.cpp
  head/contrib/llvm/tools/lldb/source/Core/Debugger.cpp
  head/contrib/llvm/tools/lldb/source/Core/Mangled.cpp
  head/contrib/llvm/tools/lldb/source/Core/Module.cpp
  head/contrib/llvm/tools/lldb/source/Core/StreamFile.cpp
  head/contrib/llvm/tools/lldb/source/Core/ValueObjectSyntheticFilter.cpp
  head/contrib/llvm/tools/lldb/source/DataFormatters/CXXFormatterFunctions.cpp
  head/contrib/llvm/tools/lldb/source/DataFormatters/FormatClasses.cpp
  head/contrib/llvm/tools/lldb/source/DataFormatters/FormatManager.cpp
  head/contrib/llvm/tools/lldb/source/DataFormatters/LibCxx.cpp
  head/contrib/llvm/tools/lldb/source/DataFormatters/LibStdcpp.cpp
  head/contrib/llvm/tools/lldb/source/DataFormatters/NSDictionary.cpp
  head/contrib/llvm/tools/lldb/source/DataFormatters/NSSet.cpp
  head/contrib/llvm/tools/lldb/source/DataFormatters/TypeCategory.cpp
  head/contrib/llvm/tools/lldb/source/DataFormatters/TypeCategoryMap.cpp
  head/contrib/llvm/tools/lldb/source/Expression/ClangFunction.cpp
  head/contrib/llvm/tools/lldb/source/Expression/ClangUserExpression.cpp
  head/contrib/llvm/tools/lldb/source/Expression/Materializer.cpp
  head/contrib/llvm/tools/lldb/source/Host/common/File.cpp
  head/contrib/llvm/tools/lldb/source/Host/common/FileSpec.cpp
  head/contrib/llvm/tools/lldb/source/Host/common/Host.cpp
  head/contrib/llvm/tools/lldb/source/Host/common/OptionParser.cpp
  head/contrib/llvm/tools/lldb/source/Interpreter/Args.cpp
  head/contrib/llvm/tools/lldb/source/Interpreter/CommandInterpreter.cpp
  head/contrib/llvm/tools/lldb/source/Interpreter/PythonDataObjects.cpp
  head/contrib/llvm/tools/lldb/source/Interpreter/ScriptInterpreterPython.cpp
  head/contrib/llvm/tools/lldb/source/Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.cpp
  head/contrib/llvm/tools/lldb/source/Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.h
  head/contrib/llvm/tools/lldb/source/Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.cpp
  head/contrib/llvm/tools/lldb/source/Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.h
  head/contrib/llvm/tools/lldb/source/Plugins/ABI/SysV-x86_64/ABISysV_x86_64.cpp
  head/contrib/llvm/tools/lldb/source/Plugins/ABI/SysV-x86_64/ABISysV_x86_64.h
  head/contrib/llvm/tools/lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.h
  head/contrib/llvm/tools/lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp
  head/contrib/llvm/tools/lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h
  head/contrib/llvm/tools/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
  head/contrib/llvm/tools/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.h
  head/contrib/llvm/tools/lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp
  head/contrib/llvm/tools/lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.h
  head/contrib/llvm/tools/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp
  head/contrib/llvm/tools/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h
  head/contrib/llvm/tools/lldb/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp
  head/contrib/llvm/tools/lldb/source/Plugins/Process/FreeBSD/ProcessMonitor.h
  head/contrib/llvm/tools/lldb/source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_x86.cpp
  head/contrib/llvm/tools/lldb/source/Plugins/Process/POSIX/RegisterInfos_x86_64.h
  head/contrib/llvm/tools/lldb/source/Plugins/Process/Utility/InferiorCallPOSIX.cpp
  head/contrib/llvm/tools/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp
  head/contrib/llvm/tools/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
  head/contrib/llvm/tools/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
  head/contrib/llvm/tools/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp
  head/contrib/llvm/tools/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.h
  head/contrib/llvm/tools/lldb/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp
  head/contrib/llvm/tools/lldb/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.h
  head/contrib/llvm/tools/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
  head/contrib/llvm/tools/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h
  head/contrib/llvm/tools/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp
  head/contrib/llvm/tools/lldb/source/Symbol/UnwindPlan.cpp
  head/contrib/llvm/tools/lldb/source/Target/Platform.cpp
  head/contrib/llvm/tools/lldb/source/Target/Process.cpp
  head/contrib/llvm/tools/lldb/source/Target/RegisterContext.cpp
  head/contrib/llvm/tools/lldb/source/Target/StackFrameList.cpp
  head/contrib/llvm/tools/lldb/source/Target/SystemRuntime.cpp
  head/contrib/llvm/tools/lldb/source/Target/Target.cpp
  head/contrib/llvm/tools/lldb/source/Target/Thread.cpp
  head/contrib/llvm/tools/lldb/source/Target/ThreadPlanCallFunction.cpp
  head/contrib/llvm/tools/lldb/source/Target/ThreadPlanCallUserExpression.cpp
  head/contrib/llvm/tools/lldb/source/Target/ThreadPlanStepInRange.cpp
  head/contrib/llvm/tools/lldb/source/Utility/StringExtractor.cpp
  head/contrib/llvm/tools/lldb/source/Utility/StringExtractorGDBRemote.cpp
  head/contrib/llvm/tools/lldb/source/Utility/StringExtractorGDBRemote.h
  head/contrib/llvm/tools/lldb/source/lldb.cpp
  head/contrib/llvm/tools/lldb/tools/lldb-platform/lldb-platform.cpp
  head/lib/clang/liblldbAPI/Makefile
  head/lib/clang/liblldbPluginProcessUtility/Makefile
Directory Properties:
  head/contrib/llvm/tools/lldb/   (props changed)

Modified: head/contrib/llvm/tools/lldb/include/lldb/API/SBDebugger.h
==============================================================================
--- head/contrib/llvm/tools/lldb/include/lldb/API/SBDebugger.h	Tue Dec  3 18:59:11 2013	(r258883)
+++ head/contrib/llvm/tools/lldb/include/lldb/API/SBDebugger.h	Tue Dec  3 19:23:54 2013	(r258884)
@@ -10,9 +10,11 @@
 #ifndef LLDB_SBDebugger_h_
 #define LLDB_SBDebugger_h_
 
-#include "lldb/API/SBDefines.h"
 #include <stdio.h>
 
+#include "lldb/API/SBDefines.h"
+#include "lldb/API/SBPlatform.h"
+
 namespace lldb {
 
 class SBDebugger
@@ -153,6 +155,12 @@ public:
     void
     SetSelectedTarget (SBTarget& target);
 
+    lldb::SBPlatform
+    GetSelectedPlatform();
+
+    void
+    SetSelectedPlatform(lldb::SBPlatform &platform);
+
     lldb::SBSourceManager
     GetSourceManager ();
 

Modified: head/contrib/llvm/tools/lldb/include/lldb/API/SBError.h
==============================================================================
--- head/contrib/llvm/tools/lldb/include/lldb/API/SBError.h	Tue Dec  3 18:59:11 2013	(r258883)
+++ head/contrib/llvm/tools/lldb/include/lldb/API/SBError.h	Tue Dec  3 19:23:54 2013	(r258884)
@@ -72,6 +72,7 @@ protected:
     friend class SBCommunication;
     friend class SBHostOS;
     friend class SBInputReader;
+    friend class SBPlatform;
     friend class SBProcess;
     friend class SBThread;
     friend class SBTarget;

Modified: head/contrib/llvm/tools/lldb/include/lldb/API/SBExpressionOptions.h
==============================================================================
--- head/contrib/llvm/tools/lldb/include/lldb/API/SBExpressionOptions.h	Tue Dec  3 18:59:11 2013	(r258883)
+++ head/contrib/llvm/tools/lldb/include/lldb/API/SBExpressionOptions.h	Tue Dec  3 19:23:54 2013	(r258884)
@@ -65,6 +65,12 @@ public:
     void
     SetTryAllThreads (bool run_others = true);
 
+    bool
+    GetTrapExceptions () const;
+    
+    void
+    SetTrapExceptions (bool trap_exceptions = true);
+
 protected:
 
     SBExpressionOptions (lldb_private::EvaluateExpressionOptions &expression_options);

Modified: head/contrib/llvm/tools/lldb/include/lldb/API/SBFileSpec.h
==============================================================================
--- head/contrib/llvm/tools/lldb/include/lldb/API/SBFileSpec.h	Tue Dec  3 18:59:11 2013	(r258883)
+++ head/contrib/llvm/tools/lldb/include/lldb/API/SBFileSpec.h	Tue Dec  3 19:23:54 2013	(r258884)
@@ -45,6 +45,12 @@ public:
     const char *
     GetDirectory() const;
 
+    void
+    SetFilename(const char *filename);
+    
+    void
+    SetDirectory(const char *directory);
+
     uint32_t
     GetPath (char *dst_path, size_t dst_len) const;
 
@@ -65,6 +71,7 @@ private:
     friend class SBLineEntry;
     friend class SBModule;
     friend class SBModuleSpec;
+    friend class SBPlatform;
     friend class SBProcess;
     friend class SBSourceManager;
     friend class SBThread;

Modified: head/contrib/llvm/tools/lldb/include/lldb/API/SBModule.h
==============================================================================
--- head/contrib/llvm/tools/lldb/include/lldb/API/SBModule.h	Tue Dec  3 18:59:11 2013	(r258883)
+++ head/contrib/llvm/tools/lldb/include/lldb/API/SBModule.h	Tue Dec  3 19:23:54 2013	(r258884)
@@ -76,6 +76,42 @@ public:
     bool
     SetPlatformFileSpec (const lldb::SBFileSpec &platform_file);
 
+    //------------------------------------------------------------------
+    /// Get accessor for the remote install path for a module.
+    ///
+    /// When debugging to a remote platform by connecting to a remote
+    /// platform, the install path of the module can be set. If the
+    /// install path is set, every time the process is about to launch
+    /// the target will install this module on the remote platform prior
+    /// to launching.
+    ///
+    /// @return
+    ///     A file specification object.
+    //------------------------------------------------------------------
+    lldb::SBFileSpec
+    GetRemoteInstallFileSpec ();
+    
+    //------------------------------------------------------------------
+    /// Set accessor for the remote install path for a module.
+    ///
+    /// When debugging to a remote platform by connecting to a remote
+    /// platform, the install path of the module can be set. If the
+    /// install path is set, every time the process is about to launch
+    /// the target will install this module on the remote platform prior
+    /// to launching.
+    ///
+    /// If \a file specifies a full path to an install location, the
+    /// module will be installed to this path. If the path is relative
+    /// (no directory specified, or the path is partial like "usr/lib"
+    /// or "./usr/lib", then the install path will be resolved using
+    /// the platform's current working directory as the base path.
+    ///
+    /// @param[in]
+    ///     A file specification object.
+    //------------------------------------------------------------------
+    bool
+    SetRemoteInstallFileSpec (lldb::SBFileSpec &file);
+    
     lldb::ByteOrder
     GetByteOrder ();
     

Copied: head/contrib/llvm/tools/lldb/include/lldb/API/SBPlatform.h (from r258883, vendor/lldb/dist/include/lldb/API/SBPlatform.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/contrib/llvm/tools/lldb/include/lldb/API/SBPlatform.h	Tue Dec  3 19:23:54 2013	(r258884, copy of r258883, vendor/lldb/dist/include/lldb/API/SBPlatform.h)
@@ -0,0 +1,198 @@
+//===-- SBPlatform.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_SBPlatform_h_
+#define LLDB_SBPlatform_h_
+
+#include "lldb/API/SBDefines.h"
+
+struct PlatformConnectOptions;
+struct PlatformShellCommand;
+
+namespace lldb {
+
+    class SBPlatformConnectOptions
+    {
+    public:
+        SBPlatformConnectOptions (const char *url);
+
+        SBPlatformConnectOptions (const SBPlatformConnectOptions &rhs);
+
+        ~SBPlatformConnectOptions ();
+        
+        void
+        operator=(const SBPlatformConnectOptions &rhs);
+
+        const char *
+        GetURL();
+        
+        void
+        SetURL(const char *url);
+        
+        bool
+        GetRsyncEnabled();
+        
+        void
+        EnableRsync (const char *options,
+                     const char *remote_path_prefix,
+                     bool omit_remote_hostname);
+                     
+        void
+        DisableRsync ();
+        
+        const char *
+        GetLocalCacheDirectory();
+
+        void
+        SetLocalCacheDirectory(const char *path);
+    protected:
+        PlatformConnectOptions *m_opaque_ptr;
+    };
+
+    class SBPlatformShellCommand
+    {
+    public:
+        SBPlatformShellCommand (const char *shell_command);
+        
+        SBPlatformShellCommand (const SBPlatformShellCommand &rhs);
+        
+        ~SBPlatformShellCommand();
+        
+        void
+        Clear();
+
+        const char *
+        GetCommand();
+
+        void
+        SetCommand(const char *shell_command);
+        
+        const char *
+        GetWorkingDirectory ();
+
+        void
+        SetWorkingDirectory (const char *path);
+
+        uint32_t
+        GetTimeoutSeconds ();
+        
+        void
+        SetTimeoutSeconds (uint32_t sec);
+        
+        int
+        GetSignal ();
+        
+        int
+        GetStatus ();
+        
+        const char *
+        GetOutput ();
+
+    protected:
+        friend class SBPlatform;
+
+        PlatformShellCommand *m_opaque_ptr;
+    };
+
+    class SBPlatform
+    {
+    public:
+        
+        SBPlatform ();
+        
+        SBPlatform (const char *platform_name);
+        
+        ~SBPlatform();
+        
+        bool
+        IsValid () const;
+        
+        void
+        Clear ();
+
+        const char *
+        GetWorkingDirectory();
+
+        bool
+        SetWorkingDirectory(const char *path);
+
+        const char *
+        GetName ();
+
+        SBError
+        ConnectRemote (SBPlatformConnectOptions &connect_options);
+
+        void
+        DisconnectRemote ();
+        
+        bool
+        IsConnected();
+
+        //----------------------------------------------------------------------
+        // The following functions will work if the platform is connected
+        //----------------------------------------------------------------------
+        const char *
+        GetTriple();
+
+        const char *
+        GetHostname ();
+        
+        const char *
+        GetOSBuild ();
+        
+        const char *
+        GetOSDescription ();
+
+        uint32_t
+        GetOSMajorVersion ();
+
+        uint32_t
+        GetOSMinorVersion ();
+
+        uint32_t
+        GetOSUpdateVersion ();
+
+        SBError
+        Put (SBFileSpec &src, SBFileSpec &dst);
+        
+        SBError
+        Get (SBFileSpec &src, SBFileSpec &dst);
+
+        SBError
+        Install (SBFileSpec& src, SBFileSpec& dst);
+
+        SBError
+        Run (SBPlatformShellCommand &shell_command);
+
+        SBError
+        MakeDirectory (const char *path, uint32_t file_permissions = eFilePermissionsDirectoryDefault);
+
+        uint32_t
+        GetFilePermissions (const char *path);
+        
+        SBError
+        SetFilePermissions (const char *path, uint32_t file_permissions);
+
+    protected:
+        
+        friend class SBDebugger;
+        friend class SBTarget;
+
+        lldb::PlatformSP
+        GetSP () const;
+        
+        void
+        SetSP (const lldb::PlatformSP& platform_sp);
+
+        lldb::PlatformSP m_opaque_sp;
+    };
+
+} // namespace lldb
+
+#endif // LLDB_SBPlatform_h_

Modified: head/contrib/llvm/tools/lldb/include/lldb/API/SBTarget.h
==============================================================================
--- head/contrib/llvm/tools/lldb/include/lldb/API/SBTarget.h	Tue Dec  3 18:59:11 2013	(r258883)
+++ head/contrib/llvm/tools/lldb/include/lldb/API/SBTarget.h	Tue Dec  3 19:23:54 2013	(r258884)
@@ -268,6 +268,23 @@ public:
     GetProcess ();
 
     //------------------------------------------------------------------
+    /// Install any binaries that need to be installed.
+    ///
+    /// This function does nothing when debugging on the host system.
+    /// When connected to remote platforms, the target's main executable
+    /// and any modules that have their remote install path set will be
+    /// installed on the remote platform. If the main executable doesn't
+    /// have an install location set, it will be installed in the remote
+    /// platform's working directory.
+    ///
+    /// @return
+    ///     An error describing anything that went wrong during
+    ///     installation.
+    //------------------------------------------------------------------
+    SBError
+    Install();
+    
+    //------------------------------------------------------------------
     /// Launch a new process.
     ///
     /// Launch a new process by spawning a new process using the

Modified: head/contrib/llvm/tools/lldb/include/lldb/API/SBThread.h
==============================================================================
--- head/contrib/llvm/tools/lldb/include/lldb/API/SBThread.h	Tue Dec  3 18:59:11 2013	(r258883)
+++ head/contrib/llvm/tools/lldb/include/lldb/API/SBThread.h	Tue Dec  3 19:23:54 2013	(r258884)
@@ -202,7 +202,10 @@ public:
     GetStatus (lldb::SBStream &status) const;
 
     SBThread
-    GetExtendedBacktrace (const char *type);
+    GetExtendedBacktraceThread (const char *type);
+
+    uint32_t
+    GetExtendedBacktraceOriginatingIndexID ();
 
 protected:
     friend class SBBreakpoint;

Modified: head/contrib/llvm/tools/lldb/include/lldb/Breakpoint/Breakpoint.h
==============================================================================
--- head/contrib/llvm/tools/lldb/include/lldb/Breakpoint/Breakpoint.h	Tue Dec  3 18:59:11 2013	(r258883)
+++ head/contrib/llvm/tools/lldb/include/lldb/Breakpoint/Breakpoint.h	Tue Dec  3 19:23:54 2013	(r258884)
@@ -311,6 +311,24 @@ public:
     //------------------------------------------------------------------
     lldb::BreakpointLocationSP
     GetLocationAtIndex (size_t index);
+    
+    //------------------------------------------------------------------
+    /// Removes all invalid breakpoint locations.
+    ///
+    /// Removes all breakpoint locations with architectures that aren't
+    /// compatible with \a arch. Also remove any breakpoint locations
+    /// with whose locations have address where the section has been
+    /// deleted (module and object files no longer exist).
+    ///
+    /// This is typically used after the process calls exec, or anytime
+    /// the architecture of the target changes.
+    ///
+    /// @param[in] arch
+    ///     If valid, check the module in each breakpoint to make sure
+    ///     they are compatible, otherwise, ignore architecture.
+    //------------------------------------------------------------------
+    void
+    RemoveInvalidLocations (const ArchSpec &arch);
 
     //------------------------------------------------------------------
     // The next section deals with various breakpoint options.

Modified: head/contrib/llvm/tools/lldb/include/lldb/Breakpoint/BreakpointList.h
==============================================================================
--- head/contrib/llvm/tools/lldb/include/lldb/Breakpoint/BreakpointList.h	Tue Dec  3 18:59:11 2013	(r258883)
+++ head/contrib/llvm/tools/lldb/include/lldb/Breakpoint/BreakpointList.h	Tue Dec  3 19:23:54 2013	(r258884)
@@ -132,6 +132,25 @@ public:
     bool
     Remove (lldb::break_id_t breakID, bool notify);
 
+    
+    //------------------------------------------------------------------
+    /// Removes all invalid breakpoint locations.
+    ///
+    /// Removes all breakpoint locations in the list with architectures
+    /// that aren't compatible with \a arch. Also remove any breakpoint
+    /// locations with whose locations have address where the section
+    /// has been deleted (module and object files no longer exist).
+    ///
+    /// This is typically used after the process calls exec, or anytime
+    /// the architecture of the target changes.
+    ///
+    /// @param[in] arch
+    ///     If valid, check the module in each breakpoint to make sure
+    ///     they are compatible, otherwise, ignore architecture.
+    //------------------------------------------------------------------
+    void
+    RemoveInvalidLocations (const ArchSpec &arch);
+
     void
     SetEnabledAll (bool enabled);
 

Modified: head/contrib/llvm/tools/lldb/include/lldb/Breakpoint/BreakpointLocationList.h
==============================================================================
--- head/contrib/llvm/tools/lldb/include/lldb/Breakpoint/BreakpointLocationList.h	Tue Dec  3 18:59:11 2013	(r258883)
+++ head/contrib/llvm/tools/lldb/include/lldb/Breakpoint/BreakpointLocationList.h	Tue Dec  3 19:23:54 2013	(r258884)
@@ -250,6 +250,9 @@ protected:
 
     bool
     RemoveLocation (const lldb::BreakpointLocationSP &bp_loc_sp);
+    
+    void
+    RemoveInvalidLocations (const ArchSpec &arch);
 
     typedef std::vector<lldb::BreakpointLocationSP> collection;
     typedef std::map<lldb_private::Address,
@@ -257,7 +260,7 @@ protected:
                      Address::ModulePointerAndOffsetLessThanFunctionObject> addr_map;
 
     Breakpoint &m_owner;
-    collection m_locations;
+    collection m_locations;         // Vector of locations, sorted by ID 
     addr_map m_address_to_location;
     mutable Mutex m_mutex;
     lldb::break_id_t m_next_id;

Modified: head/contrib/llvm/tools/lldb/include/lldb/Core/Address.h
==============================================================================
--- head/contrib/llvm/tools/lldb/include/lldb/Core/Address.h	Tue Dec  3 18:59:11 2013	(r258883)
+++ head/contrib/llvm/tools/lldb/include/lldb/Core/Address.h	Tue Dec  3 19:23:54 2013	(r258884)
@@ -534,6 +534,16 @@ public:
     bool
     CalculateSymbolContextLineEntry (LineEntry &line_entry) const;
 
+    //------------------------------------------------------------------
+    // Returns true if the section should be valid, but isn't because
+    // the shared pointer to the section can't be reconstructed from
+    // a weak pointer that contains a valid weak reference to a section.
+    // Returns false if the section weak pointer has no reference to
+    // a section, or if the section is still valid
+    //------------------------------------------------------------------
+    bool
+    SectionWasDeleted() const;
+
 protected:
     //------------------------------------------------------------------
     // Member variables.
@@ -550,7 +560,7 @@ protected:
     // have a valid section.
     //------------------------------------------------------------------
     bool
-    SectionWasDeleted() const;
+    SectionWasDeletedPrivate() const;
 
 };
 

Modified: head/contrib/llvm/tools/lldb/include/lldb/Core/Debugger.h
==============================================================================
--- head/contrib/llvm/tools/lldb/include/lldb/Core/Debugger.h	Tue Dec  3 18:59:11 2013	(r258883)
+++ head/contrib/llvm/tools/lldb/include/lldb/Core/Debugger.h	Tue Dec  3 19:23:54 2013	(r258884)
@@ -17,9 +17,6 @@
 #include <stack>
 
 #include "lldb/lldb-public.h"
-
-#include "lldb/API/SBDefines.h"
-
 #include "lldb/Core/Broadcaster.h"
 #include "lldb/Core/Communication.h"
 #include "lldb/Core/InputReaderStack.h"
@@ -55,6 +52,10 @@ friend class SourceManager;  // For GetS
 
 public:
 
+    typedef lldb::DynamicLibrarySP (*LoadPluginCallbackType) (const lldb::DebuggerSP &debugger_sp,
+                                                              const FileSpec& spec,
+                                                              Error& error);
+
     static lldb::DebuggerSP
     CreateInstance (lldb::LogOutputCallback log_callback = NULL, void *baton = NULL);
 
@@ -65,7 +66,7 @@ public:
     FindTargetWithProcess (Process *process);
 
     static void
-    Initialize ();
+    Initialize (LoadPluginCallbackType load_plugin_callback);
     
     static void 
     Terminate ();
@@ -333,9 +334,7 @@ public:
     {
         return m_instance_name;
     }
-    
-    typedef bool (*LLDBCommandPluginInit) (lldb::SBDebugger& debugger);
-    
+        
     bool
     LoadPlugin (const FileSpec& spec, Error& error);
 
@@ -377,6 +376,7 @@ protected:
     LogStreamMap m_log_streams;
     lldb::StreamSP m_log_callback_stream_sp;
     ConstString m_instance_name;
+    static LoadPluginCallbackType g_load_plugin_callback;
     typedef std::vector<lldb::DynamicLibrarySP> LoadedPluginsList;
     LoadedPluginsList m_loaded_plugins;
     

Modified: head/contrib/llvm/tools/lldb/include/lldb/Core/Module.h
==============================================================================
--- head/contrib/llvm/tools/lldb/include/lldb/Core/Module.h	Tue Dec  3 18:59:11 2013	(r258883)
+++ head/contrib/llvm/tools/lldb/include/lldb/Core/Module.h	Tue Dec  3 19:23:54 2013	(r258884)
@@ -570,6 +570,18 @@ public:
     }
 
     const FileSpec &
+    GetRemoteInstallFileSpec () const
+    {
+        return m_remote_install_file;
+    }
+    
+    void
+    SetRemoteInstallFileSpec (const FileSpec &file)
+    {
+        m_remote_install_file = file;
+    }
+    
+    const FileSpec &
     GetSymbolFileFileSpec () const
     {
         return m_symfile_spec;
@@ -1059,6 +1071,7 @@ protected:
     lldb_private::UUID          m_uuid;         ///< Each module is assumed to have a unique identifier to help match it up to debug symbols.
     FileSpec                    m_file;         ///< The file representation on disk for this module (if there is one).
     FileSpec                    m_platform_file;///< The path to the module on the platform on which it is being debugged
+    FileSpec                    m_remote_install_file;  ///< If set when debugging on remote platforms, this module will be installed at this location
     FileSpec                    m_symfile_spec; ///< If this path is valid, then this is the file that _will_ be used as the symbol file for this module
     ConstString                 m_object_name;  ///< The name an object within this module that is selected, or empty of the module is represented by \a m_file.
     uint64_t                    m_object_offset;

Modified: head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/CXXFormatterFunctions.h
==============================================================================
--- head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/CXXFormatterFunctions.h	Tue Dec  3 18:59:11 2013	(r258883)
+++ head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/CXXFormatterFunctions.h	Tue Dec  3 19:23:54 2013	(r258884)
@@ -17,6 +17,8 @@
 
 #include "lldb/Core/ConstString.h"
 #include "lldb/DataFormatters/FormatClasses.h"
+#include "lldb/DataFormatters/TypeSynthetic.h"
+#include "lldb/Target/ExecutionContext.h"
 #include "lldb/Target/Target.h"
 
 #include "clang/AST/ASTContext.h"

Modified: head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/FormatCache.h
==============================================================================
--- head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/FormatCache.h	Tue Dec  3 18:59:11 2013	(r258883)
+++ head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/FormatCache.h	Tue Dec  3 19:23:54 2013	(r258884)
@@ -18,6 +18,7 @@
 // Project includes
 #include "lldb/lldb-public.h"
 #include "lldb/Core/ConstString.h"
+#include "lldb/Host/Mutex.h"
 #include "lldb/DataFormatters/FormatClasses.h"
 
 namespace lldb_private {

Modified: head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/FormatClasses.h
==============================================================================
--- head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/FormatClasses.h	Tue Dec  3 18:59:11 2013	(r258883)
+++ head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/FormatClasses.h	Tue Dec  3 19:23:54 2013	(r258884)
@@ -10,9 +10,6 @@
 #ifndef lldb_FormatClasses_h_
 #define lldb_FormatClasses_h_
 
-// C Includes
-#include <stdint.h>
-
 // C++ Includes
 #include <string>
 #include <vector>
@@ -23,17 +20,86 @@
 #include "lldb/lldb-public.h"
 #include "lldb/lldb-enumerations.h"
 
-#include "lldb/Core/ValueObject.h"
-#include "lldb/Interpreter/ScriptInterpreterPython.h"
 #include "lldb/Symbol/ClangASTType.h"
 #include "lldb/Symbol/Type.h"
 
-#include "lldb/DataFormatters/TypeFormat.h"
-#include "lldb/DataFormatters/TypeSummary.h"
-#include "lldb/DataFormatters/TypeSynthetic.h"
-
 namespace lldb_private {
 
+class FormattersMatchCandidate
+{
+public:
+    
+    FormattersMatchCandidate (ConstString name,
+                              uint32_t reason,
+                              bool strip_ptr,
+                              bool strip_ref,
+                              bool strip_tydef) :
+    m_type_name(name),
+    m_reason(reason),
+    m_stripped_pointer(strip_ptr),
+    m_stripped_reference(strip_ref),
+    m_stripped_typedef(strip_tydef)
+    {
+    }
+    
+    ~FormattersMatchCandidate ()
+    {}
+    
+    ConstString
+    GetTypeName () const
+    {
+        return m_type_name;
+    }
+    
+    uint32_t
+    GetReason () const
+    {
+        return m_reason;
+    }
+    
+    bool
+    DidStripPointer () const
+    {
+        return m_stripped_pointer;
+    }
+    
+    bool
+    DidStripReference () const
+    {
+        return m_stripped_reference;
+    }
+    
+    bool
+    DidStripTypedef () const
+    {
+        return m_stripped_typedef;
+    }
+    
+    template <class Formatter>
+    bool
+    IsMatch (const std::shared_ptr<Formatter>& formatter_sp) const
+    {
+        if (!formatter_sp)
+            return false;
+        if (formatter_sp->Cascades() == false && DidStripTypedef())
+            return false;
+        if (formatter_sp->SkipsPointers() && DidStripPointer())
+            return false;
+        if (formatter_sp->SkipsReferences() && DidStripReference())
+            return false;
+        return true;
+    }
+    
+private:
+    ConstString m_type_name;
+    uint32_t m_reason;
+    bool m_stripped_pointer;
+    bool m_stripped_reference;
+    bool m_stripped_typedef;
+};
+
+typedef std::vector<FormattersMatchCandidate> FormattersMatchVector;
+    
 class TypeNameSpecifierImpl
 {
 public:

Modified: head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/FormatManager.h
==============================================================================
--- head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/FormatManager.h	Tue Dec  3 18:59:11 2013	(r258883)
+++ head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/FormatManager.h	Tue Dec  3 19:23:54 2013	(r258884)
@@ -19,6 +19,7 @@
 #include "lldb/lldb-enumerations.h"
 
 #include "lldb/DataFormatters/FormatCache.h"
+#include "lldb/DataFormatters/FormatClasses.h"
 #include "lldb/DataFormatters/FormatNavigator.h"
 #include "lldb/DataFormatters/TypeCategory.h"
 #include "lldb/DataFormatters/TypeCategoryMap.h"
@@ -213,7 +214,36 @@ public:
     {
     }
     
+    static FormattersMatchVector
+    GetPossibleMatches (ValueObject& valobj,
+                        lldb::DynamicValueType use_dynamic)
+    {
+        FormattersMatchVector matches;
+        GetPossibleMatches (valobj,
+                            valobj.GetClangType(),
+                            lldb_private::eFormatterChoiceCriterionDirectChoice,
+                            use_dynamic,
+                            matches,
+                            false,
+                            false,
+                            false,
+                            true);
+        return matches;
+    }
+
 private:
+    
+    static void
+    GetPossibleMatches (ValueObject& valobj,
+                        ClangASTType clang_type,
+                        uint32_t reason,
+                        lldb::DynamicValueType use_dynamic,
+                        FormattersMatchVector& entries,
+                        bool did_strip_ptr,
+                        bool did_strip_ref,
+                        bool did_strip_typedef,
+                        bool root_level = false);
+    
     FormatCache m_format_cache;
     NamedSummariesMap m_named_summaries_map;
     std::atomic<uint32_t> m_last_revision;

Modified: head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/FormatNavigator.h
==============================================================================
--- head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/FormatNavigator.h	Tue Dec  3 18:59:11 2013	(r258883)
+++ head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/FormatNavigator.h	Tue Dec  3 19:23:54 2013	(r258884)
@@ -26,6 +26,9 @@
 #include "lldb/Core/ValueObject.h"
 
 #include "lldb/DataFormatters/FormatClasses.h"
+#include "lldb/DataFormatters/TypeFormat.h"
+#include "lldb/DataFormatters/TypeSummary.h"
+#include "lldb/DataFormatters/TypeSynthetic.h"
 
 #include "lldb/Symbol/ClangASTContext.h"
 #include "lldb/Symbol/ClangASTType.h"
@@ -459,228 +462,29 @@ protected:
         }
         return false;
     }
-    
-    bool
-    Get_BitfieldMatch (ValueObject& valobj,
-                       ConstString typeName,
-                       MapValueType& entry,
-                       uint32_t& reason)
-    {
-        Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES));
-        // for bitfields, append size to the typename so one can custom format them
-        StreamString sstring;
-        sstring.Printf("%s:%d",typeName.AsCString(),valobj.GetBitfieldBitSize());
-        ConstString bitfieldname = ConstString(sstring.GetData());
-        if (log)
-            log->Printf("[Get_BitfieldMatch] appended bitfield info, final result is %s", bitfieldname.GetCString());
-        if (Get(bitfieldname, entry))
-        {
-            if (log)
-                log->Printf("[Get_BitfieldMatch] bitfield direct match found, returning");
-            return true;
-        }
-        else
-        {
-            reason |= lldb_private::eFormatterChoiceCriterionStrippedBitField;
-            if (log)
-                log->Printf("[Get_BitfieldMatch] no bitfield direct match");
-            return false;
-        }
-    }
-    
-    bool Get_ObjC (ValueObject& valobj,
-                   MapValueType& entry)
-    {
-        Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES));
-        lldb::ProcessSP process_sp = valobj.GetProcessSP();
-        ObjCLanguageRuntime* runtime = process_sp->GetObjCLanguageRuntime();
-        if (runtime == NULL)
-        {
-            if (log)
-                log->Printf("[Get_ObjC] no valid ObjC runtime, skipping dynamic");
-            return false;
-        }
-        ObjCLanguageRuntime::ClassDescriptorSP objc_class_sp (runtime->GetClassDescriptor(valobj));
-        if (!objc_class_sp)
-        {
-            if (log)
-                log->Printf("[Get_ObjC] invalid ISA, skipping dynamic");
-            return false;
-        }
-        ConstString name (objc_class_sp->GetClassName());
-        if (log)
-            log->Printf("[Get_ObjC] dynamic type inferred is %s - looking for direct dynamic match", name.GetCString());
-        if (Get(name, entry))
-        {
-            if (log)
-                log->Printf("[Get_ObjC] direct dynamic match found, returning");
-            return true;
-        }
-        if (log)
-            log->Printf("[Get_ObjC] no dynamic match");
-        return false;
-    }
-    
+
     bool
-    Get_Impl (ValueObject& valobj,
-              ClangASTType clang_type,
-              MapValueType& entry,
-              lldb::DynamicValueType use_dynamic,
-              uint32_t& reason)
+    Get (const FormattersMatchVector& candidates,
+         MapValueType& entry,
+         uint32_t *reason)
     {
-        Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES));
-
-        if (!clang_type.IsValid())
-        {
-            if (log)
-                log->Printf("[Get_Impl] type is invalid, returning");
-            return false;
-        }
-        
-        clang_type = clang_type.RemoveFastQualifiers();
-
-        ConstString typeName(clang_type.GetConstTypeName());
-        
-        if (valobj.GetBitfieldBitSize() > 0)
+        for (const FormattersMatchCandidate& candidate : candidates)
         {
-            if (Get_BitfieldMatch(valobj, typeName, entry, reason))
-                return true;
-        }
-        
-        if (log)
-            log->Printf("[Get_Impl] trying to get %s for VO name %s of type %s",
-                        m_name.c_str(),
-                        valobj.GetName().AsCString(),
-                        typeName.AsCString());
-        
-        if (Get(typeName, entry))
-        {
-            if (log)
-                log->Printf("[Get] direct match found, returning");
-            return true;
-        }
-        if (log)
-            log->Printf("[Get_Impl] no direct match");
-        
-        // strip pointers and references and see if that helps
-        if (clang_type.IsReferenceType())
-        {
-            if (log)
-                log->Printf("[Get_Impl] stripping reference");
-            if (Get_Impl(valobj, clang_type.GetNonReferenceType(), entry, use_dynamic, reason) && !entry->SkipsReferences())
+            if (Get(candidate.GetTypeName(),entry))
             {
-                reason |= lldb_private::eFormatterChoiceCriterionStrippedPointerReference;
-                return true;
-            }
-        }
-        else if (clang_type.IsPointerType())
-        {
-            if (log)
-                log->Printf("[Get_Impl] stripping pointer");
-            if (Get_Impl(valobj, clang_type.GetPointeeType(), entry, use_dynamic, reason) && !entry->SkipsPointers())
-            {
-                reason |= lldb_private::eFormatterChoiceCriterionStrippedPointerReference;
-                return true;
-            }
-        }
-        
-        bool canBeObjCDynamic = valobj.GetClangType().IsPossibleDynamicType (NULL,
-                                                                             false, // no C++
-                                                                             true); // yes ObjC
-        
-        if (canBeObjCDynamic)
-        {
-            if (use_dynamic != lldb::eNoDynamicValues)
-            {
-                if (log)
-                    log->Printf("[Get_Impl] allowed to figure out dynamic ObjC type");
-                if (Get_ObjC(valobj,entry))
+                if (candidate.IsMatch(entry) == false)
                 {
-                    reason |= lldb_private::eFormatterChoiceCriterionDynamicObjCDiscovery;
-                    return true;
+                    entry.reset();
+                    continue;
                 }
-            }
-            if (log)
-                log->Printf("[Get_Impl] dynamic disabled or failed - stripping ObjC pointer");
-            if (Get_Impl(valobj, clang_type.GetPointeeType(), entry, use_dynamic, reason) && !entry->SkipsPointers())
-            {
-                reason |= lldb_private::eFormatterChoiceCriterionStrippedPointerReference;
-                return true;
-            }
-        }
-        
-        // try to strip typedef chains
-        if (clang_type.IsTypedefType())
-        {
-            if (log)
-                log->Printf("[Get_Impl] stripping typedef");
-            if ((Get_Impl(valobj, clang_type.GetTypedefedType(), entry, use_dynamic, reason)) && entry->Cascades())
-            {
-                reason |= lldb_private::eFormatterChoiceCriterionNavigatedTypedefs;
-                return true;
-            }
-        }
-        
-        // out of luck here
-        return false;
-    }
-    
-    // we are separately passing in valobj and type because the valobj is fixed (and is used for ObjC discovery and bitfield size)
-    // but the type can change (e.g. stripping pointers, ...)
-    bool Get (ValueObject& valobj,
-              ClangASTType clang_type,
-              MapValueType& entry,
-              lldb::DynamicValueType use_dynamic,
-              uint32_t& reason)
-    {
-        Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES));
-        
-        if (Get_Impl (valobj, clang_type, entry, use_dynamic, reason))
-            return true;
-        
-        // try going to the unqualified type
-        do {
-            if (log)
-                log->Printf("[Get] trying the unqualified type");
-            if (!clang_type.IsValid())
-                break;
-
-            ClangASTType unqual_clang_ast_type = clang_type.GetFullyUnqualifiedType();
-            if (!unqual_clang_ast_type.IsValid())
-            {
-                if (log)
-                    log->Printf("[Get] could not get the unqual_clang_ast_type");
-                break;
-            }
-            if (unqual_clang_ast_type.GetOpaqueQualType() != clang_type.GetOpaqueQualType())
-            {
-                if (log)
-                    log->Printf("[Get] unqualified type is there and is not the same, let's try");
-                if (Get_Impl (valobj, unqual_clang_ast_type,entry, use_dynamic, reason))
-                    return true;
-            }
-            else if (log)
-                log->Printf("[Get] unqualified type same as original type");
-        } while(false);
-        
-        // if all else fails, go to static type
-        if (valobj.IsDynamic())
-        {
-            if (log)
-                log->Printf("[Get] going to static value");
-            lldb::ValueObjectSP static_value_sp(valobj.GetStaticValue());
-            if (static_value_sp)
-            {
-                if (log)
-                    log->Printf("[Get] has a static value - actually use it");
-                if (Get(*static_value_sp.get(), static_value_sp->GetClangType(), entry, use_dynamic, reason))
+                else
                 {
-                    reason |= lldb_private::eFormatterChoiceCriterionWentToStaticValue;
+                    if(reason)
+                        *reason = candidate.GetReason();
                     return true;
                 }
             }
         }
-        
         return false;
     }
 };

Modified: head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/TypeCategory.h
==============================================================================
--- head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/TypeCategory.h	Tue Dec  3 18:59:11 2013	(r258883)
+++ head/contrib/llvm/tools/lldb/include/lldb/DataFormatters/TypeCategory.h	Tue Dec  3 19:23:54 2013	(r258884)
@@ -18,6 +18,7 @@
 #include "lldb/lldb-public.h"
 #include "lldb/lldb-enumerations.h"
 
+#include "lldb/DataFormatters/FormatClasses.h"
 #include "lldb/DataFormatters/FormatNavigator.h"
 
 namespace lldb_private {    
@@ -177,23 +178,22 @@ namespace lldb_private {    
                 return m_enabled_position;
         }
         
-        
         bool
         Get (ValueObject& valobj,
+             const FormattersMatchVector& candidates,
              lldb::TypeFormatImplSP& entry,
-             lldb::DynamicValueType use_dynamic,
              uint32_t* reason = NULL);
         
         bool
         Get (ValueObject& valobj,
+             const FormattersMatchVector& candidates,
              lldb::TypeSummaryImplSP& entry,
-             lldb::DynamicValueType use_dynamic,
              uint32_t* reason = NULL);

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-all mailing list