[Lldb-commits] [lldb] r125815 - in /lldb/trunk: include/lldb/Core/PluginManager.h include/lldb/Target/Process.h include/lldb/Target/Target.h include/lldb/lldb-enumerations.h source/Core/PluginManager.cpp source/Core/UserSettingsController.cpp source/Interpreter/CommandInterpreter.cpp source/Target/Process.cpp source/Target/Target.cpp source/lldb.cpp

Stephen Wilson wilsons at start.ca
Thu Feb 17 20:22:14 PST 2011


Hi Greg,

Greg Clayton <gclayton at apple.com> writes:

> Author: gclayton
> Date: Thu Feb 17 19:44:25 2011
> New Revision: 125815
>
> URL: http://llvm.org/viewvc/llvm-project?rev=125815&view=rev
> Log:
> Added new target instance settings for execution settings:
>
> Targets can now specify some additional parameters for when we debug
> executables that can help with plug-in selection:
>
> target.execution-level = auto | user | kernel
> target.execution-mode  = auto | dynamic | static
> target.execution-os-type = auto | none | halted | live
>
> On some systems, the binaries that are created are the same wether you use
> them to debug a kernel, or a user space program. Many times inspecting an
> object file can reveal what an executable should be. For these cases we can
> now be a little more complete by specifying wether to detect all of these
> things automatically (inspect the main executable file and select a plug-in
> accordingly), or manually to force the selection of certain plug-ins.
>
> To do this we now allow the specficifation of wether one is debugging a user
> space program (target.execution-level = user) or a kernel program
> (target.execution-level = kernel).
>
> We can also specify if we want to debug a program where shared libraries
> are dynamically loaded using a DynamicLoader plug-in
> (target.execution-mode = dynamic), or wether we will treat all symbol files
> as already linked at the correct address (target.execution-mode = static).
>
> We can also specify if the inferior we are debugging is being debugged on
> a bare board (target.execution-os-type = none), or debugging an OS where
> we have a JTAG or other direct connection to the inferior stops the entire
> OS (target.execution-os-type = halted), or if we are debugging a program on
> something that has live debug services (target.execution-os-type = live).


Could you say a few more words about the semantics for the
execution-os-type?  For example, I would think that bare-board debugging
(target.execution-os-type = none) would include JTAG scenarios and thus
could overlap with target.execution-os-type = halted.


I can't shake the feeling that what we need here is a
"target.execution-type" where the setting is the logical OR of one or
more flags.  On bit could cover "stop the world" debugging scenarios
like JTAG without implying anything specific about the operating system
context.  Other bits could communicate the precence of an OS and
additional features it may or may not possess.


Just a thought.


Thanks for you help!


