diff options
-rw-r--r-- | lldb/include/lldb/Target/Process.h | 18 | ||||
-rw-r--r-- | lldb/include/lldb/Target/Target.h | 3 | ||||
-rw-r--r-- | lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp | 8 | ||||
-rw-r--r-- | lldb/source/Target/Process.cpp | 28 |
4 files changed, 53 insertions, 4 deletions
diff --git a/lldb/include/lldb/Target/Process.h b/lldb/include/lldb/Target/Process.h index a2e4161f694..5ca697e1c7e 100644 --- a/lldb/include/lldb/Target/Process.h +++ b/lldb/include/lldb/Target/Process.h @@ -87,10 +87,25 @@ public: return m_disable_memory_cache; } + const Args & + GetExtraStartupCommands () const + { + return m_extra_startup_commands; + } + + void + SetExtraStartupCommands (const Args &args) + { + m_extra_startup_commands = args; + } + protected: const ConstString & GetDisableMemoryCacheVarName () const; + const ConstString & + GetExtraStartupCommandVarName () const; + void CopyInstanceSettings (const lldb::InstanceSettingsSP &new_settings, bool pending); @@ -98,7 +113,8 @@ protected: const ConstString CreateInstanceName (); - bool m_disable_memory_cache; + bool m_disable_memory_cache; + Args m_extra_startup_commands; }; //---------------------------------------------------------------------- diff --git a/lldb/include/lldb/Target/Target.h b/lldb/include/lldb/Target/Target.h index 40e5979157d..8b677371408 100644 --- a/lldb/include/lldb/Target/Target.h +++ b/lldb/include/lldb/Target/Target.h @@ -128,8 +128,7 @@ public: { return m_breakpoints_use_platform_avoid; } - - + const Args & GetRunArguments () const { diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp index ed826bac7c2..e48c058d7ab 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp @@ -729,6 +729,14 @@ ProcessGDBRemote::ConnectToDebugserver (const char *connect_url) m_gdb_comm.GetListThreadsInStopReplySupported (); m_gdb_comm.GetHostInfo (); m_gdb_comm.GetVContSupported ('c'); + + size_t num_cmds = GetExtraStartupCommands().GetArgumentCount(); + for (size_t idx = 0; idx < num_cmds; idx++) + { + StringExtractorGDBRemote response; + printf ("Sending command: \%s.\n", GetExtraStartupCommands().GetArgumentAtIndex(idx)); + m_gdb_comm.SendPacketAndWaitForResponse (GetExtraStartupCommands().GetArgumentAtIndex(idx), response, false); + } return error; } diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp index fceeafd7ab0..dabad32f220 100644 --- a/lldb/source/Target/Process.cpp +++ b/lldb/source/Target/Process.cpp @@ -4866,7 +4866,9 @@ ProcessInstanceSettings::ProcessInstanceSettings } ProcessInstanceSettings::ProcessInstanceSettings (const ProcessInstanceSettings &rhs) : - InstanceSettings (Process::GetSettingsController(), CreateInstanceName().AsCString()) + InstanceSettings (Process::GetSettingsController(), CreateInstanceName().AsCString()), + m_disable_memory_cache(rhs.m_disable_memory_cache), + m_extra_startup_commands (rhs.m_extra_startup_commands) { if (m_instance_name != InstanceSettings::GetDefaultName()) { @@ -4888,6 +4890,8 @@ ProcessInstanceSettings::operator= (const ProcessInstanceSettings &rhs) { if (this != &rhs) { + m_disable_memory_cache = rhs.m_disable_memory_cache; + m_extra_startup_commands = rhs.m_extra_startup_commands; } return *this; @@ -4919,6 +4923,10 @@ ProcessInstanceSettings::UpdateInstanceSettingsVariable (const ConstString &var_ } } + else if (var_name == GetExtraStartupCommandVarName()) + { + UserSettingsController::UpdateStringArrayVariable (op, index_value, m_extra_startup_commands, value, err); + } } void @@ -4947,6 +4955,15 @@ ProcessInstanceSettings::GetInstanceSettingsValue (const SettingEntry &entry, value.AppendString(m_disable_memory_cache ? "true" : "false"); return true; } + else if (var_name == GetExtraStartupCommandVarName()) + { + if (m_extra_startup_commands.GetArgumentCount() > 0) + { + for (int i = 0; i < m_extra_startup_commands.GetArgumentCount(); ++i) + value.AppendString (m_extra_startup_commands.GetArgumentAtIndex (i)); + } + return true; + } else { if (err) @@ -4976,6 +4993,14 @@ ProcessInstanceSettings::GetDisableMemoryCacheVarName () const return disable_memory_cache_var_name; } +const ConstString & +ProcessInstanceSettings::GetExtraStartupCommandVarName () const +{ + static ConstString extra_startup_command_var_name ("extra-startup-command"); + + return extra_startup_command_var_name; +} + //-------------------------------------------------- // SettingsController Variable Tables //-------------------------------------------------- @@ -4999,6 +5024,7 @@ Process::SettingsController::instance_settings_table[] = "true", #endif NULL, false, false, "Disable reading and caching of memory in fixed-size units." }, + { "extra-startup-command", eSetVarTypeArray, NULL, NULL, false, false, "A list containing extra commands understood by the particular process plugin used." }, { NULL, eSetVarTypeNone, NULL, NULL, false, false, NULL } }; |