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 10d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea#include "lldb/lldb-python.h" 11d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea 12b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "CommandObjectPlatform.h" 13b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 14b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// C Includes 15b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// C++ Includes 16b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// Other libraries and framework includes 17b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// Project includes 18b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Core/DataExtractor.h" 19b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Core/Debugger.h" 2049ce8969d3154e1560106cfe530444c09410f217Greg Clayton#include "lldb/Core/Module.h" 21b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Core/PluginManager.h" 22b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Interpreter/Args.h" 23b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Interpreter/CommandInterpreter.h" 24b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Interpreter/CommandReturnObject.h" 25abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton#include "lldb/Interpreter/OptionGroupPlatform.h" 26b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Target/ExecutionContext.h" 27b1888f24fa181489840b9acf193e224d125d0776Greg Clayton#include "lldb/Target/Platform.h" 28f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton#include "lldb/Target/Process.h" 29b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 30b1888f24fa181489840b9acf193e224d125d0776Greg Claytonusing namespace lldb; 31b1888f24fa181489840b9acf193e224d125d0776Greg Claytonusing namespace lldb_private; 32b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 33143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton 34b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//---------------------------------------------------------------------- 35abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton// "platform select <platform-name>" 36b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//---------------------------------------------------------------------- 37da26bd203cbb104291b39891febf7481794f205fJim Inghamclass CommandObjectPlatformSelect : public CommandObjectParsed 38b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 39b1888f24fa181489840b9acf193e224d125d0776Greg Claytonpublic: 40143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton CommandObjectPlatformSelect (CommandInterpreter &interpreter) : 41da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandObjectParsed (interpreter, 42da26bd203cbb104291b39891febf7481794f205fJim Ingham "platform select", 43da26bd203cbb104291b39891febf7481794f205fJim Ingham "Create a platform if needed and select it as the current platform.", 44da26bd203cbb104291b39891febf7481794f205fJim Ingham "platform select <platform-name>", 45da26bd203cbb104291b39891febf7481794f205fJim Ingham 0), 46143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton m_option_group (interpreter), 47143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton m_platform_options (false) // Don't include the "--platform" option by passing false 48b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 495e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton m_option_group.Append (&m_platform_options, LLDB_OPT_SET_ALL, 1); 50143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton m_option_group.Finalize(); 51b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 52b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 53b1888f24fa181489840b9acf193e224d125d0776Greg Clayton virtual 54143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton ~CommandObjectPlatformSelect () 55b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 56b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 57b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 58da26bd203cbb104291b39891febf7481794f205fJim Ingham virtual int 59da26bd203cbb104291b39891febf7481794f205fJim Ingham HandleCompletion (Args &input, 60da26bd203cbb104291b39891febf7481794f205fJim Ingham int &cursor_index, 61da26bd203cbb104291b39891febf7481794f205fJim Ingham int &cursor_char_position, 62da26bd203cbb104291b39891febf7481794f205fJim Ingham int match_start_point, 63da26bd203cbb104291b39891febf7481794f205fJim Ingham int max_return_elements, 64da26bd203cbb104291b39891febf7481794f205fJim Ingham bool &word_complete, 65da26bd203cbb104291b39891febf7481794f205fJim Ingham StringList &matches) 66da26bd203cbb104291b39891febf7481794f205fJim Ingham { 67da26bd203cbb104291b39891febf7481794f205fJim Ingham std::string completion_str (input.GetArgumentAtIndex(cursor_index)); 68da26bd203cbb104291b39891febf7481794f205fJim Ingham completion_str.erase (cursor_char_position); 69da26bd203cbb104291b39891febf7481794f205fJim Ingham 70da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandCompletions::PlatformPluginNames (m_interpreter, 71da26bd203cbb104291b39891febf7481794f205fJim Ingham completion_str.c_str(), 72da26bd203cbb104291b39891febf7481794f205fJim Ingham match_start_point, 73da26bd203cbb104291b39891febf7481794f205fJim Ingham max_return_elements, 74da26bd203cbb104291b39891febf7481794f205fJim Ingham NULL, 75da26bd203cbb104291b39891febf7481794f205fJim Ingham word_complete, 76da26bd203cbb104291b39891febf7481794f205fJim Ingham matches); 77da26bd203cbb104291b39891febf7481794f205fJim Ingham return matches.GetSize(); 78da26bd203cbb104291b39891febf7481794f205fJim Ingham } 79da26bd203cbb104291b39891febf7481794f205fJim Ingham 80da26bd203cbb104291b39891febf7481794f205fJim Ingham virtual Options * 81da26bd203cbb104291b39891febf7481794f205fJim Ingham GetOptions () 82da26bd203cbb104291b39891febf7481794f205fJim Ingham { 83da26bd203cbb104291b39891febf7481794f205fJim Ingham return &m_option_group; 84da26bd203cbb104291b39891febf7481794f205fJim Ingham } 85da26bd203cbb104291b39891febf7481794f205fJim Ingham 86da26bd203cbb104291b39891febf7481794f205fJim Inghamprotected: 87b1888f24fa181489840b9acf193e224d125d0776Greg Clayton virtual bool 88da26bd203cbb104291b39891febf7481794f205fJim Ingham DoExecute (Args& args, CommandReturnObject &result) 89b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 90b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (args.GetArgumentCount() == 1) 91b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 925e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton const char *platform_name = args.GetArgumentAtIndex (0); 935e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton if (platform_name && platform_name[0]) 945e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton { 955e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton const bool select = true; 96abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton m_platform_options.SetPlatformName (platform_name); 975e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton Error error; 98b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton ArchSpec platform_arch; 99b170aee2daacc83e3d71c3e3acc9d56c89893a7bGreg Clayton PlatformSP platform_sp (m_platform_options.CreatePlatformWithOptions (m_interpreter, ArchSpec(), select, error, platform_arch)); 1005e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton if (platform_sp) 1015e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton { 1025e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton platform_sp->GetStatus (result.GetOutputStream()); 1035e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton result.SetStatus (eReturnStatusSuccessFinishResult); 1045e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton } 1055e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton else 1065e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton { 1075e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton result.AppendError(error.AsCString()); 1085e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton result.SetStatus (eReturnStatusFailed); 1095e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton } 1105e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton } 1115e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton else 1125e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton { 1135e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton result.AppendError ("invalid platform name"); 1145e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton result.SetStatus (eReturnStatusFailed); 1155e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton } 116b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 117b1888f24fa181489840b9acf193e224d125d0776Greg Clayton else 118b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 11924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton result.AppendError ("platform create takes a platform name as an argument\n"); 120b1888f24fa181489840b9acf193e224d125d0776Greg Clayton result.SetStatus (eReturnStatusFailed); 121b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 122b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return result.Succeeded(); 123b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 124abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton 125143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton OptionGroupOptions m_option_group; 126abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton OptionGroupPlatform m_platform_options; 127b1888f24fa181489840b9acf193e224d125d0776Greg Clayton}; 128b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 129b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//---------------------------------------------------------------------- 130b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// "platform list" 131b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//---------------------------------------------------------------------- 132da26bd203cbb104291b39891febf7481794f205fJim Inghamclass CommandObjectPlatformList : public CommandObjectParsed 133b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 134b1888f24fa181489840b9acf193e224d125d0776Greg Claytonpublic: 135b1888f24fa181489840b9acf193e224d125d0776Greg Clayton CommandObjectPlatformList (CommandInterpreter &interpreter) : 136da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandObjectParsed (interpreter, 137da26bd203cbb104291b39891febf7481794f205fJim Ingham "platform list", 138da26bd203cbb104291b39891febf7481794f205fJim Ingham "List all platforms that are available.", 139da26bd203cbb104291b39891febf7481794f205fJim Ingham NULL, 140da26bd203cbb104291b39891febf7481794f205fJim Ingham 0) 141b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 142b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 143b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 144b1888f24fa181489840b9acf193e224d125d0776Greg Clayton virtual 145b1888f24fa181489840b9acf193e224d125d0776Greg Clayton ~CommandObjectPlatformList () 146b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 147b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 148b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 149da26bd203cbb104291b39891febf7481794f205fJim Inghamprotected: 150b1888f24fa181489840b9acf193e224d125d0776Greg Clayton virtual bool 151da26bd203cbb104291b39891febf7481794f205fJim Ingham DoExecute (Args& args, CommandReturnObject &result) 152b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 153b1888f24fa181489840b9acf193e224d125d0776Greg Clayton Stream &ostrm = result.GetOutputStream(); 154b1888f24fa181489840b9acf193e224d125d0776Greg Clayton ostrm.Printf("Available platforms:\n"); 155b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 156b1888f24fa181489840b9acf193e224d125d0776Greg Clayton PlatformSP host_platform_sp (Platform::GetDefaultPlatform()); 157b1888f24fa181489840b9acf193e224d125d0776Greg Clayton ostrm.Printf ("%s: %s\n", 1580e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton host_platform_sp->GetPluginName().GetCString(), 159b1888f24fa181489840b9acf193e224d125d0776Greg Clayton host_platform_sp->GetDescription()); 160b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 161b1888f24fa181489840b9acf193e224d125d0776Greg Clayton uint32_t idx; 162b1888f24fa181489840b9acf193e224d125d0776Greg Clayton for (idx = 0; 1; ++idx) 163b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 164b1888f24fa181489840b9acf193e224d125d0776Greg Clayton const char *plugin_name = PluginManager::GetPlatformPluginNameAtIndex (idx); 165b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (plugin_name == NULL) 166b1888f24fa181489840b9acf193e224d125d0776Greg Clayton break; 167b1888f24fa181489840b9acf193e224d125d0776Greg Clayton const char *plugin_desc = PluginManager::GetPlatformPluginDescriptionAtIndex (idx); 168b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (plugin_desc == NULL) 169b1888f24fa181489840b9acf193e224d125d0776Greg Clayton break; 170b1888f24fa181489840b9acf193e224d125d0776Greg Clayton ostrm.Printf("%s: %s\n", plugin_name, plugin_desc); 171b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 172b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 173b1888f24fa181489840b9acf193e224d125d0776Greg Clayton if (idx == 0) 174b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 17558e26e0935138225477fd61283215ceff2068899Greg Clayton result.AppendError ("no platforms are available\n"); 176b1888f24fa181489840b9acf193e224d125d0776Greg Clayton result.SetStatus (eReturnStatusFailed); 177b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 1780815031982a0461fd4466cdcdd15d9220a93ca26Johnny Chen else 1790815031982a0461fd4466cdcdd15d9220a93ca26Johnny Chen result.SetStatus (eReturnStatusSuccessFinishResult); 180b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return result.Succeeded(); 181b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 182b1888f24fa181489840b9acf193e224d125d0776Greg Clayton}; 183b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 184b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//---------------------------------------------------------------------- 185b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// "platform status" 186b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//---------------------------------------------------------------------- 187da26bd203cbb104291b39891febf7481794f205fJim Inghamclass CommandObjectPlatformStatus : public CommandObjectParsed 188b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 189b1888f24fa181489840b9acf193e224d125d0776Greg Claytonpublic: 190b1888f24fa181489840b9acf193e224d125d0776Greg Clayton CommandObjectPlatformStatus (CommandInterpreter &interpreter) : 191da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandObjectParsed (interpreter, 192da26bd203cbb104291b39891febf7481794f205fJim Ingham "platform status", 193da26bd203cbb104291b39891febf7481794f205fJim Ingham "Display status for the currently selected platform.", 194da26bd203cbb104291b39891febf7481794f205fJim Ingham NULL, 195da26bd203cbb104291b39891febf7481794f205fJim Ingham 0) 196b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 197b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 198b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 199b1888f24fa181489840b9acf193e224d125d0776Greg Clayton virtual 200b1888f24fa181489840b9acf193e224d125d0776Greg Clayton ~CommandObjectPlatformStatus () 201b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 202b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 203b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 204da26bd203cbb104291b39891febf7481794f205fJim Inghamprotected: 205b1888f24fa181489840b9acf193e224d125d0776Greg Clayton virtual bool 206da26bd203cbb104291b39891febf7481794f205fJim Ingham DoExecute (Args& args, CommandReturnObject &result) 207b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 208b1888f24fa181489840b9acf193e224d125d0776Greg Clayton Stream &ostrm = result.GetOutputStream(); 209b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 21032949387a93392818418fab844c274877ac68c0fJason Molenda Target *target = m_interpreter.GetDebugger().GetSelectedTarget().get(); 21132949387a93392818418fab844c274877ac68c0fJason Molenda PlatformSP platform_sp; 21232949387a93392818418fab844c274877ac68c0fJason Molenda if (target) 21332949387a93392818418fab844c274877ac68c0fJason Molenda { 21432949387a93392818418fab844c274877ac68c0fJason Molenda platform_sp = target->GetPlatform(); 21532949387a93392818418fab844c274877ac68c0fJason Molenda } 21632949387a93392818418fab844c274877ac68c0fJason Molenda if (!platform_sp) 21732949387a93392818418fab844c274877ac68c0fJason Molenda { 21832949387a93392818418fab844c274877ac68c0fJason Molenda platform_sp = m_interpreter.GetDebugger().GetPlatformList().GetSelectedPlatform(); 21932949387a93392818418fab844c274877ac68c0fJason Molenda } 220ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton if (platform_sp) 221b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 222ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton platform_sp->GetStatus (ostrm); 223b1888f24fa181489840b9acf193e224d125d0776Greg Clayton result.SetStatus (eReturnStatusSuccessFinishResult); 224b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 225b1888f24fa181489840b9acf193e224d125d0776Greg Clayton else 226b1888f24fa181489840b9acf193e224d125d0776Greg Clayton { 22758e26e0935138225477fd61283215ceff2068899Greg Clayton result.AppendError ("no platform us currently selected\n"); 228b1888f24fa181489840b9acf193e224d125d0776Greg Clayton result.SetStatus (eReturnStatusFailed); 229b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 230b1888f24fa181489840b9acf193e224d125d0776Greg Clayton return result.Succeeded(); 231b1888f24fa181489840b9acf193e224d125d0776Greg Clayton } 232b1888f24fa181489840b9acf193e224d125d0776Greg Clayton}; 233b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 234cb8977d726be451df9978a74088435667fa37da2Greg Clayton//---------------------------------------------------------------------- 235cb8977d726be451df9978a74088435667fa37da2Greg Clayton// "platform connect <connect-url>" 236cb8977d726be451df9978a74088435667fa37da2Greg Clayton//---------------------------------------------------------------------- 237da26bd203cbb104291b39891febf7481794f205fJim Inghamclass CommandObjectPlatformConnect : public CommandObjectParsed 238cb8977d726be451df9978a74088435667fa37da2Greg Clayton{ 239cb8977d726be451df9978a74088435667fa37da2Greg Claytonpublic: 240cb8977d726be451df9978a74088435667fa37da2Greg Clayton CommandObjectPlatformConnect (CommandInterpreter &interpreter) : 241da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandObjectParsed (interpreter, 242da26bd203cbb104291b39891febf7481794f205fJim Ingham "platform connect", 243da26bd203cbb104291b39891febf7481794f205fJim Ingham "Connect a platform by name to be the currently selected platform.", 244da26bd203cbb104291b39891febf7481794f205fJim Ingham "platform connect <connect-url>", 245da26bd203cbb104291b39891febf7481794f205fJim Ingham 0) 246cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 247cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 248cb8977d726be451df9978a74088435667fa37da2Greg Clayton 249cb8977d726be451df9978a74088435667fa37da2Greg Clayton virtual 250cb8977d726be451df9978a74088435667fa37da2Greg Clayton ~CommandObjectPlatformConnect () 251cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 252cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 253cb8977d726be451df9978a74088435667fa37da2Greg Clayton 254da26bd203cbb104291b39891febf7481794f205fJim Inghamprotected: 255cb8977d726be451df9978a74088435667fa37da2Greg Clayton virtual bool 256da26bd203cbb104291b39891febf7481794f205fJim Ingham DoExecute (Args& args, CommandReturnObject &result) 257cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 258cb8977d726be451df9978a74088435667fa37da2Greg Clayton Stream &ostrm = result.GetOutputStream(); 259cb8977d726be451df9978a74088435667fa37da2Greg Clayton 260ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton PlatformSP platform_sp (m_interpreter.GetDebugger().GetPlatformList().GetSelectedPlatform()); 261ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton if (platform_sp) 262cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 263ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton Error error (platform_sp->ConnectRemote (args)); 264cb8977d726be451df9978a74088435667fa37da2Greg Clayton if (error.Success()) 265cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 266ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton platform_sp->GetStatus (ostrm); 267cb8977d726be451df9978a74088435667fa37da2Greg Clayton result.SetStatus (eReturnStatusSuccessFinishResult); 268cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 269cb8977d726be451df9978a74088435667fa37da2Greg Clayton else 270cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 27158e26e0935138225477fd61283215ceff2068899Greg Clayton result.AppendErrorWithFormat ("%s\n", error.AsCString()); 272cb8977d726be451df9978a74088435667fa37da2Greg Clayton result.SetStatus (eReturnStatusFailed); 273cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 274cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 275cb8977d726be451df9978a74088435667fa37da2Greg Clayton else 276cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 27758e26e0935138225477fd61283215ceff2068899Greg Clayton result.AppendError ("no platform us currently selected\n"); 278cb8977d726be451df9978a74088435667fa37da2Greg Clayton result.SetStatus (eReturnStatusFailed); 279cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 280cb8977d726be451df9978a74088435667fa37da2Greg Clayton return result.Succeeded(); 281cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 282cb8977d726be451df9978a74088435667fa37da2Greg Clayton}; 283cb8977d726be451df9978a74088435667fa37da2Greg Clayton 284cb8977d726be451df9978a74088435667fa37da2Greg Clayton//---------------------------------------------------------------------- 285cb8977d726be451df9978a74088435667fa37da2Greg Clayton// "platform disconnect" 286cb8977d726be451df9978a74088435667fa37da2Greg Clayton//---------------------------------------------------------------------- 287da26bd203cbb104291b39891febf7481794f205fJim Inghamclass CommandObjectPlatformDisconnect : public CommandObjectParsed 288cb8977d726be451df9978a74088435667fa37da2Greg Clayton{ 289cb8977d726be451df9978a74088435667fa37da2Greg Claytonpublic: 290cb8977d726be451df9978a74088435667fa37da2Greg Clayton CommandObjectPlatformDisconnect (CommandInterpreter &interpreter) : 291da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandObjectParsed (interpreter, 292da26bd203cbb104291b39891febf7481794f205fJim Ingham "platform disconnect", 293da26bd203cbb104291b39891febf7481794f205fJim Ingham "Disconnect a platform by name to be the currently selected platform.", 294da26bd203cbb104291b39891febf7481794f205fJim Ingham "platform disconnect", 295da26bd203cbb104291b39891febf7481794f205fJim Ingham 0) 296cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 297cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 298cb8977d726be451df9978a74088435667fa37da2Greg Clayton 299cb8977d726be451df9978a74088435667fa37da2Greg Clayton virtual 300cb8977d726be451df9978a74088435667fa37da2Greg Clayton ~CommandObjectPlatformDisconnect () 301cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 302cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 303cb8977d726be451df9978a74088435667fa37da2Greg Clayton 304da26bd203cbb104291b39891febf7481794f205fJim Inghamprotected: 305cb8977d726be451df9978a74088435667fa37da2Greg Clayton virtual bool 306da26bd203cbb104291b39891febf7481794f205fJim Ingham DoExecute (Args& args, CommandReturnObject &result) 307cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 308ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton PlatformSP platform_sp (m_interpreter.GetDebugger().GetPlatformList().GetSelectedPlatform()); 309ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton if (platform_sp) 310cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 311cb8977d726be451df9978a74088435667fa37da2Greg Clayton if (args.GetArgumentCount() == 0) 312cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 313cb8977d726be451df9978a74088435667fa37da2Greg Clayton Error error; 314cb8977d726be451df9978a74088435667fa37da2Greg Clayton 315ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton if (platform_sp->IsConnected()) 316cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 317cb8977d726be451df9978a74088435667fa37da2Greg Clayton // Cache the instance name if there is one since we are 318cb8977d726be451df9978a74088435667fa37da2Greg Clayton // about to disconnect and the name might go with it. 319ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton const char *hostname_cstr = platform_sp->GetHostname(); 32058e26e0935138225477fd61283215ceff2068899Greg Clayton std::string hostname; 32158e26e0935138225477fd61283215ceff2068899Greg Clayton if (hostname_cstr) 32258e26e0935138225477fd61283215ceff2068899Greg Clayton hostname.assign (hostname_cstr); 323cb8977d726be451df9978a74088435667fa37da2Greg Clayton 324ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton error = platform_sp->DisconnectRemote (); 325cb8977d726be451df9978a74088435667fa37da2Greg Clayton if (error.Success()) 326cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 327cb8977d726be451df9978a74088435667fa37da2Greg Clayton Stream &ostrm = result.GetOutputStream(); 32858e26e0935138225477fd61283215ceff2068899Greg Clayton if (hostname.empty()) 3290e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton ostrm.Printf ("Disconnected from \"%s\"\n", platform_sp->GetPluginName().GetCString()); 330cb8977d726be451df9978a74088435667fa37da2Greg Clayton else 33158e26e0935138225477fd61283215ceff2068899Greg Clayton ostrm.Printf ("Disconnected from \"%s\"\n", hostname.c_str()); 332cb8977d726be451df9978a74088435667fa37da2Greg Clayton result.SetStatus (eReturnStatusSuccessFinishResult); 333cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 334cb8977d726be451df9978a74088435667fa37da2Greg Clayton else 335cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 33658e26e0935138225477fd61283215ceff2068899Greg Clayton result.AppendErrorWithFormat ("%s", error.AsCString()); 337cb8977d726be451df9978a74088435667fa37da2Greg Clayton result.SetStatus (eReturnStatusFailed); 338cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 339cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 340cb8977d726be451df9978a74088435667fa37da2Greg Clayton else 341cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 342cb8977d726be451df9978a74088435667fa37da2Greg Clayton // Not connected... 3430e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton result.AppendErrorWithFormat ("not connected to '%s'", platform_sp->GetPluginName().GetCString()); 344cb8977d726be451df9978a74088435667fa37da2Greg Clayton result.SetStatus (eReturnStatusFailed); 345cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 346cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 347cb8977d726be451df9978a74088435667fa37da2Greg Clayton else 348cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 349cb8977d726be451df9978a74088435667fa37da2Greg Clayton // Bad args 350cb8977d726be451df9978a74088435667fa37da2Greg Clayton result.AppendError ("\"platform disconnect\" doesn't take any arguments"); 351cb8977d726be451df9978a74088435667fa37da2Greg Clayton result.SetStatus (eReturnStatusFailed); 352cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 353cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 354cb8977d726be451df9978a74088435667fa37da2Greg Clayton else 355cb8977d726be451df9978a74088435667fa37da2Greg Clayton { 35658e26e0935138225477fd61283215ceff2068899Greg Clayton result.AppendError ("no platform is currently selected"); 357cb8977d726be451df9978a74088435667fa37da2Greg Clayton result.SetStatus (eReturnStatusFailed); 358cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 359cb8977d726be451df9978a74088435667fa37da2Greg Clayton return result.Succeeded(); 360cb8977d726be451df9978a74088435667fa37da2Greg Clayton } 361cb8977d726be451df9978a74088435667fa37da2Greg Clayton}; 362b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 363b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton// "platform process launch" 364b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton//---------------------------------------------------------------------- 365da26bd203cbb104291b39891febf7481794f205fJim Inghamclass CommandObjectPlatformProcessLaunch : public CommandObjectParsed 366b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton{ 367b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonpublic: 368b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton CommandObjectPlatformProcessLaunch (CommandInterpreter &interpreter) : 369ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton CommandObjectParsed (interpreter, 370da26bd203cbb104291b39891febf7481794f205fJim Ingham "platform process launch", 371da26bd203cbb104291b39891febf7481794f205fJim Ingham "Launch a new process on a remote platform.", 372da26bd203cbb104291b39891febf7481794f205fJim Ingham "platform process launch program", 373ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton eFlagRequiresTarget | eFlagTryTargetAPILock), 374b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_options (interpreter) 375b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 376b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 377b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 378b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton virtual 379b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ~CommandObjectPlatformProcessLaunch () 380b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 381b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 382b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 383da26bd203cbb104291b39891febf7481794f205fJim Ingham virtual Options * 384da26bd203cbb104291b39891febf7481794f205fJim Ingham GetOptions () 385da26bd203cbb104291b39891febf7481794f205fJim Ingham { 386da26bd203cbb104291b39891febf7481794f205fJim Ingham return &m_options; 387da26bd203cbb104291b39891febf7481794f205fJim Ingham } 388da26bd203cbb104291b39891febf7481794f205fJim Ingham 389da26bd203cbb104291b39891febf7481794f205fJim Inghamprotected: 390b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton virtual bool 391da26bd203cbb104291b39891febf7481794f205fJim Ingham DoExecute (Args& args, CommandReturnObject &result) 392b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 39332949387a93392818418fab844c274877ac68c0fJason Molenda Target *target = m_interpreter.GetDebugger().GetSelectedTarget().get(); 39432949387a93392818418fab844c274877ac68c0fJason Molenda PlatformSP platform_sp; 39532949387a93392818418fab844c274877ac68c0fJason Molenda if (target) 39632949387a93392818418fab844c274877ac68c0fJason Molenda { 39732949387a93392818418fab844c274877ac68c0fJason Molenda platform_sp = target->GetPlatform(); 39832949387a93392818418fab844c274877ac68c0fJason Molenda } 39932949387a93392818418fab844c274877ac68c0fJason Molenda if (!platform_sp) 40032949387a93392818418fab844c274877ac68c0fJason Molenda { 40132949387a93392818418fab844c274877ac68c0fJason Molenda platform_sp = m_interpreter.GetDebugger().GetPlatformList().GetSelectedPlatform(); 40232949387a93392818418fab844c274877ac68c0fJason Molenda } 40332949387a93392818418fab844c274877ac68c0fJason Molenda 404b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (platform_sp) 405b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 406b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Error error; 40736da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton const size_t argc = args.GetArgumentCount(); 408ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton Target *target = m_exe_ctx.GetTargetPtr(); 409abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton Module *exe_module = target->GetExecutableModulePointer(); 410abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton if (exe_module) 411abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton { 412abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton m_options.launch_info.GetExecutableFile () = exe_module->GetFileSpec(); 413abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton char exe_path[PATH_MAX]; 414abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton if (m_options.launch_info.GetExecutableFile ().GetPath (exe_path, sizeof(exe_path))) 415abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton m_options.launch_info.GetArguments().AppendArgument (exe_path); 416abb3302051246273eb92cca203c9a1b9d9736e05Greg Clayton m_options.launch_info.GetArchitecture() = exe_module->GetArchitecture(); 417b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 418b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 419b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (argc > 0) 420b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 421b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (m_options.launch_info.GetExecutableFile ()) 422b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 423b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton // We already have an executable file, so we will use this 424b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton // and all arguments to this function are extra arguments 425b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton m_options.launch_info.GetArguments().AppendArguments (args); 426b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 427b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton else 428b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 429b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton // We don't have any file yet, so the first argument is our 430b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton // executable, and the rest are program arguments 431b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const bool first_arg_is_executable = true; 4320c8446cc220c429fb51f8f9864275c8b1c768533Greg Clayton m_options.launch_info.SetArguments (args, first_arg_is_executable); 433b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 434b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 435b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 436b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (m_options.launch_info.GetExecutableFile ()) 437b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 438b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton Debugger &debugger = m_interpreter.GetDebugger(); 439b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 440b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (argc == 0) 44173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton target->GetRunArguments(m_options.launch_info.GetArguments()); 442b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 443b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessSP process_sp (platform_sp->DebugProcess (m_options.launch_info, 444b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton debugger, 445b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton target, 446b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton debugger.GetListener(), 447b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton error)); 448b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (process_sp && process_sp->IsAlive()) 449b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 450b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton result.SetStatus (eReturnStatusSuccessFinishNoResult); 451b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return true; 452b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 453b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 454b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (error.Success()) 455b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton result.AppendError ("process launch failed"); 456b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton else 457b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton result.AppendError (error.AsCString()); 458b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton result.SetStatus (eReturnStatusFailed); 459b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 460b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton else 461b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 462b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton result.AppendError ("'platform process launch' uses the current target file and arguments, or the executable and its arguments can be specified in this command"); 463b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton result.SetStatus (eReturnStatusFailed); 464b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return false; 465b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 466b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 467b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton else 468b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 469b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton result.AppendError ("no platform is selected\n"); 470b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 471b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton return result.Succeeded(); 472b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 473b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 474b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Claytonprotected: 475b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessLaunchCommandOptions m_options; 476b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton}; 477b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 478cb8977d726be451df9978a74088435667fa37da2Greg Clayton 479cb8977d726be451df9978a74088435667fa37da2Greg Clayton 48024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton//---------------------------------------------------------------------- 48124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton// "platform process list" 48224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton//---------------------------------------------------------------------- 483da26bd203cbb104291b39891febf7481794f205fJim Inghamclass CommandObjectPlatformProcessList : public CommandObjectParsed 48424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton{ 48524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Claytonpublic: 48624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton CommandObjectPlatformProcessList (CommandInterpreter &interpreter) : 487da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandObjectParsed (interpreter, 488da26bd203cbb104291b39891febf7481794f205fJim Ingham "platform process list", 489da26bd203cbb104291b39891febf7481794f205fJim Ingham "List processes on a remote platform by name, pid, or many other matching attributes.", 490da26bd203cbb104291b39891febf7481794f205fJim Ingham "platform process list", 491da26bd203cbb104291b39891febf7481794f205fJim Ingham 0), 492f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton m_options (interpreter) 49324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 49424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 49524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 49624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual 49724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton ~CommandObjectPlatformProcessList () 49824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 49924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 50024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 501da26bd203cbb104291b39891febf7481794f205fJim Ingham virtual Options * 502da26bd203cbb104291b39891febf7481794f205fJim Ingham GetOptions () 503da26bd203cbb104291b39891febf7481794f205fJim Ingham { 504da26bd203cbb104291b39891febf7481794f205fJim Ingham return &m_options; 505da26bd203cbb104291b39891febf7481794f205fJim Ingham } 506da26bd203cbb104291b39891febf7481794f205fJim Ingham 507da26bd203cbb104291b39891febf7481794f205fJim Inghamprotected: 50824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual bool 509da26bd203cbb104291b39891febf7481794f205fJim Ingham DoExecute (Args& args, CommandReturnObject &result) 51024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 51132949387a93392818418fab844c274877ac68c0fJason Molenda Target *target = m_interpreter.GetDebugger().GetSelectedTarget().get(); 51232949387a93392818418fab844c274877ac68c0fJason Molenda PlatformSP platform_sp; 51332949387a93392818418fab844c274877ac68c0fJason Molenda if (target) 51432949387a93392818418fab844c274877ac68c0fJason Molenda { 51532949387a93392818418fab844c274877ac68c0fJason Molenda platform_sp = target->GetPlatform(); 51632949387a93392818418fab844c274877ac68c0fJason Molenda } 51732949387a93392818418fab844c274877ac68c0fJason Molenda if (!platform_sp) 51832949387a93392818418fab844c274877ac68c0fJason Molenda { 51932949387a93392818418fab844c274877ac68c0fJason Molenda platform_sp = m_interpreter.GetDebugger().GetPlatformList().GetSelectedPlatform(); 52032949387a93392818418fab844c274877ac68c0fJason Molenda } 52124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 52224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (platform_sp) 52324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 52424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton Error error; 52524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (args.GetArgumentCount() == 0) 52624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 52724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 52824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (platform_sp) 52924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 530ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton Stream &ostrm = result.GetOutputStream(); 531ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton 53224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton lldb::pid_t pid = m_options.match_info.GetProcessInfo().GetProcessID(); 53324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (pid != LLDB_INVALID_PROCESS_ID) 53424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 535b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfo proc_info; 53624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (platform_sp->GetProcessInfo (pid, proc_info)) 53724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 538b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfo::DumpTableHeader (ostrm, platform_sp.get(), m_options.show_args, m_options.verbose); 539b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton proc_info.DumpAsTableRow(ostrm, platform_sp.get(), m_options.show_args, m_options.verbose); 54024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton result.SetStatus (eReturnStatusSuccessFinishResult); 54124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 54224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton else 54324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 5445f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea result.AppendErrorWithFormat ("no process found with pid = %" PRIu64 "\n", pid); 54524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton result.SetStatus (eReturnStatusFailed); 54624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 54724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 54824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton else 54924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 550b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfoList proc_infos; 55124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton const uint32_t matches = platform_sp->FindProcesses (m_options.match_info, proc_infos); 552b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const char *match_desc = NULL; 553b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton const char *match_name = m_options.match_info.GetProcessInfo().GetName(); 554b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (match_name && match_name[0]) 55524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 556b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton switch (m_options.match_info.GetNameMatchType()) 55724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 558b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton case eNameMatchIgnore: break; 559b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton case eNameMatchEquals: match_desc = "matched"; break; 560b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton case eNameMatchContains: match_desc = "contained"; break; 561b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton case eNameMatchStartsWith: match_desc = "started with"; break; 562b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton case eNameMatchEndsWith: match_desc = "ended with"; break; 563b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton case eNameMatchRegularExpression: match_desc = "matched the regular expression"; break; 56424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 565b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton } 566b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 567b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (matches == 0) 568b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton { 56924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (match_desc) 57024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton result.AppendErrorWithFormat ("no processes were found that %s \"%s\" on the \"%s\" platform\n", 57124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton match_desc, 57224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton match_name, 5730e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton platform_sp->GetPluginName().GetCString()); 57424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton else 5750e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton result.AppendErrorWithFormat ("no processes were found on the \"%s\" platform\n", platform_sp->GetPluginName().GetCString()); 57624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton result.SetStatus (eReturnStatusFailed); 57724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 57824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton else 57924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 580b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton result.AppendMessageWithFormat ("%u matching process%s found on \"%s\"", 581b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton matches, 582b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton matches > 1 ? "es were" : " was", 5830e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton platform_sp->GetName().GetCString()); 584b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton if (match_desc) 585b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton result.AppendMessageWithFormat (" whose name %s \"%s\"", 586b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton match_desc, 587b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton match_name); 588b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton result.AppendMessageWithFormat ("\n"); 589b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfo::DumpTableHeader (ostrm, platform_sp.get(), m_options.show_args, m_options.verbose); 59024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton for (uint32_t i=0; i<matches; ++i) 59124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 592b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton proc_infos.GetProcessInfoAtIndex(i).DumpAsTableRow(ostrm, platform_sp.get(), m_options.show_args, m_options.verbose); 59324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 59424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 59524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 59624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 59724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 59824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton else 59924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 60024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton result.AppendError ("invalid args: process list takes only options\n"); 60124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton result.SetStatus (eReturnStatusFailed); 60224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 60324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 60424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton else 60524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 60624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton result.AppendError ("no platform is selected\n"); 60724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton result.SetStatus (eReturnStatusFailed); 60824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 60924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return result.Succeeded(); 61024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 61124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 61224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton class CommandOptions : public Options 61324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 61424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton public: 61524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 616f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton CommandOptions (CommandInterpreter &interpreter) : 617f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton Options (interpreter), 61824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton match_info () 61924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 62024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 62124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 62224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual 62324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton ~CommandOptions () 62424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 62524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 62624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 62724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual Error 628143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton SetOptionValue (uint32_t option_idx, const char *option_arg) 62924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 63024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton Error error; 6316475c42148a8ea1ca86e5db465db7eca742d897dGreg Clayton const int short_option = m_getopt_table[option_idx].val; 63224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton bool success = false; 63324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 63424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton switch (short_option) 63524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 63624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton case 'p': 63724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton match_info.GetProcessInfo().SetProcessID (Args::StringToUInt32 (option_arg, LLDB_INVALID_PROCESS_ID, 0, &success)); 63824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (!success) 63924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton error.SetErrorStringWithFormat("invalid process ID string: '%s'", option_arg); 64024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton break; 64124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 64224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton case 'P': 64324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton match_info.GetProcessInfo().SetParentProcessID (Args::StringToUInt32 (option_arg, LLDB_INVALID_PROCESS_ID, 0, &success)); 64424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (!success) 64524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton error.SetErrorStringWithFormat("invalid parent process ID string: '%s'", option_arg); 64624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton break; 64724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 64824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton case 'u': 649b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton match_info.GetProcessInfo().SetUserID (Args::StringToUInt32 (option_arg, UINT32_MAX, 0, &success)); 65024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (!success) 65124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton error.SetErrorStringWithFormat("invalid user ID string: '%s'", option_arg); 65224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton break; 65324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 65424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton case 'U': 65524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton match_info.GetProcessInfo().SetEffectiveUserID (Args::StringToUInt32 (option_arg, UINT32_MAX, 0, &success)); 65624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (!success) 65724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton error.SetErrorStringWithFormat("invalid effective user ID string: '%s'", option_arg); 65824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton break; 65924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 66024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton case 'g': 661b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton match_info.GetProcessInfo().SetGroupID (Args::StringToUInt32 (option_arg, UINT32_MAX, 0, &success)); 66224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (!success) 66324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton error.SetErrorStringWithFormat("invalid group ID string: '%s'", option_arg); 66424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton break; 66524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 66624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton case 'G': 66724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton match_info.GetProcessInfo().SetEffectiveGroupID (Args::StringToUInt32 (option_arg, UINT32_MAX, 0, &success)); 66824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton if (!success) 66924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton error.SetErrorStringWithFormat("invalid effective group ID string: '%s'", option_arg); 67024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton break; 67124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 67224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton case 'a': 673f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton match_info.GetProcessInfo().GetArchitecture().SetTriple (option_arg, m_interpreter.GetDebugger().GetPlatformList().GetSelectedPlatform().get()); 67424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton break; 67524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 67624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton case 'n': 677527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton match_info.GetProcessInfo().GetExecutableFile().SetFile (option_arg, false); 678b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton match_info.SetNameMatchType (eNameMatchEquals); 67924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton break; 68024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 68124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton case 'e': 682527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton match_info.GetProcessInfo().GetExecutableFile().SetFile (option_arg, false); 68324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton match_info.SetNameMatchType (eNameMatchEndsWith); 68424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton break; 68524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 68624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton case 's': 687527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton match_info.GetProcessInfo().GetExecutableFile().SetFile (option_arg, false); 68824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton match_info.SetNameMatchType (eNameMatchStartsWith); 68924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton break; 69024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 69124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton case 'c': 692527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton match_info.GetProcessInfo().GetExecutableFile().SetFile (option_arg, false); 69324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton match_info.SetNameMatchType (eNameMatchContains); 69424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton break; 69524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 69624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton case 'r': 697527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton match_info.GetProcessInfo().GetExecutableFile().SetFile (option_arg, false); 69824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton match_info.SetNameMatchType (eNameMatchRegularExpression); 69924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton break; 70024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 701b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton case 'A': 702b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton show_args = true; 703b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton break; 704b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 705b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton case 'v': 706b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton verbose = true; 707b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton break; 708b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 70924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton default: 71024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton error.SetErrorStringWithFormat ("unrecognized option '%c'", short_option); 71124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton break; 71224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 71324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 71424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return error; 71524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 71624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 71724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton void 718143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton OptionParsingStarting () 71924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 72024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton match_info.Clear(); 721b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton show_args = false; 722b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton verbose = false; 72324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 72424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 72524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton const OptionDefinition* 72624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetDefinitions () 72724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 72824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return g_option_table; 72924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 73024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 73124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // Options table: Required for subclasses of Options. 73224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 73324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton static OptionDefinition g_option_table[]; 73424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 73524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // Instance variables to hold the values for command options. 73624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 737b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfoMatch match_info; 738b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton bool show_args; 739b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton bool verbose; 74024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton }; 74124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton CommandOptions m_options; 74224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton}; 74324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 74424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg ClaytonOptionDefinition 74524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg ClaytonCommandObjectPlatformProcessList::CommandOptions::g_option_table[] = 74624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton{ 747cdee761bcdae3ce1b0005b284f89002bce25e956Greg Clayton{ LLDB_OPT_SET_1 , false, "pid" , 'p', required_argument, NULL, 0, eArgTypePid , "List the process info for a specific process ID." }, 748ba9b2ae8ab5bf6c7a41502443cec26a068572df5Greg Clayton{ LLDB_OPT_SET_2 , true , "name" , 'n', required_argument, NULL, 0, eArgTypeProcessName , "Find processes with executable basenames that match a string." }, 749ba9b2ae8ab5bf6c7a41502443cec26a068572df5Greg Clayton{ LLDB_OPT_SET_3 , true , "ends-with" , 'e', required_argument, NULL, 0, eArgTypeProcessName , "Find processes with executable basenames that end with a string." }, 750ba9b2ae8ab5bf6c7a41502443cec26a068572df5Greg Clayton{ LLDB_OPT_SET_4 , true , "starts-with", 's', required_argument, NULL, 0, eArgTypeProcessName , "Find processes with executable basenames that start with a string." }, 751ba9b2ae8ab5bf6c7a41502443cec26a068572df5Greg Clayton{ LLDB_OPT_SET_5 , true , "contains" , 'c', required_argument, NULL, 0, eArgTypeProcessName , "Find processes with executable basenames that contain a string." }, 752ba9b2ae8ab5bf6c7a41502443cec26a068572df5Greg Clayton{ LLDB_OPT_SET_6 , true , "regex" , 'r', required_argument, NULL, 0, eArgTypeRegularExpression, "Find processes with executable basenames that match a regular expression." }, 753ba9b2ae8ab5bf6c7a41502443cec26a068572df5Greg Clayton{ LLDB_OPT_SET_FROM_TO(2, 6), false, "parent" , 'P', required_argument, NULL, 0, eArgTypePid , "Find processes that have a matching parent process ID." }, 754ba9b2ae8ab5bf6c7a41502443cec26a068572df5Greg Clayton{ LLDB_OPT_SET_FROM_TO(2, 6), false, "uid" , 'u', required_argument, NULL, 0, eArgTypeUnsignedInteger , "Find processes that have a matching user ID." }, 755ba9b2ae8ab5bf6c7a41502443cec26a068572df5Greg Clayton{ LLDB_OPT_SET_FROM_TO(2, 6), false, "euid" , 'U', required_argument, NULL, 0, eArgTypeUnsignedInteger , "Find processes that have a matching effective user ID." }, 756ba9b2ae8ab5bf6c7a41502443cec26a068572df5Greg Clayton{ LLDB_OPT_SET_FROM_TO(2, 6), false, "gid" , 'g', required_argument, NULL, 0, eArgTypeUnsignedInteger , "Find processes that have a matching group ID." }, 757ba9b2ae8ab5bf6c7a41502443cec26a068572df5Greg Clayton{ LLDB_OPT_SET_FROM_TO(2, 6), false, "egid" , 'G', required_argument, NULL, 0, eArgTypeUnsignedInteger , "Find processes that have a matching effective group ID." }, 758ba9b2ae8ab5bf6c7a41502443cec26a068572df5Greg Clayton{ LLDB_OPT_SET_FROM_TO(2, 6), false, "arch" , 'a', required_argument, NULL, 0, eArgTypeArchitecture , "Find processes that have a matching architecture." }, 759ba9b2ae8ab5bf6c7a41502443cec26a068572df5Greg Clayton{ LLDB_OPT_SET_FROM_TO(1, 6), false, "show-args" , 'A', no_argument , NULL, 0, eArgTypeNone , "Show process arguments instead of the process executable basename." }, 760ba9b2ae8ab5bf6c7a41502443cec26a068572df5Greg Clayton{ LLDB_OPT_SET_FROM_TO(1, 6), false, "verbose" , 'v', no_argument , NULL, 0, eArgTypeNone , "Enable verbose output." }, 761ba9b2ae8ab5bf6c7a41502443cec26a068572df5Greg Clayton{ 0 , false, NULL , 0 , 0 , NULL, 0, eArgTypeNone , NULL } 76224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton}; 76324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 764ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton//---------------------------------------------------------------------- 765ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton// "platform process info" 766ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton//---------------------------------------------------------------------- 767da26bd203cbb104291b39891febf7481794f205fJim Inghamclass CommandObjectPlatformProcessInfo : public CommandObjectParsed 768ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton{ 769ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Claytonpublic: 770ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton CommandObjectPlatformProcessInfo (CommandInterpreter &interpreter) : 771da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandObjectParsed (interpreter, 772da26bd203cbb104291b39891febf7481794f205fJim Ingham "platform process info", 773da26bd203cbb104291b39891febf7481794f205fJim Ingham "Get detailed information for one or more process by process ID.", 774da26bd203cbb104291b39891febf7481794f205fJim Ingham "platform process info <pid> [<pid> <pid> ...]", 775da26bd203cbb104291b39891febf7481794f205fJim Ingham 0) 776ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 777ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton CommandArgumentEntry arg; 778ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton CommandArgumentData pid_args; 779ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton 780ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton // Define the first (and only) variant of this arg. 781ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton pid_args.arg_type = eArgTypePid; 782ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton pid_args.arg_repetition = eArgRepeatStar; 783ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton 784ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton // There is only one variant this argument could be; put it into the argument entry. 785ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton arg.push_back (pid_args); 786ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton 787ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton // Push the data for the first argument into the m_arguments vector. 788ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton m_arguments.push_back (arg); 789ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 790ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton 791ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton virtual 792ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton ~CommandObjectPlatformProcessInfo () 793ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 794ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 795ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton 796da26bd203cbb104291b39891febf7481794f205fJim Inghamprotected: 797ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton virtual bool 798da26bd203cbb104291b39891febf7481794f205fJim Ingham DoExecute (Args& args, CommandReturnObject &result) 799ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 80032949387a93392818418fab844c274877ac68c0fJason Molenda Target *target = m_interpreter.GetDebugger().GetSelectedTarget().get(); 80132949387a93392818418fab844c274877ac68c0fJason Molenda PlatformSP platform_sp; 80232949387a93392818418fab844c274877ac68c0fJason Molenda if (target) 80332949387a93392818418fab844c274877ac68c0fJason Molenda { 80432949387a93392818418fab844c274877ac68c0fJason Molenda platform_sp = target->GetPlatform(); 80532949387a93392818418fab844c274877ac68c0fJason Molenda } 80632949387a93392818418fab844c274877ac68c0fJason Molenda if (!platform_sp) 80732949387a93392818418fab844c274877ac68c0fJason Molenda { 80832949387a93392818418fab844c274877ac68c0fJason Molenda platform_sp = m_interpreter.GetDebugger().GetPlatformList().GetSelectedPlatform(); 80932949387a93392818418fab844c274877ac68c0fJason Molenda } 81032949387a93392818418fab844c274877ac68c0fJason Molenda 811ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton if (platform_sp) 812ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 813ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton const size_t argc = args.GetArgumentCount(); 814ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton if (argc > 0) 815ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 816ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton Error error; 817ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton 818ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton if (platform_sp->IsConnected()) 819ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 820ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton Stream &ostrm = result.GetOutputStream(); 821ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton bool success; 822ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton for (size_t i=0; i<argc; ++ i) 823ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 824ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton const char *arg = args.GetArgumentAtIndex(i); 825ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton lldb::pid_t pid = Args::StringToUInt32 (arg, LLDB_INVALID_PROCESS_ID, 0, &success); 826ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton if (success) 827ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 828b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ProcessInstanceInfo proc_info; 829ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton if (platform_sp->GetProcessInfo (pid, proc_info)) 830ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 8315f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea ostrm.Printf ("Process information for process %" PRIu64 ":\n", pid); 832ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton proc_info.Dump (ostrm, platform_sp.get()); 833ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 834ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton else 835ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 8365f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea ostrm.Printf ("error: no process information is available for process %" PRIu64 "\n", pid); 837ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 838ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton ostrm.EOL(); 839ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 840ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton else 841ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 842ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton result.AppendErrorWithFormat ("invalid process ID argument '%s'", arg); 843ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton result.SetStatus (eReturnStatusFailed); 844ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton break; 845ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 846ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 847ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 848ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton else 849ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 850ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton // Not connected... 8510e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton result.AppendErrorWithFormat ("not connected to '%s'", platform_sp->GetPluginName().GetCString()); 852ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton result.SetStatus (eReturnStatusFailed); 853ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 854ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 855ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton else 856ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 8571736fef549879eae6c62f065b3272871a0cbc243Johnny Chen // No args 8581736fef549879eae6c62f065b3272871a0cbc243Johnny Chen result.AppendError ("one or more process id(s) must be specified"); 859ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton result.SetStatus (eReturnStatusFailed); 860ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 861ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 862ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton else 863ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton { 864ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton result.AppendError ("no platform is currently selected"); 865ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton result.SetStatus (eReturnStatusFailed); 866ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 867ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton return result.Succeeded(); 868ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton } 869ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton}; 870ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton 871ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton 872ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton 873ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton 87424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Claytonclass CommandObjectPlatformProcess : public CommandObjectMultiword 87524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton{ 87624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Claytonpublic: 87724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton //------------------------------------------------------------------ 87824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // Constructors and Destructors 87924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton //------------------------------------------------------------------ 88024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton CommandObjectPlatformProcess (CommandInterpreter &interpreter) : 88124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton CommandObjectMultiword (interpreter, 88224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton "platform process", 88324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton "A set of commands to query, launch and attach to platform processes", 88424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton "platform process [attach|launch|list] ...") 88524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 88624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton// LoadSubCommand ("attach", CommandObjectSP (new CommandObjectPlatformProcessAttach (interpreter))); 887b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton LoadSubCommand ("launch", CommandObjectSP (new CommandObjectPlatformProcessLaunch (interpreter))); 888ff39f746ebaa3710c44ba49bd9b0a6cf05f60a3fGreg Clayton LoadSubCommand ("info" , CommandObjectSP (new CommandObjectPlatformProcessInfo (interpreter))); 88924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton LoadSubCommand ("list" , CommandObjectSP (new CommandObjectPlatformProcessList (interpreter))); 89024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 89124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 89224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 89324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual 89424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton ~CommandObjectPlatformProcess () 89524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 89624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 89724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 89824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Claytonprivate: 89924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton //------------------------------------------------------------------ 90024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // For CommandObjectPlatform only 90124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton //------------------------------------------------------------------ 90224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton DISALLOW_COPY_AND_ASSIGN (CommandObjectPlatformProcess); 90324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton}; 904b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 90597471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton 906da26bd203cbb104291b39891febf7481794f205fJim Inghamclass CommandObjectPlatformShell : public CommandObjectRaw 90797471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton{ 90897471184b8823c949bc68bbf54ea3edf3845a750Greg Claytonpublic: 90997471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton CommandObjectPlatformShell (CommandInterpreter &interpreter) : 910da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandObjectRaw (interpreter, 911da26bd203cbb104291b39891febf7481794f205fJim Ingham "platform shell", 912da26bd203cbb104291b39891febf7481794f205fJim Ingham "Run a shell command on a the selected platform.", 913da26bd203cbb104291b39891febf7481794f205fJim Ingham "platform shell <shell-command>", 914da26bd203cbb104291b39891febf7481794f205fJim Ingham 0) 91597471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton { 91697471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton } 91797471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton 91897471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton virtual 91997471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton ~CommandObjectPlatformShell () 92097471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton { 92197471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton } 92297471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton 923da26bd203cbb104291b39891febf7481794f205fJim Inghamprotected: 92497471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton virtual bool 925da26bd203cbb104291b39891febf7481794f205fJim Ingham DoExecute (const char *raw_command_line, CommandReturnObject &result) 92697471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton { 92797471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton // TODO: Implement "Platform::RunShellCommand()" and switch over to using 92897471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton // the current platform when it is in the interface. 92997471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton const char *working_dir = NULL; 93097471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton std::string output; 93197471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton int status = -1; 93297471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton int signo = -1; 93397471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton Error error (Host::RunShellCommand (raw_command_line, working_dir, &status, &signo, &output, 10)); 93497471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton if (!output.empty()) 93597471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton result.GetOutputStream().PutCString(output.c_str()); 93697471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton if (status > 0) 93797471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton { 93897471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton if (signo > 0) 93997471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton { 94097471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton const char *signo_cstr = Host::GetSignalAsCString(signo); 94197471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton if (signo_cstr) 94297471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton result.GetOutputStream().Printf("error: command returned with status %i and signal %s\n", status, signo_cstr); 94397471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton else 94497471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton result.GetOutputStream().Printf("error: command returned with status %i and signal %i\n", status, signo); 94597471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton } 94697471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton else 94797471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton result.GetOutputStream().Printf("error: command returned with status %i\n", status); 94897471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton } 94997471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton 95097471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton if (error.Fail()) 95197471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton { 95297471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton result.AppendError(error.AsCString()); 95397471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton result.SetStatus (eReturnStatusFailed); 95497471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton } 95597471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton else 95697471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton { 95797471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton result.SetStatus (eReturnStatusSuccessFinishResult); 95897471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton } 95997471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton return true; 96097471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton } 96197471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton}; 96297471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton 963b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//---------------------------------------------------------------------- 964b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// CommandObjectPlatform constructor 965b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//---------------------------------------------------------------------- 966b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonCommandObjectPlatform::CommandObjectPlatform(CommandInterpreter &interpreter) : 967b1888f24fa181489840b9acf193e224d125d0776Greg Clayton CommandObjectMultiword (interpreter, 968b1888f24fa181489840b9acf193e224d125d0776Greg Clayton "platform", 969b1888f24fa181489840b9acf193e224d125d0776Greg Clayton "A set of commands to manage and create platforms.", 970143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton "platform [connect|disconnect|info|list|status|select] ...") 971b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 972b1888f24fa181489840b9acf193e224d125d0776Greg Clayton LoadSubCommand ("select", CommandObjectSP (new CommandObjectPlatformSelect (interpreter))); 973143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton LoadSubCommand ("list" , CommandObjectSP (new CommandObjectPlatformList (interpreter))); 974b1888f24fa181489840b9acf193e224d125d0776Greg Clayton LoadSubCommand ("status", CommandObjectSP (new CommandObjectPlatformStatus (interpreter))); 975cb8977d726be451df9978a74088435667fa37da2Greg Clayton LoadSubCommand ("connect", CommandObjectSP (new CommandObjectPlatformConnect (interpreter))); 976cb8977d726be451df9978a74088435667fa37da2Greg Clayton LoadSubCommand ("disconnect", CommandObjectSP (new CommandObjectPlatformDisconnect (interpreter))); 97724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton LoadSubCommand ("process", CommandObjectSP (new CommandObjectPlatformProcess (interpreter))); 97897471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton LoadSubCommand ("shell", CommandObjectSP (new CommandObjectPlatformShell (interpreter))); 979b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 980b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 981b1888f24fa181489840b9acf193e224d125d0776Greg Clayton 982b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//---------------------------------------------------------------------- 983b1888f24fa181489840b9acf193e224d125d0776Greg Clayton// Destructor 984b1888f24fa181489840b9acf193e224d125d0776Greg Clayton//---------------------------------------------------------------------- 985b1888f24fa181489840b9acf193e224d125d0776Greg ClaytonCommandObjectPlatform::~CommandObjectPlatform() 986b1888f24fa181489840b9acf193e224d125d0776Greg Clayton{ 987b1888f24fa181489840b9acf193e224d125d0776Greg Clayton} 988