summaryrefslogtreecommitdiffstats
path: root/lldb/source/Target/Target.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Target/Target.cpp')
-rw-r--r--lldb/source/Target/Target.cpp1946
1 files changed, 1159 insertions, 787 deletions
diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index 95a13cfe6ae..73432876d67 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -31,6 +31,8 @@
#include "lldb/Interpreter/CommandInterpreter.h"
#include "lldb/Interpreter/CommandReturnObject.h"
#include "lldb/Interpreter/OptionGroupWatchpoint.h"
+#include "lldb/Interpreter/OptionValues.h"
+#include "lldb/Interpreter/Property.h"
#include "lldb/lldb-private-log.h"
#include "lldb/Symbol/ObjectFile.h"
#include "lldb/Target/Process.h"
@@ -52,9 +54,10 @@ Target::GetStaticBroadcasterClass ()
// Target constructor
//----------------------------------------------------------------------
Target::Target(Debugger &debugger, const ArchSpec &target_arch, const lldb::PlatformSP &platform_sp) :
+ TargetProperties (this),
Broadcaster (&debugger, "lldb.target"),
+//TargetInstanceSettings (GetSettingsController()),
ExecutionContextScope (),
- TargetInstanceSettings (GetSettingsController()),
m_debugger (debugger),
m_platform_sp (platform_sp),
m_mutex (Mutex::eMutexTypeRecursive),
@@ -964,7 +967,7 @@ Target::SetExecutableModule (ModuleSP& executable_sp, bool get_dependent_files)
}
}
- UpdateInstanceName();
+// UpdateInstanceName();
}
@@ -996,7 +999,7 @@ Target::SetArchitecture (const ArchSpec &arch_spec)
ModuleSpec module_spec (executable_sp->GetFileSpec(), arch_spec);
Error error = ModuleList::GetSharedModule (module_spec,
executable_sp,
- &GetExecutableSearchPaths(),
+ NULL, // &GetExecutableSearchPaths(), // TODO: SETTINGS
NULL,
NULL);
@@ -1051,9 +1054,7 @@ bool
Target::ModuleIsExcludedForNonModuleSpecificSearches (const FileSpec &module_file_spec)
{
- if (!m_breakpoints_use_platform_avoid)
- return false;
- else
+ if (GetBreakpointsConsultPlatformAvoidList())
{
ModuleList matchingModules;
ModuleSpec module_spec (module_file_spec);
@@ -1070,22 +1071,19 @@ Target::ModuleIsExcludedForNonModuleSpecificSearches (const FileSpec &module_fil
}
return true;
}
- else
- return false;
}
+ return false;
}
bool
Target::ModuleIsExcludedForNonModuleSpecificSearches (const lldb::ModuleSP &module_sp)
{
- if (!m_breakpoints_use_platform_avoid)
- return false;
- else if (GetPlatform())
+ if (GetBreakpointsConsultPlatformAvoidList())
{
- return GetPlatform()->ModuleIsExcludedForNonModuleSpecificSearches (*this, module_sp);
+ if (m_platform_sp)
+ return m_platform_sp->ModuleIsExcludedForNonModuleSpecificSearches (*this, module_sp);
}
- else
- return false;
+ return false;
}
size_t
@@ -1352,7 +1350,7 @@ Target::GetSharedModule (const ModuleSpec &module_spec, Error *error_ptr)
transformed_spec.GetFileSpec().GetFilename() = module_spec.GetFileSpec().GetFilename();
error = ModuleList::GetSharedModule (transformed_spec,
module_sp,
- &GetExecutableSearchPaths(),
+ NULL, // TODO: SETTINGS &GetExecutableSearchPaths(),
&old_module_sp,
&did_create_module);
}
@@ -1373,8 +1371,8 @@ Target::GetSharedModule (const ModuleSpec &module_spec, Error *error_ptr)
// We have a UUID, it is OK to check the global module list...
error = ModuleList::GetSharedModule (module_spec,
module_sp,
- &GetExecutableSearchPaths(),
- &old_module_sp,
+ NULL, // TODO: SETTINGS &GetExecutableSearchPaths(),
+ &old_module_sp,
&did_create_module);
}
@@ -1387,8 +1385,8 @@ Target::GetSharedModule (const ModuleSpec &module_spec, Error *error_ptr)
FileSpec platform_file_spec;
error = m_platform_sp->GetSharedModule (module_spec,
module_sp,
- &GetExecutableSearchPaths(),
- &old_module_sp,
+ NULL, // TODO: SETTINGS &GetExecutableSearchPaths(),
+ &old_module_sp,
&did_create_module);
}
else
@@ -1529,12 +1527,12 @@ Target::GetClangASTImporter()
void
Target::SettingsInitialize ()
{
- UserSettingsController::InitializeSettingsController (GetSettingsController(),
- SettingsController::global_settings_table,
- SettingsController::instance_settings_table);
-
- // Now call SettingsInitialize() on each 'child' setting of Target
- Process::SettingsInitialize ();
+// UserSettingsController::InitializeSettingsController (GetSettingsController(),
+// SettingsController::global_settings_table,
+// SettingsController::instance_settings_table);
+//
+// // Now call SettingsInitialize() on each 'child' setting of Target
+// Process::SettingsInitialize ();
}
void
@@ -1542,65 +1540,59 @@ Target::SettingsTerminate ()
{
// Must call SettingsTerminate() on each settings 'child' of Target, before terminating Target's Settings.
-
- Process::SettingsTerminate ();
-
- // Now terminate Target Settings.
-
- UserSettingsControllerSP &usc = GetSettingsController();
- UserSettingsController::FinalizeSettingsController (usc);
- usc.reset();
-}
-
-UserSettingsControllerSP &
-Target::GetSettingsController ()
-{
- static UserSettingsControllerSP g_settings_controller_sp;
- if (!g_settings_controller_sp)
- {
- g_settings_controller_sp.reset (new Target::SettingsController);
- // The first shared pointer to Target::SettingsController in
- // g_settings_controller_sp must be fully created above so that
- // the TargetInstanceSettings can use a weak_ptr to refer back
- // to the master setttings controller
- InstanceSettingsSP default_instance_settings_sp (new TargetInstanceSettings (g_settings_controller_sp,
- false,
- InstanceSettings::GetDefaultName().AsCString()));
- g_settings_controller_sp->SetDefaultInstanceSettings (default_instance_settings_sp);
- }
- return g_settings_controller_sp;
-}
+//
+// Process::SettingsTerminate ();
+//
+// // Now terminate Target Settings.
+//
+// UserSettingsControllerSP &usc = GetSettingsController();
+// UserSettingsController::FinalizeSettingsController (usc);
+// usc.reset();
+}
+
+//UserSettingsControllerSP &
+//Target::GetSettingsController ()
+//{
+// static UserSettingsControllerSP g_settings_controller_sp;
+// if (!g_settings_controller_sp)
+// {
+// g_settings_controller_sp.reset (new Target::SettingsController);
+// // The first shared pointer to Target::SettingsController in
+// // g_settings_controller_sp must be fully created above so that
+// // the TargetInstanceSettings can use a weak_ptr to refer back
+// // to the master setttings controller
+// InstanceSettingsSP default_instance_settings_sp (new TargetInstanceSettings (g_settings_controller_sp,
+// false,
+// InstanceSettings::GetDefaultName().AsCString()));
+// g_settings_controller_sp->SetDefaultInstanceSettings (default_instance_settings_sp);
+// }
+// return g_settings_controller_sp;
+//}
FileSpecList
Target::GetDefaultExecutableSearchPaths ()
{
- lldb::UserSettingsControllerSP settings_controller_sp (GetSettingsController());
- if (settings_controller_sp)
- {
- lldb::InstanceSettingsSP instance_settings_sp (settings_controller_sp->GetDefaultInstanceSettings ());
- if (instance_settings_sp)
- return static_cast<TargetInstanceSettings *>(instance_settings_sp.get())->GetExecutableSearchPaths ();
- }
+ TargetPropertiesSP properties_sp(Target::GetGlobalProperties());
+ if (properties_sp)
+ return properties_sp->GetExecutableSearchPaths();
return FileSpecList();
}
-
ArchSpec
Target::GetDefaultArchitecture ()
{
- lldb::UserSettingsControllerSP settings_controller_sp (GetSettingsController());
- if (settings_controller_sp)
- return static_cast<Target::SettingsController *>(settings_controller_sp.get())->GetArchitecture ();
+ TargetPropertiesSP properties_sp(Target::GetGlobalProperties());
+ if (properties_sp)
+ return properties_sp->GetDefaultArchitecture();
return ArchSpec();
}
void
-Target::SetDefaultArchitecture (const ArchSpec& arch)
+Target::SetDefaultArchitecture (const ArchSpec &arch)
{
- lldb::UserSettingsControllerSP settings_controller_sp (GetSettingsController());
-
- if (settings_controller_sp)
- static_cast<Target::SettingsController *>(settings_controller_sp.get())->GetArchitecture () = arch;
+ TargetPropertiesSP properties_sp(Target::GetGlobalProperties());
+ if (properties_sp)
+ return properties_sp->SetDefaultArchitecture(arch);
}
Target *
@@ -1619,26 +1611,27 @@ Target::GetTargetFromContexts (const ExecutionContext *exe_ctx_ptr, const Symbol
}
-void
-Target::UpdateInstanceName ()
-{
- StreamString sstr;
-
- Module *exe_module = GetExecutableModulePointer();
- if (exe_module)
- {
- sstr.Printf ("%s_%s",
- exe_module->GetFileSpec().GetFilename().AsCString(),
- exe_module->GetArchitecture().GetArchitectureName());
- GetSettingsController()->RenameInstanceSettings (GetInstanceName().AsCString(), sstr.GetData());
- }
-}
-
+//void
+//Target::UpdateInstanceName ()
+//{
+// StreamString sstr;
+//
+// Module *exe_module = GetExecutableModulePointer();
+// if (exe_module)
+// {
+// sstr.Printf ("%s_%s",
+// exe_module->GetFileSpec().GetFilename().AsCString(),
+// exe_module->GetArchitecture().GetArchitectureName());
+// GetSettingsController()->RenameInstanceSettings (GetInstanceName().AsCString(), sstr.GetData());
+// }
+//}
+//
const char *
Target::GetExpressionPrefixContentsAsCString ()
{
- if (!m_expr_prefix_contents.empty())
- return m_expr_prefix_contents.c_str();
+ // TODO: SETTINGS
+// if (!m_expr_prefix_contents.empty())
+// return m_expr_prefix_contents.c_str();
return NULL;
}
@@ -2152,795 +2145,1174 @@ Target::StopHook::GetDescription (Stream *s, lldb::DescriptionLevel level) const
// class Target::SettingsController
//--------------------------------------------------------------
-Target::SettingsController::SettingsController () :
- UserSettingsController ("target", Debugger::GetSettingsController()),
- m_default_architecture ()
-{
-}
+//Target::SettingsController::SettingsController () :
+// UserSettingsController ("target", Debugger::GetSettingsController()),
+// m_default_architecture ()
+//{
+//}
+//
+//Target::SettingsController::~SettingsController ()
+//{
+//}
+//
+//lldb::InstanceSettingsSP
+//Target::SettingsController::CreateInstanceSettings (const char *instance_name)
+//{
+// lldb::InstanceSettingsSP new_settings_sp (new TargetInstanceSettings (GetSettingsController(),
+// false,
+// instance_name));
+// return new_settings_sp;
+//}
+//
+//
+//#define TSC_DEFAULT_ARCH "default-arch"
+//#define TSC_EXPR_PREFIX "expr-prefix"
+//#define TSC_PREFER_DYNAMIC "prefer-dynamic-value"
+//#define TSC_ENABLE_SYNTHETIC "enable-synthetic-value"
+//#define TSC_SKIP_PROLOGUE "skip-prologue"
+//#define TSC_SOURCE_MAP "source-map"
+//#define TSC_EXE_SEARCH_PATHS "exec-search-paths"
+//#define TSC_MAX_CHILDREN "max-children-count"
+//#define TSC_MAX_STRLENSUMMARY "max-string-summary-length"
+//#define TSC_PLATFORM_AVOID "breakpoints-use-platform-avoid-list"
+//#define TSC_RUN_ARGS "run-args"
+//#define TSC_ENV_VARS "env-vars"
+//#define TSC_INHERIT_ENV "inherit-env"
+//#define TSC_STDIN_PATH "input-path"
+//#define TSC_STDOUT_PATH "output-path"
+//#define TSC_STDERR_PATH "error-path"
+//#define TSC_DISABLE_ASLR "disable-aslr"
+//#define TSC_DISABLE_STDIO "disable-stdio"
+//
+//
+//static const ConstString &
+//GetSettingNameForDefaultArch ()
+//{
+// static ConstString g_const_string (TSC_DEFAULT_ARCH);
+// return g_const_string;
+//}
+//
+//static const ConstString &
+//GetSettingNameForExpressionPrefix ()
+//{
+// static ConstString g_const_string (TSC_EXPR_PREFIX);
+// return g_const_string;
+//}
+//
+//static const ConstString &
+//GetSettingNameForPreferDynamicValue ()
+//{
+// static ConstString g_const_string (TSC_PREFER_DYNAMIC);
+// return g_const_string;
+//}
+//
+//static const ConstString &
+//GetSettingNameForEnableSyntheticValue ()
+//{
+// static ConstString g_const_string (TSC_ENABLE_SYNTHETIC);
+// return g_const_string;
+//}
+//
+//static const ConstString &
+//GetSettingNameForSourcePathMap ()
+//{
+// static ConstString g_const_string (TSC_SOURCE_MAP);
+// return g_const_string;
+//}
+//
+//static const ConstString &
+//GetSettingNameForExecutableSearchPaths ()
+//{
+// static ConstString g_const_string (TSC_EXE_SEARCH_PATHS);
+// return g_const_string;
+//}
+//
+//static const ConstString &
+//GetSettingNameForSkipPrologue ()
+//{
+// static ConstString g_const_string (TSC_SKIP_PROLOGUE);
+// return g_const_string;
+//}
+//
+//static const ConstString &
+//GetSettingNameForMaxChildren ()
+//{
+// static ConstString g_const_string (TSC_MAX_CHILDREN);
+// return g_const_string;
+//}
+//
+//static const ConstString &
+//GetSettingNameForMaxStringSummaryLength ()
+//{
+// static ConstString g_const_string (TSC_MAX_STRLENSUMMARY);
+// return g_const_string;
+//}
+//
+//static const ConstString &
+//GetSettingNameForPlatformAvoid ()
+//{
+// static ConstString g_const_string (TSC_PLATFORM_AVOID);
+// return g_const_string;
+//}
+//
+//const ConstString &
+//GetSettingNameForRunArgs ()
+//{
+// static ConstString g_const_string (TSC_RUN_ARGS);
+// return g_const_string;
+//}
+//
+//const ConstString &
+//GetSettingNameForEnvVars ()
+//{
+// static ConstString g_const_string (TSC_ENV_VARS);
+// return g_const_string;
+//}
+//
+//const ConstString &
+//GetSettingNameForInheritHostEnv ()
+//{
+// static ConstString g_const_string (TSC_INHERIT_ENV);
+// return g_const_string;
+//}
+//
+//const ConstString &
+//GetSettingNameForInputPath ()
+//{
+// static ConstString g_const_string (TSC_STDIN_PATH);
+// return g_const_string;
+//}
+//
+//const ConstString &
+//GetSettingNameForOutputPath ()
+//{
+// static ConstString g_const_string (TSC_STDOUT_PATH);
+// return g_const_string;
+//}
+//
+//const ConstString &
+//GetSettingNameForErrorPath ()
+//{
+// static ConstString g_const_string (TSC_STDERR_PATH);
+// return g_const_string;
+//}
+//
+//const ConstString &
+//GetSettingNameForDisableASLR ()
+//{
+// static ConstString g_const_string (TSC_DISABLE_ASLR);
+// return g_const_string;
+//}
+//
+//const ConstString &
+//GetSettingNameForDisableSTDIO ()
+//{
+// static ConstString g_const_string (TSC_DISABLE_STDIO);
+// return g_const_string;
+//}
+//
+//bool
+//Target::SettingsController::SetGlobalVariable (const ConstString &var_name,
+// const char *index_value,
+// const char *value,
+// const SettingEntry &entry,
+// const VarSetOperationType op,
+// Error&err)
+//{
+// if (var_name == GetSettingNameForDefaultArch())
+// {
+// m_default_architecture.SetTriple (value);
+// if (!m_default_architecture.IsValid())
+// err.SetErrorStringWithFormat ("'%s' is not a valid architecture or triple.", value);
+// }
+// return true;
+//}
+//
+//
+//bool
+//Target::SettingsController::GetGlobalVariable (const ConstString &var_name,
+// StringList &value,
+// Error &err)
+//{
+// if (var_name == GetSettingNameForDefaultArch())
+// {
+// // If the arch is invalid (the default), don't show a string for it
+// if (m_default_architecture.IsValid())
+// value.AppendString (m_default_architecture.GetArchitectureName());
+// return true;
+// }
+// else
+// err.SetErrorStringWithFormat ("unrecognized variable name '%s'", var_name.AsCString());
+//
+// return false;
+//}
-Target::SettingsController::~SettingsController ()
-{
-}
-lldb::InstanceSettingsSP
-Target::SettingsController::CreateInstanceSettings (const char *instance_name)
-{
- lldb::InstanceSettingsSP new_settings_sp (new TargetInstanceSettings (GetSettingsController(),
- false,
- instance_name));
- return new_settings_sp;
-}
+//--------------------------------------------------------------
+// class TargetProperties
+//--------------------------------------------------------------
+OptionEnumValueElement
+lldb_private::g_dynamic_value_types[] =
+{
+ { eNoDynamicValues, "no-dynamic-values", "Don't calculate the dynamic type of values"},
+ { eDynamicCanRunTarget, "run-target", "Calculate the dynamic type of values even if you have to run the target."},
+ { eDynamicDontRunTarget, "no-run-target", "Calculate the dynamic type of values, but don't run the target."},
+ { 0, NULL, NULL }
+};
-#define TSC_DEFAULT_ARCH "default-arch"
-#define TSC_EXPR_PREFIX "expr-prefix"
-#define TSC_PREFER_DYNAMIC "prefer-dynamic-value"
-#define TSC_ENABLE_SYNTHETIC "enable-synthetic-value"
-#define TSC_SKIP_PROLOGUE "skip-prologue"
-#define TSC_SOURCE_MAP "source-map"
-#define TSC_EXE_SEARCH_PATHS "exec-search-paths"
-#define TSC_MAX_CHILDREN "max-children-count"
-#define TSC_MAX_STRLENSUMMARY "max-string-summary-length"
-#define TSC_PLATFORM_AVOID "breakpoints-use-platform-avoid-list"
-#define TSC_RUN_ARGS "run-args"
-#define TSC_ENV_VARS "env-vars"
-#define TSC_INHERIT_ENV "inherit-env"
-#define TSC_STDIN_PATH "input-path"
-#define TSC_STDOUT_PATH "output-path"
-#define TSC_STDERR_PATH "error-path"
-#define TSC_DISABLE_ASLR "disable-aslr"
-#define TSC_DISABLE_STDIO "disable-stdio"
+static PropertyDefinition
+g_properties[] =
+{
+ { "default-arch" , OptionValue::eTypeArch , true , 0 , NULL, NULL, "Default architecture to choose, when there's a choice." },
+ { "expr-prefix" , OptionValue::eTypeFileSpec , false, 0 , NULL, NULL, "Path to a file containing expressions to be prepended to all expressions." },
+ { "prefer-dynamic-value" , OptionValue::eTypeEnum , false, eNoDynamicValues , NULL, g_dynamic_value_types, "Should printed values be shown as their dynamic value." },
+ { "enable-synthetic-value" , OptionValue::eTypeBoolean , false, true , NULL, NULL, "Should synthetic values be used by default whenever available." },
+ { "skip-prologue" , OptionValue::eTypeBoolean , false, true , NULL, NULL, "Skip function prologues when setting breakpoints by name." },
+ { "source-map" , OptionValue::eTypePathMap , false, 0 , NULL, NULL, "Source path remappings used to track the change of location between a source file when built, and "
+ "where it exists on the current system. It consists of an array of duples, the first element of each duple is "
+ "some part (starting at the root) of the path to the file when it was built, "
+ "and the second is where the remainder of the original build hierarchy is rooted on the local system. "
+ "Each element of the array is checked in order and the first one that results in a match wins." },
+ { "exec-search-paths" , OptionValue::eTypeFileSpecList, false, 0 , NULL, NULL, "Executable search paths to use when locating executable files whose paths don't match the local file system." },
+ { "max-children-count" , OptionValue::eTypeSInt64 , false, 256 , NULL, NULL, "Maximum number of children to expand in any level of depth." },
+ { "max-string-summary-length" , OptionValue::eTypeSInt64 , false, 1024 , NULL, NULL, "Maximum number of characters to show when using %s in summary strings." },
+ { "breakpoints-use-platform-avoid-list", OptionValue::eTypeBoolean , false, true , NULL, NULL, "Consult the platform module avoid list when setting non-module specific breakpoints." },
+ { "run-args" , OptionValue::eTypeArgs , false, 0 , NULL, NULL, "A list containing all the arguments to be passed to the executable when it is run." },
+ { "env-vars" , OptionValue::eTypeDictionary, false, OptionValue::eTypeString , NULL, NULL, "A list of all the environment variables to be passed to the executable's environment, and their values." },
+ { "inherit-env" , OptionValue::eTypeBoolean , false, true , NULL, NULL, "Inherit the environment from the process that is running LLDB." },
+ { "input-path" , OptionValue::eTypeFileSpec , false, 0 , NULL, NULL, "The file/path to be used by the executable program for reading its standard input." },
+ { "output-path" , OptionValue::eTypeFileSpec , false, 0 , NULL, NULL, "The file/path to be used by the executable program for writing its standard output." },
+ { "error-path" , OptionValue::eTypeFileSpec , false, 0 , NULL, NULL, "The file/path to be used by the executable program for writing its standard error." },
+ { "disable-aslr" , OptionValue::eTypeBoolean , false, true , NULL, NULL, "Disable Address Space Layout Randomization (ASLR)" },
+ { "disable-stdio" , OptionValue::eTypeBoolean , false, false , NULL, NULL, "Disable stdin/stdout for process (e.g. for a GUI application)" },
+ { NULL , OptionValue::eTypeInvalid , false, 0 , NULL, NULL, NULL }
+};
+enum
+{
+ ePropertyDefaultArch,
+ ePropertyExprPrefix,
+ ePropertyPreferDynamic,
+ ePropertyEnableSynthetic,
+ ePropertySkipPrologue,
+ ePropertySourceMap,
+ ePropertyExecutableSearchPaths,
+ ePropertyMaxChildrenCount,
+ ePropertyMaxSummaryLength,
+ ePropertyBreakpointUseAvoidList,
+ ePropertyRunArgs,
+ ePropertyEnvVars,
+ ePropertyInheritEnv,
+ ePropertyInputPath,
+ ePropertyOutputPath,
+ ePropertyErrorPath,
+ ePropertyDisableASLR,
+ ePropertyDisableSTDIO
+};
-static const ConstString &
-GetSettingNameForDefaultArch ()
+class TargetOptionValueProperties : public OptionValueProperties
{
- static ConstString g_const_string (TSC_DEFAULT_ARCH);
- return g_const_string;
-}
+public:
+ TargetOptionValueProperties (const ConstString &name) :
+ OptionValueProperties (name),
+ m_target (NULL),
+ m_got_host_env (false)
+ {
+ }
-static const ConstString &
-GetSettingNameForExpressionPrefix ()
-{
- static ConstString g_const_string (TSC_EXPR_PREFIX);
- return g_const_string;
-}
+ // This constructor is used when creating TargetOptionValueProperties when it
+ // is part of a new lldb_private::Target instance. It will copy all current
+ // global property values as needed
+ TargetOptionValueProperties (Target *target, const TargetPropertiesSP &target_properties_sp) :
+ OptionValueProperties(*target_properties_sp->GetValueProperties()),
+ m_target (target),
+ m_got_host_env (false)
+ {
+ }
-static const ConstString &
-GetSettingNameForPreferDynamicValue ()
-{
- static ConstString g_const_string (TSC_PREFER_DYNAMIC);
- return g_const_string;
-}
+ virtual const Property *
+ GetPropertyAtIndex (const ExecutionContext *exe_ctx, bool will_modify, uint32_t idx) const
+ {
+ // When gettings the value for a key from the target options, we will always
+ // try and grab the setting from the current target if there is one. Else we just
+ // use the one from this instance.
+ if (idx == ePropertyEnvVars)
+ GetHostEnvironmentIfNeeded ();
+
+ if (exe_ctx)
+ {
+ Target *target = exe_ctx->GetTargetPtr();
+ if (target)
+ {
+ TargetOptionValueProperties *target_properties = static_cast<TargetOptionValueProperties *>(target->GetValueProperties().get());
+ if (this != target_properties)
+ return target_properties->ProtectedGetPropertyAtIndex (idx);
+ }
+ }
+ return ProtectedGetPropertyAtIndex (idx);
+ }
+protected:
+
+ void
+ GetHostEnvironmentIfNeeded () const
+ {
+ if (!m_got_host_env)
+ {
+ if (m_target)
+ {
+ m_got_host_env = true;
+ const uint32_t idx = ePropertyInheritEnv;
+ if (GetPropertyAtIndexAsBoolean (NULL, idx, g_properties[idx].default_uint_value != 0))
+ {
+ PlatformSP platform_sp (m_target->GetPlatform());
+ if (platform_sp)
+ {
+ StringList env;
+ if (platform_sp->GetEnvironment(env))
+ {
+ OptionValueDictionary *env_dict = GetPropertyAtIndexAsOptionValueDictionary (NULL, ePropertyEnvVars);
+ if (env_dict)
+ {
+ const bool can_replace = false;
+ const size_t envc = env.GetSize();
+ for (size_t idx=0; idx<envc; idx++)
+ {
+ const char *env_entry = env.GetStringAtIndex (idx);
+ if (env_entry)
+ {
+ const char *equal_pos = ::strchr(env_entry, '=');
+ ConstString key;
+ // It is ok to have environment variables with no values
+ const char *value = NULL;
+ if (equal_pos)
+ {
+ key.SetCStringWithLength(env_entry, equal_pos - env_entry);
+ if (equal_pos[1])
+ value = equal_pos + 1;
+ }
+ else
+ {
+ key.SetCString(env_entry);
+ }
+ // Don't allow existing keys to be replaced with ones we get from the platform environment
+ env_dict->SetValueForKey(key, OptionValueSP(new OptionValueString(value)), can_replace);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ Target *m_target;
+ mutable bool m_got_host_env;
+};
-static const ConstString &
-GetSettingNameForEnableSyntheticValue ()
+TargetProperties::TargetProperties (Target *target) :
+ Properties ()
{
- static ConstString g_const_string (TSC_ENABLE_SYNTHETIC);
- return g_const_string;
+ if (target)
+ {
+ m_collection_sp.reset (new TargetOptionValueProperties(target, Target::GetGlobalProperties()));
+ }
+ else
+ {
+ m_collection_sp.reset (new TargetOptionValueProperties(ConstString("target")));
+ m_collection_sp->Initialize(g_properties);
+ m_collection_sp->AppendProperty(ConstString("process"),
+ ConstString("Settings specify to processes."),
+ true,
+ Process::GetGlobalProperties()->GetValueProperties());
+ }
}
-static const ConstString &
-GetSettingNameForSourcePathMap ()
+TargetProperties::~TargetProperties ()
{
- static ConstString g_const_string (TSC_SOURCE_MAP);
- return g_const_string;
}
-
-static const ConstString &
-GetSettingNameForExecutableSearchPaths ()
+ArchSpec
+TargetProperties::GetDefaultArchitecture () const
{
- static ConstString g_const_string (TSC_EXE_SEARCH_PATHS);
- return g_const_string;
+ OptionValueArch *value = m_collection_sp->GetPropertyAtIndexAsOptionValueArch (NULL, ePropertyDefaultArch);
+ if (value)
+ return value->GetCurrentValue();
+ return ArchSpec();
}
-static const ConstString &
-GetSettingNameForSkipPrologue ()
+void
+TargetProperties::SetDefaultArchitecture (const ArchSpec& arch)
{
- static ConstString g_const_string (TSC_SKIP_PROLOGUE);
- return g_const_string;
+ OptionValueArch *value = m_collection_sp->GetPropertyAtIndexAsOptionValueArch (NULL, ePropertyDefaultArch);
+ if (value)
+ return value->SetCurrentValue(arch, true);
}
-static const ConstString &
-GetSettingNameForMaxChildren ()
+lldb::DynamicValueType
+TargetProperties::GetPreferDynamicValue() const
{
- static ConstString g_const_string (TSC_MAX_CHILDREN);
- return g_const_string;
+ const uint32_t idx = ePropertyPreferDynamic;
+ return (lldb::DynamicValueType)m_collection_sp->GetPropertyAtIndexAsEnumeration (NULL, idx, g_properties[idx].default_uint_value);
}
-static const ConstString &
-GetSettingNameForMaxStringSummaryLength ()
+bool
+TargetProperties::GetDisableASLR () const
{
- static ConstString g_const_string (TSC_MAX_STRLENSUMMARY);
- return g_const_string;
+ const uint32_t idx = ePropertyDisableASLR;
+ return m_collection_sp->GetPropertyAtIndexAsBoolean (NULL, idx, g_properties[idx].default_uint_value != 0);
}
-static const ConstString &
-GetSettingNameForPlatformAvoid ()
+void
+TargetProperties::SetDisableASLR (bool b)
{
- static ConstString g_const_string (TSC_PLATFORM_AVOID);
- return g_const_string;
+ const uint32_t idx = ePropertyDisableASLR;
+ m_collection_sp->SetPropertyAtIndexAsBoolean (NULL, idx, b);
}
-const ConstString &
-GetSettingNameForRunArgs ()
+bool
+TargetProperties::GetDisableSTDIO () const
{
- static ConstString g_const_string (TSC_RUN_ARGS);
- return g_const_string;
+ const uint32_t idx = ePropertyDisableSTDIO;
+ return m_collection_sp->GetPropertyAtIndexAsBoolean (NULL, idx, g_properties[idx].default_uint_value != 0);
}
-const ConstString &
-GetSettingNameForEnvVars ()
+void
+TargetProperties::SetDisableSTDIO (bool b)
{
- static ConstString g_const_string (TSC_ENV_VARS);
- return g_const_string;
+ const uint32_t idx = ePropertyDisableSTDIO;
+ m_collection_sp->SetPropertyAtIndexAsBoolean (NULL, idx, b);
}
-const ConstString &
-GetSettingNameForInheritHostEnv ()
+bool
+TargetProperties::GetRunArguments (Args &args) const
{
- static ConstString g_const_string (TSC_INHERIT_ENV);
- return g_const_string;
+ const uint32_t idx = ePropertyRunArgs;
+ return m_collection_sp->GetPropertyAtIndexAsArgs (NULL, idx, args);
}
-const ConstString &
-GetSettingNameForInputPath ()
+void
+TargetProperties::SetRunArguments (const Args &args)
{
- static ConstString g_const_string (TSC_STDIN_PATH);
- return g_const_string;
+ const uint32_t idx = ePropertyRunArgs;
+ m_collection_sp->SetPropertyAtIndexFromArgs (NULL, idx, args);
}
-const ConstString &
-GetSettingNameForOutputPath ()
+size_t
+TargetProperties::GetEnvironmentAsArgs (Args &env) const
{
- static ConstString g_const_string (TSC_STDOUT_PATH);
- return g_const_string;
+ const uint32_t idx = ePropertyEnvVars;
+ return m_collection_sp->GetPropertyAtIndexAsArgs (NULL, idx, env);
}
-const ConstString &
-GetSettingNameForErrorPath ()
+bool
+TargetProperties::GetSkipPrologue() const
{
- static ConstString g_const_string (TSC_STDERR_PATH);
- return g_const_string;
+ const uint32_t idx = ePropertySkipPrologue;
+ return m_collection_sp->GetPropertyAtIndexAsBoolean (NULL, idx, g_properties[idx].default_uint_value != 0);
}
-const ConstString &
-GetSettingNameForDisableASLR ()
+PathMappingList &
+TargetProperties::GetSourcePathMap () const
{
- static ConstString g_const_string (TSC_DISABLE_ASLR);
- return g_const_string;
+ const uint32_t idx = ePropertySourceMap;
+ OptionValuePathMappings *option_value = m_collection_sp->GetPropertyAtIndexAsOptionValuePathMappings (NULL, false, idx);
+ assert(option_value);
+ return option_value->GetCurrentValue();
}
-const ConstString &
-GetSettingNameForDisableSTDIO ()
+FileSpecList &
+TargetProperties::GetExecutableSearchPaths () const
{
- static ConstString g_const_string (TSC_DISABLE_STDIO);
- return g_const_string;
+ const uint32_t idx = ePropertyExecutableSearchPaths;
+ OptionValueFileSpecList *option_value = m_collection_sp->GetPropertyAtIndexAsOptionValueFileSpecList (NULL, false, idx);
+ assert(option_value);
+ return option_value->GetCurrentValue();
}
bool
-Target::SettingsController::SetGlobalVariable (const ConstString &var_name,
- const char *index_value,
- const char *value,
- const SettingEntry &entry,
- const VarSetOperationType op,
- Error&err)
+TargetProperties::GetEnableSyntheticValue () const
{
- if (var_name == GetSettingNameForDefaultArch())
- {
- m_default_architecture.SetTriple (value);
- if (!m_default_architecture.IsValid())
- err.SetErrorStringWithFormat ("'%s' is not a valid architecture or triple.", value);
- }
- return true;
+ const uint32_t idx = ePropertyEnableSynthetic;
+ return m_collection_sp->GetPropertyAtIndexAsBoolean (NULL, idx, g_properties[idx].default_uint_value != 0);
}
-
-bool
-Target::SettingsController::GetGlobalVariable (const ConstString &var_name,
- StringList &value,
- Error &err)
+uint32_t
+TargetProperties::GetMaximumNumberOfChildrenToDisplay() const
{
- if (var_name == GetSettingNameForDefaultArch())
- {
- // If the arch is invalid (the default), don't show a string for it
- if (m_default_architecture.IsValid())
- value.AppendString (m_default_architecture.GetArchitectureName());
- return true;
- }
- else
- err.SetErrorStringWithFormat ("unrecognized variable name '%s'", var_name.AsCString());
-
- return false;
+ const uint32_t idx = ePropertyMaxChildrenCount;
+ return m_collection_sp->GetPropertyAtIndexAsSInt64 (NULL, idx, g_properties[idx].default_uint_value);
}
-//--------------------------------------------------------------
-// class TargetInstanceSettings
-//--------------------------------------------------------------
+uint32_t
+TargetProperties::GetMaximumSizeOfStringSummary() const
+{
+ const uint32_t idx = ePropertyMaxSummaryLength;
+ return m_collection_sp->GetPropertyAtIndexAsSInt64 (NULL, idx, g_properties[idx].default_uint_value);
+}
-TargetInstanceSettings::TargetInstanceSettings
-(
- const lldb::UserSettingsControllerSP &owner_sp,
- bool live_instance,
- const char *name
-) :
- InstanceSettings (owner_sp, name ? name : InstanceSettings::InvalidName().AsCString(), live_instance),
- m_expr_prefix_file (),
- m_expr_prefix_contents (),
- m_prefer_dynamic_value (2),
- m_enable_synthetic_value(true, true),
- m_skip_prologue (true, true),
- m_source_map (NULL, NULL),
- m_exe_search_paths (),
- m_max_children_display(256),
- m_max_strlen_length(1024),
- m_breakpoints_use_platform_avoid (true, true),
- m_run_args (),
- m_env_vars (),
- m_input_path (),
- m_output_path (),
- m_error_path (),
- m_disable_aslr (true),
- m_disable_stdio (false),
- m_inherit_host_env (true),
- m_got_host_env (false)
-{
- // 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.
- // For this reason it has to be called here, rather than in the initializer or in the parent constructor.
- // This is true for CreateInstanceName() too.
-
- if (GetInstanceName () == InstanceSettings::InvalidName())
- {
- ChangeInstanceName (std::string (CreateInstanceName().AsCString()));
- owner_sp->RegisterInstanceSettings (this);
- }
-
- if (live_instance)
- {
- const lldb::InstanceSettingsSP &pending_settings = owner_sp->FindPendingSettings (m_instance_name);
- CopyInstanceSettings (pending_settings,false);
- }
-}
-
-TargetInstanceSettings::TargetInstanceSettings (const TargetInstanceSettings &rhs) :
- InstanceSettings (Target::GetSettingsController(), CreateInstanceName().AsCString()),
- m_expr_prefix_file (rhs.m_expr_prefix_file),
- m_expr_prefix_contents (rhs.m_expr_prefix_contents),
- m_prefer_dynamic_value (rhs.m_prefer_dynamic_value),
- m_enable_synthetic_value(rhs.m_enable_synthetic_value),
- m_skip_prologue (rhs.m_skip_prologue),
- m_source_map (rhs.m_source_map),
- m_exe_search_paths (rhs.m_exe_search_paths),
- m_max_children_display (rhs.m_max_children_display),
- m_max_strlen_length (rhs.m_max_strlen_length),
- m_breakpoints_use_platform_avoid (rhs.m_breakpoints_use_platform_avoid),
- m_run_args (rhs.m_run_args),
- m_env_vars (rhs.m_env_vars),
- m_input_path (rhs.m_input_path),
- m_output_path (rhs.m_output_path),
- m_error_path (rhs.m_error_path),
- m_disable_aslr (rhs.m_disable_aslr),
- m_disable_stdio (rhs.m_disable_stdio),
- m_inherit_host_env (rhs.m_inherit_host_env)
-{
- if (m_instance_name != InstanceSettings::GetDefaultName())
- {
- UserSettingsControllerSP owner_sp (m_owner_wp.lock());
- if (owner_sp)
- CopyInstanceSettings (owner_sp->FindPendingSettings (m_instance_name),false);
- }
-}
-
-TargetInstanceSettings::~TargetInstanceSettings ()
-{
-}
-
-TargetInstanceSettings&
-TargetInstanceSettings::operator= (const TargetInstanceSettings &rhs)
-{
- if (this != &rhs)
- {
- m_expr_prefix_file = rhs.m_expr_prefix_file;
- m_expr_prefix_contents = rhs.m_expr_prefix_contents;
- m_prefer_dynamic_value = rhs.m_prefer_dynamic_value;
- m_enable_synthetic_value = rhs.m_enable_synthetic_value;
- m_skip_prologue = rhs.m_skip_prologue;
- m_source_map = rhs.m_source_map;
- m_exe_search_paths = rhs.m_exe_search_paths;
- m_max_children_display = rhs.m_max_children_display;
- m_max_strlen_length = rhs.m_max_strlen_length;
- m_breakpoints_use_platform_avoid = rhs.m_breakpoints_use_platform_avoid;
- m_run_args = rhs.m_run_args;
- m_env_vars = rhs.m_env_vars;
- m_input_path = rhs.m_input_path;
- m_output_path = rhs.m_output_path;
- m_error_path = rhs.m_error_path;
- m_disable_aslr = rhs.m_disable_aslr;
- m_disable_stdio = rhs.m_disable_stdio;
- m_inherit_host_env = rhs.m_inherit_host_env;
- }
-
- return *this;
+FileSpec
+TargetProperties::GetStandardInputPath () const
+{
+ const uint32_t idx = ePropertyInputPath;
+ return m_collection_sp->GetPropertyAtIndexAsFileSpec (NULL, idx);
}
void
-TargetInstanceSettings::UpdateInstanceSettingsVariable (const ConstString &var_name,
- const char *index_value,
- const char *value,
- const ConstString &instance_name,
- const SettingEntry &entry,
- VarSetOperationType op,
- Error &err,
- bool pending)
-{
- if (var_name == GetSettingNameForExpressionPrefix ())
- {
- err = UserSettingsController::UpdateFileSpecOptionValue (value, op, m_expr_prefix_file);
- if (err.Success())
- {
- switch (op)
- {
- default:
- break;
- case eVarSetOperationAssign:
- case eVarSetOperationAppend:
- {
- m_expr_prefix_contents.clear();
-
- if (!m_expr_prefix_file.GetCurrentValue().Exists())
- {
- err.SetErrorToGenericError ();
- err.SetErrorStringWithFormat ("%s does not exist", value);
- return;
- }
-
- DataBufferSP file_data_sp (m_expr_prefix_file.GetCurrentValue().ReadFileContents(0, SIZE_MAX, &err));
-
- if (err.Success())
- {
- if (file_data_sp && file_data_sp->GetByteSize() > 0)
- {
- m_expr_prefix_contents.assign((const char*)file_data_sp->GetBytes(), file_data_sp->GetByteSize());
- }
- else
- {
- err.SetErrorStringWithFormat ("couldn't read data from '%s'", value);
- }
- }
- }
- break;
- case eVarSetOperationClear:
- m_expr_prefix_contents.clear();
- }
- }
- }
- else if (var_name == GetSettingNameForPreferDynamicValue())
- {
- int new_value;
- UserSettingsController::UpdateEnumVariable (g_dynamic_value_types, &new_value, value, err);
- if (err.Success())
- m_prefer_dynamic_value = new_value;
- }
- else if (var_name == GetSettingNameForEnableSyntheticValue())
- {
- bool ok;
- bool new_value = Args::StringToBoolean(value, true, &ok);
- if (ok)
- m_enable_synthetic_value.SetCurrentValue(new_value);
- }
- else if (var_name == GetSettingNameForSkipPrologue())
- {
- err = UserSettingsController::UpdateBooleanOptionValue (value, op, m_skip_prologue);
- }
- else if (var_name == GetSettingNameForMaxChildren())
- {
- bool ok;
- uint32_t new_value = Args::StringToUInt32(value, 0, 10, &ok);
- if (ok)
- m_max_children_display = new_value;
- }
- else if (var_name == GetSettingNameForMaxStringSummaryLength())
- {
- bool ok;
- uint32_t new_value = Args::StringToUInt32(value, 0, 10, &ok);
- if (ok)
- m_max_strlen_length = new_value;
- }
- else if (var_name == GetSettingNameForExecutableSearchPaths())
- {
- switch (op)
- {
- case eVarSetOperationReplace:
- case eVarSetOperationInsertBefore:
- case eVarSetOperationInsertAfter:
- case eVarSetOperationRemove:
- default:
- break;
- case eVarSetOperationAssign:
- m_exe_search_paths.Clear();
- // Fall through to append....
- case eVarSetOperationAppend:
- {
- Args args(value);
- const uint32_t argc = args.GetArgumentCount();
- if (argc > 0)
- {
- const char *exe_search_path_dir;
- for (uint32_t idx = 0; (exe_search_path_dir = args.GetArgumentAtIndex(idx)) != NULL; ++idx)
- {
- FileSpec file_spec;
- file_spec.GetDirectory().SetCString(exe_search_path_dir);
- FileSpec::FileType file_type = file_spec.GetFileType();
- if (file_type == FileSpec::eFileTypeDirectory || file_type == FileSpec::eFileTypeInvalid)
- {
- m_exe_search_paths.Append(file_spec);
- }
- else
- {
- err.SetErrorStringWithFormat("executable search path '%s' exists, but it does not resolve to a directory", exe_search_path_dir);
- }
- }
- }
- }
- break;
-
- case eVarSetOperationClear:
- m_exe_search_paths.Clear();
- break;
- }
- }
- else if (var_name == GetSettingNameForSourcePathMap ())
- {
- switch (op)
- {
- case eVarSetOperationReplace:
- case eVarSetOperationInsertBefore:
- case eVarSetOperationInsertAfter:
- case eVarSetOperationRemove:
- default:
- break;
- case eVarSetOperationAssign:
- m_source_map.Clear(true);
- // Fall through to append....
- case eVarSetOperationAppend:
- {
- Args args(value);
- const uint32_t argc = args.GetArgumentCount();
- if (argc & 1 || argc == 0)
- {
- err.SetErrorStringWithFormat ("an even number of paths must be supplied to to the source-map setting: %u arguments given", argc);
- }
- else
- {
- char resolved_new_path[PATH_MAX];
- FileSpec file_spec;
- const char *old_path;
- for (uint32_t idx = 0; (old_path = args.GetArgumentAtIndex(idx)) != NULL; idx += 2)
- {
- const char *new_path = args.GetArgumentAtIndex(idx+1);
- assert (new_path); // We have an even number of paths, this shouldn't happen!
-
- file_spec.SetFile(new_path, true);
- if (file_spec.Exists())
- {
- if (file_spec.GetPath (resolved_new_path, sizeof(resolved_new_path)) >= sizeof(resolved_new_path))
- {
- err.SetErrorStringWithFormat("new path '%s' is too long", new_path);
- return;
- }
- }
- else
- {
- err.SetErrorStringWithFormat("new path '%s' doesn't exist", new_path);
- return;
- }
- m_source_map.Append(ConstString (old_path), ConstString (resolved_new_path), true);
- }
- }
- }
- break;
+TargetProperties::SetStandardInputPath (const char *p)
+{
+ const uint32_t idx = ePropertyInputPath;
+ m_collection_sp->SetPropertyAtIndexAsString (NULL, idx, p);
+}
- case eVarSetOperationClear:
- m_source_map.Clear(true);
- break;
- }
- }
- else if (var_name == GetSettingNameForPlatformAvoid ())
- {
- err = UserSettingsController::UpdateBooleanOptionValue (value, op, m_breakpoints_use_platform_avoid);
- }
- else if (var_name == GetSettingNameForRunArgs())
- {
- UserSettingsController::UpdateStringArrayVariable (op, index_value, m_run_args, value, err);
- }
- else if (var_name == GetSettingNameForEnvVars())
- {
- // This is nice for local debugging, but it is isn't correct for
- // remote debugging. We need to stop process.env-vars from being
- // populated with the host environment and add this as a launch option
- // and get the correct environment from the Target's platform.
- // GetHostEnvironmentIfNeeded ();
- UserSettingsController::UpdateDictionaryVariable (op, index_value, m_env_vars, value, err);
- }
- else if (var_name == GetSettingNameForInputPath())
- {
- UserSettingsController::UpdateStringVariable (op, m_input_path, value, err);
- }
- else if (var_name == GetSettingNameForOutputPath())
- {
- UserSettingsController::UpdateStringVariable (op, m_output_path, value, err);
- }
- else if (var_name == GetSettingNameForErrorPath())
- {
- UserSettingsController::UpdateStringVariable (op, m_error_path, value, err);
- }
- else if (var_name == GetSettingNameForDisableASLR())
- {
- UserSettingsController::UpdateBooleanVariable (op, m_disable_aslr, value, true, err);
- }
- else if (var_name == GetSettingNameForDisableSTDIO ())
- {
- UserSettingsController::UpdateBooleanVariable (op, m_disable_stdio, value, false, err);
- }
+FileSpec
+TargetProperties::GetStandardOutputPath () const
+{
+ const uint32_t idx = ePropertyOutputPath;
+ return m_collection_sp->GetPropertyAtIndexAsFileSpec (NULL, idx);
}
void
-TargetInstanceSettings::CopyInstanceSettings (const lldb::InstanceSettingsSP &new_settings, bool pending)
+TargetProperties::SetStandardOutputPath (const char *p)
{
- TargetInstanceSettings *new_settings_ptr = static_cast <TargetInstanceSettings *> (new_settings.get());
-
- if (!new_settings_ptr)
- return;
-
- *this = *new_settings_ptr;
+ const uint32_t idx = ePropertyOutputPath;
+ m_collection_sp->SetPropertyAtIndexAsString (NULL, idx, p);
}
-bool
-TargetInstanceSettings::GetInstanceSettingsValue (const SettingEntry &entry,
- const ConstString &var_name,
- StringList &value,
- Error *err)
+FileSpec
+TargetProperties::GetStandardErrorPath () const
{
- if (var_name == GetSettingNameForExpressionPrefix ())
- {
- char path[PATH_MAX];
- const size_t path_len = m_expr_prefix_file.GetCurrentValue().GetPath (path, sizeof(path));
- if (path_len > 0)
- value.AppendString (path, path_len);
- }
- else if (var_name == GetSettingNameForPreferDynamicValue())
- {
- value.AppendString (g_dynamic_value_types[m_prefer_dynamic_value].string_value);
- }
- else if (var_name == GetSettingNameForEnableSyntheticValue())
- {
- if (m_skip_prologue)
- value.AppendString ("true");
- else
- value.AppendString ("false");
- }
- else if (var_name == GetSettingNameForSkipPrologue())
- {
- if (m_skip_prologue)
- value.AppendString ("true");
- else
- value.AppendString ("false");
- }
- else if (var_name == GetSettingNameForExecutableSearchPaths())
- {
- if (m_exe_search_paths.GetSize())
- {
- for (size_t i = 0, n = m_exe_search_paths.GetSize(); i < n; ++i)
- {
- value.AppendString(m_exe_search_paths.GetFileSpecAtIndex (i).GetDirectory().AsCString());
- }
- }
- }
- else if (var_name == GetSettingNameForSourcePathMap ())
- {
- if (m_source_map.GetSize())
- {
- size_t i;
- for (i = 0; i < m_source_map.GetSize(); ++i) {
- StreamString sstr;
- m_source_map.Dump(&sstr, i);
- value.AppendString(sstr.GetData());
- }
- }
- }
- else if (var_name == GetSettingNameForMaxChildren())
- {
- StreamString count_str;
- count_str.Printf ("%d", m_max_children_display);
- value.AppendString (count_str.GetData());
- }
- else if (var_name == GetSettingNameForMaxStringSummaryLength())
- {
- StreamString count_str;
- count_str.Printf ("%d", m_max_strlen_length);
- value.AppendString (count_str.GetData());
- }
- else if (var_name == GetSettingNameForPlatformAvoid())
- {
- if (m_breakpoints_use_platform_avoid)
- value.AppendString ("true");
- else
- value.AppendString ("false");
- }
- else if (var_name == GetSettingNameForRunArgs())
- {
- if (m_run_args.GetArgumentCount() > 0)
- {
- for (int i = 0; i < m_run_args.GetArgumentCount(); ++i)
- value.AppendString (m_run_args.GetArgumentAtIndex (i));
- }
- }
- else if (var_name == GetSettingNameForEnvVars())
- {
- GetHostEnvironmentIfNeeded ();
-
- if (m_env_vars.size() > 0)
- {
- std::map<std::string, std::string>::iterator pos;
- for (pos = m_env_vars.begin(); pos != m_env_vars.end(); ++pos)
- {
- StreamString value_str;
- value_str.Printf ("%s=%s", pos->first.c_str(), pos->second.c_str());
- value.AppendString (value_str.GetData());
- }
- }
- }
- else if (var_name == GetSettingNameForInputPath())
- {
- value.AppendString (m_input_path.c_str());
- }
- else if (var_name == GetSettingNameForOutputPath())
- {
- value.AppendString (m_output_path.c_str());
- }
- else if (var_name == GetSettingNameForErrorPath())
- {
- value.AppendString (m_error_path.c_str());
- }
- else if (var_name == GetSettingNameForInheritHostEnv())
- {
- if (m_inherit_host_env)
- value.AppendString ("true");
- else
- value.AppendString ("false");
- }
- else if (var_name == GetSettingNameForDisableASLR())
- {
- if (m_disable_aslr)
- value.AppendString ("true");
- else
- value.AppendString ("false");
- }
- else if (var_name == GetSettingNameForDisableSTDIO())
- {
- if (m_disable_stdio)
- value.AppendString ("true");
- else
- value.AppendString ("false");
- }
- else
- {
- if (err)
- err->SetErrorStringWithFormat ("unrecognized variable name '%s'", var_name.AsCString());
- return false;
- }
- return true;
+ const uint32_t idx = ePropertyErrorPath;
+ return m_collection_sp->GetPropertyAtIndexAsFileSpec(NULL, idx);
}
void
-Target::TargetInstanceSettings::GetHostEnvironmentIfNeeded ()
+TargetProperties::SetStandardErrorPath (const char *p)
{
- if (m_inherit_host_env && !m_got_host_env)
- {
- m_got_host_env = true;
- StringList host_env;
- const size_t host_env_count = Host::GetEnvironment (host_env);
- for (size_t idx=0; idx<host_env_count; idx++)
- {
- const char *env_entry = host_env.GetStringAtIndex (idx);
- if (env_entry)
- {
- const char *equal_pos = ::strchr(env_entry, '=');
- if (equal_pos)
- {
- std::string key (env_entry, equal_pos - env_entry);
- std::string value (equal_pos + 1);
- if (m_env_vars.find (key) == m_env_vars.end())
- m_env_vars[key] = value;
- }
- }
- }
- }
+ const uint32_t idx = ePropertyErrorPath;
+ m_collection_sp->SetPropertyAtIndexAsString (NULL, idx, p);
}
-
-size_t
-Target::TargetInstanceSettings::GetEnvironmentAsArgs (Args &env)
+bool
+TargetProperties::GetBreakpointsConsultPlatformAvoidList ()
{
- GetHostEnvironmentIfNeeded ();
-
- dictionary::const_iterator pos, end = m_env_vars.end();
- for (pos = m_env_vars.begin(); pos != end; ++pos)
- {
- std::string env_var_equal_value (pos->first);
- env_var_equal_value.append(1, '=');
- env_var_equal_value.append (pos->second);
- env.AppendArgument (env_var_equal_value.c_str());
- }
- return env.GetArgumentCount();
+ const uint32_t idx = ePropertyBreakpointUseAvoidList;
+ return m_collection_sp->GetPropertyAtIndexAsBoolean (NULL, idx, g_properties[idx].default_uint_value != 0);
}
-
-const ConstString
-TargetInstanceSettings::CreateInstanceName ()
+const TargetPropertiesSP &
+Target::GetGlobalProperties()
{
- StreamString sstr;
- static int instance_count = 1;
-
- sstr.Printf ("target_%d", instance_count);
- ++instance_count;
-
- const ConstString ret_val (sstr.GetData());
- return ret_val;
+ static TargetPropertiesSP g_settings_sp;
+ if (!g_settings_sp)
+ {
+ g_settings_sp.reset (new TargetProperties (NULL));
+ }
+ return g_settings_sp;
}
-//--------------------------------------------------
-// Target::SettingsController Variable Tables
-//--------------------------------------------------
-OptionEnumValueElement
-TargetInstanceSettings::g_dynamic_value_types[] =
-{
-{ eNoDynamicValues, "no-dynamic-values", "Don't calculate the dynamic type of values"},
-{ eDynamicCanRunTarget, "run-target", "Calculate the dynamic type of values even if you have to run the target."},
-{ eDynamicDontRunTarget, "no-run-target", "Calculate the dynamic type of values, but don't run the target."},
-{ 0, NULL, NULL }
-};
+// TODO: SETTINGS
+//bool
+//TargetProperties::GetRunArguments (Args &args) const
+//{
+// if (m_run_args)
+// {
+// m_run_args->GetArgs(args);
+// return true;
+// }
+// else if (m_parent_sp)
+// {
+// return m_parent_sp->GetRunArguments(args);
+// }
+// return false;
+//}
+//
+//void
+//TargetProperties::SetRunArguments (const Args &args)
+//{
+// // TODO: SETTINGS
+//}
-SettingEntry
-Target::SettingsController::global_settings_table[] =
-{
- // 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 }
-};
-SettingEntry
-Target::SettingsController::instance_settings_table[] =
-{
- // var-name var-type default enum 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_PREFER_DYNAMIC , eSetVarTypeEnum , NULL , g_dynamic_value_types, false, false, "Should printed values be shown as their dynamic value." },
- { TSC_ENABLE_SYNTHETIC , eSetVarTypeBoolean, "true" , NULL, false, false, "Should synthetic values be used by default whenever available." },
- { TSC_SKIP_PROLOGUE , eSetVarTypeBoolean, "true" , NULL, false, false, "Skip function prologues when setting breakpoints by name." },
- { TSC_SOURCE_MAP , eSetVarTypeArray , NULL , NULL, false, false, "Source path remappings used to track the change of location between a source file when built, and "
- "where it exists on the current system. It consists of an array of duples, the first element of each duple is "
- "some part (starting at the root) of the path to the file when it was built, "
- "and the second is where the remainder of the original build hierarchy is rooted on the local system. "
- "Each element of the array is checked in order and the first one that results in a match wins." },
- { TSC_EXE_SEARCH_PATHS , eSetVarTypeArray , NULL , NULL, false, false, "Executable search paths to use when locating executable files whose paths don't match the local file system." },
- { TSC_MAX_CHILDREN , eSetVarTypeInt , "256" , NULL, true, false, "Maximum number of children to expand in any level of depth." },
- { TSC_MAX_STRLENSUMMARY , eSetVarTypeInt , "1024" , NULL, true, false, "Maximum number of characters to show when using %s in summary strings." },
- { TSC_PLATFORM_AVOID , eSetVarTypeBoolean, "true" , NULL, false, false, "Consult the platform module avoid list when setting non-module specific breakpoints." },
- { TSC_RUN_ARGS , eSetVarTypeArray , NULL , NULL, false, false, "A list containing all the arguments to be passed to the executable when it is run." },
- { TSC_ENV_VARS , eSetVarTypeDictionary, NULL , NULL, false, false, "A list of all the environment variables to be passed to the executable's environment, and their values." },
- { TSC_INHERIT_ENV , eSetVarTypeBoolean, "true" , NULL, false, false, "Inherit the environment from the process that is running LLDB." },
- { TSC_STDIN_PATH , eSetVarTypeString , NULL , NULL, false, false, "The file/path to be used by the executable program for reading its standard input." },
- { TSC_STDOUT_PATH , eSetVarTypeString , NULL , NULL, false, false, "The file/path to be used by the executable program for writing its standard output." },
- { TSC_STDERR_PATH , eSetVarTypeString , NULL , NULL, false, false, "The file/path to be used by the executable program for writing its standard error." },
-// { "plugin", eSetVarTypeEnum, NULL, NULL, false, false, "The plugin to be used to run the process." },
- { TSC_DISABLE_ASLR , eSetVarTypeBoolean, "true" , NULL, false, false, "Disable Address Space Layout Randomization (ASLR)" },
- { TSC_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 }
-};
+//--------------------------------------------------------------
+// class TargetInstanceSettings
+//--------------------------------------------------------------
+//TargetInstanceSettings::TargetInstanceSettings
+//(
+// const lldb::UserSettingsControllerSP &owner_sp,
+// bool live_instance,
+// const char *name
+//) :
+// InstanceSettings (owner_sp, name ? name : InstanceSettings::InvalidName().AsCString(), live_instance),
+// m_expr_prefix_file (),
+// m_expr_prefix_contents (),
+// m_prefer_dynamic_value (2),
+// m_enable_synthetic_value(true, true),
+// m_skip_prologue (true, true),
+// m_source_map (NULL, NULL),
+// m_exe_search_paths (),
+// m_max_children_display(256),
+// m_max_strlen_length(1024),
+// m_breakpoints_use_platform_avoid (true, true),
+// m_run_args (),
+// m_env_vars (),
+// m_input_path (),
+// m_output_path (),
+// m_error_path (),
+// m_disable_aslr (true),
+// m_disable_stdio (false),
+// m_inherit_host_env (true),
+// m_got_host_env (false)
+//{
+// // 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.
+// // For this reason it has to be called here, rather than in the initializer or in the parent constructor.
+// // This is true for CreateInstanceName() too.
+//
+// if (GetInstanceName () == InstanceSettings::InvalidName())
+// {
+// ChangeInstanceName (std::string (CreateInstanceName().AsCString()));
+// owner_sp->RegisterInstanceSettings (this);
+// }
+//
+// if (live_instance)
+// {
+// const lldb::InstanceSettingsSP &pending_settings = owner_sp->FindPendingSettings (m_instance_name);
+// CopyInstanceSettings (pending_settings,false);
+// }
+//}
+//
+//TargetInstanceSettings::TargetInstanceSettings (const TargetInstanceSettings &rhs) :
+// InstanceSettings (Target::GetSettingsController(), CreateInstanceName().AsCString()),
+// m_expr_prefix_file (rhs.m_expr_prefix_file),
+// m_expr_prefix_contents (rhs.m_expr_prefix_contents),
+// m_prefer_dynamic_value (rhs.m_prefer_dynamic_value),
+// m_enable_synthetic_value(rhs.m_enable_synthetic_value),
+// m_skip_prologue (rhs.m_skip_prologue),
+// m_source_map (rhs.m_source_map),
+// m_exe_search_paths (rhs.m_exe_search_paths),
+// m_max_children_display (rhs.m_max_children_display),
+// m_max_strlen_length (rhs.m_max_strlen_length),
+// m_breakpoints_use_platform_avoid (rhs.m_breakpoints_use_platform_avoid),
+// m_run_args (rhs.m_run_args),
+// m_env_vars (rhs.m_env_vars),
+// m_input_path (rhs.m_input_path),
+// m_output_path (rhs.m_output_path),
+// m_error_path (rhs.m_error_path),
+// m_disable_aslr (rhs.m_disable_aslr),
+// m_disable_stdio (rhs.m_disable_stdio),
+// m_inherit_host_env (rhs.m_inherit_host_env)
+//{
+// if (m_instance_name != InstanceSettings::GetDefaultName())
+// {
+// UserSettingsControllerSP owner_sp (m_owner_wp.lock());
+// if (owner_sp)
+// CopyInstanceSettings (owner_sp->FindPendingSettings (m_instance_name),false);
+// }
+//}
+//
+//TargetInstanceSettings::~TargetInstanceSettings ()
+//{
+//}
+//
+//TargetInstanceSettings&
+//TargetInstanceSettings::operator= (const TargetInstanceSettings &rhs)
+//{
+// if (this != &rhs)
+// {
+// m_expr_prefix_file = rhs.m_expr_prefix_file;
+// m_expr_prefix_contents = rhs.m_expr_prefix_contents;
+// m_prefer_dynamic_value = rhs.m_prefer_dynamic_value;
+// m_enable_synthetic_value = rhs.m_enable_synthetic_value;
+// m_skip_prologue = rhs.m_skip_prologue;
+// m_source_map = rhs.m_source_map;
+// m_exe_search_paths = rhs.m_exe_search_paths;
+// m_max_children_display = rhs.m_max_children_display;
+// m_max_strlen_length = rhs.m_max_strlen_length;
+// m_breakpoints_use_platform_avoid = rhs.m_breakpoints_use_platform_avoid;
+// m_run_args = rhs.m_run_args;
+// m_env_vars = rhs.m_env_vars;
+// m_input_path = rhs.m_input_path;
+// m_output_path = rhs.m_output_path;
+// m_error_path = rhs.m_error_path;
+// m_disable_aslr = rhs.m_disable_aslr;
+// m_disable_stdio = rhs.m_disable_stdio;
+// m_inherit_host_env = rhs.m_inherit_host_env;
+// }
+//
+// return *this;
+//}
+//
+//void
+//TargetInstanceSettings::UpdateInstanceSettingsVariable (const ConstString &var_name,
+// const char *index_value,
+// const char *value,
+// const ConstString &instance_name,
+// const SettingEntry &entry,
+// VarSetOperationType op,
+// Error &err,
+// bool pending)
+//{
+// if (var_name == GetSettingNameForExpressionPrefix ())
+// {
+// err = UserSettingsController::UpdateFileSpecOptionValue (value, op, m_expr_prefix_file);
+// if (err.Success())
+// {
+// switch (op)
+// {
+// default:
+// break;
+// case eVarSetOperationAssign:
+// case eVarSetOperationAppend:
+// {
+// m_expr_prefix_contents.clear();
+//
+// if (!m_expr_prefix_file.GetCurrentValue().Exists())
+// {
+// err.SetErrorToGenericError ();
+// err.SetErrorStringWithFormat ("%s does not exist", value);
+// return;
+// }
+//
+// DataBufferSP file_data_sp (m_expr_prefix_file.GetCurrentValue().ReadFileContents(0, SIZE_MAX, &err));
+//
+// if (err.Success())
+// {
+// if (file_data_sp && file_data_sp->GetByteSize() > 0)
+// {
+// m_expr_prefix_contents.assign((const char*)file_data_sp->GetBytes(), file_data_sp->GetByteSize());
+// }
+// else
+// {
+// err.SetErrorStringWithFormat ("couldn't read data from '%s'", value);
+// }
+// }
+// }
+// break;
+// case eVarSetOperationClear:
+// m_expr_prefix_contents.clear();
+// }
+// }
+// }
+// else if (var_name == GetSettingNameForPreferDynamicValue())
+// {
+// int new_value;
+// UserSettingsController::UpdateEnumVariable (g_dynamic_value_types, &new_value, value, err);
+// if (err.Success())
+// m_prefer_dynamic_value = new_value;
+// }
+// else if (var_name == GetSettingNameForEnableSyntheticValue())
+// {
+// bool ok;
+// bool new_value = Args::StringToBoolean(value, true, &ok);
+// if (ok)
+// m_enable_synthetic_value.SetCurrentValue(new_value);
+// }
+// else if (var_name == GetSettingNameForSkipPrologue())
+// {
+// err = UserSettingsController::UpdateBooleanOptionValue (value, op, m_skip_prologue);
+// }
+// else if (var_name == GetSettingNameForMaxChildren())
+// {
+// bool ok;
+// uint32_t new_value = Args::StringToUInt32(value, 0, 10, &ok);
+// if (ok)
+// m_max_children_display = new_value;
+// }
+// else if (var_name == GetSettingNameForMaxStringSummaryLength())
+// {
+// bool ok;
+// uint32_t new_value = Args::StringToUInt32(value, 0, 10, &ok);
+// if (ok)
+// m_max_strlen_length = new_value;
+// }
+// else if (var_name == GetSettingNameForExecutableSearchPaths())
+// {
+// switch (op)
+// {
+// case eVarSetOperationReplace:
+// case eVarSetOperationInsertBefore:
+// case eVarSetOperationInsertAfter:
+// case eVarSetOperationRemove:
+// default:
+// break;
+// case eVarSetOperationAssign:
+// m_exe_search_paths.Clear();
+// // Fall through to append....
+// case eVarSetOperationAppend:
+// {
+// Args args(value);
+// const uint32_t argc = args.GetArgumentCount();
+// if (argc > 0)
+// {
+// const char *exe_search_path_dir;
+// for (uint32_t idx = 0; (exe_search_path_dir = args.GetArgumentAtIndex(idx)) != NULL; ++idx)
+// {
+// FileSpec file_spec;
+// file_spec.GetDirectory().SetCString(exe_search_path_dir);
+// FileSpec::FileType file_type = file_spec.GetFileType();
+// if (file_type == FileSpec::eFileTypeDirectory || file_type == FileSpec::eFileTypeInvalid)
+// {
+// m_exe_search_paths.Append(file_spec);
+// }
+// else
+// {
+// err.SetErrorStringWithFormat("executable search path '%s' exists, but it does not resolve to a directory", exe_search_path_dir);
+// }
+// }
+// }
+// }
+// break;
+//
+// case eVarSetOperationClear:
+// m_exe_search_paths.Clear();
+// break;
+// }
+// }
+// else if (var_name == GetSettingNameForSourcePathMap ())
+// {
+// switch (op)
+// {
+// case eVarSetOperationReplace:
+// case eVarSetOperationInsertBefore:
+// case eVarSetOperationInsertAfter:
+// case eVarSetOperationRemove:
+// default:
+// break;
+// case eVarSetOperationAssign:
+// m_source_map.Clear(true);
+// // Fall through to append....
+// case eVarSetOperationAppend:
+// {
+// Args args(value);
+// const uint32_t argc = args.GetArgumentCount();
+// if (argc & 1 || argc == 0)
+// {
+// err.SetErrorStringWithFormat ("an even number of paths must be supplied to to the source-map setting: %u arguments given", argc);
+// }
+// else
+// {
+// char resolved_new_path[PATH_MAX];
+// FileSpec file_spec;
+// const char *old_path;
+// for (uint32_t idx = 0; (old_path = args.GetArgumentAtIndex(idx)) != NULL; idx += 2)
+// {
+// const char *new_path = args.GetArgumentAtIndex(idx+1);
+// assert (new_path); // We have an even number of paths, this shouldn't happen!
+//
+// file_spec.SetFile(new_path, true);
+// if (file_spec.Exists())
+// {
+// if (file_spec.GetPath (resolved_new_path, sizeof(resolved_new_path)) >= sizeof(resolved_new_path))
+// {
+// err.SetErrorStringWithFormat("new path '%s' is too long", new_path);
+// return;
+// }
+// }
+// else
+// {
+// err.SetErrorStringWithFormat("new path '%s' doesn't exist", new_path);
+// return;
+// }
+// m_source_map.Append(ConstString (old_path), ConstString (resolved_new_path), true);
+// }
+// }
+// }
+// break;
+//
+// case eVarSetOperationClear:
+// m_source_map.Clear(true);
+// break;
+// }
+// }
+// else if (var_name == GetSettingNameForPlatformAvoid ())
+// {
+// err = UserSettingsController::UpdateBooleanOptionValue (value, op, m_breakpoints_use_platform_avoid);
+// }
+// else if (var_name == GetSettingNameForRunArgs())
+// {
+// UserSettingsController::UpdateStringArrayVariable (op, index_value, m_run_args, value, err);
+// }
+// else if (var_name == GetSettingNameForEnvVars())
+// {
+// // This is nice for local debugging, but it is isn't correct for
+// // remote debugging. We need to stop process.env-vars from being
+// // populated with the host environment and add this as a launch option
+// // and get the correct environment from the Target's platform.
+// // GetHostEnvironmentIfNeeded ();
+// UserSettingsController::UpdateDictionaryVariable (op, index_value, m_env_vars, value, err);
+// }
+// else if (var_name == GetSettingNameForInputPath())
+// {
+// UserSettingsController::UpdateStringVariable (op, m_input_path, value, err);
+// }
+// else if (var_name == GetSettingNameForOutputPath())
+// {
+// UserSettingsController::UpdateStringVariable (op, m_output_path, value, err);
+// }
+// else if (var_name == GetSettingNameForErrorPath())
+// {
+// UserSettingsController::UpdateStringVariable (op, m_error_path, value, err);
+// }
+// else if (var_name == GetSettingNameForDisableASLR())
+// {
+// UserSettingsController::UpdateBooleanVariable (op, m_disable_aslr, value, true, err);
+// }
+// else if (var_name == GetSettingNameForDisableSTDIO ())
+// {
+// UserSettingsController::UpdateBooleanVariable (op, m_disable_stdio, value, false, err);
+// }
+//}
+//
+//void
+//TargetInstanceSettings::CopyInstanceSettings (const lldb::InstanceSettingsSP &new_settings, bool pending)
+//{
+// TargetInstanceSettings *new_settings_ptr = static_cast <TargetInstanceSettings *> (new_settings.get());
+//
+// if (!new_settings_ptr)
+// return;
+//
+// *this = *new_settings_ptr;
+//}
+//
+//bool
+//TargetInstanceSettings::GetInstanceSettingsValue (const SettingEntry &entry,
+// const ConstString &var_name,
+// StringList &value,
+// Error *err)
+//{
+// if (var_name == GetSettingNameForExpressionPrefix ())
+// {
+// char path[PATH_MAX];
+// const size_t path_len = m_expr_prefix_file.GetCurrentValue().GetPath (path, sizeof(path));
+// if (path_len > 0)
+// value.AppendString (path, path_len);
+// }
+// else if (var_name == GetSettingNameForPreferDynamicValue())
+// {
+// value.AppendString (g_dynamic_value_types[m_prefer_dynamic_value].string_value);
+// }
+// else if (var_name == GetSettingNameForEnableSyntheticValue())
+// {
+// if (m_skip_prologue)
+// value.AppendString ("true");
+// else
+// value.AppendString ("false");
+// }
+// else if (var_name == GetSettingNameForSkipPrologue())
+// {
+// if (m_skip_prologue)
+// value.AppendString ("true");
+// else
+// value.AppendString ("false");
+// }
+// else if (var_name == GetSettingNameForExecutableSearchPaths())
+// {
+// if (m_exe_search_paths.GetSize())
+// {
+// for (size_t i = 0, n = m_exe_search_paths.GetSize(); i < n; ++i)
+// {
+// value.AppendString(m_exe_search_paths.GetFileSpecAtIndex (i).GetDirectory().AsCString());
+// }
+// }
+// }
+// else if (var_name == GetSettingNameForSourcePathMap ())
+// {
+// if (m_source_map.GetSize())
+// {
+// size_t i;
+// for (i = 0; i < m_source_map.GetSize(); ++i) {
+// StreamString sstr;
+// m_source_map.Dump(&sstr, i);
+// value.AppendString(sstr.GetData());
+// }
+// }
+// }
+// else if (var_name == GetSettingNameForMaxChildren())
+// {
+// StreamString count_str;
+// count_str.Printf ("%d", m_max_children_display);
+// value.AppendString (count_str.GetData());
+// }
+// else if (var_name == GetSettingNameForMaxStringSummaryLength())
+// {
+// StreamString count_str;
+// count_str.Printf ("%d", m_max_strlen_length);
+// value.AppendString (count_str.GetData());
+// }
+// else if (var_name == GetSettingNameForPlatformAvoid())
+// {
+// if (m_breakpoints_use_platform_avoid)
+// value.AppendString ("true");
+// else
+// value.AppendString ("false");
+// }
+// else if (var_name == GetSettingNameForRunArgs())
+// {
+// if (m_run_args.GetArgumentCount() > 0)
+// {
+// for (int i = 0; i < m_run_args.GetArgumentCount(); ++i)
+// value.AppendString (m_run_args.GetArgumentAtIndex (i));
+// }
+// }
+// else if (var_name == GetSettingNameForEnvVars())
+// {
+// GetHostEnvironmentIfNeeded ();
+//
+// if (m_env_vars.size() > 0)
+// {
+// std::map<std::string, std::string>::iterator pos;
+// for (pos = m_env_vars.begin(); pos != m_env_vars.end(); ++pos)
+// {
+// StreamString value_str;
+// value_str.Printf ("%s=%s", pos->first.c_str(), pos->second.c_str());
+// value.AppendString (value_str.GetData());
+// }
+// }
+// }
+// else if (var_name == GetSettingNameForInputPath())
+// {
+// value.AppendString (m_input_path.c_str());
+// }
+// else if (var_name == GetSettingNameForOutputPath())
+// {
+// value.AppendString (m_output_path.c_str());
+// }
+// else if (var_name == GetSettingNameForErrorPath())
+// {
+// value.AppendString (m_error_path.c_str());
+// }
+// else if (var_name == GetSettingNameForInheritHostEnv())
+// {
+// if (m_inherit_host_env)
+// value.AppendString ("true");
+// else
+// value.AppendString ("false");
+// }
+// else if (var_name == GetSettingNameForDisableASLR())
+// {
+// if (m_disable_aslr)
+// value.AppendString ("true");
+// else
+// value.AppendString ("false");
+// }
+// else if (var_name == GetSettingNameForDisableSTDIO())
+// {
+// if (m_disable_stdio)
+// value.AppendString ("true");
+// else
+// value.AppendString ("false");
+// }
+// else
+// {
+// if (err)
+// err->SetErrorStringWithFormat ("unrecognized variable name '%s'", var_name.AsCString());
+// return false;
+// }
+// return true;
+//}
+//
+//void
+//Target::TargetInstanceSettings::GetHostEnvironmentIfNeeded ()
+//{
+// if (m_inherit_host_env && !m_got_host_env)
+// {
+// m_got_host_env = true;
+// StringList host_env;
+// const size_t host_env_count = Host::GetEnvironment (host_env);
+// for (size_t idx=0; idx<host_env_count; idx++)
+// {
+// const char *env_entry = host_env.GetStringAtIndex (idx);
+// if (env_entry)
+// {
+// const char *equal_pos = ::strchr(env_entry, '=');
+// if (equal_pos)
+// {
+// std::string key (env_entry, equal_pos - env_entry);
+// std::string value (equal_pos + 1);
+// if (m_env_vars.find (key) == m_env_vars.end())
+// m_env_vars[key] = value;
+// }
+// }
+// }
+// }
+//}
+//
+//
+//size_t
+//Target::TargetInstanceSettings::GetEnvironmentAsArgs (Args &env)
+//{
+// GetHostEnvironmentIfNeeded ();
+//
+// dictionary::const_iterator pos, end = m_env_vars.end();
+// for (pos = m_env_vars.begin(); pos != end; ++pos)
+// {
+// std::string env_var_equal_value (pos->first);
+// env_var_equal_value.append(1, '=');
+// env_var_equal_value.append (pos->second);
+// env.AppendArgument (env_var_equal_value.c_str());
+// }
+// return env.GetArgumentCount();
+//}
+//
+//
+//const ConstString
+//TargetInstanceSettings::CreateInstanceName ()
+//{
+// StreamString sstr;
+// static int instance_count = 1;
+//
+// sstr.Printf ("target_%d", instance_count);
+// ++instance_count;
+//
+// const ConstString ret_val (sstr.GetData());
+// return ret_val;
+//}
+//
+////--------------------------------------------------
+//// Target::SettingsController Variable Tables
+////--------------------------------------------------
+//
+//
+//SettingEntry
+//Target::SettingsController::global_settings_table[] =
+//{
+// // 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 }
+//};
+//
+//SettingEntry
+//Target::SettingsController::instance_settings_table[] =
+//{
+// // var-name var-type default enum 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_PREFER_DYNAMIC , eSetVarTypeEnum , NULL , g_dynamic_value_types, false, false, "Should printed values be shown as their dynamic value." },
+// { TSC_ENABLE_SYNTHETIC , eSetVarTypeBoolean, "true" , NULL, false, false, "Should synthetic values be used by default whenever available." },
+// { TSC_SKIP_PROLOGUE , eSetVarTypeBoolean, "true" , NULL, false, false, "Skip function prologues when setting breakpoints by name." },
+// { TSC_SOURCE_MAP , eSetVarTypeArray , NULL , NULL, false, false, "Source path remappings used to track the change of location between a source file when built, and "
+// "where it exists on the current system. It consists of an array of duples, the first element of each duple is "
+// "some part (starting at the root) of the path to the file when it was built, "
+// "and the second is where the remainder of the original build hierarchy is rooted on the local system. "
+// "Each element of the array is checked in order and the first one that results in a match wins." },
+// { TSC_EXE_SEARCH_PATHS , eSetVarTypeArray , NULL , NULL, false, false, "Executable search paths to use when locating executable files whose paths don't match the local file system." },
+// { TSC_MAX_CHILDREN , eSetVarTypeInt , "256" , NULL, true, false, "Maximum number of children to expand in any level of depth." },
+// { TSC_MAX_STRLENSUMMARY , eSetVarTypeInt , "1024" , NULL, true, false, "Maximum number of characters to show when using %s in summary strings." },
+// { TSC_PLATFORM_AVOID , eSetVarTypeBoolean, "true" , NULL, false, false, "Consult the platform module avoid list when setting non-module specific breakpoints." },
+// { TSC_RUN_ARGS , eSetVarTypeArray , NULL , NULL, false, false, "A list containing all the arguments to be passed to the executable when it is run." },
+// { TSC_ENV_VARS , eSetVarTypeDictionary, NULL , NULL, false, false, "A list of all the environment variables to be passed to the executable's environment, and their values." },
+// { TSC_INHERIT_ENV , eSetVarTypeBoolean, "true" , NULL, false, false, "Inherit the environment from the process that is running LLDB." },
+// { TSC_STDIN_PATH , eSetVarTypeString , NULL , NULL, false, false, "The file/path to be used by the executable program for reading its standard input." },
+// { TSC_STDOUT_PATH , eSetVarTypeString , NULL , NULL, false, false, "The file/path to be used by the executable program for writing its standard output." },
+// { TSC_STDERR_PATH , eSetVarTypeString , NULL , NULL, false, false, "The file/path to be used by the executable program for writing its standard error." },
+//// { "plugin", eSetVarTypeEnum, NULL, NULL, false, false, "The plugin to be used to run the process." },
+// { TSC_DISABLE_ASLR , eSetVarTypeBoolean, "true" , NULL, false, false, "Disable Address Space Layout Randomization (ASLR)" },
+// { TSC_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 }
+//};
+//
const ConstString &
Target::TargetEventData::GetFlavorString ()
{
OpenPOWER on IntegriCloud