<rdar://problem/13793059>

Added a setting to control timeout for kdp response packets. While I was at it, I also added a way to control the response timeout for gdb-remote packets.

KDP defaults to 5 seconds, and GDB defaults to 1 second. These were the default values that were in the code prior to adding these settings.

(lldb) settings set plugin.process.gdb-remote.packet-timeout 10
(lldb) settings set plugin.process.kdp-remote.packet-timeout 10

llvm-svn: 186360
diff --git a/lldb/source/Core/PluginManager.cpp b/lldb/source/Core/PluginManager.cpp
index a143b95d..7647b1b 100644
--- a/lldb/source/Core/PluginManager.cpp
+++ b/lldb/source/Core/PluginManager.cpp
@@ -1388,15 +1388,17 @@
 struct ProcessInstance
 {
     ProcessInstance() :
-    name(),
-    description(),
-    create_callback(NULL)
+        name(),
+        description(),
+        create_callback(NULL),
+        debugger_init_callback(NULL)
     {
     }
     
     ConstString name;
     std::string description;
     ProcessCreateInstance create_callback;
+    DebuggerInitializeCallback debugger_init_callback;
 };
 
 typedef std::vector<ProcessInstance> ProcessInstances;
@@ -1417,12 +1419,10 @@
 
 
 bool
-PluginManager::RegisterPlugin
-(
- const ConstString &name,
- const char *description,
- ProcessCreateInstance create_callback
- )
+PluginManager::RegisterPlugin (const ConstString &name,
+                               const char *description,
+                               ProcessCreateInstance create_callback,
+                               DebuggerInitializeCallback debugger_init_callback)
 {
     if (create_callback)
     {
@@ -1432,6 +1432,7 @@
         if (description && description[0])
             instance.description = description;
         instance.create_callback = create_callback;
+        instance.debugger_init_callback = debugger_init_callback;
         Mutex::Locker locker (GetProcessMutex ());
         GetProcessInstances ().push_back (instance);
     }
@@ -1851,13 +1852,26 @@
                 pos->debugger_init_callback (debugger);
         }
     }
+    
+    // Initialize the Process plugins
+    {
+        Mutex::Locker locker (GetProcessMutex());
+        ProcessInstances &instances = GetProcessInstances();
+        
+        ProcessInstances::iterator pos, end = instances.end();
+        for (pos = instances.begin(); pos != end; ++ pos)
+        {
+            if (pos->debugger_init_callback)
+                pos->debugger_init_callback (debugger);
+        }
+    }
+
 }
 
-// This will put a plugin's settings under e.g. "plugin.dynamic-loader.darwin-kernel.SETTINGNAME".
-// The new preferred ordering is to put plugins under "dynamic-loader.plugin.darwin-kernel.SETTINGNAME"
-// and if there were a generic dynamic-loader setting, it would be "dynamic-loader.SETTINGNAME".
+// This is the preferred new way to register plugin specific settings.  e.g.
+// This will put a plugin's settings under e.g. "plugin.<plugin_type_name>.<plugin_type_desc>.SETTINGNAME".
 static lldb::OptionValuePropertiesSP
-GetDebuggerPropertyForPluginsOldStyle (Debugger &debugger,
+GetDebuggerPropertyForPlugins (Debugger &debugger,
                                        const ConstString &plugin_type_name,
                                        const ConstString &plugin_type_desc,
                                        bool can_create)
@@ -1894,14 +1908,14 @@
     return lldb::OptionValuePropertiesSP();
 }
 
-// This is the preferred new way to register plugin specific settings.  e.g.
-// "platform.plugin.darwin-kernel.SETTINGNAME"
+// This is deprecated way to register plugin specific settings.  e.g.
+// "<plugin_type_name>.plugin.<plugin_type_desc>.SETTINGNAME"
 // and Platform generic settings would be under "platform.SETTINGNAME".
 static lldb::OptionValuePropertiesSP
