CommandObjectPlatform.cpp revision 58e26e0935138225477fd61283215ceff2068899
1b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//===-- CommandObjectPlatform.cpp -------------------------------*- C++ -*-===// 2b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// 3b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// The LLVM Compiler Infrastructure 4b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// 5b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// This file is distributed under the University of Illinois Open Source 6b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// License. See LICENSE.TXT for details. 7b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// 8b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//===----------------------------------------------------------------------===// 9b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 10b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "CommandObjectPlatform.h" 11b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 12b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// C Includes 13b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// C++ Includes 14b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// Other libraries and framework includes 15b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// Project includes 16b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Core/DataExtractor.h" 17b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Core/Debugger.h" 18b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Core/PluginManager.h" 19b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Interpreter/Args.h" 20b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Interpreter/CommandInterpreter.h" 21b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Interpreter/CommandReturnObject.h" 22b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Target/ExecutionContext.h" 23b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Target/Platform.h" 24b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 25b1888f24fa181489840b9acf193e224d125d0776Greg Claytonusing namespace lldb; 26b1888f24fa181489840b9acf193e224d125d0776Greg Claytonusing namespace lldb_private; 27b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 28b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//---------------------------------------------------------------------- 29b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// "platform create <platform-name>" 30b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//---------------------------------------------------------------------- 31b1888f24fa181489840b9acf193e224d125d0776Greg Claytonclass CommandObjectPlatformCreate : public CommandObject 32b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 33b1888f24fa181489840b9acf193e224d125d0776Greg Claytonpublic: 34b1888f24fa181489840b9acf193e224d125d0776Greg Clayton CommandObjectPlatformCreate (CommandInterpreter &interpreter) : 35b1888f24fa181489840b9acf193e224d125d0776Greg Clayton CommandObject (interpreter, 36b1888f24fa181489840b9acf193e224d125d0776Greg Clayton "platform create", 37b1888f24fa181489840b9acf193e224d125d0776Greg Clayton "Create a platform instance by name and select it as the current platform.", 38b1888f24fa181489840b9acf193e224d125d0776Greg Clayton "platform create <platform-name>", 39b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 0) 40b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 41b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 42b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 43b1888f24fa181489840b9acf193e224d125d0776Greg Clayton virtual 44b1888f24fa181489840b9acf193e224d125d0776Greg Clayton ~CommandObjectPlatformCreate () 45b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 46b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 47b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 48b1888f24fa181489840b9acf193e224d125d0776Greg Clayton virtual bool 49b1888f24fa181489840b9acf193e224d125d0776Greg Clayton Execute (Args& args, CommandReturnObject &result) 50b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 51b1888f24fa181489840b9acf193e224d125d0776Greg Clayton Error error; 52b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (args.GetArgumentCount() == 1) 53b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 54b1888f24fa181489840b9acf193e224d125d0776Greg Clayton PlatformSP platform_sp (Platform::Create (args.GetArgumentAtIndex (0), error)); 55b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 56b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (platform_sp) 57b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 58b1888f24fa181489840b9acf193e224d125d0776Greg Clayton m_interpreter.GetDebugger().GetPlatformList().Append (platform_sp, true); 59b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (m_options.os_version_major != UINT32_MAX) 60b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 61b1888f24fa181489840b9acf193e224d125d0776Greg Clayton platform_sp->SetOSVersion (m_options.os_version_major, 62b1888f24fa181489840b9acf193e224d125d0776Greg Clayton m_options.os_version_minor, 63b1888f24fa181489840b9acf193e224d125d0776Greg Clayton m_options.os_version_update); 64b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 65b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 66b1888f24fa181489840b9acf193e224d125d0776Greg Clayton platform_sp->GetStatus (result.GetOutputStream()); 67b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 68b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 69b1888f24fa181489840b9acf193e224d125d0776Greg Clayton else 70b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 7158e26e0935138225477fd61283215ceff2068899Greg Clayton result.AppendError ("command not implemented\n"); 72b1888f24fa181489840b9acf193e224d125d0776Greg Clayton result.SetStatus (eReturnStatusFailed); 73b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 74b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return result.Succeeded(); 75b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 76b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 77b1888f24fa181489840b9acf193e224d125d0776Greg Clayton virtual Options * 78b1888f24fa181489840b9acf193e224d125d0776Greg Clayton GetOptions () 79b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 80b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return &m_options; 81b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 82b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 83b1888f24fa181489840b9acf193e224d125d0776Greg Claytonprotected: 84b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 85b1888f24fa181489840b9acf193e224d125d0776Greg Clayton class CommandOptions : public Options 86b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 87b1888f24fa181489840b9acf193e224d125d0776Greg Clayton public: 88b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 89b1888f24fa181489840b9acf193e224d125d0776Greg Clayton CommandOptions () : 90b1888f24fa181489840b9acf193e224d125d0776Greg Clayton os_version_major (UINT32_MAX), 91b1888f24fa181489840b9acf193e224d125d0776Greg Clayton os_version_minor (UINT32_MAX), 92b1888f24fa181489840b9acf193e224d125d0776Greg Clayton os_version_update (UINT32_MAX) 93b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 94b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 95b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 96b1888f24fa181489840b9acf193e224d125d0776Greg Clayton virtual 97b1888f24fa181489840b9acf193e224d125d0776Greg Clayton ~CommandOptions () 98b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 99b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 100b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 101b1888f24fa181489840b9acf193e224d125d0776Greg Clayton virtual Error 102b1888f24fa181489840b9acf193e224d125d0776Greg Clayton SetOptionValue (int option_idx, const char *option_arg) 103b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 104b1888f24fa181489840b9acf193e224d125d0776Greg Clayton Error error; 105b1888f24fa181489840b9acf193e224d125d0776Greg Clayton char short_option = (char) m_getopt_table[option_idx].val; 106b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 107b1888f24fa181489840b9acf193e224d125d0776Greg Clayton switch (short_option) 108b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 109b1888f24fa181489840b9acf193e224d125d0776Greg Clayton case 'v': 110b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (Args::StringToVersion (option_arg, 111b1888f24fa181489840b9acf193e224d125d0776Greg Clayton os_version_major, 112b1888f24fa181489840b9acf193e224d125d0776Greg Clayton os_version_minor, 113b1888f24fa181489840b9acf193e224d125d0776Greg Clayton os_version_update) == option_arg) 114b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 115b1888f24fa181489840b9acf193e224d125d0776Greg Clayton error.SetErrorStringWithFormat ("invalid version string '%s'", option_arg); 116b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 117b1888f24fa181489840b9acf193e224d125d0776Greg Clayton break; 118b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 119b1888f24fa181489840b9acf193e224d125d0776Greg Clayton default: 120b1888f24fa181489840b9acf193e224d125d0776Greg Clayton error.SetErrorStringWithFormat ("Unrecognized option '%c'.\n", short_option); 121b1888f24fa181489840b9acf193e224d125d0776Greg Clayton break; 122b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 123b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 124b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return error; 125b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 126b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 127b1888f24fa181489840b9acf193e224d125d0776Greg Clayton void 128b1888f24fa181489840b9acf193e224d125d0776Greg Clayton ResetOptionValues () 129b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 130b1888f24fa181489840b9acf193e224d125d0776Greg Clayton os_version_major = UINT32_MAX; 131b1888f24fa181489840b9acf193e224d125d0776Greg Clayton os_version_minor = UINT32_MAX; 132b1888f24fa181489840b9acf193e224d125d0776Greg Clayton os_version_update = UINT32_MAX; 133b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 134b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 135b1888f24fa181489840b9acf193e224d125d0776Greg Clayton const lldb::OptionDefinition* 136b1888f24fa181489840b9acf193e224d125d0776Greg Clayton GetDefinitions () 137b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 138b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return g_option_table; 139b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 140b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 141b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // Options table: Required for subclasses of Options. 142b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 143b1888f24fa181489840b9acf193e224d125d0776Greg Clayton static lldb::OptionDefinition g_option_table[]; 144b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 145b1888f24fa181489840b9acf193e224d125d0776Greg Clayton // Instance variables to hold the values for command options. 146b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 147b1888f24fa181489840b9acf193e224d125d0776Greg Clayton uint32_t os_version_major; 148b1888f24fa181489840b9acf193e224d125d0776Greg Clayton uint32_t os_version_minor; 149b1888f24fa181489840b9acf193e224d125d0776Greg Clayton uint32_t os_version_update; 150b1888f24fa181489840b9acf193e224d125d0776Greg Clayton }; 151b1888f24fa181489840b9acf193e224d125d0776Greg Clayton CommandOptions m_options; 152b1888f24fa181489840b9acf193e224d125d0776Greg Clayton}; 153b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 154b1888f24fa181489840b9acf193e224d125d0776Greg Claytonlldb::OptionDefinition 155b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonCommandObjectPlatformCreate::CommandOptions::g_option_table[] = 156b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 157b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { LLDB_OPT_SET_ALL, false, "sdk-version", 'v', required_argument, NULL, 0, eArgTypeNone, "Specify the initial SDK version to use prior to connecting." }, 158b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 0, false, NULL, 0, 0, NULL, 0, eArgTypeNone, NULL } 159b1888f24fa181489840b9acf193e224d125d0776Greg Clayton}; 160b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 161b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//---------------------------------------------------------------------- 162b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// "platform list" 163b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//---------------------------------------------------------------------- 164b1888f24fa181489840b9acf193e224d125d0776Greg Claytonclass CommandObjectPlatformList : public CommandObject 165b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 166b1888f24fa181489840b9acf193e224d125d0776Greg Claytonpublic: 167b1888f24fa181489840b9acf193e224d125d0776Greg Clayton CommandObjectPlatformList (CommandInterpreter &interpreter) : 168b1888f24fa181489840b9acf193e224d125d0776Greg Clayton CommandObject (interpreter, 169b1888f24fa181489840b9acf193e224d125d0776Greg Clayton "platform list", 170b1888f24fa181489840b9acf193e224d125d0776Greg Clayton "List all platforms that are available.", 171b1888f24fa181489840b9acf193e224d125d0776Greg Clayton NULL, 172b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 0) 173b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 174b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 175b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 176b1888f24fa181489840b9acf193e224d125d0776Greg Clayton virtual 177b1888f24fa181489840b9acf193e224d125d0776Greg Clayton ~CommandObjectPlatformList () 178b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 179b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 180b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 181b1888f24fa181489840b9acf193e224d125d0776Greg Clayton virtual bool 182b1888f24fa181489840b9acf193e224d125d0776Greg Clayton Execute (Args& args, CommandReturnObject &result) 183b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 184b1888f24fa181489840b9acf193e224d125d0776Greg Clayton Stream &ostrm = result.GetOutputStream(); 185b1888f24fa181489840b9acf193e224d125d0776Greg Clayton ostrm.Printf("Available platforms:\n"); 186b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 187b1888f24fa181489840b9acf193e224d125d0776Greg Clayton PlatformSP host_platform_sp (Platform::GetDefaultPlatform()); 188b1888f24fa181489840b9acf193e224d125d0776Greg Clayton ostrm.Printf ("%s: %s\n", 189b1888f24fa181489840b9acf193e224d125d0776Greg Clayton host_platform_sp->GetShortPluginName(), 190b1888f24fa181489840b9acf193e224d125d0776Greg Clayton host_platform_sp->GetDescription()); 191b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 192b1888f24fa181489840b9acf193e224d125d0776Greg Clayton uint32_t idx; 193b1888f24fa181489840b9acf193e224d125d0776Greg Clayton for (idx = 0; 1; ++idx) 194b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 195b1888f24fa181489840b9acf193e224d125d0776Greg Clayton const char *plugin_name = PluginManager::GetPlatformPluginNameAtIndex (idx); 196b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (plugin_name == NULL) 197b1888f24fa181489840b9acf193e224d125d0776Greg Clayton break; 198b1888f24fa181489840b9acf193e224d125d0776Greg Clayton const char *plugin_desc = PluginManager::GetPlatformPluginDescriptionAtIndex (idx); 199b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (plugin_desc == NULL) 200b1888f24fa181489840b9acf193e224d125d0776Greg Clayton break; 201b1888f24fa181489840b9acf193e224d125d0776Greg Clayton ostrm.Printf("%s: %s\n", plugin_name, plugin_desc); 202b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 203b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 204b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (idx == 0) 205b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 20658e26e0935138225477fd61283215ceff2068899Greg Clayton result.AppendError ("no platforms are available\n"); 207b1888f24fa181489840b9acf193e224d125d0776Greg Clayton result.SetStatus (eReturnStatusFailed); 208b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 209b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return result.Succeeded(); 210b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 211b1888f24fa181489840b9acf193e224d125d0776Greg Clayton}; 212b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 213b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//---------------------------------------------------------------------- 214b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// "platform status" 215b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//---------------------------------------------------------------------- 216b1888f24fa181489840b9acf193e224d125d0776Greg Claytonclass CommandObjectPlatformStatus : public CommandObject 217b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 218b1888f24fa181489840b9acf193e224d125d0776Greg Claytonpublic: 219b1888f24fa181489840b9acf193e224d125d0776Greg Clayton CommandObjectPlatformStatus (CommandInterpreter &interpreter) : 220b1888f24fa181489840b9acf193e224d125d0776Greg Clayton CommandObject (interpreter, 221b1888f24fa181489840b9acf193e224d125d0776Greg Clayton "platform status", 222b1888f24fa181489840b9acf193e224d125d0776Greg Clayton "Display status for the currently selected platform.", 223b1888f24fa181489840b9acf193e224d125d0776Greg Clayton NULL, 224b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 0) 225b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 226b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 227b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 228b1888f24fa181489840b9acf193e224d125d0776Greg Clayton virtual 229b1888f24fa181489840b9acf193e224d125d0776Greg Clayton ~CommandObjectPlatformStatus () 230b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 231b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 232b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 233b1888f24fa181489840b9acf193e224d125d0776Greg Clayton virtual bool 234b1888f24fa181489840b9acf193e224d125d0776Greg Clayton Execute (Args& args, CommandReturnObject &result) 235b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 236b1888f24fa181489840b9acf193e224d125d0776Greg Clayton Stream &ostrm = result.GetOutputStream(); 237b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 238b1888f24fa181489840b9acf193e224d125d0776Greg Clayton PlatformSP selected_platform_sp (m_interpreter.GetDebugger().GetPlatformList().GetSelectedPlatform()); 239b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (selected_platform_sp) 240b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 241b1888f24fa181489840b9acf193e224d125d0776Greg Clayton selected_platform_sp->GetStatus (ostrm); 242b1888f24fa181489840b9acf193e224d125d0776Greg Clayton result.SetStatus (eReturnStatusSuccessFinishResult); 243b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 244b1888f24fa181489840b9acf193e224d125d0776Greg Clayton else 245b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 24658e26e0935138225477fd61283215ceff2068899Greg Clayton result.AppendError ("no platform us currently selected\n"); 247b1888f24fa181489840b9acf193e224d125d0776Greg Clayton result.SetStatus (eReturnStatusFailed); 248b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 249b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return result.Succeeded(); 250b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 251b1888f24fa181489840b9acf193e224d125d0776Greg Clayton}; 252b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 253b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 254b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//---------------------------------------------------------------------- 255b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// "platform select <platform-name>" 256b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//---------------------------------------------------------------------- 257b1888f24fa181489840b9acf193e224d125d0776Greg Claytonclass CommandObjectPlatformSelect : public CommandObject 258b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 259b1888f24fa181489840b9acf193e224d125d0776Greg Claytonpublic: 260b1888f24fa181489840b9acf193e224d125d0776Greg Clayton CommandObjectPlatformSelect (CommandInterpreter &interpreter) : 261b1888f24fa181489840b9acf193e224d125d0776Greg Clayton CommandObject (interpreter, 262b1888f24fa181489840b9acf193e224d125d0776Greg Clayton "platform select", 263b1888f24fa181489840b9acf193e224d125d0776Greg Clayton "Select a platform by name to be the currently selected platform.", 264b1888f24fa181489840b9acf193e224d125d0776Greg Clayton "platform select <platform-name>", 265b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 0) 266b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 267b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 268b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 269b1888f24fa181489840b9acf193e224d125d0776Greg Clayton virtual 270b1888f24fa181489840b9acf193e224d125d0776Greg Clayton ~CommandObjectPlatformSelect () 271b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 272b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 273b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 274b1888f24fa181489840b9acf193e224d125d0776Greg Clayton virtual bool 275b1888f24fa181489840b9acf193e224d125d0776Greg Clayton Execute (Args& args, CommandReturnObject &result) 276b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 27758e26e0935138225477fd61283215ceff2068899Greg Clayton result.AppendError ("command not implemented\n"); 278b1888f24fa181489840b9acf193e224d125d0776Greg Clayton result.SetStatus (eReturnStatusFailed); 279b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return result.Succeeded(); 280b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 281b1888f24fa181489840b9acf193e224d125d0776Greg Clayton}; 282b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 283b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 284cb8977d726be451df9978a74088435667fa37da2Greg Clayton//---------------------------------------------------------------------- 285cb8977d726be451df9978a74088435667fa37da2Greg Clayton// "platform connect <connect-url>" 286cb8977d726be451df9978a74088435667fa37da2Greg Clayton//---------------------------------------------------------------------- 287cb8977d726be451df9978a74088435667fa37da2Greg Claytonclass CommandObjectPlatformConnect : public CommandObject 288cb8977d726be451df9978a74088435667fa37da2Greg Clayton{ 289cb8977d726be451df9978a74088435667fa37da2Greg Claytonpublic: 290cb8977d726be451df9978a74088435667fa37da2Greg Clayton CommandObjectPlatformConnect (CommandInterpreter &interpreter) : 291cb8977d726be451df9978a74088435667fa37da2Greg Clayton CommandObject (interpreter, 292cb8977d726be451df9978a74088435667fa37da2Greg Clayton "platform connect", 293cb8977d726be451df9978a74088435667fa37da2Greg Clayton "Connect a platform by name to be the currently selected platform.", 294cb8977d726be451df9978a74088435667fa37da2Greg Clayton "platform connect <connect-url>", 295cb8977d726be451df9978a74088435667fa37da2Greg Clayton 0) 296cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 297cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 298cb8977d726be451df9978a74088435667fa37da2Greg Clayton 299cb8977d726be451df9978a74088435667fa37da2Greg Clayton virtual 300cb8977d726be451df9978a74088435667fa37da2Greg Clayton ~CommandObjectPlatformConnect () 301cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 302cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 303cb8977d726be451df9978a74088435667fa37da2Greg Clayton 304cb8977d726be451df9978a74088435667fa37da2Greg Clayton virtual bool 305cb8977d726be451df9978a74088435667fa37da2Greg Clayton Execute (Args& args, CommandReturnObject &result) 306cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 307cb8977d726be451df9978a74088435667fa37da2Greg Clayton Stream &ostrm = result.GetOutputStream(); 308cb8977d726be451df9978a74088435667fa37da2Greg Clayton 309cb8977d726be451df9978a74088435667fa37da2Greg Clayton PlatformSP selected_platform_sp (m_interpreter.GetDebugger().GetPlatformList().GetSelectedPlatform()); 310cb8977d726be451df9978a74088435667fa37da2Greg Clayton if (selected_platform_sp) 311cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 312cb8977d726be451df9978a74088435667fa37da2Greg Clayton Error error (selected_platform_sp->ConnectRemote (args)); 313cb8977d726be451df9978a74088435667fa37da2Greg Clayton if (error.Success()) 314cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 315cb8977d726be451df9978a74088435667fa37da2Greg Clayton selected_platform_sp->GetStatus (ostrm); 316cb8977d726be451df9978a74088435667fa37da2Greg Clayton result.SetStatus (eReturnStatusSuccessFinishResult); 317cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 318cb8977d726be451df9978a74088435667fa37da2Greg Clayton else 319cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 32058e26e0935138225477fd61283215ceff2068899Greg Clayton result.AppendErrorWithFormat ("%s\n", error.AsCString()); 321cb8977d726be451df9978a74088435667fa37da2Greg Clayton result.SetStatus (eReturnStatusFailed); 322cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 323cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 324cb8977d726be451df9978a74088435667fa37da2Greg Clayton else 325cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 32658e26e0935138225477fd61283215ceff2068899Greg Clayton result.AppendError ("no platform us currently selected\n"); 327cb8977d726be451df9978a74088435667fa37da2Greg Clayton result.SetStatus (eReturnStatusFailed); 328cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 329cb8977d726be451df9978a74088435667fa37da2Greg Clayton return result.Succeeded(); 330cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 331cb8977d726be451df9978a74088435667fa37da2Greg Clayton}; 332cb8977d726be451df9978a74088435667fa37da2Greg Clayton 333cb8977d726be451df9978a74088435667fa37da2Greg Clayton//---------------------------------------------------------------------- 334cb8977d726be451df9978a74088435667fa37da2Greg Clayton// "platform disconnect" 335cb8977d726be451df9978a74088435667fa37da2Greg Clayton//---------------------------------------------------------------------- 336cb8977d726be451df9978a74088435667fa37da2Greg Claytonclass CommandObjectPlatformDisconnect : public CommandObject 337cb8977d726be451df9978a74088435667fa37da2Greg Clayton{ 338cb8977d726be451df9978a74088435667fa37da2Greg Claytonpublic: 339cb8977d726be451df9978a74088435667fa37da2Greg Clayton CommandObjectPlatformDisconnect (CommandInterpreter &interpreter) : 340cb8977d726be451df9978a74088435667fa37da2Greg Clayton CommandObject (interpreter, 341cb8977d726be451df9978a74088435667fa37da2Greg Clayton "platform disconnect", 342cb8977d726be451df9978a74088435667fa37da2Greg Clayton "Disconnect a platform by name to be the currently selected platform.", 343cb8977d726be451df9978a74088435667fa37da2Greg Clayton "platform disconnect", 344cb8977d726be451df9978a74088435667fa37da2Greg Clayton 0) 345cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 346cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 347cb8977d726be451df9978a74088435667fa37da2Greg Clayton 348cb8977d726be451df9978a74088435667fa37da2Greg Clayton virtual 349cb8977d726be451df9978a74088435667fa37da2Greg Clayton ~CommandObjectPlatformDisconnect () 350cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 351cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 352cb8977d726be451df9978a74088435667fa37da2Greg Clayton 353cb8977d726be451df9978a74088435667fa37da2Greg Clayton virtual bool 354cb8977d726be451df9978a74088435667fa37da2Greg Clayton Execute (Args& args, CommandReturnObject &result) 355cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 356cb8977d726be451df9978a74088435667fa37da2Greg Clayton PlatformSP selected_platform_sp (m_interpreter.GetDebugger().GetPlatformList().GetSelectedPlatform()); 357cb8977d726be451df9978a74088435667fa37da2Greg Clayton if (selected_platform_sp) 358cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 359cb8977d726be451df9978a74088435667fa37da2Greg Clayton if (args.GetArgumentCount() == 0) 360cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 361cb8977d726be451df9978a74088435667fa37da2Greg Clayton Error error; 362cb8977d726be451df9978a74088435667fa37da2Greg Clayton 363cb8977d726be451df9978a74088435667fa37da2Greg Clayton if (selected_platform_sp->IsConnected()) 364cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 365cb8977d726be451df9978a74088435667fa37da2Greg Clayton // Cache the instance name if there is one since we are 366cb8977d726be451df9978a74088435667fa37da2Greg Clayton // about to disconnect and the name might go with it. 36758e26e0935138225477fd61283215ceff2068899Greg Clayton const char *hostname_cstr = selected_platform_sp->GetHostname(); 36858e26e0935138225477fd61283215ceff2068899Greg Clayton std::string hostname; 36958e26e0935138225477fd61283215ceff2068899Greg Clayton if (hostname_cstr) 37058e26e0935138225477fd61283215ceff2068899Greg Clayton hostname.assign (hostname_cstr); 371cb8977d726be451df9978a74088435667fa37da2Greg Clayton 372cb8977d726be451df9978a74088435667fa37da2Greg Clayton error = selected_platform_sp->DisconnectRemote (); 373cb8977d726be451df9978a74088435667fa37da2Greg Clayton if (error.Success()) 374cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 375cb8977d726be451df9978a74088435667fa37da2Greg Clayton Stream &ostrm = result.GetOutputStream(); 37658e26e0935138225477fd61283215ceff2068899Greg Clayton if (hostname.empty()) 377cb8977d726be451df9978a74088435667fa37da2Greg Clayton ostrm.Printf ("Disconnected from \"%s\"\n", selected_platform_sp->GetShortPluginName()); 378cb8977d726be451df9978a74088435667fa37da2Greg Clayton else 37958e26e0935138225477fd61283215ceff2068899Greg Clayton ostrm.Printf ("Disconnected from \"%s\"\n", hostname.c_str()); 380cb8977d726be451df9978a74088435667fa37da2Greg Clayton result.SetStatus (eReturnStatusSuccessFinishResult); 381cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 382cb8977d726be451df9978a74088435667fa37da2Greg Clayton else 383cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 38458e26e0935138225477fd61283215ceff2068899Greg Clayton result.AppendErrorWithFormat ("%s", error.AsCString()); 385cb8977d726be451df9978a74088435667fa37da2Greg Clayton result.SetStatus (eReturnStatusFailed); 386cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 387cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 388cb8977d726be451df9978a74088435667fa37da2Greg Clayton else 389cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 390cb8977d726be451df9978a74088435667fa37da2Greg Clayton // Not connected... 39158e26e0935138225477fd61283215ceff2068899Greg Clayton result.AppendErrorWithFormat ("not connected to '%s'", selected_platform_sp->GetShortPluginName()); 392cb8977d726be451df9978a74088435667fa37da2Greg Clayton result.SetStatus (eReturnStatusFailed); 393cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 394cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 395cb8977d726be451df9978a74088435667fa37da2Greg Clayton else 396cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 397cb8977d726be451df9978a74088435667fa37da2Greg Clayton // Bad args 398cb8977d726be451df9978a74088435667fa37da2Greg Clayton result.AppendError ("\"platform disconnect\" doesn't take any arguments"); 399cb8977d726be451df9978a74088435667fa37da2Greg Clayton result.SetStatus (eReturnStatusFailed); 400cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 401cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 402cb8977d726be451df9978a74088435667fa37da2Greg Clayton else 403cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 40458e26e0935138225477fd61283215ceff2068899Greg Clayton result.AppendError ("no platform is currently selected"); 405cb8977d726be451df9978a74088435667fa37da2Greg Clayton result.SetStatus (eReturnStatusFailed); 406cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 407cb8977d726be451df9978a74088435667fa37da2Greg Clayton return result.Succeeded(); 408cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 409cb8977d726be451df9978a74088435667fa37da2Greg Clayton}; 410cb8977d726be451df9978a74088435667fa37da2Greg Clayton 411cb8977d726be451df9978a74088435667fa37da2Greg Clayton 412b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 413b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//---------------------------------------------------------------------- 414b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// CommandObjectPlatform constructor 415b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//---------------------------------------------------------------------- 416b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonCommandObjectPlatform::CommandObjectPlatform(CommandInterpreter &interpreter) : 417b1888f24fa181489840b9acf193e224d125d0776Greg Clayton CommandObjectMultiword (interpreter, 418b1888f24fa181489840b9acf193e224d125d0776Greg Clayton "platform", 419b1888f24fa181489840b9acf193e224d125d0776Greg Clayton "A set of commands to manage and create platforms.", 420cb8977d726be451df9978a74088435667fa37da2Greg Clayton "platform [connect|create|disconnect|list|status|select] ...") 421b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 422b1888f24fa181489840b9acf193e224d125d0776Greg Clayton LoadSubCommand ("create", CommandObjectSP (new CommandObjectPlatformCreate (interpreter))); 423b1888f24fa181489840b9acf193e224d125d0776Greg Clayton LoadSubCommand ("list" , CommandObjectSP (new CommandObjectPlatformList (interpreter))); 424b1888f24fa181489840b9acf193e224d125d0776Greg Clayton LoadSubCommand ("select", CommandObjectSP (new CommandObjectPlatformSelect (interpreter))); 425b1888f24fa181489840b9acf193e224d125d0776Greg Clayton LoadSubCommand ("status", CommandObjectSP (new CommandObjectPlatformStatus (interpreter))); 426cb8977d726be451df9978a74088435667fa37da2Greg Clayton LoadSubCommand ("connect", CommandObjectSP (new CommandObjectPlatformConnect (interpreter))); 427cb8977d726be451df9978a74088435667fa37da2Greg Clayton LoadSubCommand ("disconnect", CommandObjectSP (new CommandObjectPlatformDisconnect (interpreter))); 428b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 429b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 430b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 431b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//---------------------------------------------------------------------- 432b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// Destructor 433b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//---------------------------------------------------------------------- 434b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonCommandObjectPlatform::~CommandObjectPlatform() 435b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 436b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 437