>
> For the "target.execution-os-type = halted" mode, we will need to create
> ProcessHelper plug-ins that allow us to extract the process/thread and other
> OS information by reading/writing memory.
>
> This should allow LLDB to be used for a wide variety of debugging tasks and
> handle them all correctly.
>
>
> Modified:
>     lldb/trunk/include/lldb/Core/PluginManager.h
>     lldb/trunk/include/lldb/Target/Process.h
>     lldb/trunk/include/lldb/Target/Target.h
>     lldb/trunk/include/lldb/lldb-enumerations.h
>     lldb/trunk/source/Core/PluginManager.cpp
>     lldb/trunk/source/Core/UserSettingsController.cpp
>     lldb/trunk/source/Interpreter/CommandInterpreter.cpp
>     lldb/trunk/source/Target/Process.cpp
>     lldb/trunk/source/Target/Target.cpp
>     lldb/trunk/source/lldb.cpp
>
> Modified: lldb/trunk/include/lldb/Core/PluginManager.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/PluginManager.h?rev=125815&r1=125814&r2=125815&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Core/PluginManager.h (original)
> +++ lldb/trunk/include/lldb/Core/PluginManager.h Thu Feb 17 19:44:25 2011
> @@ -185,6 +185,12 @@
>
>      static ProcessCreateInstance
>      GetProcessCreateCallbackForPluginName (const char *name);
> +
> +    static const char *
> +    GetProcessPluginNameAtIndex (uint32_t idx);
> +
> +    static const char *
> +    GetProcessPluginDescriptionAtIndex (uint32_t idx);
>
>      //------------------------------------------------------------------
>      // SymbolFile
>
> Modified: lldb/trunk/include/lldb/Target/Process.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Process.h?rev=125815&r1=125814&r2=125815&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Target/Process.h (original)
> +++ lldb/trunk/include/lldb/Target/Process.h Thu Feb 17 19:44:25 2011
> @@ -394,8 +394,6 @@
>          lldb::InstanceSettingsSP
>          CreateInstanceSettings (const char *instance_name);
>
> -        static lldb::OptionEnumValueElement g_plugins[];
> -
>      private:
>
>          // Class-wide settings.
> @@ -409,6 +407,9 @@
>      Initialize ();
>
>      static void
> +    DidInitialize ();
> +
> +    static void
>      Terminate ();
>
>      static lldb::UserSettingsControllerSP &
>
> Modified: lldb/trunk/include/lldb/Target/Target.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Target.h?rev=125815&r1=125814&r2=125815&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Target/Target.h (original)
> +++ lldb/trunk/include/lldb/Target/Target.h Thu Feb 17 19:44:25 2011
> @@ -15,7 +15,7 @@
>
>  // Other libraries and framework includes
>  // Project includes
> -#include "lldb/lldb-private.h"
> +#include "lldb/lldb-include.h"
>  #include "lldb/Breakpoint/BreakpointList.h"
>  #include "lldb/Breakpoint/BreakpointLocationCollection.h"
>  #include "lldb/Core/Broadcaster.h"
> @@ -32,6 +32,9 @@
>
>  namespace lldb_private {
>
> +//----------------------------------------------------------------------
> +// TargetInstanceSettings
> +//----------------------------------------------------------------------
>  class TargetInstanceSettings : public InstanceSettings
>  {
>  public:
> @@ -62,6 +65,43 @@
>                                StringList &value,
>                                Error *err);
>
> +    lldb::ExecutionLevel
> +    GetExecutionLevel () const
> +    {
> +        return m_execution_level;
> +    }
> +
> +    void
> +    SetExecutionLevel (lldb::ExecutionLevel execution_level)
> +    {
> +        m_execution_level = execution_level;
> +    }
> +
> +    lldb::ExecutionMode
> +    GetExecutionMode () const
> +    {
> +        return m_execution_mode;
> +    }
> +
> +    void
> +    SetExecutionMode (lldb::ExecutionMode execution_mode)
> +    {
> +        m_execution_mode = execution_mode;
> +    }
> +
> +    lldb::ExecutionOSType
> +    GetExecutionOSType () const
> +    {
> +        return m_execution_os_type;
> +    }
> +
> +    void
> +    SetExecutionOSType (lldb::ExecutionOSType execution_os_type)
> +    {
> +        m_execution_os_type = execution_os_type;
> +    }
> +
> +
>  protected:
>
>      void
> @@ -73,8 +113,15 @@
>
>      std::string m_expr_prefix_path;
>      std::string m_expr_prefix_contents;
> +    lldb::ExecutionLevel m_execution_level;
> +    lldb::ExecutionMode m_execution_mode;
> +    lldb::ExecutionOSType m_execution_os_type;
> +
>  };
>
> +//----------------------------------------------------------------------
> +// Target
> +//----------------------------------------------------------------------
>  class Target :
>      public Broadcaster,
>      public ExecutionContextScope,
> @@ -83,46 +130,16 @@
>  public:
>      friend class TargetList;
>
> -    class SettingsController : public UserSettingsController
> +    //------------------------------------------------------------------
> +    /// Broadcaster event bits definitions.
> +    //------------------------------------------------------------------
> +    enum
>      {
> -    public:
> -        SettingsController ();
> -
> -        virtual
> -        ~SettingsController ();
> -
> -        bool
> -        SetGlobalVariable (const ConstString &var_name,
> -                           const char *index_value,
> -                           const char *value,
> -                           const SettingEntry &entry,
> -                           const lldb::VarSetOperationType op,
> -                           Error&err);
> -
> -        bool
> -        GetGlobalVariable (const ConstString &var_name,
> -                           StringList &value,
> -                           Error &err);
> -
> -        static SettingEntry global_settings_table[];
> -        static SettingEntry instance_settings_table[];
> -
> -    protected:
> -
> -        lldb::InstanceSettingsSP
> -        CreateInstanceSettings (const char *instance_name);
> -
> -        static const ConstString &
> -        DefArchVarName ();
> -
> -    private:
> -
> -        // Class-wide settings.
> -        ArchSpec m_default_architecture;
> -
> -        DISALLOW_COPY_AND_ASSIGN (SettingsController);
> +        eBroadcastBitBreakpointChanged  = (1 << 0),
> +        eBroadcastBitModulesLoaded      = (1 << 1),
> +        eBroadcastBitModulesUnloaded    = (1 << 2)
>      };
> -
> +
>      static void
>      Initialize ();
>
> @@ -141,16 +158,6 @@
>      void
>      UpdateInstanceName ();
>
> -    //------------------------------------------------------------------
> -    /// Broadcaster event bits definitions.
> -    //------------------------------------------------------------------
> -    enum
> -    {
> -        eBroadcastBitBreakpointChanged  = (1 << 0),
> -        eBroadcastBitModulesLoaded      = (1 << 1),
> -        eBroadcastBitModulesUnloaded    = (1 << 2)
> -    };
> -
>      lldb::ModuleSP
>      GetSharedModule (const FileSpec& file_spec,
>                       const ArchSpec& arch,
> @@ -206,7 +213,6 @@
>      lldb::TargetSP
>      GetSP();
>
> -
>      //------------------------------------------------------------------
>      // This part handles the breakpoints.
>      //------------------------------------------------------------------
> @@ -501,6 +507,46 @@
>      }
>
>
> +    //------------------------------------------------------------------
> +    // Target::SettingsController
> +    //------------------------------------------------------------------
> +    class SettingsController : public UserSettingsController
> +    {
> +    public:
> +        SettingsController ();
> +
> +        virtual
> +        ~SettingsController ();
> +
> +        bool
> +        SetGlobalVariable (const ConstString &var_name,
> +                           const char *index_value,
> +                           const char *value,
> +                           const SettingEntry &entry,
> +                           const lldb::VarSetOperationType op,
> +                           Error&err);
> +
> +        bool
> +        GetGlobalVariable (const ConstString &var_name,
> +                           StringList &value,
> +                           Error &err);
> +
> +        static SettingEntry global_settings_table[];
> +        static SettingEntry instance_settings_table[];
> +
> +    protected:
> +
> +        lldb::InstanceSettingsSP
> +        CreateInstanceSettings (const char *instance_name);
> +
> +    private:
> +
> +        // Class-wide settings.
> +        ArchSpec m_default_architecture;
> +
> +        DISALLOW_COPY_AND_ASSIGN (SettingsController);
> +    };
> +
>
>  protected:
>      friend class lldb::SBTarget;
>
> Modified: lldb/trunk/include/lldb/lldb-enumerations.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/lldb-enumerations.h?rev=125815&r1=125814&r2=125815&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/lldb-enumerations.h (original)
> +++ lldb/trunk/include/lldb/lldb-enumerations.h Thu Feb 17 19:44:25 2011
> @@ -618,6 +618,60 @@
>      eLazyBoolYes        = 1
>  } LazyBool;
>
> +//------------------------------------------------------------------
> +/// Execution Level
> +//------------------------------------------------------------------
> +typedef enum ExecutionLevel
> +{
> +    eExecutionLevelAuto,    // Automatically detect how to run an executable
> +    eExecutionLevelKernel,  // Execute a program as a kernel executable
> +    eExecutionLevelUser     // Execute a program as a user space executable
> +} ExecutionLevel;
> +
> +
> +//------------------------------------------------------------------
> +/// Execution mode
> +//------------------------------------------------------------------
> +typedef enum ExecutionMode
> +{
> +    // Automatically detect the execution mode
> +    eExecutionModeAuto,
> +
> +    // Execute with no shared libraries, everything is where the executable
> +    // files say they are (file addresses == load addresses)
> +    eExecutionModeStatic,
> +
> +    // Execute with shared libraries using a dynamic loader plug-in to
> +    // detect when shared libraries are loaded/unloaded.
> +    eExecutionModeDynamic
> +
> +} ExecutionMode;
> +
> +//------------------------------------------------------------------
> +/// Execution OS
> +//------------------------------------------------------------------
> +typedef enum ExecutionOSType
> +{
> +    // Automatically detect the execution operating system
> +    eExecutionOSTypeAuto,
> +
> +    // There is no operating system (no processes or threads).
> +    eExecutionOSTypeNone,
> +
> +    // There is an OS, but when we execution stops, the entire OS is halted
> +    // (common when debugging in eExecutionLevelKernel modes). Processes and
> +    // threads can be queried, selected and switched between using memory
> +    // reads/writes using a ProcessHelper plug-in (which has yet to be
> +    // designed).
> +    eExecutionOSTypeHalted,
> +
> +    // There is live OS with debug services that we can talk to for process,
> +    // thread, and other OS queries.
> +    eExecutionOSTypeLive
> +
> +} ExecutionOSType;
> +
> +
>  } // namespace lldb
>
>
>
> Modified: lldb/trunk/source/Core/PluginManager.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/PluginManager.cpp?rev=125815&r1=125814&r2=125815&view=diff
> ==============================================================================
> --- lldb/trunk/source/Core/PluginManager.cpp (original)
> +++ lldb/trunk/source/Core/PluginManager.cpp Thu Feb 17 19:44:25 2011
> @@ -1278,6 +1278,24 @@
>      return false;
>  }
>
> +const char *
> +PluginManager::GetProcessPluginNameAtIndex (uint32_t idx)
> +{
> +    ProcessInstance instance;
> +    if (AccessProcessInstances (ePluginGetInstanceAtIndex, instance, idx))
> +        return instance.name.c_str();
> +    return NULL;
> +}
> +
> +const char *
> +PluginManager::GetProcessPluginDescriptionAtIndex (uint32_t idx)
> +{
> +    ProcessInstance instance;
> +    if (AccessProcessInstances (ePluginGetInstanceAtIndex, instance, idx))
> +        return instance.description.c_str();
> +    return NULL;
> +}
> +
>  bool
>  PluginManager::UnregisterPlugin (ProcessCreateInstance create_callback)
>  {
>
> Modified: lldb/trunk/source/Core/UserSettingsController.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/UserSettingsController.cpp?rev=125815&r1=125814&r2=125815&view=diff
> ==============================================================================
> --- lldb/trunk/source/Core/UserSettingsController.cpp (original)
> +++ lldb/trunk/source/Core/UserSettingsController.cpp Thu Feb 17 19:44:25 2011
> @@ -17,10 +17,56 @@
>  #include "lldb/Core/StreamString.h"
>  #include "lldb/Interpreter/CommandInterpreter.h"
>
> +using namespace lldb;
>  using namespace lldb_private;
>
> +static void
> +DumpSettingEntry (CommandInterpreter &interpreter,
> +                  StreamString &result_stream,
> +                  const uint32_t max_len,
> +                  const SettingEntry &entry)
> +{
> +    StreamString description;
> +
> +    if (entry.description)
> +        description.Printf ("%s", entry.description);
> +
> +    if (entry.default_value && entry.default_value[0])
> +        description.Printf (" (default: %s)", entry.default_value);
> +
> +    interpreter.OutputFormattedHelpText (result_stream,
> +                                         entry.var_name,
> +                                         "--",
> +                                         description.GetData(),
> +                                         max_len);
> +
> +    if (entry.enum_values && entry.enum_values[0].string_value)
> +    {
> +        interpreter.OutputFormattedHelpText (result_stream,
> +                                             "",
> +                                             "  ",
> +                                             "Enumeration values:",
> +                                             max_len);
> +        for (uint32_t enum_idx=0; entry.enum_values[enum_idx].string_value != NULL; ++enum_idx)
> +        {
> +            description.Clear();
> +            if (entry.enum_values[enum_idx].usage)
> +                description.Printf ("%s = %s",
> +                                    entry.enum_values[enum_idx].string_value,
> +                                    entry.enum_values[enum_idx].usage);
> +            else
> +                description.Printf ("%s", entry.enum_values[enum_idx].string_value);
> +            interpreter.OutputFormattedHelpText (result_stream,
> +                                                 "",
> +                                                 "  ",
> +                                                 description.GetData(),
> +                                                 max_len);
> +        }
> +    }
> +}
> +
>  UserSettingsController::UserSettingsController (const char *level_name,
> -                                                const lldb::UserSettingsControllerSP &parent) :
> +                                                const UserSettingsControllerSP &parent) :
>      m_default_settings (),
>      m_settings (),
>      m_children (),
> @@ -46,7 +92,7 @@
>      const char *index_value,
>      const char *value,
>      const SettingEntry &entry,
> -    const lldb::VarSetOperationType op,
> +    const VarSetOperationType op,
>      Error &err
>  )
>  {
> @@ -66,11 +112,11 @@
>  }
>
>  bool
> -UserSettingsController::InitializeSettingsController (lldb::UserSettingsControllerSP &controller_sp,
> +UserSettingsController::InitializeSettingsController (UserSettingsControllerSP &controller_sp,
>                                                        SettingEntry *global_settings,
>                                                        SettingEntry *instance_settings)
>  {
> -    const lldb::UserSettingsControllerSP &parent = controller_sp->GetParent ();
> +    const UserSettingsControllerSP &parent = controller_sp->GetParent ();
>      if (parent)
>          parent->RegisterChild (controller_sp);
>
> @@ -84,9 +130,9 @@
>  }
>
>  void
> -UserSettingsController::FinalizeSettingsController (lldb::UserSettingsControllerSP &controller_sp)
> +UserSettingsController::FinalizeSettingsController (UserSettingsControllerSP &controller_sp)
>  {
> -    const lldb::UserSettingsControllerSP &parent = controller_sp->GetParent ();
> +    const UserSettingsControllerSP &parent = controller_sp->GetParent ();
>      if (parent)
>          parent->RemoveChild (controller_sp);
>  }
> @@ -100,7 +146,7 @@
>      num_entries = m_settings.global_settings.size();
>      for (int i = 0; i < num_entries; ++i)
>      {
> -        SettingEntry &entry = m_settings.global_settings[i];
> +        const SettingEntry &entry = m_settings.global_settings[i];
>          if (entry.default_value != NULL)
>          {
>              StreamString full_name;
> @@ -108,30 +154,19 @@
>                  full_name.Printf ("%s.%s", prefix, entry.var_name);
>              else
>                  full_name.Printf ("%s", entry.var_name);
> -            SetVariable (full_name.GetData(), entry.default_value, lldb::eVarSetOperationAssign, false, "");
> -        }
> -        else if ((entry.var_type == lldb::eSetVarTypeEnum)
> -                 && (entry.enum_values != NULL))
> -        {
> -            StreamString full_name;
> -            if (prefix[0] != '\0')
> -                full_name.Printf ("%s.%s", prefix, entry.var_name);
> -            else
> -                full_name.Printf ("%s", entry.var_name);
> -            SetVariable (full_name.GetData(), entry.enum_values[0].string_value, lldb::eVarSetOperationAssign,
> -                         false, "");
> +            SetVariable (full_name.GetData(), entry.default_value, eVarSetOperationAssign, false, "");
>          }
>      }
>  }
>
> -const lldb::UserSettingsControllerSP &
> +const UserSettingsControllerSP &
>  UserSettingsController::GetParent ()
>  {
>      return m_settings.parent;
>  }
>
>  void
> -UserSettingsController::RegisterChild (const lldb::UserSettingsControllerSP &child)
> +UserSettingsController::RegisterChild (const UserSettingsControllerSP &child)
>  {
>      Mutex::Locker locker (m_children_mutex);
>
> @@ -161,13 +196,13 @@
>      return m_children.size();
>  }
>
> -const lldb::UserSettingsControllerSP
> +const UserSettingsControllerSP
>  UserSettingsController::GetChildAtIndex (size_t index)
>  {
>      if (index < m_children.size())
>          return m_children[index];
>
> -    lldb::UserSettingsControllerSP dummy_value;
> +    UserSettingsControllerSP dummy_value;
>
>      return dummy_value;
>  }
> @@ -178,7 +213,7 @@
>
>      for (int i = 0; i < m_settings.global_settings.size(); ++i)
>      {
> -        SettingEntry &entry = m_settings.global_settings[i];
> +        const SettingEntry &entry = m_settings.global_settings[i];
>          ConstString entry_name (entry.var_name);
>          if (entry_name == var_name)
>              return &entry;
> @@ -205,7 +240,7 @@
>  void
>  UserSettingsController::BuildParentPrefix (std::string &parent_prefix)
>  {
> -    lldb::UserSettingsControllerSP parent = GetParent();
> +    UserSettingsControllerSP parent = GetParent();
>      if (parent.get() != NULL)
>      {
>          parent->BuildParentPrefix (parent_prefix);
> @@ -216,14 +251,14 @@
>  }
>
>  void
> -UserSettingsController::RemoveChild (const lldb::UserSettingsControllerSP &child)
> +UserSettingsController::RemoveChild (const UserSettingsControllerSP &child)
>  {
>      Mutex::Locker locker (m_children_mutex);
> -    std::vector<lldb::UserSettingsControllerSP>::iterator pos, end = m_children.end();
> +    std::vector<UserSettingsControllerSP>::iterator pos, end = m_children.end();
>
>     for (pos = m_children.begin(); pos != end; ++pos)
>     {
> -      lldb::UserSettingsControllerSP entry = *pos;
> +      UserSettingsControllerSP entry = *pos;
>        if (entry == child)
>        {
>            m_children.erase (pos);
> @@ -235,7 +270,7 @@
>  Error
>  UserSettingsController::SetVariable (const char *full_dot_name,
>                                       const char *value,
> -                                     const lldb::VarSetOperationType op,
> +                                     const VarSetOperationType op,
>                                       const bool override,
>                                       const char *debugger_instance_name,
>                                       const char *index_value)
> @@ -285,9 +320,9 @@
>                      return err;
>
>                  if ((value == NULL || value[0] == '\0')
> -                    && (op == lldb::eVarSetOperationAssign))
> +                    && (op == eVarSetOperationAssign))
>                  {
> -                    if (entry->var_type != lldb::eSetVarTypeEnum)
> +                    if (entry->var_type != eSetVarTypeEnum)
>                          value = entry->default_value;
>                      else
>                          value = entry->enum_values[0].string_value;
> @@ -313,9 +348,9 @@
>                          return err;
>
>                      if ((value == NULL || value[0] == '\0')
> -                        && (op == lldb::eVarSetOperationAssign))
> +                        && (op == eVarSetOperationAssign))
>                      {
> -                        if (entry->var_type != lldb::eSetVarTypeEnum)
> +                        if (entry->var_type != eSetVarTypeEnum)
>                              value = entry->default_value;
>                          else
>                              value = entry->enum_values[0].string_value;
> @@ -348,11 +383,11 @@
>                          OverrideAllInstances (const_var_name, value, op, index_value, err);
>
>                          // Update all pending records as well.
> -//                        std::map<std::string, lldb::InstanceSettingsSP>::iterator pos, end = m_pending_settings.end();
> +//                        std::map<std::string, InstanceSettingsSP>::iterator pos, end = m_pending_settings.end();
>  //                        for (pos = m_pending_settings.begin(); pos != end; end++)
>  //                        {
>  //                            const ConstString instance_name (pos->first.c_str());
> -//                            lldb::InstanceSettingsSP setting_sp = pos->second;
> +//                            InstanceSettingsSP setting_sp = pos->second;
>  //                            setting_sp->UpdateInstanceSettingsVariable (const_var_name, index_value, value,
>  //                                                                        instance_name, *entry, op, err, true);
>  //                        }
> @@ -399,9 +434,9 @@
>                      return err;
>
>                  if ((value == NULL || value[0] == '\0')
> -                    && (op == lldb::eVarSetOperationAssign))
> +                    && (op == eVarSetOperationAssign))
>                  {
> -                    if (entry->var_type != lldb::eSetVarTypeEnum)
> +                    if (entry->var_type != eSetVarTypeEnum)
>                          value = entry->default_value;
>                      else
>                          value = entry->enum_values[0].string_value;
> @@ -421,7 +456,7 @@
>                  else
>                  {
>                      // Instance does not currently exist; make or update a pending setting for it.
> -                    lldb::InstanceSettingsSP current_settings_sp = PendingSettingsForInstance (instance_name);
> +                    InstanceSettingsSP current_settings_sp = PendingSettingsForInstance (instance_name);
>
>                      // Now we have a settings record, update it appropriately.
>
> @@ -438,12 +473,12 @@
>                          OverrideAllInstances (const_var_name, value, op, index_value, err);
>
>                          // Update all pending records as well.
> -                        std::map<std::string, lldb::InstanceSettingsSP>::iterator pos;
> -                        std::map<std::string, lldb::InstanceSettingsSP>::iterator end = m_pending_settings.end();
> +                        std::map<std::string, InstanceSettingsSP>::iterator pos;
> +                        std::map<std::string, InstanceSettingsSP>::iterator end = m_pending_settings.end();
>                          for (pos = m_pending_settings.begin(); pos != end; end++)
>                          {
>                              const ConstString tmp_inst_name (pos->first.c_str());
> -                            lldb::InstanceSettingsSP setting_sp = pos->second;
> +                            InstanceSettingsSP setting_sp = pos->second;
>                              setting_sp->UpdateInstanceSettingsVariable (const_var_name, index_value, value,
>                                                                          tmp_inst_name, *entry, op, err, true);
>                          }
> @@ -453,7 +488,7 @@
>              else
>              {
>                  // A child setting.
> -                lldb::UserSettingsControllerSP child;
> +                UserSettingsControllerSP child;
>                  ConstString child_prefix (names.GetArgumentAtIndex (0));
>                  int num_children = GetNumChildren();
>                  bool found = false;
> @@ -497,7 +532,7 @@
>  UserSettingsController::GetVariable
>  (
>      const char *full_dot_name,
> -    lldb::SettableVariableType &var_type,
> +    SettableVariableType &var_type,
>      const char *debugger_instance_name,
>      Error &err
>  )
> @@ -528,7 +563,7 @@
>      // Should we pass this off to a child?  If there is more than one name piece left, and the next name piece
>      // matches a child prefix, then yes.
>
> -    lldb::UserSettingsControllerSP child;
> +    UserSettingsControllerSP child;
>      if (names.GetArgumentCount() > 1)
>      {
>          ConstString child_prefix (names.GetArgumentAtIndex (0));
> @@ -570,12 +605,12 @@
>                      // Look for instance name setting in pending settings.
>
>                      std::string inst_name_str = instance_name.AsCString();
> -                    std::map<std::string, lldb::InstanceSettingsSP>::iterator pos;
> +                    std::map<std::string, InstanceSettingsSP>::iterator pos;
>
>                      pos = m_pending_settings.find (inst_name_str);
>                      if (pos != m_pending_settings.end())
>                      {
> -                        lldb::InstanceSettingsSP settings_sp = pos->second;
> +                        InstanceSettingsSP settings_sp = pos->second;
>                          settings_sp->GetInstanceSettingsValue (*instance_entry, const_var_name,  value, &err);
>                      }
>                      else
> @@ -655,16 +690,16 @@
>          tmp_name.Printf ("%s", instance_name.AsCString());
>
>      std::string instance_name_str (tmp_name.GetData());
> -    std::map<std::string, lldb::InstanceSettingsSP>::iterator pos;
> +    std::map<std::string, InstanceSettingsSP>::iterator pos;
>      Mutex::Locker locker (m_pending_settings_mutex);
>
>      m_pending_settings.erase (instance_name_str);
>  }
>
> -const lldb::InstanceSettingsSP &
> +const InstanceSettingsSP &
>  UserSettingsController::FindPendingSettings (const ConstString &instance_name)
>  {
> -    std::map<std::string, lldb::InstanceSettingsSP>::iterator pos;
> +    std::map<std::string, InstanceSettingsSP>::iterator pos;
>      StreamString tmp_name;
>
>      // Add surrounding brackets to instance name if not already present.
> @@ -698,16 +733,16 @@
>          ConstString var_name (entry.var_name);
>          const char *value = entry.default_value;
>
> -        if (entry.var_type == lldb::eSetVarTypeEnum)
> +        if (entry.var_type == eSetVarTypeEnum)
>              value = entry.enum_values[0].string_value;
>
>          m_default_settings->UpdateInstanceSettingsVariable (var_name, NULL, value, default_name, entry,
> -                                                            lldb::eVarSetOperationAssign, err, true);
> +                                                            eVarSetOperationAssign, err, true);
>      }
>  }
>
>  void
> -UserSettingsController::CopyDefaultSettings (const lldb::InstanceSettingsSP &actual_settings,
> +UserSettingsController::CopyDefaultSettings (const InstanceSettingsSP &actual_settings,
>                                               const ConstString &instance_name,
>                                               bool pending)
>  {
> @@ -733,27 +768,27 @@
>          }
>
>          actual_settings->UpdateInstanceSettingsVariable (var_name, NULL, value_str.c_str(), instance_name, entry,
> -                                                         lldb::eVarSetOperationAssign, err, pending);
> +                                                         eVarSetOperationAssign, err, pending);
>
>      }
>  }
>
> -lldb::InstanceSettingsSP
> +InstanceSettingsSP
>  UserSettingsController::PendingSettingsForInstance (const ConstString &instance_name)
>  {
>      std::string name_str (instance_name.AsCString());
> -    std::map<std::string, lldb::InstanceSettingsSP>::iterator pos;
> +    std::map<std::string, InstanceSettingsSP>::iterator pos;
>      Mutex::Locker locker (m_pending_settings_mutex);
>
>      pos = m_pending_settings.find (name_str);
>      if (pos != m_pending_settings.end())
>      {
> -        lldb::InstanceSettingsSP settings_sp = pos->second;
> +        InstanceSettingsSP settings_sp = pos->second;
>          return settings_sp;
>      }
>      else
>      {
> -        lldb::InstanceSettingsSP new_settings_sp = CreateInstanceSettings (instance_name.AsCString());
> +        InstanceSettingsSP new_settings_sp = CreateInstanceSettings (instance_name.AsCString());
>          CopyDefaultSettings (new_settings_sp, instance_name, true);
>          m_pending_settings[name_str] = new_settings_sp;
>          return new_settings_sp;
> @@ -761,7 +796,7 @@
>
>      // Should never reach this line.
>
> -    lldb::InstanceSettingsSP dummy;
> +    InstanceSettingsSP dummy;
>
>      return dummy;
>  }
> @@ -789,9 +824,9 @@
>          {
>              for (int j = 0; j < tmp_value.GetSize(); ++j)
>              {
> -                if (entry.var_type == lldb::eSetVarTypeArray)
> +                if (entry.var_type == eSetVarTypeArray)
>                      value_string.Printf ("\n  [%d]: '%s'", j, tmp_value.GetStringAtIndex (j));
> -                else if (entry.var_type == lldb::eSetVarTypeDictionary)
> +                else if (entry.var_type == eSetVarTypeDictionary)
>                      value_string.Printf ("\n  '%s'", tmp_value.GetStringAtIndex (j));
>              }
>              multi_value = true;
> @@ -812,7 +847,7 @@
>  void
>  UserSettingsController::GetAllPendingSettingValues (StreamString &result_stream)
>  {
> -    std::map<std::string, lldb::InstanceSettingsSP>::iterator pos;
> +    std::map<std::string, InstanceSettingsSP>::iterator pos;
>
>      std::string parent_prefix;
>      BuildParentPrefix (parent_prefix);
> @@ -821,7 +856,7 @@
>      for (pos = m_pending_settings.begin(); pos != m_pending_settings.end(); ++pos)
>      {
>          std::string tmp_name = pos->first;
> -        lldb::InstanceSettingsSP settings_sp = pos->second;
> +        InstanceSettingsSP settings_sp = pos->second;
>
>          const ConstString instance_name (tmp_name.c_str());
>
> @@ -929,7 +964,7 @@
>  void
>  UserSettingsController::OverrideAllInstances (const ConstString &var_name,
>                                                const char *value,
> -                                              lldb::VarSetOperationType op,
> +                                              VarSetOperationType op,
>                                                const char *index_value,
>                                                Error &err)
>  {
> @@ -1018,23 +1053,23 @@
>  }
>
>  const char *
> -UserSettingsController::GetTypeString (lldb::SettableVariableType var_type)
> +UserSettingsController::GetTypeString (SettableVariableType var_type)
>  {
>      switch (var_type)
>      {
> -        case lldb::eSetVarTypeInt:
> +        case eSetVarTypeInt:
>              return "int";
> -        case lldb::eSetVarTypeBoolean:
> +        case eSetVarTypeBoolean:
>              return "boolean";
> -        case lldb::eSetVarTypeString:
> +        case eSetVarTypeString:
>              return "string";
> -        case lldb::eSetVarTypeArray:
> +        case eSetVarTypeArray:
>              return "array";
> -        case lldb::eSetVarTypeDictionary:
> +        case eSetVarTypeDictionary:
>              return "dictionary";
> -        case lldb::eSetVarTypeEnum:
> +        case eSetVarTypeEnum:
>              return "enum";
> -        case lldb::eSetVarTypeNone:
> +        case eSetVarTypeNone:
>              return "no type";
>      }
>
> @@ -1042,7 +1077,7 @@
>  }
>
>  void
> -UserSettingsController::PrintEnumValues (const lldb::OptionEnumValueElement *enum_values, Stream &str)
> +UserSettingsController::PrintEnumValues (const OptionEnumValueElement *enum_values, Stream &str)
>  {
>      int i = 0;
>      while (enum_values[i].string_value != NULL)
> @@ -1055,7 +1090,7 @@
>
>  void
>  UserSettingsController::FindAllSettingsDescriptions (CommandInterpreter &interpreter,
> -                                                     lldb::UserSettingsControllerSP root,
> +                                                     UserSettingsControllerSP root,
>                                                       std::string &current_prefix,
>                                                       StreamString &result_stream,
>                                                       Error &err)
> @@ -1063,11 +1098,9 @@
>      // Write out current prefix line.
>      StreamString prefix_line;
>      StreamString description;
> -    uint32_t max_len;
> +    uint32_t max_len = FindMaxNameLength (root->m_settings.global_settings);
>      int num_entries = root->m_settings.global_settings.size();
>
> -    max_len = FindMaxNameLength (root->m_settings.global_settings);
> -
>      if (! current_prefix.empty())
>          result_stream.Printf ("\n'%s' variables:\n\n", current_prefix.c_str());
>      else
> @@ -1078,24 +1111,7 @@
>          // Write out all "global" variables.
>          for (int i = 0; i < num_entries; ++i)
>          {
> -            SettingEntry entry = root->m_settings.global_settings[i];
> -            description.Clear();
> -            if (entry.var_type == lldb::eSetVarTypeEnum)
> -            {
> -                StreamString enum_values_str;
> -                UserSettingsController::PrintEnumValues (entry.enum_values, enum_values_str);
> -                description.Printf ("[static, enum] %s.  Valid values: {%s}  (default: '%s')", entry.description,
> -                                    enum_values_str.GetData(), entry.enum_values[0].string_value);
> -            }
> -            else if (entry.default_value != NULL)
> -                description.Printf ("[static, %s] %s (default: '%s')", GetTypeString (entry.var_type),
> -                                    entry.description, entry.default_value);
> -
> -            else
> -                description.Printf ("[static, %s] %s (default: '')", GetTypeString (entry.var_type),
> -                                    entry.description);
> -            interpreter.OutputFormattedHelpText (result_stream, entry.var_name, "--", description.GetData(),
> -                                                 max_len);
> +            DumpSettingEntry (interpreter, result_stream, max_len, root->m_settings.global_settings[i]);
>          }
>      }
>
> @@ -1107,32 +1123,15 @@
>          // Write out all instance variables.
>          for (int i = 0; i < num_entries; ++i)
>          {
> -            SettingEntry entry = root->m_settings.instance_settings[i];
> -            description.Clear();
> -            if (entry.var_type == lldb::eSetVarTypeEnum)
> -            {
> -                StreamString enum_values_str;
> -                UserSettingsController::PrintEnumValues (entry.enum_values, enum_values_str);
> -                description.Printf ("[instance, enum] %s.  Valid values: {%s} (default: '%s')", entry.description,
> -                                    enum_values_str.GetData(), entry.enum_values[0].string_value);
> -            }
> -            else if (entry.default_value != NULL)
> -                description.Printf ("[instance, %s] %s (default: '%s')", GetTypeString (entry.var_type),
> -                                    entry.description, entry.default_value);
> -            else
> -                description.Printf ("[instance, %s] %s (default: '')", GetTypeString (entry.var_type),
> -                                    entry.description);
> -            interpreter.OutputFormattedHelpText (result_stream, entry.var_name, "--", description.GetData(),
> -                                                 max_len);
> +            DumpSettingEntry (interpreter, result_stream, max_len, root->m_settings.instance_settings[i]);
>          }
> -
>      }
>
>      // Now, recurse across all children.
>      int num_children = root->GetNumChildren();
>      for (int i = 0; i < num_children; ++i)
>      {
> -        lldb::UserSettingsControllerSP child = root->GetChildAtIndex (i);
> +        UserSettingsControllerSP child = root->GetChildAtIndex (i);
>
>          if (child)
>          {
> @@ -1143,7 +1142,10 @@
>              else
>                  new_prefix.Printf ("%s", child_prefix.AsCString());
>              std::string new_prefix_str = new_prefix.GetData();
> -            UserSettingsController::FindAllSettingsDescriptions (interpreter, child, new_prefix_str, result_stream,
> +            UserSettingsController::FindAllSettingsDescriptions (interpreter,
> +                                                                 child,
> +                                                                 new_prefix_str,
> +                                                                 result_stream,
>                                                                   err);
>          }
>      }
> @@ -1151,7 +1153,7 @@
>
>  void
>  UserSettingsController::FindSettingsDescriptions (CommandInterpreter &interpreter,
> -                                                  lldb::UserSettingsControllerSP root,
> +                                                  UserSettingsControllerSP root,
>                                                    std::string &current_prefix,
>                                                    const char *search_name,
>                                                    StreamString &result_stream,
> @@ -1198,23 +1200,7 @@
>              // Write out all "global" variables.
>              for (int i = 0; i < num_entries; ++i)
>              {
> -                SettingEntry entry = root->m_settings.global_settings[i];
> -                description.Clear();
> -                if (entry.var_type == lldb::eSetVarTypeEnum)
> -                {
> -                    StreamString enum_values_str;
> -                    UserSettingsController::PrintEnumValues (entry.enum_values, enum_values_str);
> -                    description.Printf ("[static, enum] %s.  Valid values: {%s}  (default: '%s')", entry.description,
> -                                        enum_values_str.GetData(), entry.enum_values[0].string_value);
> -                }
> -                else if (entry.default_value != NULL)
> -                    description.Printf ("[static, %s] %s (default: '%s')", GetTypeString (entry.var_type),
> -                                        entry.description, entry.default_value);
> -                else
> -                    description.Printf ("[static, %s] %s (default: '')", GetTypeString (entry.var_type),
> -                                        entry.description);
> -                interpreter.OutputFormattedHelpText (result_stream, entry.var_name, "--", description.GetData(),
> -                                                     max_len);
> +                DumpSettingEntry (interpreter, result_stream, max_len, root->m_settings.global_settings[i]);
>              }
>          }
>
> @@ -1226,23 +1212,7 @@
>              // Write out all instance variables.
>              for (int i = 0; i < num_entries; ++i)
>              {
> -                SettingEntry entry = root->m_settings.instance_settings[i];
> -                description.Clear();
> -                if (entry.var_type == lldb::eSetVarTypeEnum)
> -                {
> -                    StreamString enum_values_str;
> -                    UserSettingsController::PrintEnumValues (entry.enum_values, enum_values_str);
> -                    description.Printf ("[instance, enum] %s.  Valid values: {%s} (default: '%s')", entry.description,
> -                                        enum_values_str.GetData(), entry.enum_values[0].string_value);
> -                }
> -                else if (entry.default_value != NULL)
> -                    description.Printf ("[instance, %s] %s (default: '%s')", GetTypeString (entry.var_type),
> -                                        entry.description, entry.default_value);
> -                else
> -                    description.Printf ("[instance, %s] %s (default: '')", GetTypeString (entry.var_type),
> -                                        entry.description);
> -                interpreter.OutputFormattedHelpText (result_stream, entry.var_name, "--", description.GetData(),
> -                                                     max_len);
> +                DumpSettingEntry (interpreter, result_stream, max_len, root->m_settings.instance_settings[i]);
>              }
>          }
>      }
> @@ -1261,28 +1231,7 @@
>          // Check to see if it is a global or instance variable name.
>          if (setting_entry != NULL)
>          {
> -            StreamString description;
> -            if (setting_entry->var_type == lldb::eSetVarTypeEnum)
> -            {
> -                StreamString enum_values_str;
> -                UserSettingsController::PrintEnumValues (setting_entry->enum_values, enum_values_str);
> -                description.Printf ("[%s, enum] %s.  Valid values: {%s}  (default: '%s')",
> -                                    (is_global ? "static" : "instance"),
> -                                    setting_entry->description,
> -                                    enum_values_str.GetData(), setting_entry->enum_values[0].string_value);
> -            }
> -            else if (setting_entry->default_value != NULL)
> -                description.Printf ("[%s, %s] %s (default: '%s')",
> -                                    (is_global ? "static" : "instance"),
> -                                    GetTypeString (setting_entry->var_type),
> -                                    setting_entry->description, setting_entry->default_value);
> -            else
> -                description.Printf ("[%s, %s] %s (default: '')",
> -                                    (is_global ? "static" : "instance"),
> -                                    GetTypeString (setting_entry->var_type),
> -                                    setting_entry->description);
> -            interpreter.OutputFormattedHelpText (result_stream, setting_entry->var_name, "--", description.GetData(),
> -                                                 var_name.GetLength());
> +            DumpSettingEntry (interpreter, result_stream, var_name.GetLength(), *setting_entry);
>          }
>          else
>          {
> @@ -1291,15 +1240,19 @@
>              bool found = false;
>              for (int i = 0; i < num_children && !found; ++i)
>              {
> -                lldb::UserSettingsControllerSP child = root->GetChildAtIndex (i);
> +                UserSettingsControllerSP child = root->GetChildAtIndex (i);
>                  if (child)
>                  {
>                      ConstString child_prefix = child->GetLevelName();
>                      if (child_prefix == var_name)
>                      {
>                          found = true;
> -                        UserSettingsController::FindSettingsDescriptions (interpreter, child, current_prefix,
> -                                                                          var_name.AsCString(), result_stream, err);
> +                        UserSettingsController::FindSettingsDescriptions (interpreter,
> +                                                                          child,
> +                                                                          current_prefix,
> +                                                                          var_name.AsCString(),
> +                                                                          result_stream,
> +                                                                          err);
>                      }
>                  }
>              }
> @@ -1329,7 +1282,7 @@
>          bool found = false;
>          for (int i = 0; i < num_children && !found; ++i)
>          {
> -            lldb::UserSettingsControllerSP child = root->GetChildAtIndex (i);
> +            UserSettingsControllerSP child = root->GetChildAtIndex (i);
>              if (child)
>              {
>                  ConstString child_prefix = child->GetLevelName();
> @@ -1354,7 +1307,7 @@
>
>  void
>  UserSettingsController::SearchAllSettingsDescriptions (CommandInterpreter &interpreter,
> -                                                       lldb::UserSettingsControllerSP root,
> +                                                       UserSettingsControllerSP root,
>                                                         std::string &current_prefix,
>                                                         const char *search_word,
>                                                         StreamString &result_stream)
> @@ -1368,7 +1321,7 @@
>      {
>          for (int i = 0; i < num_entries; ++i)
>          {
> -            SettingEntry &entry = root->m_settings.global_settings[i];
> +            const SettingEntry &entry = root->m_settings.global_settings[i];
>              if (strcasestr (entry.description, search_word) != NULL)
>              {
>                  StreamString var_name;
> @@ -1404,7 +1357,7 @@
>      int num_children = root->GetNumChildren ();
>      for (int i = 0; i < num_children; ++i)
>      {
> -        lldb::UserSettingsControllerSP child = root->GetChildAtIndex (i);
> +        UserSettingsControllerSP child = root->GetChildAtIndex (i);
>
>          if (child)
>          {
> @@ -1423,20 +1376,20 @@
>
>  void
>  UserSettingsController::GetAllVariableValues (CommandInterpreter &interpreter,
> -                                              lldb::UserSettingsControllerSP root,
> +                                              UserSettingsControllerSP root,
>                                                std::string &current_prefix,
>                                                StreamString &result_stream,
>                                                Error &err)
>  {
>      StreamString description;
>      int num_entries = root->m_settings.global_settings.size();
> -    lldb::SettableVariableType var_type;
> +    SettableVariableType var_type;
>
>
>      for (int i = 0; i < num_entries; ++i)
>      {
>          StreamString full_var_name;
> -        SettingEntry entry = root->m_settings.global_settings[i];
> +        const SettingEntry &entry = root->m_settings.global_settings[i];
>          if (! current_prefix.empty())
>              full_var_name.Printf ("%s.%s", current_prefix.c_str(), entry.var_name);
>          else
> @@ -1451,9 +1404,9 @@
>          {
>              description.Printf ("%s (%s):\n", full_var_name.GetData(), GetTypeString (entry.var_type));
>              for (int j = 0; j < value.GetSize(); ++j)
> -                if (entry.var_type == lldb::eSetVarTypeArray)
> +                if (entry.var_type == eSetVarTypeArray)
>                      description.Printf ("  [%d]: '%s'\n", j, value.GetStringAtIndex (j));
> -                else if (entry.var_type == lldb::eSetVarTypeDictionary)
> +                else if (entry.var_type == eSetVarTypeDictionary)
>                      description.Printf ("  '%s'\n", value.GetStringAtIndex (j));
>          }
>
> @@ -1470,7 +1423,7 @@
>      int num_children = root->GetNumChildren();
>      for (int i = 0; i < num_children; ++i)
>      {
> -        lldb::UserSettingsControllerSP child = root->GetChildAtIndex (i);
> +        UserSettingsControllerSP child = root->GetChildAtIndex (i);
>
>          if (child)
>          {
> @@ -1525,7 +1478,7 @@
>  }
>
>  int
> -UserSettingsController::CompleteSettingsValue (lldb::UserSettingsControllerSP root_settings,
> +UserSettingsController::CompleteSettingsValue (UserSettingsControllerSP root_settings,
>                                                 const char *full_dot_name,
>                                                 const char *partial_value,
>                                                 bool &word_complete,
> @@ -1605,9 +1558,9 @@
>      if (entry == NULL)
>          return 0;
>
> -    if (entry->var_type == lldb::eSetVarTypeBoolean)
> +    if (entry->var_type == eSetVarTypeBoolean)
>          return UserSettingsController::BooleanMatches (partial_value, word_complete, matches);
> -    else if (entry->var_type == lldb::eSetVarTypeEnum)
> +    else if (entry->var_type == eSetVarTypeEnum)
>          return UserSettingsController::EnumMatches (partial_value, entry->enum_values, word_complete, matches);
>      else
>          return 0;
> @@ -1647,7 +1600,7 @@
>
>  int
>  UserSettingsController::EnumMatches (const char *partial_value,
> -                                     lldb::OptionEnumValueElement *enum_values,
> +                                     OptionEnumValueElement *enum_values,
>                                       bool &word_complete,
>                                       StringList &matches)
>  {
> @@ -1676,7 +1629,7 @@
>  }
>
>  int
> -UserSettingsController::CompleteSettingsNames (lldb::UserSettingsControllerSP root_settings,
> +UserSettingsController::CompleteSettingsNames (UserSettingsControllerSP root_settings,
>                                                 Args &partial_setting_name_pieces,
>                                                 bool &word_complete,
>                                                 StringList &matches)
> @@ -1835,7 +1788,7 @@
>
>      for (size_t i = 0; i < m_settings.global_settings.size(); ++i)
>      {
> -        SettingEntry &entry = m_settings.global_settings[i];
> +        const SettingEntry &entry = m_settings.global_settings[i];
>          std::string var_name (entry.var_name);
>          if ((partial_len == 0)
>              || ((partial_len <= var_name.length())
> @@ -1964,16 +1917,16 @@
>  }
>
>  void
> -UserSettingsController::VerifyOperationForType (lldb::SettableVariableType var_type,
> -                                                lldb::VarSetOperationType op,
> +UserSettingsController::VerifyOperationForType (SettableVariableType var_type,
> +                                                VarSetOperationType op,
>                                                  const ConstString &var_name,
>                                                  Error &err)
>  {
> -    if (op == lldb::eVarSetOperationAssign)
> +    if (op == eVarSetOperationAssign)
>          return;
>
>
> -    if (op == lldb::eVarSetOperationInvalid)
> +    if (op == eVarSetOperationInvalid)
>      {
>          err.SetErrorString ("Invalid 'settings ' subcommand operation.\n");
>          return;
> @@ -1981,23 +1934,23 @@
>
>      switch (op)
>      {
> -        case lldb::eVarSetOperationInsertBefore:
> -        case lldb::eVarSetOperationInsertAfter:
> -            if (var_type != lldb::eSetVarTypeArray)
> +        case eVarSetOperationInsertBefore:
> +        case eVarSetOperationInsertAfter:
> +            if (var_type != eSetVarTypeArray)
>                  err.SetErrorString ("Invalid operation:  This operation can only be performed on array variables.\n");
>              break;
> -        case lldb::eVarSetOperationReplace:
> -        case lldb::eVarSetOperationRemove:
> -            if ((var_type != lldb::eSetVarTypeArray)
> -                && (var_type != lldb::eSetVarTypeDictionary))
> +        case eVarSetOperationReplace:
> +        case eVarSetOperationRemove:
> +            if ((var_type != eSetVarTypeArray)
> +                && (var_type != eSetVarTypeDictionary))
>                  err.SetErrorString ("Invalid operation:  This operation can only be performed on array or dictionary"
>                                      " variables.\n");
>              break;
> -        case lldb::eVarSetOperationAppend:
> -        case lldb::eVarSetOperationClear:
> -            if ((var_type != lldb::eSetVarTypeArray)
> -                && (var_type != lldb::eSetVarTypeDictionary)
> -                && (var_type != lldb::eSetVarTypeString))
> +        case eVarSetOperationAppend:
> +        case eVarSetOperationClear:
> +            if ((var_type != eSetVarTypeArray)
> +                && (var_type != eSetVarTypeDictionary)
> +                && (var_type != eSetVarTypeString))
>                  err.SetErrorString ("Invalid operation:  This operation can only be performed on array, dictionary "
>                                      "or string variables.\n");
>              break;
> @@ -2009,36 +1962,36 @@
>  }
>
>  void
> -UserSettingsController::UpdateStringVariable (lldb::VarSetOperationType op,
> +UserSettingsController::UpdateStringVariable (VarSetOperationType op,
>                                                std::string &string_var,
>                                                const char *new_value,
>                                                Error &err)
>  {
> -    if (op == lldb::eVarSetOperationAssign)
> +    if (op == eVarSetOperationAssign)
>      {
>          if (new_value && new_value[0])
>              string_var.assign (new_value);
>          else
>              string_var.clear();
>      }
> -    else if (op == lldb::eVarSetOperationAppend)
> +    else if (op == eVarSetOperationAppend)
>      {
>          if (new_value && new_value[0])
>              string_var.append (new_value);
>      }
> -    else if (op == lldb::eVarSetOperationClear)
> +    else if (op == eVarSetOperationClear)
>          string_var.clear();
>      else
>          err.SetErrorString ("Unrecognized operation. Cannot update value.\n");
>  }
>
>  void
> -UserSettingsController::UpdateBooleanVariable (lldb::VarSetOperationType op,
> +UserSettingsController::UpdateBooleanVariable (VarSetOperationType op,
>                                                 bool &bool_var,
>                                                 const char *new_value,
>                                                 Error &err)
>  {
> -    if (op != lldb::eVarSetOperationAssign)
> +    if (op != eVarSetOperationAssign)
>          err.SetErrorString ("Invalid operation for Boolean variable.  Cannot update value.\n");
>
>      if (new_value && new_value[0])
> @@ -2063,7 +2016,7 @@
>  }
>
>  void
> -UserSettingsController::UpdateStringArrayVariable (lldb::VarSetOperationType op,
> +UserSettingsController::UpdateStringArrayVariable (VarSetOperationType op,
>                                                     const char *index_value,
>                                                     Args &array_var,
>                                                     const char *new_value,
> @@ -2096,41 +2049,41 @@
>
>      switch (op)
>      {
> -        case lldb::eVarSetOperationAssign:
> +        case eVarSetOperationAssign:
>              array_var.SetCommandString (new_value);
>              break;
> -        case lldb::eVarSetOperationReplace:
> +        case eVarSetOperationReplace:
>          {
>              if (valid_index)
>                  array_var.ReplaceArgumentAtIndex (index, new_value);
>              break;
>          }
> -        case lldb::eVarSetOperationInsertBefore:
> -        case lldb::eVarSetOperationInsertAfter:
> +        case eVarSetOperationInsertBefore:
> +        case eVarSetOperationInsertAfter:
>          {
>              if (valid_index)
>              {
>                  Args new_array (new_value);
> -                if (op == lldb::eVarSetOperationInsertAfter)
> +                if (op == eVarSetOperationInsertAfter)
>                      ++index;
>                  for (int i = 0; i < new_array.GetArgumentCount(); ++i)
>                      array_var.InsertArgumentAtIndex (index, new_array.GetArgumentAtIndex (i));
>              }
>              break;
>          }
> -        case lldb::eVarSetOperationRemove:
> +        case eVarSetOperationRemove:
>          {
>              if (valid_index)
>                  array_var.DeleteArgumentAtIndex (index);
>              break;
>          }
> -        case lldb::eVarSetOperationAppend:
> +        case eVarSetOperationAppend:
>          {
>              Args new_array (new_value);
>              array_var.AppendArguments (new_array);
>              break;
>          }
> -        case lldb::eVarSetOperationClear:
> +        case eVarSetOperationClear:
>              array_var.Clear();
>              break;
>          default:
> @@ -2140,7 +2093,7 @@
>  }
>
>  void
> -UserSettingsController::UpdateDictionaryVariable (lldb::VarSetOperationType op,
> +UserSettingsController::UpdateDictionaryVariable (VarSetOperationType op,
>                                                    const char *index_value,
>                                                    std::map<std::string, std::string> &dictionary,
>                                                    const char *new_value,
> @@ -2148,7 +2101,7 @@
>  {
>      switch (op)
>      {
> -        case lldb::eVarSetOperationReplace:
> +        case eVarSetOperationReplace:
>              if (index_value != NULL)
>              {
>                  std::string key (index_value);
> @@ -2163,7 +2116,7 @@
>              else
>                  err.SetErrorString ("'settings replace' requires a key for dictionary variables. No key supplied.\n");
>              break;
> -        case lldb::eVarSetOperationRemove:
> +        case eVarSetOperationRemove:
>              if (index_value != NULL)
>              {
>                  std::string key (index_value);
> @@ -2172,14 +2125,14 @@
>              else
>                  err.SetErrorString ("'settings remove' requires a key for dictionary variables. No key supplied.\n");
>              break;
> -        case lldb::eVarSetOperationClear:
> +        case eVarSetOperationClear:
>              dictionary.clear ();
>              break;
> -        case lldb::eVarSetOperationAppend:
> -        case lldb::eVarSetOperationAssign:
> +        case eVarSetOperationAppend:
> +        case eVarSetOperationAssign:
>              {
>                  // Clear the dictionary if it's an assign with new_value as NULL.
> -                if (new_value == NULL && op == lldb::eVarSetOperationAssign)
> +                if (new_value == NULL && op == eVarSetOperationAssign)
>                  {
>                      dictionary.clear ();
>                      break;
> @@ -2215,8 +2168,8 @@
>                  }
>              }
>              break;
> -        case lldb::eVarSetOperationInsertBefore:
> -        case lldb::eVarSetOperationInsertAfter:
> +        case eVarSetOperationInsertBefore:
> +        case eVarSetOperationInsertAfter:
>              err.SetErrorString ("Specified operation cannot be performed on dictionary variables.\n");
>              break;
>          default:
> @@ -2226,7 +2179,7 @@
>  }
>
>  const char *
> -UserSettingsController::EnumToString (const lldb::OptionEnumValueElement *enum_values,
> +UserSettingsController::EnumToString (const OptionEnumValueElement *enum_values,
>                                        int value)
>  {
>      int i = 0;
> @@ -2237,12 +2190,12 @@
>          ++i;
>      }
>
> -    return "Invalid enumeration value";
> +    return "";
>  }
>
>
>  void
> -UserSettingsController::UpdateEnumVariable (lldb::OptionEnumValueElement *enum_values,
> +UserSettingsController::UpdateEnumVariable (OptionEnumValueElement *enum_values,
>                                              int *enum_var,
>                                              const char *new_value,
>                                              Error &err)
> @@ -2297,11 +2250,11 @@
>          live_settings->ChangeInstanceName (stripped_new_name);
>
>          // Now see if there are any pending settings for the new name; if so, copy them into live_settings.
> -        std::map<std::string,  lldb::InstanceSettingsSP>::iterator pending_pos;
> +        std::map<std::string,  InstanceSettingsSP>::iterator pending_pos;
>          pending_pos = m_pending_settings.find (new_name_key);
>          if (pending_pos != m_pending_settings.end())
>          {
> -            lldb::InstanceSettingsSP pending_settings_sp = pending_pos->second;
> +            InstanceSettingsSP pending_settings_sp = pending_pos->second;
>              live_settings->CopyInstanceSettings (pending_settings_sp, false);
>          }
>
>
> Modified: lldb/trunk/source/Interpreter/CommandInterpreter.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/CommandInterpreter.cpp?rev=125815&r1=125814&r2=125815&view=diff
> ==============================================================================
> --- lldb/trunk/source/Interpreter/CommandInterpreter.cpp (original)
> +++ lldb/trunk/source/Interpreter/CommandInterpreter.cpp Thu Feb 17 19:44:25 2011
> @@ -1687,12 +1687,17 @@
>      int indent_size = max_word_len + strlen (separator) + 2;
>
>      strm.IndentMore (indent_size);
> -
> -    int len = indent_size + strlen (help_text) + 1;
> -    char *text  = (char *) malloc (len);
> -    sprintf (text, "%-*s %s %s",  max_word_len, word_text, separator, help_text);
> +
> +    StreamString text_strm;
> +    text_strm.Printf ("%-*s %s %s",  max_word_len, word_text, separator, help_text);
> +
> +    size_t len = text_strm.GetSize();
> +    const char *text = text_strm.GetData();
>      if (text[len - 1] == '\n')
> -        text[--len] = '\0';
> +    {
> +        text_strm.EOL();
> +        len = text_strm.GetSize();
> +    }
>
>      if (len  < max_columns)
>      {
> @@ -1750,7 +1755,6 @@
>      }
>      strm.EOL();
>      strm.IndentLess(indent_size);
> -    free (text);
>  }
>
>  void
>
> Modified: lldb/trunk/source/Target/Process.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Process.cpp?rev=125815&r1=125814&r2=125815&view=diff
> ==============================================================================
> --- lldb/trunk/source/Target/Process.cpp (original)
> +++ lldb/trunk/source/Target/Process.cpp Thu Feb 17 19:44:25 2011
> @@ -2644,10 +2644,39 @@
>          m_target.GetDebugger().PopInputReader (m_process_input_reader);
>  }
>
> -
> +// The process needs to know about installed plug-ins
>  void
> -Process::Initialize ()
> +Process::DidInitialize ()
>  {
> +    static std::vector<lldb::OptionEnumValueElement> g_plugins;
> +
> +    int i=0;
> +    const char *name;
> +    OptionEnumValueElement option_enum;
> +    while ((name = PluginManager::GetProcessPluginNameAtIndex (i)) != NULL)
> +    {
> +        if (name)
> +        {
> +            option_enum.value = i;
> +            option_enum.string_value = name;
> +            option_enum.usage = PluginManager::GetProcessPluginDescriptionAtIndex (i);
> +            g_plugins.push_back (option_enum);
> +        }
> +        ++i;
> +    }
> +    option_enum.value = 0;
> +    option_enum.string_value = NULL;
> +    option_enum.usage = NULL;
> +    g_plugins.push_back (option_enum);
> +
> +    for (i=0; (name = SettingsController::instance_settings_table[i].var_name); ++i)
> +    {
> +        if (::strcmp (name, "plugin") == 0)
> +        {
> +            SettingsController::instance_settings_table[i].enum_values = &g_plugins[0];
> +            break;
> +        }
> +    }
>      UserSettingsControllerSP &usc = GetSettingsController();
>      usc.reset (new SettingsController);
>      UserSettingsController::InitializeSettingsController (usc,
> @@ -2656,6 +2685,11 @@
>  }
>
>  void
> +Process::Initialize ()
> +{
> +}
> +
> +void
>  Process::Terminate ()
>  {
>      UserSettingsControllerSP &usc = GetSettingsController();
> @@ -3550,14 +3584,6 @@
>  };
>
>
> -lldb::OptionEnumValueElement
> -Process::SettingsController::g_plugins[] =
> -{
> -    { eMacosx, "process.macosx", "Use the native MacOSX debugger plugin" },
> -    { eRemoteDebugger, "process.gdb-remote" , "Use the GDB Remote protocol based debugger plugin" },
> -    { 0, NULL, NULL }
> -};
> -
>  SettingEntry
>  Process::SettingsController::instance_settings_table[] =
>  {
> @@ -3568,7 +3594,7 @@
>      { "input-path",     eSetVarTypeString,      NULL,           NULL,       false,  false,  "The file/path to be used by the executable program for reading its input." },
>      { "output-path",    eSetVarTypeString,      NULL,           NULL,       false,  false,  "The file/path to be used by the executable program for writing its output." },
>      { "error-path",     eSetVarTypeString,      NULL,           NULL,       false,  false,  "The file/path to be used by the executable program for writings its error messages." },
> -    { "plugin",         eSetVarTypeEnum,        NULL,           g_plugins,  false,  false,  "The plugin to be used to run the process." },
> +    { "plugin",         eSetVarTypeEnum,        NULL,           NULL,       false,  false,  "The plugin to be used to run the process." },
>      { "disable-aslr",   eSetVarTypeBoolean,     "true",         NULL,       false,  false,  "Disable Address Space Layout Randomization (ASLR)" },
>      { "disable-stdio",  eSetVarTypeBoolean,     "false",        NULL,       false,  false,  "Disable stdin/stdout for process (e.g. for a GUI application)" },
>      {  NULL,            eSetVarTypeNone,        NULL,           NULL,       false,  false,  NULL }
>
> Modified: lldb/trunk/source/Target/Target.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Target.cpp?rev=125815&r1=125814&r2=125815&view=diff
> ==============================================================================
> --- lldb/trunk/source/Target/Target.cpp (original)
> +++ lldb/trunk/source/Target/Target.cpp Thu Feb 17 19:44:25 2011
> @@ -998,14 +998,51 @@
>      return new_settings_sp;
>  }
>
> -const ConstString &
> -Target::SettingsController::DefArchVarName ()
> +
> +#define TSC_DEFAULT_ARCH    "default-arch"
> +#define TSC_EXPR_PREFIX     "expr-prefix"
> +#define TSC_EXEC_LEVEL      "execution-level"
> +#define TSC_EXEC_MODE       "execution-mode"
> +#define TSC_EXEC_OS_TYPE    "execution-os-type"
> +
> +
> +static const ConstString &
> +GetSettingNameForDefaultArch ()
>  {
> -    static ConstString def_arch_var_name ("default-arch");
> +    static ConstString g_const_string (TSC_DEFAULT_ARCH);
>
> -    return def_arch_var_name;
> +    return g_const_string;
> +}
> +
> +static const ConstString &
> +GetSettingNameForExpressionPrefix ()
> +{
> +    static ConstString g_const_string (TSC_EXPR_PREFIX);
> +    return g_const_string;
>  }
>
> +static const ConstString &
> +GetSettingNameForExecutionLevel ()
> +{
> +    static ConstString g_const_string (TSC_EXEC_LEVEL);
> +    return g_const_string;
> +}
> +
> +static const ConstString &
> +GetSettingNameForExecutionMode ()
> +{
> +    static ConstString g_const_string (TSC_EXEC_MODE);
> +    return g_const_string;
> +}
> +
> +static const ConstString &
> +GetSettingNameForExecutionOSType ()
> +{
> +    static ConstString g_const_string (TSC_EXEC_OS_TYPE);
> +    return g_const_string;
> +}
> +
> +
>  bool
>  Target::SettingsController::SetGlobalVariable (const ConstString &var_name,
>                                                 const char *index_value,
> @@ -1014,7 +1051,7 @@
>                                                 const lldb::VarSetOperationType op,
>                                                 Error&err)
>  {
> -    if (var_name == DefArchVarName())
> +    if (var_name == GetSettingNameForDefaultArch())
>      {
>          ArchSpec tmp_spec (value);
>          if (tmp_spec.IsValid())
> @@ -1031,7 +1068,7 @@
>                                                 StringList &value,
>                                                 Error &err)
>  {
> -    if (var_name == DefArchVarName())
> +    if (var_name == GetSettingNameForDefaultArch())
>      {
>          // If the arch is invalid (the default), don't show a string for it
>          if (m_default_architecture.IsValid())
> @@ -1054,7 +1091,12 @@
>      bool live_instance,
>      const char *name
>  ) :
> -    InstanceSettings (owner, name ? name : InstanceSettings::InvalidName().AsCString(), live_instance)
> +    InstanceSettings (owner, name ? name : InstanceSettings::InvalidName().AsCString(), live_instance),
> +    m_expr_prefix_path (),
> +    m_expr_prefix_contents (),
> +    m_execution_level (eExecutionLevelAuto),
> +    m_execution_mode (eExecutionModeAuto),
> +    m_execution_os_type (eExecutionOSTypeAuto)
>  {
>      // CopyInstanceSettings is a pure virtual function in InstanceSettings; it therefore cannot be called
>      // until the vtables for TargetInstanceSettings are properly set up, i.e. AFTER all the initializers.
> @@ -1100,8 +1142,6 @@
>      return *this;
>  }
>
> -#define EXPR_PREFIX_STRING  "expr-prefix"
> -
>  void
>  TargetInstanceSettings::UpdateInstanceSettingsVariable (const ConstString &var_name,
>                                                          const char *index_value,
> @@ -1112,9 +1152,9 @@
>                                                          Error &err,
>                                                          bool pending)
>  {
> -    static ConstString expr_prefix_str (EXPR_PREFIX_STRING);
> -
> -    if (var_name == expr_prefix_str)
> +    int new_enum = -1;
> +
> +    if (var_name == GetSettingNameForExpressionPrefix ())
>      {
>          switch (op)
>          {
> @@ -1156,19 +1196,39 @@
>              return;
>          }
>      }
> +    else if (var_name == GetSettingNameForExecutionLevel ())
> +    {
> +        UserSettingsController::UpdateEnumVariable (entry.enum_values, &new_enum, value, err);
> +        if (err.Success())
> +            m_execution_level = (ExecutionLevel)new_enum;
> +    }
> +    else if (var_name == GetSettingNameForExecutionMode ())
> +    {
> +        UserSettingsController::UpdateEnumVariable (entry.enum_values, &new_enum, value, err);
> +        if (err.Success())
> +            m_execution_mode = (ExecutionMode)new_enum;
> +    }
> +    else if (var_name == GetSettingNameForExecutionOSType ())
> +    {
> +        UserSettingsController::UpdateEnumVariable (entry.enum_values, &new_enum, value, err);
> +        if (err.Success())
> +            m_execution_os_type = (ExecutionOSType)new_enum;
> +    }
>  }
>
>  void
> -TargetInstanceSettings::CopyInstanceSettings (const lldb::InstanceSettingsSP &new_settings,
> -                                              bool pending)
> +TargetInstanceSettings::CopyInstanceSettings (const lldb::InstanceSettingsSP &new_settings, bool pending)
>  {
>      TargetInstanceSettings *new_settings_ptr = static_cast <TargetInstanceSettings *> (new_settings.get());
>
>      if (!new_settings_ptr)
>          return;
>
> -    m_expr_prefix_path = new_settings_ptr->m_expr_prefix_path;
> -    m_expr_prefix_contents = new_settings_ptr->m_expr_prefix_contents;
> +    m_expr_prefix_path      = new_settings_ptr->m_expr_prefix_path;
> +    m_expr_prefix_contents  = new_settings_ptr->m_expr_prefix_contents;
> +    m_execution_level       = new_settings_ptr->m_execution_level;
> +    m_execution_mode        = new_settings_ptr->m_execution_mode;
> +    m_execution_os_type     = new_settings_ptr->m_execution_os_type;
>  }
>
>  bool
> @@ -1177,12 +1237,22 @@
>                                                    StringList &value,
>                                                    Error *err)
>  {
> -    static ConstString expr_prefix_str (EXPR_PREFIX_STRING);
> -
> -    if (var_name == expr_prefix_str)
> +    if (var_name == GetSettingNameForExpressionPrefix ())
>      {
>          value.AppendString (m_expr_prefix_path.c_str(), m_expr_prefix_path.size());
>      }
> +    else if (var_name == GetSettingNameForExecutionLevel ())
> +    {
> +        value.AppendString (UserSettingsController::EnumToString (entry.enum_values, m_execution_level));
> +    }
> +    else if (var_name == GetSettingNameForExecutionMode ())
> +    {
> +        value.AppendString (UserSettingsController::EnumToString (entry.enum_values, m_execution_mode));
> +    }
> +    else if (var_name == GetSettingNameForExecutionOSType ())
> +    {
> +        value.AppendString (UserSettingsController::EnumToString (entry.enum_values, m_execution_os_type));
> +    }
>      else
>      {
>          if (err)
> @@ -1213,15 +1283,51 @@
>  SettingEntry
>  Target::SettingsController::global_settings_table[] =
>  {
> -  //{ "var-name",       var-type,           "default",  enum-table, init'd, hidden, "help-text"},
> -    { "default-arch",   eSetVarTypeString,  NULL,       NULL,       false,  false,  "Default architecture to choose, when there's a choice." },
> -    {  NULL, eSetVarTypeNone, NULL, NULL, 0, 0, NULL }
> +    // var-name           var-type           default      enum  init'd hidden help-text
> +    // =================  ================== ===========  ====  ====== ====== =========================================================================
> +    { TSC_DEFAULT_ARCH  , eSetVarTypeString , NULL      , NULL, false, false, "Default architecture to choose, when there's a choice." },
> +    { NULL              , eSetVarTypeNone   , NULL      , NULL, false, false, NULL }
> +};
> +
> +static lldb::OptionEnumValueElement
> +g_execution_level_enums[] =
> +{
> +    { eExecutionLevelAuto   , "auto"    , "Automatically detect the execution level (user/kernel)." },
> +    { eExecutionLevelKernel , "kernel"  , "Treat executables as kernel executables." },
> +    { eExecutionLevelUser   , "user"    , "Treat executables as user space executables." },
> +    { 0                             , NULL      , NULL }
> +};
> +
> +static lldb::OptionEnumValueElement
> +g_execution_mode_enums[] =
> +{
> +    { eExecutionModeAuto    , "auto"    , "Automatically detect the execution mode (static/dynamic)." },
> +    { eExecutionModeStatic  , "static"  , "All executables are static and addresses at the virtual addresses in the object files." },
> +    { eExecutionModeDynamic , "dynamic" , "Executables and shared libraries are dynamically loaded.." },
> +    { 0                             , NULL      , NULL }
> +};
> +
> +static lldb::OptionEnumValueElement
> +g_execution_os_enums[] =
> +{
> +    { eExecutionOSTypeAuto  , "auto"    , "Automatically detect the execution OS (none/halted/live)." },
> +    { eExecutionOSTypeNone  , "none"    , "There is no operating system available (no processes or threads)." },
> +    { eExecutionOSTypeHalted, "halted"  , "There is an operating system, but it is halted when the debugger is halted. "
> +                                                  "Processes and threads must be discovered by accessing symbols and reading "
> +                                                  "memory." },
> +    { eExecutionOSTypeLive  , "live"    , "There is a live operating system with debug services that can be used to "
> +                                                  "get processes, threads and theirs states." },
> +    { 0, NULL, NULL }
>  };
>
>  SettingEntry
>  Target::SettingsController::instance_settings_table[] =
>  {
> -  //{ "var-name",           var-type,           "default",  enum-table, init'd, hidden, "help-text"},
> -    { EXPR_PREFIX_STRING,   eSetVarTypeString,  NULL,       NULL,       false,  false,  "Path to a file containing expressions to be prepended to all expressions." },
> -    {  NULL, eSetVarTypeNone, NULL, NULL, 0, 0, NULL }
> +    // var-name           var-type           default      enum-table                  init'd hidden help-text
> +    // =================  ================== ===========  =========================   ====== ====== =========================================================================
> +    { TSC_EXPR_PREFIX   , eSetVarTypeString , NULL      , NULL                      , false, false, "Path to a file containing expressions to be prepended to all expressions." },
> +    { TSC_EXEC_LEVEL    , eSetVarTypeEnum   , "auto"    , g_execution_level_enums   , false, false, "Sets the execution level for a target." },
> +    { TSC_EXEC_MODE     , eSetVarTypeEnum   , "auto"    , g_execution_mode_enums    , false, false, "Sets the execution mode for a target." },
> +    { TSC_EXEC_OS_TYPE  , eSetVarTypeEnum   , "auto"    , g_execution_os_enums      , false, false, "Sets the execution OS for a target." },
> +    {  NULL             , eSetVarTypeNone   , NULL      , NULL                      , false, false, NULL }
>  };
>
> Modified: lldb/trunk/source/lldb.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/lldb.cpp?rev=125815&r1=125814&r2=125815&view=diff
> ==============================================================================
> --- lldb/trunk/source/lldb.cpp (original)
> +++ lldb/trunk/source/lldb.cpp Thu Feb 17 19:44:25 2011
> @@ -101,6 +101,10 @@
>  #endif
>          // Scan for any system or user LLDB plug-ins
>          PluginManager::Initialize();
> +
> +        // The process needs to know about installed plug-ins
> +        Process::DidInitialize ();
> +
>      }
>  }
>
>
>
> _______________________________________________
> lldb-commits mailing list
> lldb-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

--
steve



More information about the lldb-commits mailing list