-GetDebuggerPropertyForPlugins (Debugger &debugger, 
-                               const ConstString &plugin_type_name,
-                               const ConstString &plugin_type_desc,
-                               bool can_create)
+GetDebuggerPropertyForPluginsOldStyle (Debugger &debugger,
+                                       const ConstString &plugin_type_name,
+                                       const ConstString &plugin_type_desc,
+                                       bool can_create)
 {
     static ConstString g_property_name("plugin");
     lldb::OptionValuePropertiesSP parent_properties_sp (debugger.GetValueProperties());
@@ -1939,7 +1953,7 @@
 PluginManager::GetSettingForDynamicLoaderPlugin (Debugger &debugger, const ConstString &setting_name)
 {
     lldb::OptionValuePropertiesSP properties_sp;
-    lldb::OptionValuePropertiesSP plugin_type_properties_sp (GetDebuggerPropertyForPluginsOldStyle (debugger,
+    lldb::OptionValuePropertiesSP plugin_type_properties_sp (GetDebuggerPropertyForPlugins (debugger,
                                                                                             ConstString("dynamic-loader"),
                                                                                             ConstString(), // not creating to so we don't need the description
                                                                                             false));
@@ -1956,7 +1970,7 @@
 {
     if (properties_sp)
     {
-        lldb::OptionValuePropertiesSP plugin_type_properties_sp (GetDebuggerPropertyForPluginsOldStyle (debugger,
+        lldb::OptionValuePropertiesSP plugin_type_properties_sp (GetDebuggerPropertyForPlugins (debugger,
                                                                                                 ConstString("dynamic-loader"),
                                                                                                 ConstString("Settings for dynamic loader plug-ins"),
                                                                                                 true));
@@ -1977,10 +1991,10 @@
 PluginManager::GetSettingForPlatformPlugin (Debugger &debugger, const ConstString &setting_name)
 {
     lldb::OptionValuePropertiesSP properties_sp;
-    lldb::OptionValuePropertiesSP plugin_type_properties_sp (GetDebuggerPropertyForPlugins (debugger,
-                                                                                            ConstString("platform"),
-                                                                                            ConstString(), // not creating to so we don't need the description
-                                                                                            false));
+    lldb::OptionValuePropertiesSP plugin_type_properties_sp (GetDebuggerPropertyForPluginsOldStyle (debugger,
+                                                                                                    ConstString("platform"),
+                                                                                                    ConstString(), // not creating to so we don't need the description
+                                                                                                    false));
     if (plugin_type_properties_sp)
         properties_sp = plugin_type_properties_sp->GetSubProperty (NULL, setting_name);
     return properties_sp;
@@ -1994,9 +2008,47 @@
 {
     if (properties_sp)
     {
+        lldb::OptionValuePropertiesSP plugin_type_properties_sp (GetDebuggerPropertyForPluginsOldStyle (debugger,
+                                                                                                        ConstString("platform"),
+                                                                                                        ConstString("Settings for platform plug-ins"),
+                                                                                                        true));
+        if (plugin_type_properties_sp)
+        {
+            plugin_type_properties_sp->AppendProperty (properties_sp->GetName(),
+                                                       description,
+                                                       is_global_property,
+                                                       properties_sp);
+            return true;
+        }
+    }
+    return false;
+}
+
+
+lldb::OptionValuePropertiesSP
+PluginManager::GetSettingForProcessPlugin (Debugger &debugger, const ConstString &setting_name)
+{
+    lldb::OptionValuePropertiesSP properties_sp;
+    lldb::OptionValuePropertiesSP plugin_type_properties_sp (GetDebuggerPropertyForPlugins (debugger,
+                                                                                            ConstString("process"),
+                                                                                            ConstString(), // not creating to so we don't need the description
+                                                                                            false));
+    if (plugin_type_properties_sp)
+        properties_sp = plugin_type_properties_sp->GetSubProperty (NULL, setting_name);
+    return properties_sp;
+}
+
+bool
+PluginManager::CreateSettingForProcessPlugin (Debugger &debugger,
+                                              const lldb::OptionValuePropertiesSP &properties_sp,
+                                              const ConstString &description,
+                                              bool is_global_property)
+{
+    if (properties_sp)
+    {
         lldb::OptionValuePropertiesSP plugin_type_properties_sp (GetDebuggerPropertyForPlugins (debugger,
-                                                                                                ConstString("platform"),
-                                                                                                ConstString("Settings for platform plug-ins"),
+                                                                                                ConstString("process"),
+                                                                                                ConstString("Settings for process plug-ins"),
                                                                                                 true));
         if (plugin_type_properties_sp)
         {