124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- CommandObject.cpp ---------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea#include "lldb/lldb-python.h" 11d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Interpreter/CommandObject.h" 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <string> 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <map> 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <getopt.h> 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <stdlib.h> 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <ctype.h> 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Address.h" 22746323a3deff83edfc0cfd60aab136d43a78b7c8Johnny Chen#include "lldb/Core/ArchSpec.h" 2384cdc15005983e5244d665fa779e33c2b6fac95fJim Ingham#include "lldb/Interpreter/Options.h" 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// These are for the Sourcename completers. 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// FIXME: Make a separate file for the completers. 275f54ac373b119a4c6693e4875c48aa761fba0c86Greg Clayton#include "lldb/Host/FileSpec.h" 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/FileSpecList.h" 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Process.h" 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Target.h" 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Interpreter/CommandInterpreter.h" 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Interpreter/CommandReturnObject.h" 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Interpreter/ScriptInterpreter.h" 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Interpreter/ScriptInterpreterPython.h" 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb; 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private; 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//------------------------------------------------------------------------- 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CommandObject 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//------------------------------------------------------------------------- 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 44238c0a1e7b733cee539258faa656159c63f9e893Greg ClaytonCommandObject::CommandObject 45238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton( 46238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton CommandInterpreter &interpreter, 47238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton const char *name, 48238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton const char *help, 49238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton const char *syntax, 50238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton uint32_t flags 51238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton) : 52238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton m_interpreter (interpreter), 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_cmd_name (name), 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_cmd_help_short (), 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_cmd_help_long (), 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_cmd_syntax (), 57d40f8a68b49a43264ff41a0f0ef51bef6372e8b3Jim Ingham m_is_alias (false), 58fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice m_flags (flags), 59f125250ba7bcaa2ea5ee95539a309e3fd2f8b5d7Greg Clayton m_arguments(), 60f125250ba7bcaa2ea5ee95539a309e3fd2f8b5d7Greg Clayton m_command_override_callback (NULL), 61f125250ba7bcaa2ea5ee95539a309e3fd2f8b5d7Greg Clayton m_command_override_baton (NULL) 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (help && help[0]) 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_cmd_help_short = help; 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (syntax && syntax[0]) 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_cmd_syntax = syntax; 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObject::~CommandObject () 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst char * 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObject::GetHelp () 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_cmd_help_short.c_str(); 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst char * 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObject::GetHelpLong () 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_cmd_help_long.c_str(); 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst char * 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObject::GetSyntax () 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 88fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice if (m_cmd_syntax.length() == 0) 89fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice { 90fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice StreamString syntax_str; 91fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice syntax_str.Printf ("%s", GetCommandName()); 92fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice if (GetOptions() != NULL) 9343b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice syntax_str.Printf (" <cmd-options>"); 94fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice if (m_arguments.size() > 0) 95fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice { 96fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice syntax_str.Printf (" "); 97c3580681c3876a323ea1b02c3dc9dde390cabfdfEnrico Granata if (WantsRawCommandString() && GetOptions() && GetOptions()->NumCommandOptions()) 989798d7b0999b189d9ba64c4f1c9c635bdfda9a7bSean Callanan syntax_str.Printf("-- "); 99fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice GetFormattedCommandArguments (syntax_str); 100fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice } 101fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice m_cmd_syntax = syntax_str.GetData (); 102fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice } 103fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_cmd_syntax.c_str(); 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst char * 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObject::GetCommandName () 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_cmd_name.c_str(); 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObject::SetCommandName (const char *name) 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_cmd_name = name; 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObject::SetHelp (const char *cstr) 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_cmd_help_short = cstr; 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObject::SetHelpLong (const char *cstr) 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_cmd_help_long = cstr; 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 132e5e34cb15f031237004b05abfa623c71f879f6c0Enrico GranataCommandObject::SetHelpLong (std::string str) 133e5e34cb15f031237004b05abfa623c71f879f6c0Enrico Granata{ 134e5e34cb15f031237004b05abfa623c71f879f6c0Enrico Granata m_cmd_help_long = str; 135e5e34cb15f031237004b05abfa623c71f879f6c0Enrico Granata} 136e5e34cb15f031237004b05abfa623c71f879f6c0Enrico Granata 137e5e34cb15f031237004b05abfa623c71f879f6c0Enrico Granatavoid 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObject::SetSyntax (const char *cstr) 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_cmd_syntax = cstr; 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerOptions * 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObject::GetOptions () 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // By default commands don't have options unless this virtual function 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // is overridden by base classes. 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return NULL; 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObject::ParseOptions 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner( 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Args& args, 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandReturnObject &result 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner) 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // See if the subclass has options? 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Options *options = GetOptions(); 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (options != NULL) 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Error error; 163143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton options->NotifyOptionParsingStarting(); 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1653f2f741bb533b78e2fac5332c4698338ea2fd3acGreg Clayton // ParseOptions calls getopt_long_only, which always skips the zero'th item in the array and starts at position 1, 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // so we need to push a dummy value into position zero. 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner args.Unshift("dummy_string"); 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner error = args.ParseOptions (*options); 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // The "dummy_string" will have already been removed by ParseOptions, 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // so no need to remove it. 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 173143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton if (error.Success()) 174143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton error = options->NotifyOptionParsingFinished(); 175143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton 176143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton if (error.Success()) 177143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton { 178143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton if (options->VerifyOptions (result)) 179143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton return true; 180143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton } 181143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton else 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *error_cstr = error.AsCString(); 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (error_cstr) 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // We got an error string, lets use that 1879c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton result.AppendError(error_cstr); 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // No error string, output the usage information into result 192f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton options->GenerateOptionUsage (result.GetErrorStream(), this); 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 195143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton result.SetStatus (eReturnStatusFailed); 196143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton return false; 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return true; 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 200da26bd203cbb104291b39891febf7481794f205fJim Ingham 201da26bd203cbb104291b39891febf7481794f205fJim Ingham 202da26bd203cbb104291b39891febf7481794f205fJim Ingham 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 204ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg ClaytonCommandObject::CheckRequirements (CommandReturnObject &result) 205ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton{ 206ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton#ifdef LLDB_CONFIGURATION_DEBUG 207ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton // Nothing should be stored in m_exe_ctx between running commands as m_exe_ctx 208ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton // has shared pointers to the target, process, thread and frame and we don't 209ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton // want any CommandObject instances to keep any of these objects around 210ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton // longer than for a single command. Every command should call 211ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton // CommandObject::Cleanup() after it has completed 212ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton assert (m_exe_ctx.GetTargetPtr() == NULL); 213ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton assert (m_exe_ctx.GetProcessPtr() == NULL); 214ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton assert (m_exe_ctx.GetThreadPtr() == NULL); 215ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton assert (m_exe_ctx.GetFramePtr() == NULL); 216ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton#endif 217ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton 218ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton // Lock down the interpreter's execution context prior to running the 219ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton // command so we guarantee the selected target, process, thread and frame 220ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton // can't go away during the execution 221ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton m_exe_ctx = m_interpreter.GetExecutionContext(); 222ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton 223ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton const uint32_t flags = GetFlags().Get(); 224ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton if (flags & (eFlagRequiresTarget | 225ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton eFlagRequiresProcess | 226ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton eFlagRequiresThread | 227ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton eFlagRequiresFrame | 228ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton eFlagTryTargetAPILock )) 229ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton { 230ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton 231ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton if ((flags & eFlagRequiresTarget) && !m_exe_ctx.HasTargetScope()) 232ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton { 233ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton result.AppendError (GetInvalidTargetDescription()); 234ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton return false; 235ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton } 236ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton 237ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton if ((flags & eFlagRequiresProcess) && !m_exe_ctx.HasProcessScope()) 238ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton { 239ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton result.AppendError (GetInvalidProcessDescription()); 240ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton return false; 241ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton } 242ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton 243ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton if ((flags & eFlagRequiresThread) && !m_exe_ctx.HasThreadScope()) 244ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton { 245ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton result.AppendError (GetInvalidThreadDescription()); 246ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton return false; 247ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton } 248ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton 249ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton if ((flags & eFlagRequiresFrame) && !m_exe_ctx.HasFrameScope()) 250ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton { 251ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton result.AppendError (GetInvalidFrameDescription()); 252ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton return false; 253ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton } 254ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton 255ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton if ((flags & eFlagRequiresRegContext) && (m_exe_ctx.GetRegisterContext() == NULL)) 256ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton { 257ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton result.AppendError (GetInvalidRegContextDescription()); 258ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton return false; 259ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton } 260ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton 261ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton if (flags & eFlagTryTargetAPILock) 262ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton { 263ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton Target *target = m_exe_ctx.GetTargetPtr(); 264ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton if (target) 265ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton { 266ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton if (m_api_locker.TryLock (target->GetAPIMutex(), NULL) == false) 267ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton { 268ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton result.AppendError ("failed to get API lock"); 269ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton return false; 270ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton } 271ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton } 272ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton } 273ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton } 274ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton 275e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton if (GetFlags().AnySet (CommandObject::eFlagProcessMustBeLaunched | CommandObject::eFlagProcessMustBePaused)) 27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 277567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton Process *process = m_interpreter.GetExecutionContext().GetProcessPtr(); 278e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton if (process == NULL) 27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 2808cc3f6977c8401769aab07b19ea84d87c018113bJim Ingham // A process that is not running is considered paused. 2818cc3f6977c8401769aab07b19ea84d87c018113bJim Ingham if (GetFlags().Test(CommandObject::eFlagProcessMustBeLaunched)) 2828cc3f6977c8401769aab07b19ea84d87c018113bJim Ingham { 2838cc3f6977c8401769aab07b19ea84d87c018113bJim Ingham result.AppendError ("Process must exist."); 2848cc3f6977c8401769aab07b19ea84d87c018113bJim Ingham result.SetStatus (eReturnStatusFailed); 2858cc3f6977c8401769aab07b19ea84d87c018113bJim Ingham return false; 2868cc3f6977c8401769aab07b19ea84d87c018113bJim Ingham } 28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 288e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton else 28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 290e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton StateType state = process->GetState(); 291e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton switch (state) 29224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 2934fdf7602bedd8be648f3c549074cf13d90a05f03Greg Clayton case eStateInvalid: 294e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton case eStateSuspended: 295e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton case eStateCrashed: 296e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton case eStateStopped: 297e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton break; 298e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton 299e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton case eStateConnected: 300e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton case eStateAttaching: 301e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton case eStateLaunching: 302e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton case eStateDetached: 303e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton case eStateExited: 304e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton case eStateUnloaded: 305e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton if (GetFlags().Test(CommandObject::eFlagProcessMustBeLaunched)) 306e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton { 307e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton result.AppendError ("Process must be launched."); 308e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton result.SetStatus (eReturnStatusFailed); 309e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton return false; 310e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton } 311e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton break; 312e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton 313e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton case eStateRunning: 314e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton case eStateStepping: 315e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton if (GetFlags().Test(CommandObject::eFlagProcessMustBePaused)) 316e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton { 317e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton result.AppendError ("Process is running. Use 'process interrupt' to pause execution."); 318e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton result.SetStatus (eReturnStatusFailed); 319e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton return false; 320e71e258286a1713dbb2d366d8b81ff2f28e0216fGreg Clayton } 32124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 32224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 32324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 324da26bd203cbb104291b39891febf7481794f205fJim Ingham return true; 32524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 32624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 327ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Claytonvoid 328ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg ClaytonCommandObject::Cleanup () 329ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton{ 330ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton m_exe_ctx.Clear(); 331ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton m_api_locker.Unlock(); 332ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton} 333ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton 334ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton 33524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass CommandDictCommandPartialMatch 33624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public: 33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandDictCommandPartialMatch (const char *match_str) 33924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 34024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_match_str = match_str; 34124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 34224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool operator() (const std::pair<std::string, lldb::CommandObjectSP> map_element) const 34324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 34424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // A NULL or empty string matches everything. 34524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (m_match_str == NULL || *m_match_str == '\0') 34636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton return true; 34724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 34836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton return map_element.first.find (m_match_str, 0) == 0; 34924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 35024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 35124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner private: 35224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *m_match_str; 35324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 35424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 35524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerint 35624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObject::AddNamesMatchingPartialString (CommandObject::CommandMap &in_map, const char *cmd_str, 35724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StringList &matches) 35824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 35924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int number_added = 0; 36024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandDictCommandPartialMatch matcher(cmd_str); 36124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 36224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandObject::CommandMap::iterator matching_cmds = std::find_if (in_map.begin(), in_map.end(), matcher); 36324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 36424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner while (matching_cmds != in_map.end()) 36524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 36624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ++number_added; 36724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner matches.AppendString((*matching_cmds).first.c_str()); 36824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner matching_cmds = std::find_if (++matching_cmds, in_map.end(), matcher);; 36924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 37024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return number_added; 37124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 37224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 37324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerint 37424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObject::HandleCompletion 37524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner( 37624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Args &input, 37724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int &cursor_index, 37824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int &cursor_char_position, 37924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int match_start_point, 38024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int max_return_elements, 381802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham bool &word_complete, 38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StringList &matches 38324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner) 38424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3858042eedf450752196b1ae347400f6a0bb9a2c729Johnny Chen // Default implmentation of WantsCompletion() is !WantsRawCommandString(). 3868042eedf450752196b1ae347400f6a0bb9a2c729Johnny Chen // Subclasses who want raw command string but desire, for example, 3878042eedf450752196b1ae347400f6a0bb9a2c729Johnny Chen // argument completion should override WantsCompletion() to return true, 3888042eedf450752196b1ae347400f6a0bb9a2c729Johnny Chen // instead. 389120d94de65fd5979f885768c8ddeada63897c9baJohnny Chen if (WantsRawCommandString() && !WantsCompletion()) 39024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 39124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // FIXME: Abstract telling the completion to insert the completion character. 39224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner matches.Clear(); 39324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return -1; 39424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 39524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 39624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 39724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Can we do anything generic with the options? 39824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Options *cur_options = GetOptions(); 39924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandReturnObject result; 40024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner OptionElementVector opt_element_vector; 40124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 40224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (cur_options != NULL) 40324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 40424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Re-insert the dummy command name string which will have been 40524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // stripped off: 40624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner input.Unshift ("dummy-string"); 40724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner cursor_index++; 40824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 40924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 41024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // I stick an element on the end of the input, because if the last element is 4113f2f741bb533b78e2fac5332c4698338ea2fd3acGreg Clayton // option that requires an argument, getopt_long_only will freak out. 41224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 41324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner input.AppendArgument ("<FAKE-VALUE>"); 41424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 415adb8429ff57c3d54300dd6a8a1ed993d655c1931Jim Ingham input.ParseArgsForCompletion (*cur_options, opt_element_vector, cursor_index); 41624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 41724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner input.DeleteArgumentAtIndex(input.GetArgumentCount() - 1); 41824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 41924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool handled_by_options; 420f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton handled_by_options = cur_options->HandleOptionCompletion (input, 42163094e0bb161580564954dee512955c1c79d3476Greg Clayton opt_element_vector, 42263094e0bb161580564954dee512955c1c79d3476Greg Clayton cursor_index, 42363094e0bb161580564954dee512955c1c79d3476Greg Clayton cursor_char_position, 42463094e0bb161580564954dee512955c1c79d3476Greg Clayton match_start_point, 42563094e0bb161580564954dee512955c1c79d3476Greg Clayton max_return_elements, 426802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham word_complete, 42763094e0bb161580564954dee512955c1c79d3476Greg Clayton matches); 42824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (handled_by_options) 42924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return matches.GetSize(); 43024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 43124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 43224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // If we got here, the last word is not an option or an option argument. 433238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton return HandleArgumentCompletion (input, 43463094e0bb161580564954dee512955c1c79d3476Greg Clayton cursor_index, 43563094e0bb161580564954dee512955c1c79d3476Greg Clayton cursor_char_position, 43663094e0bb161580564954dee512955c1c79d3476Greg Clayton opt_element_vector, 43763094e0bb161580564954dee512955c1c79d3476Greg Clayton match_start_point, 43863094e0bb161580564954dee512955c1c79d3476Greg Clayton max_return_elements, 439802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham word_complete, 44063094e0bb161580564954dee512955c1c79d3476Greg Clayton matches); 44124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 44224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 44324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 44424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 445238c0a1e7b733cee539258faa656159c63f9e893Greg ClaytonCommandObject::HelpTextContainsWord (const char *search_word) 44624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 44724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner std::string options_usage_help; 44824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 44924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool found_word = false; 45024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 45113193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton const char *short_help = GetHelp(); 45213193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton const char *long_help = GetHelpLong(); 45313193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton const char *syntax_help = GetSyntax(); 45424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 45513193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton if (short_help && strcasestr (short_help, search_word)) 45624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner found_word = true; 45713193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton else if (long_help && strcasestr (long_help, search_word)) 45824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner found_word = true; 45913193d5ae15f194102c14a5ccdc46e8db5c3d95fGreg Clayton else if (syntax_help && strcasestr (syntax_help, search_word)) 46024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner found_word = true; 46124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 46224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (!found_word 46324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner && GetOptions() != NULL) 46424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 46524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner StreamString usage_help; 466f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton GetOptions()->GenerateOptionUsage (usage_help, this); 46724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (usage_help.GetSize() > 0) 46824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 46924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *usage_text = usage_help.GetData(); 4703439178f12feba0e4ef31865051361664c9a80a1Caroline Tice if (strcasestr (usage_text, search_word)) 47124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner found_word = true; 47224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 47324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 47424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 47524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return found_word; 47624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 477fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 478fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Ticeint 479fb355113cef81a6fa56b468bec7798a24d027b6dCaroline TiceCommandObject::GetNumArgumentEntries () 480fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice{ 481fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice return m_arguments.size(); 482fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice} 483fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 484fb355113cef81a6fa56b468bec7798a24d027b6dCaroline TiceCommandObject::CommandArgumentEntry * 485fb355113cef81a6fa56b468bec7798a24d027b6dCaroline TiceCommandObject::GetArgumentEntryAtIndex (int idx) 486fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice{ 487fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice if (idx < m_arguments.size()) 488fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice return &(m_arguments[idx]); 489fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 490fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice return NULL; 491fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice} 492fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 493fb355113cef81a6fa56b468bec7798a24d027b6dCaroline TiceCommandObject::ArgumentTableEntry * 494fb355113cef81a6fa56b468bec7798a24d027b6dCaroline TiceCommandObject::FindArgumentDataByType (CommandArgumentType arg_type) 495fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice{ 496fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice const ArgumentTableEntry *table = CommandObject::GetArgumentTable(); 497fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 498fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice for (int i = 0; i < eArgTypeLastArg; ++i) 499fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice if (table[i].arg_type == arg_type) 500fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice return (ArgumentTableEntry *) &(table[i]); 501fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 502fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice return NULL; 503fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice} 504fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 505fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Ticevoid 506fb355113cef81a6fa56b468bec7798a24d027b6dCaroline TiceCommandObject::GetArgumentHelp (Stream &str, CommandArgumentType arg_type, CommandInterpreter &interpreter) 507fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice{ 508fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice const ArgumentTableEntry* table = CommandObject::GetArgumentTable(); 509fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice ArgumentTableEntry *entry = (ArgumentTableEntry *) &(table[arg_type]); 510fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 511fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice // The table is *supposed* to be kept in arg_type order, but someone *could* have messed it up... 512fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 513fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice if (entry->arg_type != arg_type) 514fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice entry = CommandObject::FindArgumentDataByType (arg_type); 515fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 516fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice if (!entry) 517fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice return; 518fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 519fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice StreamString name_str; 520fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice name_str.Printf ("<%s>", entry->arg_name); 521fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 522ff78238a2ebc66a683dded02c2f99fba85077d05Enrico Granata if (entry->help_function) 5231bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata { 524ff78238a2ebc66a683dded02c2f99fba85077d05Enrico Granata const char* help_text = entry->help_function(); 5251bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata if (!entry->help_function.self_formatting) 5261bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata { 5271bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata interpreter.OutputFormattedHelpText (str, name_str.GetData(), "--", help_text, 5281bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata name_str.GetSize()); 5291bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata } 5301bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata else 5311bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata { 5321bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata interpreter.OutputHelpText(str, name_str.GetData(), "--", help_text, 5331bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata name_str.GetSize()); 5341bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata } 5351bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata } 536fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice else 537fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice interpreter.OutputFormattedHelpText (str, name_str.GetData(), "--", entry->help_text, name_str.GetSize()); 538fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice} 539fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 540fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Ticeconst char * 541fb355113cef81a6fa56b468bec7798a24d027b6dCaroline TiceCommandObject::GetArgumentName (CommandArgumentType arg_type) 542fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice{ 5434d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice ArgumentTableEntry *entry = (ArgumentTableEntry *) &(CommandObject::GetArgumentTable()[arg_type]); 5444d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice 5454d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice // The table is *supposed* to be kept in arg_type order, but someone *could* have messed it up... 5464d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice 5474d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice if (entry->arg_type != arg_type) 5484d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice entry = CommandObject::FindArgumentDataByType (arg_type); 5494d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice 55025ca984eabbf6a8004d0440968fd18d19ddeb814Johnny Chen if (entry) 55125ca984eabbf6a8004d0440968fd18d19ddeb814Johnny Chen return entry->arg_name; 55225ca984eabbf6a8004d0440968fd18d19ddeb814Johnny Chen 55325ca984eabbf6a8004d0440968fd18d19ddeb814Johnny Chen StreamString str; 55425ca984eabbf6a8004d0440968fd18d19ddeb814Johnny Chen str << "Arg name for type (" << arg_type << ") not in arg table!"; 55525ca984eabbf6a8004d0440968fd18d19ddeb814Johnny Chen return str.GetData(); 556fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice} 557fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 55843b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Ticebool 559b344843f75ef893762c93fd0a22d2d45712ce74dGreg ClaytonCommandObject::IsPairType (ArgumentRepetitionType arg_repeat_type) 56043b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice{ 56143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice if ((arg_repeat_type == eArgRepeatPairPlain) 56243b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice || (arg_repeat_type == eArgRepeatPairOptional) 56343b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice || (arg_repeat_type == eArgRepeatPairPlus) 56443b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice || (arg_repeat_type == eArgRepeatPairStar) 56543b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice || (arg_repeat_type == eArgRepeatPairRange) 56643b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice || (arg_repeat_type == eArgRepeatPairRangeOptional)) 56743b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice return true; 56843b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 56943b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice return false; 57043b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice} 57143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 5726183fccd61b67e814d9e7e85b25516a28edfe864Johnny Chenstatic CommandObject::CommandArgumentEntry 5736183fccd61b67e814d9e7e85b25516a28edfe864Johnny ChenOptSetFiltered(uint32_t opt_set_mask, CommandObject::CommandArgumentEntry &cmd_arg_entry) 5746183fccd61b67e814d9e7e85b25516a28edfe864Johnny Chen{ 5756183fccd61b67e814d9e7e85b25516a28edfe864Johnny Chen CommandObject::CommandArgumentEntry ret_val; 5766183fccd61b67e814d9e7e85b25516a28edfe864Johnny Chen for (unsigned i = 0; i < cmd_arg_entry.size(); ++i) 5776183fccd61b67e814d9e7e85b25516a28edfe864Johnny Chen if (opt_set_mask & cmd_arg_entry[i].arg_opt_set_association) 5786183fccd61b67e814d9e7e85b25516a28edfe864Johnny Chen ret_val.push_back(cmd_arg_entry[i]); 5796183fccd61b67e814d9e7e85b25516a28edfe864Johnny Chen return ret_val; 5806183fccd61b67e814d9e7e85b25516a28edfe864Johnny Chen} 5816183fccd61b67e814d9e7e85b25516a28edfe864Johnny Chen 5826183fccd61b67e814d9e7e85b25516a28edfe864Johnny Chen// Default parameter value of opt_set_mask is LLDB_OPT_SET_ALL, which means take 5836183fccd61b67e814d9e7e85b25516a28edfe864Johnny Chen// all the argument data into account. On rare cases where some argument sticks 5846183fccd61b67e814d9e7e85b25516a28edfe864Johnny Chen// with certain option sets, this function returns the option set filtered args. 585fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Ticevoid 5866183fccd61b67e814d9e7e85b25516a28edfe864Johnny ChenCommandObject::GetFormattedCommandArguments (Stream &str, uint32_t opt_set_mask) 587fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice{ 588fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice int num_args = m_arguments.size(); 589fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice for (int i = 0; i < num_args; ++i) 590fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice { 591fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice if (i > 0) 592fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice str.Printf (" "); 5936183fccd61b67e814d9e7e85b25516a28edfe864Johnny Chen CommandArgumentEntry arg_entry = 5946183fccd61b67e814d9e7e85b25516a28edfe864Johnny Chen opt_set_mask == LLDB_OPT_SET_ALL ? m_arguments[i] 5956183fccd61b67e814d9e7e85b25516a28edfe864Johnny Chen : OptSetFiltered(opt_set_mask, m_arguments[i]); 596fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice int num_alternatives = arg_entry.size(); 59743b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 59843b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice if ((num_alternatives == 2) 59943b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice && IsPairType (arg_entry[0].arg_repetition)) 600fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice { 60143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice const char *first_name = GetArgumentName (arg_entry[0].arg_type); 60243b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice const char *second_name = GetArgumentName (arg_entry[1].arg_type); 60343b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice switch (arg_entry[0].arg_repetition) 60443b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice { 60543b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice case eArgRepeatPairPlain: 60643b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice str.Printf ("<%s> <%s>", first_name, second_name); 60743b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice break; 60843b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice case eArgRepeatPairOptional: 60943b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice str.Printf ("[<%s> <%s>]", first_name, second_name); 61043b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice break; 61143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice case eArgRepeatPairPlus: 61243b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice str.Printf ("<%s> <%s> [<%s> <%s> [...]]", first_name, second_name, first_name, second_name); 61343b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice break; 61443b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice case eArgRepeatPairStar: 61543b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice str.Printf ("[<%s> <%s> [<%s> <%s> [...]]]", first_name, second_name, first_name, second_name); 61643b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice break; 61743b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice case eArgRepeatPairRange: 61843b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice str.Printf ("<%s_1> <%s_1> ... <%s_n> <%s_n>", first_name, second_name, first_name, second_name); 61943b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice break; 62043b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice case eArgRepeatPairRangeOptional: 62143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice str.Printf ("[<%s_1> <%s_1> ... <%s_n> <%s_n>]", first_name, second_name, first_name, second_name); 62243b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice break; 623b5772848dfcbce2d05815d0a5878a6dfe147c9fcCaroline Tice // Explicitly test for all the rest of the cases, so if new types get added we will notice the 624b5772848dfcbce2d05815d0a5878a6dfe147c9fcCaroline Tice // missing case statement(s). 625b5772848dfcbce2d05815d0a5878a6dfe147c9fcCaroline Tice case eArgRepeatPlain: 626b5772848dfcbce2d05815d0a5878a6dfe147c9fcCaroline Tice case eArgRepeatOptional: 627b5772848dfcbce2d05815d0a5878a6dfe147c9fcCaroline Tice case eArgRepeatPlus: 628b5772848dfcbce2d05815d0a5878a6dfe147c9fcCaroline Tice case eArgRepeatStar: 629b5772848dfcbce2d05815d0a5878a6dfe147c9fcCaroline Tice case eArgRepeatRange: 630b5772848dfcbce2d05815d0a5878a6dfe147c9fcCaroline Tice // These should not be reached, as they should fail the IsPairType test above. 631b5772848dfcbce2d05815d0a5878a6dfe147c9fcCaroline Tice break; 63243b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice } 633fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice } 63443b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice else 635fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice { 63643b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice StreamString names; 63743b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice for (int j = 0; j < num_alternatives; ++j) 63843b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice { 63943b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice if (j > 0) 64043b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice names.Printf (" | "); 64143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice names.Printf ("%s", GetArgumentName (arg_entry[j].arg_type)); 64243b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice } 64343b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice switch (arg_entry[0].arg_repetition) 64443b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice { 64543b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice case eArgRepeatPlain: 64643b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice str.Printf ("<%s>", names.GetData()); 64743b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice break; 64843b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice case eArgRepeatPlus: 64943b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice str.Printf ("<%s> [<%s> [...]]", names.GetData(), names.GetData()); 65043b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice break; 65143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice case eArgRepeatStar: 65243b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice str.Printf ("[<%s> [<%s> [...]]]", names.GetData(), names.GetData()); 65343b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice break; 65443b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice case eArgRepeatOptional: 65543b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice str.Printf ("[<%s>]", names.GetData()); 65643b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice break; 65743b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice case eArgRepeatRange: 6587e5fa7fc1f8efd24c078e063b2c4b5e13ba5be20Jason Molenda str.Printf ("<%s_1> .. <%s_n>", names.GetData(), names.GetData()); 659b5772848dfcbce2d05815d0a5878a6dfe147c9fcCaroline Tice break; 660b5772848dfcbce2d05815d0a5878a6dfe147c9fcCaroline Tice // Explicitly test for all the rest of the cases, so if new types get added we will notice the 661b5772848dfcbce2d05815d0a5878a6dfe147c9fcCaroline Tice // missing case statement(s). 662b5772848dfcbce2d05815d0a5878a6dfe147c9fcCaroline Tice case eArgRepeatPairPlain: 663b5772848dfcbce2d05815d0a5878a6dfe147c9fcCaroline Tice case eArgRepeatPairOptional: 664b5772848dfcbce2d05815d0a5878a6dfe147c9fcCaroline Tice case eArgRepeatPairPlus: 665b5772848dfcbce2d05815d0a5878a6dfe147c9fcCaroline Tice case eArgRepeatPairStar: 666b5772848dfcbce2d05815d0a5878a6dfe147c9fcCaroline Tice case eArgRepeatPairRange: 667b5772848dfcbce2d05815d0a5878a6dfe147c9fcCaroline Tice case eArgRepeatPairRangeOptional: 668b5772848dfcbce2d05815d0a5878a6dfe147c9fcCaroline Tice // These should not be hit, as they should pass the IsPairType test above, and control should 669b5772848dfcbce2d05815d0a5878a6dfe147c9fcCaroline Tice // have gone into the other branch of the if statement. 670b5772848dfcbce2d05815d0a5878a6dfe147c9fcCaroline Tice break; 67143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice } 672fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice } 673fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice } 674fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice} 675fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 67647f07856222a1d2032ecfb346f04836b3660d449Stephen WilsonCommandArgumentType 677fb355113cef81a6fa56b468bec7798a24d027b6dCaroline TiceCommandObject::LookupArgumentName (const char *arg_name) 678fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice{ 679fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice CommandArgumentType return_type = eArgTypeLastArg; 680fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 681fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice std::string arg_name_str (arg_name); 682fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice size_t len = arg_name_str.length(); 683fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice if (arg_name[0] == '<' 684fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice && arg_name[len-1] == '>') 685fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice arg_name_str = arg_name_str.substr (1, len-2); 686fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 687309c89decd7a62212ed45cb902112fe280ec9c0cJohnny Chen const ArgumentTableEntry *table = GetArgumentTable(); 688fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice for (int i = 0; i < eArgTypeLastArg; ++i) 689309c89decd7a62212ed45cb902112fe280ec9c0cJohnny Chen if (arg_name_str.compare (table[i].arg_name) == 0) 690fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice return_type = g_arguments_data[i].arg_type; 691fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 692fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice return return_type; 693fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice} 694fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 695fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Ticestatic const char * 696811708c938da75d9c7448a65490ee8dc3e5433f7Jim InghamRegisterNameHelpTextCallback () 697811708c938da75d9c7448a65490ee8dc3e5433f7Jim Ingham{ 698811708c938da75d9c7448a65490ee8dc3e5433f7Jim Ingham return "Register names can be specified using the architecture specific names. " 699ff72cd0a987a81049589f40e1feecd9ad92ef550Jim Ingham "They can also be specified using generic names. Not all generic entities have " 700ff72cd0a987a81049589f40e1feecd9ad92ef550Jim Ingham "registers backing them on all architectures. When they don't the generic name " 701ff72cd0a987a81049589f40e1feecd9ad92ef550Jim Ingham "will return an error.\n" 702811708c938da75d9c7448a65490ee8dc3e5433f7Jim Ingham "The generic names defined in lldb are:\n" 703811708c938da75d9c7448a65490ee8dc3e5433f7Jim Ingham "\n" 704811708c938da75d9c7448a65490ee8dc3e5433f7Jim Ingham "pc - program counter register\n" 705811708c938da75d9c7448a65490ee8dc3e5433f7Jim Ingham "ra - return address register\n" 706811708c938da75d9c7448a65490ee8dc3e5433f7Jim Ingham "fp - frame pointer register\n" 707811708c938da75d9c7448a65490ee8dc3e5433f7Jim Ingham "sp - stack pointer register\n" 708ff72cd0a987a81049589f40e1feecd9ad92ef550Jim Ingham "flags - the flags register\n" 709811708c938da75d9c7448a65490ee8dc3e5433f7Jim Ingham "arg{1-6} - integer argument passing registers.\n"; 710811708c938da75d9c7448a65490ee8dc3e5433f7Jim Ingham} 711811708c938da75d9c7448a65490ee8dc3e5433f7Jim Ingham 712811708c938da75d9c7448a65490ee8dc3e5433f7Jim Inghamstatic const char * 713fb355113cef81a6fa56b468bec7798a24d027b6dCaroline TiceBreakpointIDHelpTextCallback () 714fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice{ 7159c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton return "Breakpoint ID's consist major and minor numbers; the major number " 7169c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton "corresponds to the single entity that was created with a 'breakpoint set' " 7179c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton "command; the minor numbers correspond to all the locations that were actually " 7189c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton "found/set based on the major breakpoint. A full breakpoint ID might look like " 7199c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton "3.14, meaning the 14th location set for the 3rd breakpoint. You can specify " 7209c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton "all the locations of a breakpoint by just indicating the major breakpoint " 7219c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton "number. A valid breakpoint id consists either of just the major id number, " 7229c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton "or the major number, a dot, and the location number (e.g. 3 or 3.2 could " 7239c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton "both be valid breakpoint ids)."; 724fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice} 725fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 726fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Ticestatic const char * 727fb355113cef81a6fa56b468bec7798a24d027b6dCaroline TiceBreakpointIDRangeHelpTextCallback () 728fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice{ 7299c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton return "A 'breakpoint id list' is a manner of specifying multiple breakpoints. " 7309c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton "This can be done through several mechanisms. The easiest way is to just " 7319c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton "enter a space-separated list of breakpoint ids. To specify all the " 7329c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton "breakpoint locations under a major breakpoint, you can use the major " 7339c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton "breakpoint number followed by '.*', eg. '5.*' means all the locations under " 7349c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton "breakpoint 5. You can also indicate a range of breakpoints by using " 7359c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton "<start-bp-id> - <end-bp-id>. The start-bp-id and end-bp-id for a range can " 7369c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton "be any valid breakpoint ids. It is not legal, however, to specify a range " 7379c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton "using specific locations that cross major breakpoint numbers. I.e. 3.2 - 3.7" 7389c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton " is legal; 2 - 5 is legal; but 3.2 - 4.4 is not legal."; 739fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice} 740fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 741886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granatastatic const char * 7429c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg ClaytonGDBFormatHelpTextCallback () 7439c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton{ 744966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton return "A GDB format consists of a repeat count, a format letter and a size letter. " 745966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "The repeat count is optional and defaults to 1. The format letter is optional " 746966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "and defaults to the previous format that was used. The size letter is optional " 747966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "and defaults to the previous size that was used.\n" 748966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "\n" 749966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "Format letters include:\n" 750966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "o - octal\n" 751966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "x - hexadecimal\n" 752966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "d - decimal\n" 753966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "u - unsigned decimal\n" 754966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "t - binary\n" 755966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "f - float\n" 756966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "a - address\n" 757966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "i - instruction\n" 758966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "c - char\n" 759966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "s - string\n" 760966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "T - OSType\n" 761966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "A - float as hex\n" 762966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "\n" 763966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "Size letters include:\n" 764966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "b - 1 byte (byte)\n" 765966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "h - 2 bytes (halfword)\n" 766966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "w - 4 bytes (word)\n" 767966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "g - 8 bytes (giant)\n" 768966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "\n" 769966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "Example formats:\n" 770966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "32xb - show 32 1 byte hexadecimal integer values\n" 771966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "16xh - show 16 2 byte hexadecimal integer values\n" 772966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "64 - show 64 2 byte hexadecimal integer values (format and size from the last format)\n" 773966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton "dw - show 1 4 byte decimal integer value\n" 774966096b3b9c4d27f03adcc73eddb17cdb796ad0cGreg Clayton ; 7759c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton} 7769c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton 7779c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Claytonstatic const char * 778886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico GranataFormatHelpTextCallback () 779886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granata{ 7801bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata 7811bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata static char* help_text_ptr = NULL; 7821bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata 7831bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata if (help_text_ptr) 7841bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata return help_text_ptr; 7851bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata 786886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granata StreamString sstr; 787886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granata sstr << "One of the format names (or one-character names) that can be used to show a variable's value:\n"; 788886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granata for (Format f = eFormatDefault; f < kNumFormats; f = Format(f+1)) 789886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granata { 7901bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata if (f != eFormatDefault) 7911bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata sstr.PutChar('\n'); 7921bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata 793886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granata char format_char = FormatManager::GetFormatAsFormatChar(f); 794886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granata if (format_char) 795886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granata sstr.Printf("'%c' or ", format_char); 796886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granata 7971bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata sstr.Printf ("\"%s\"", FormatManager::GetFormatAsCString(f)); 798886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granata } 799886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granata 800886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granata sstr.Flush(); 801886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granata 802886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granata std::string data = sstr.GetString(); 803886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granata 8041bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata help_text_ptr = new char[data.length()+1]; 805886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granata 8061bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata data.copy(help_text_ptr, data.length()); 807886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granata 8081bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata return help_text_ptr; 809886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granata} 810886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granata 811886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granatastatic const char * 81261ff3a37c7141c672f30b32f3d94cafa2d326e3eSean CallananLanguageTypeHelpTextCallback () 81361ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan{ 81461ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan static char* help_text_ptr = NULL; 81561ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan 81661ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan if (help_text_ptr) 81761ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan return help_text_ptr; 81861ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan 81961ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan StreamString sstr; 82061ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan sstr << "One of the following languages:\n"; 82161ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan 82225b2109486963038a436bdb82fd327a6e5bb8d6dDaniel Malea for (unsigned int l = eLanguageTypeUnknown; l < eNumLanguageTypes; ++l) 82361ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan { 82425b2109486963038a436bdb82fd327a6e5bb8d6dDaniel Malea sstr << " " << LanguageRuntime::GetNameForLanguageType(static_cast<LanguageType>(l)) << "\n"; 82561ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan } 82661ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan 82761ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan sstr.Flush(); 82861ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan 82961ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan std::string data = sstr.GetString(); 83061ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan 83161ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan help_text_ptr = new char[data.length()+1]; 83261ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan 83361ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan data.copy(help_text_ptr, data.length()); 83461ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan 83561ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan return help_text_ptr; 83661ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan} 83761ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan 83861ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callananstatic const char * 8391bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico GranataSummaryStringHelpTextCallback() 8401bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata{ 8411bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata return 8421bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata "A summary string is a way to extract information from variables in order to present them using a summary.\n" 8431bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata "Summary strings contain static text, variables, scopes and control sequences:\n" 8441bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata " - Static text can be any sequence of non-special characters, i.e. anything but '{', '}', '$', or '\\'.\n" 8451bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata " - Variables are sequences of characters beginning with ${, ending with } and that contain symbols in the format described below.\n" 8461bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata " - Scopes are any sequence of text between { and }. Anything included in a scope will only appear in the output summary if there were no errors.\n" 8471bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata " - Control sequences are the usual C/C++ '\\a', '\\n', ..., plus '\\$', '\\{' and '\\}'.\n" 8481bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata "A summary string works by copying static text verbatim, turning control sequences into their character counterpart, expanding variables and trying to expand scopes.\n" 8491bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata "A variable is expanded by giving it a value other than its textual representation, and the way this is done depends on what comes after the ${ marker.\n" 8501bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata "The most common sequence if ${var followed by an expression path, which is the text one would type to access a member of an aggregate types, given a variable of that type" 8511bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata " (e.g. if type T has a member named x, which has a member named y, and if t is of type T, the expression path would be .x.y and the way to fit that into a summary string would be" 852915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata " ${var.x.y}). You can also use ${*var followed by an expression path and in that case the object referred by the path will be dereferenced before being displayed." 853915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata " If the object is not a pointer, doing so will cause an error. For additional details on expression paths, you can type 'help expr-path'. \n" 8541bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata "By default, summary strings attempt to display the summary for any variable they reference, and if that fails the value. If neither can be shown, nothing is displayed." 8551bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata "In a summary string, you can also use an array index [n], or a slice-like range [n-m]. This can have two different meanings depending on what kind of object the expression" 8561bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata " path refers to:\n" 8571bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata " - if it is a scalar type (any basic type like int, float, ...) the expression is a bitfield, i.e. the bits indicated by the indexing operator are extracted out of the number" 8581bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata " and displayed as an individual variable\n" 8591bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata " - if it is an array or pointer the array items indicated by the indexing operator are shown as the result of the variable. if the expression is an array, real array items are" 8601bba6e50d400090eb81efd7ab51957dfcbef06c0Enrico Granata " printed; if it is a pointer, the pointer-as-array syntax is used to obtain the values (this means, the latter case can have no range checking)\n" 861915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata "If you are trying to display an array for which the size is known, you can also use [] instead of giving an exact range. This has the effect of showing items 0 thru size - 1.\n" 862915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata "Additionally, a variable can contain an (optional) format code, as in ${var.x.y%code}, where code can be any of the valid formats described in 'help format', or one of the" 863915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata " special symbols only allowed as part of a variable:\n" 864915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata " %V: show the value of the object by default\n" 865915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata " %S: show the summary of the object by default\n" 866915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata " %@: show the runtime-provided object description (for Objective-C, it calls NSPrintForDebugger; for C/C++ it does nothing)\n" 867915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata " %L: show the location of the object (memory address or a register name)\n" 868915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata " %#: show the number of children of the object\n" 869915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata " %T: show the type of the object\n" 870915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata "Another variable that you can use in summary strings is ${svar . This sequence works exactly like ${var, including the fact that ${*svar is an allowed sequence, but uses" 871915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata " the object's synthetic children provider instead of the actual objects. For instance, if you are using STL synthetic children providers, the following summary string would" 872915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata " count the number of actual elements stored in an std::list:\n" 873915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata "type summary add -s \"${svar%#}\" -x \"std::list<\""; 874915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata} 875915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 876915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatastatic const char * 877915448044bac6fdac22a33cc46697dcb771a8df2Enrico GranataExprPathHelpTextCallback() 878915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{ 879915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata return 880915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata "An expression path is the sequence of symbols that is used in C/C++ to access a member variable of an aggregate object (class).\n" 881915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata "For instance, given a class:\n" 882915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata " class foo {\n" 883915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata " int a;\n" 884915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata " int b; .\n" 885915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata " foo* next;\n" 886915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata " };\n" 887915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata "the expression to read item b in the item pointed to by next for foo aFoo would be aFoo.next->b.\n" 888915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata "Given that aFoo could just be any object of type foo, the string '.next->b' is the expression path, because it can be attached to any foo instance to achieve the effect.\n" 889915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata "Expression paths in LLDB include dot (.) and arrow (->) operators, and most commands using expression paths have ways to also accept the star (*) operator.\n" 890915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata "The meaning of these operators is the same as the usual one given to them by the C/C++ standards.\n" 891915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata "LLDB also has support for indexing ([ ]) in expression paths, and extends the traditional meaning of the square brackets operator to allow bitfield extraction:\n" 892915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata "for objects of native types (int, float, char, ...) saying '[n-m]' as an expression path (where n and m are any positive integers, e.g. [3-5]) causes LLDB to extract" 893915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata " bits n thru m from the value of the variable. If n == m, [n] is also allowed as a shortcut syntax. For arrays and pointers, expression paths can only contain one index" 894915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata " and the meaning of the operation is the same as the one defined by C/C++ (item extraction). Some commands extend bitfield-like syntax for arrays and pointers with the" 895915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata " meaning of array slicing (taking elements n thru m inside the array or pointed-to memory)."; 896886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granata} 897886bc3e5cb48e9660692609a7be69ec15b898bd7Enrico Granata 8980576c24a13668fc77109122c5331bd784222f70dJohnny Chenvoid 899035ef3d0a0136f2b9028b4695a681e58ba899651Enrico GranataCommandObject::GenerateHelpText (CommandReturnObject &result) 900035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata{ 901035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata GenerateHelpText(result.GetOutputStream()); 902035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata 903035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata result.SetStatus (eReturnStatusSuccessFinishNoResult); 904035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata} 905035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata 906035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granatavoid 907035ef3d0a0136f2b9028b4695a681e58ba899651Enrico GranataCommandObject::GenerateHelpText (Stream &output_strm) 908035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata{ 909035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata CommandInterpreter& interpreter = GetCommandInterpreter(); 910035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata if (GetOptions() != NULL) 911035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata { 912035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata if (WantsRawCommandString()) 913035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata { 914035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata std::string help_text (GetHelp()); 915035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata help_text.append (" This command takes 'raw' input (no need to quote stuff)."); 916035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata interpreter.OutputFormattedHelpText (output_strm, "", "", help_text.c_str(), 1); 917035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata } 918035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata else 919035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata interpreter.OutputFormattedHelpText (output_strm, "", "", GetHelp(), 1); 920035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata output_strm.Printf ("\nSyntax: %s\n", GetSyntax()); 921035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata GetOptions()->GenerateOptionUsage (output_strm, this); 922035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata const char *long_help = GetHelpLong(); 923035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata if ((long_help != NULL) 924035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata && (strlen (long_help) > 0)) 925035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata output_strm.Printf ("\n%s", long_help); 926035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata if (WantsRawCommandString() && !WantsCompletion()) 927035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata { 928035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata // Emit the message about using ' -- ' between the end of the command options and the raw input 929035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata // conditionally, i.e., only if the command object does not want completion. 930035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata interpreter.OutputFormattedHelpText (output_strm, "", "", 931035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata "\nIMPORTANT NOTE: Because this command takes 'raw' input, if you use any command options" 932035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata " you must use ' -- ' between the end of the command options and the beginning of the raw input.", 1); 933035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata } 934035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata else if (GetNumArgumentEntries() > 0 935035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata && GetOptions() 936035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata && GetOptions()->NumCommandOptions() > 0) 937035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata { 938035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata // Also emit a warning about using "--" in case you are using a command that takes options and arguments. 939035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata interpreter.OutputFormattedHelpText (output_strm, "", "", 940035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata "\nThis command takes options and free-form arguments. If your arguments resemble" 941035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata " option specifiers (i.e., they start with a - or --), you must use ' -- ' between" 942035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata " the end of the command options and the beginning of the arguments.", 1); 943035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata } 944035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata } 945035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata else if (IsMultiwordObject()) 946035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata { 947035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata if (WantsRawCommandString()) 948035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata { 949035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata std::string help_text (GetHelp()); 950035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata help_text.append (" This command takes 'raw' input (no need to quote stuff)."); 951035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata interpreter.OutputFormattedHelpText (output_strm, "", "", help_text.c_str(), 1); 952035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata } 953035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata else 954035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata interpreter.OutputFormattedHelpText (output_strm, "", "", GetHelp(), 1); 955035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata GenerateHelpText (output_strm); 956035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata } 957035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata else 958035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata { 959035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata const char *long_help = GetHelpLong(); 960035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata if ((long_help != NULL) 961035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata && (strlen (long_help) > 0)) 962035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata output_strm.Printf ("%s", long_help); 963035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata else if (WantsRawCommandString()) 964035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata { 965035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata std::string help_text (GetHelp()); 966035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata help_text.append (" This command takes 'raw' input (no need to quote stuff)."); 967035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata interpreter.OutputFormattedHelpText (output_strm, "", "", help_text.c_str(), 1); 968035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata } 969035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata else 970035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata interpreter.OutputFormattedHelpText (output_strm, "", "", GetHelp(), 1); 971035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata output_strm.Printf ("\nSyntax: %s\n", GetSyntax()); 972035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata } 973035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata} 974035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granata 975035ef3d0a0136f2b9028b4695a681e58ba899651Enrico Granatavoid 976cacedfb1c5db4da1cbbcf6326486ced8174f9b64Johnny ChenCommandObject::AddIDsArgumentData(CommandArgumentEntry &arg, CommandArgumentType ID, CommandArgumentType IDRange) 9770576c24a13668fc77109122c5331bd784222f70dJohnny Chen{ 9780576c24a13668fc77109122c5331bd784222f70dJohnny Chen CommandArgumentData id_arg; 9790576c24a13668fc77109122c5331bd784222f70dJohnny Chen CommandArgumentData id_range_arg; 9800576c24a13668fc77109122c5331bd784222f70dJohnny Chen 9810576c24a13668fc77109122c5331bd784222f70dJohnny Chen // Create the first variant for the first (and only) argument for this command. 982cacedfb1c5db4da1cbbcf6326486ced8174f9b64Johnny Chen id_arg.arg_type = ID; 9830576c24a13668fc77109122c5331bd784222f70dJohnny Chen id_arg.arg_repetition = eArgRepeatOptional; 9840576c24a13668fc77109122c5331bd784222f70dJohnny Chen 9850576c24a13668fc77109122c5331bd784222f70dJohnny Chen // Create the second variant for the first (and only) argument for this command. 986cacedfb1c5db4da1cbbcf6326486ced8174f9b64Johnny Chen id_range_arg.arg_type = IDRange; 9870576c24a13668fc77109122c5331bd784222f70dJohnny Chen id_range_arg.arg_repetition = eArgRepeatOptional; 9880576c24a13668fc77109122c5331bd784222f70dJohnny Chen 989f0734cc92ec144a1980c68f07584074c8d625c49Johnny Chen // The first (and only) argument for this command could be either an id or an id_range. 9900576c24a13668fc77109122c5331bd784222f70dJohnny Chen // Push both variants into the entry for the first argument for this command. 9910576c24a13668fc77109122c5331bd784222f70dJohnny Chen arg.push_back(id_arg); 9920576c24a13668fc77109122c5331bd784222f70dJohnny Chen arg.push_back(id_range_arg); 9930576c24a13668fc77109122c5331bd784222f70dJohnny Chen} 9940576c24a13668fc77109122c5331bd784222f70dJohnny Chen 995aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Claytonconst char * 996aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg ClaytonCommandObject::GetArgumentTypeAsCString (const lldb::CommandArgumentType arg_type) 997aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton{ 998aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton if (arg_type >=0 && arg_type < eArgTypeLastArg) 999aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton return g_arguments_data[arg_type].arg_name; 1000aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton return NULL; 1001aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton 1002aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton} 1003aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton 1004aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Claytonconst char * 1005aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg ClaytonCommandObject::GetArgumentDescriptionAsCString (const lldb::CommandArgumentType arg_type) 1006aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton{ 1007aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton if (arg_type >=0 && arg_type < eArgTypeLastArg) 1008aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton return g_arguments_data[arg_type].help_text; 1009aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton return NULL; 1010aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton} 1011aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton 1012da26bd203cbb104291b39891febf7481794f205fJim Inghambool 1013da26bd203cbb104291b39891febf7481794f205fJim InghamCommandObjectParsed::Execute (const char *args_string, CommandReturnObject &result) 1014da26bd203cbb104291b39891febf7481794f205fJim Ingham{ 1015da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandOverrideCallback command_callback = GetOverrideCallback(); 1016da26bd203cbb104291b39891febf7481794f205fJim Ingham bool handled = false; 1017da26bd203cbb104291b39891febf7481794f205fJim Ingham Args cmd_args (args_string); 1018da26bd203cbb104291b39891febf7481794f205fJim Ingham if (command_callback) 1019da26bd203cbb104291b39891febf7481794f205fJim Ingham { 1020da26bd203cbb104291b39891febf7481794f205fJim Ingham Args full_args (GetCommandName ()); 1021da26bd203cbb104291b39891febf7481794f205fJim Ingham full_args.AppendArguments(cmd_args); 1022da26bd203cbb104291b39891febf7481794f205fJim Ingham handled = command_callback (GetOverrideCallbackBaton(), full_args.GetConstArgumentVector()); 1023da26bd203cbb104291b39891febf7481794f205fJim Ingham } 1024da26bd203cbb104291b39891febf7481794f205fJim Ingham if (!handled) 1025da26bd203cbb104291b39891febf7481794f205fJim Ingham { 1026da26bd203cbb104291b39891febf7481794f205fJim Ingham for (size_t i = 0; i < cmd_args.GetArgumentCount(); ++i) 1027da26bd203cbb104291b39891febf7481794f205fJim Ingham { 1028da26bd203cbb104291b39891febf7481794f205fJim Ingham const char *tmp_str = cmd_args.GetArgumentAtIndex (i); 1029da26bd203cbb104291b39891febf7481794f205fJim Ingham if (tmp_str[0] == '`') // back-quote 1030da26bd203cbb104291b39891febf7481794f205fJim Ingham cmd_args.ReplaceArgumentAtIndex (i, m_interpreter.ProcessEmbeddedScriptCommands (tmp_str)); 1031da26bd203cbb104291b39891febf7481794f205fJim Ingham } 1032da26bd203cbb104291b39891febf7481794f205fJim Ingham 1033ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton if (CheckRequirements(result)) 1034ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton { 1035ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton if (ParseOptions (cmd_args, result)) 1036ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton { 1037ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton // Call the command-specific version of 'Execute', passing it the already processed arguments. 1038ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton handled = DoExecute (cmd_args, result); 1039ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton } 1040ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton } 1041da26bd203cbb104291b39891febf7481794f205fJim Ingham 1042ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton Cleanup(); 1043da26bd203cbb104291b39891febf7481794f205fJim Ingham } 1044da26bd203cbb104291b39891febf7481794f205fJim Ingham return handled; 1045da26bd203cbb104291b39891febf7481794f205fJim Ingham} 1046da26bd203cbb104291b39891febf7481794f205fJim Ingham 1047da26bd203cbb104291b39891febf7481794f205fJim Inghambool 1048da26bd203cbb104291b39891febf7481794f205fJim InghamCommandObjectRaw::Execute (const char *args_string, CommandReturnObject &result) 1049da26bd203cbb104291b39891febf7481794f205fJim Ingham{ 1050da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandOverrideCallback command_callback = GetOverrideCallback(); 1051da26bd203cbb104291b39891febf7481794f205fJim Ingham bool handled = false; 1052da26bd203cbb104291b39891febf7481794f205fJim Ingham if (command_callback) 1053da26bd203cbb104291b39891febf7481794f205fJim Ingham { 1054da26bd203cbb104291b39891febf7481794f205fJim Ingham std::string full_command (GetCommandName ()); 1055da26bd203cbb104291b39891febf7481794f205fJim Ingham full_command += ' '; 1056da26bd203cbb104291b39891febf7481794f205fJim Ingham full_command += args_string; 1057da26bd203cbb104291b39891febf7481794f205fJim Ingham const char *argv[2] = { NULL, NULL }; 1058da26bd203cbb104291b39891febf7481794f205fJim Ingham argv[0] = full_command.c_str(); 1059da26bd203cbb104291b39891febf7481794f205fJim Ingham handled = command_callback (GetOverrideCallbackBaton(), argv); 1060da26bd203cbb104291b39891febf7481794f205fJim Ingham } 1061da26bd203cbb104291b39891febf7481794f205fJim Ingham if (!handled) 1062da26bd203cbb104291b39891febf7481794f205fJim Ingham { 1063ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton if (CheckRequirements(result)) 1064da26bd203cbb104291b39891febf7481794f205fJim Ingham handled = DoExecute (args_string, result); 1065ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton 1066ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton Cleanup(); 1067da26bd203cbb104291b39891febf7481794f205fJim Ingham } 1068da26bd203cbb104291b39891febf7481794f205fJim Ingham return handled; 1069da26bd203cbb104291b39891febf7481794f205fJim Ingham} 1070da26bd203cbb104291b39891febf7481794f205fJim Ingham 1071746323a3deff83edfc0cfd60aab136d43a78b7c8Johnny Chenstatic 1072746323a3deff83edfc0cfd60aab136d43a78b7c8Johnny Chenconst char *arch_helper() 1073746323a3deff83edfc0cfd60aab136d43a78b7c8Johnny Chen{ 1074dc43bbf5ec5cb2e92da9250cdea0b3ebcdccefc0Greg Clayton static StreamString g_archs_help; 1075e23940fece748f8702bb5bc2383af19bb97275ddJohnny Chen if (g_archs_help.Empty()) 1076dc43bbf5ec5cb2e92da9250cdea0b3ebcdccefc0Greg Clayton { 1077dc43bbf5ec5cb2e92da9250cdea0b3ebcdccefc0Greg Clayton StringList archs; 1078dc43bbf5ec5cb2e92da9250cdea0b3ebcdccefc0Greg Clayton ArchSpec::AutoComplete(NULL, archs); 1079dc43bbf5ec5cb2e92da9250cdea0b3ebcdccefc0Greg Clayton g_archs_help.Printf("These are the supported architecture names:\n"); 1080e23940fece748f8702bb5bc2383af19bb97275ddJohnny Chen archs.Join("\n", g_archs_help); 1081dc43bbf5ec5cb2e92da9250cdea0b3ebcdccefc0Greg Clayton } 1082dc43bbf5ec5cb2e92da9250cdea0b3ebcdccefc0Greg Clayton return g_archs_help.GetData(); 1083746323a3deff83edfc0cfd60aab136d43a78b7c8Johnny Chen} 1084746323a3deff83edfc0cfd60aab136d43a78b7c8Johnny Chen 1085fb355113cef81a6fa56b468bec7798a24d027b6dCaroline TiceCommandObject::ArgumentTableEntry 1086fb355113cef81a6fa56b468bec7798a24d027b6dCaroline TiceCommandObject::g_arguments_data[] = 1087fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice{ 10889ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeAddress, "address", CommandCompletions::eNoCompletion, { NULL, false }, "A valid address in the target program's execution space." }, 108916481ab10867e827dea07c3067cb100adb2a3e48Enrico Granata { eArgTypeAddressOrExpression, "address-expression", CommandCompletions::eNoCompletion, { NULL, false }, "An expression that resolves to an address." }, 10909ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeAliasName, "alias-name", CommandCompletions::eNoCompletion, { NULL, false }, "The name of an abbreviation (alias) for a debugger command." }, 10919ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeAliasOptions, "options-for-aliased-command", CommandCompletions::eNoCompletion, { NULL, false }, "Command options to be used as part of an alias (abbreviation) definition. (See 'help commands alias' for more information.)" }, 1092746323a3deff83edfc0cfd60aab136d43a78b7c8Johnny Chen { eArgTypeArchitecture, "arch", CommandCompletions::eArchitectureCompletion, { arch_helper, true }, "The architecture name, e.g. i386 or x86_64." }, 10939ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeBoolean, "boolean", CommandCompletions::eNoCompletion, { NULL, false }, "A Boolean value: 'true' or 'false'" }, 10949ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeBreakpointID, "breakpt-id", CommandCompletions::eNoCompletion, { BreakpointIDHelpTextCallback, false }, NULL }, 10959ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeBreakpointIDRange, "breakpt-id-list", CommandCompletions::eNoCompletion, { BreakpointIDRangeHelpTextCallback, false }, NULL }, 10969ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeByteSize, "byte-size", CommandCompletions::eNoCompletion, { NULL, false }, "Number of bytes to use." }, 10979ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeClassName, "class-name", CommandCompletions::eNoCompletion, { NULL, false }, "Then name of a class from the debug information in the program." }, 10989ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeCommandName, "cmd-name", CommandCompletions::eNoCompletion, { NULL, false }, "A debugger command (may be multiple words), without any options or arguments." }, 10999ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeCount, "count", CommandCompletions::eNoCompletion, { NULL, false }, "An unsigned integer." }, 11009a91ef68c2650113da5488e09e9cb5f6aa88f6abSean Callanan { eArgTypeDirectoryName, "directory", CommandCompletions::eDiskDirectoryCompletion, { NULL, false }, "A directory name." }, 11017d4083837c5a258375fdc185d464b4ed15759a4bJim Ingham { eArgTypeDisassemblyFlavor, "disassembly-flavor", CommandCompletions::eNoCompletion, { NULL, false }, "A disassembly flavor recognized by your disassembly plugin. Currently the only valid options are \"att\" and \"intel\" for Intel targets" }, 11029ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeEndAddress, "end-address", CommandCompletions::eNoCompletion, { NULL, false }, "Help text goes here." }, 11039ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeExpression, "expr", CommandCompletions::eNoCompletion, { NULL, false }, "Help text goes here." }, 1104915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata { eArgTypeExpressionPath, "expr-path", CommandCompletions::eNoCompletion, { ExprPathHelpTextCallback, true }, NULL }, 11059ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeExprFormat, "expression-format", CommandCompletions::eNoCompletion, { NULL, false }, "[ [bool|b] | [bin] | [char|c] | [oct|o] | [dec|i|d|u] | [hex|x] | [float|f] | [cstr|s] ]" }, 11069ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeFilename, "filename", CommandCompletions::eDiskFileCompletion, { NULL, false }, "The name of a file (can include path)." }, 11079ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeFormat, "format", CommandCompletions::eNoCompletion, { FormatHelpTextCallback, true }, NULL }, 11089ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeFrameIndex, "frame-index", CommandCompletions::eNoCompletion, { NULL, false }, "Index into a thread's list of frames." }, 11099ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeFullName, "fullname", CommandCompletions::eNoCompletion, { NULL, false }, "Help text goes here." }, 11109ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeFunctionName, "function-name", CommandCompletions::eNoCompletion, { NULL, false }, "The name of a function." }, 11113bfaad6baec573ae2facf2f2acae0948c1a422bdSean Callanan { eArgTypeFunctionOrSymbol, "function-or-symbol", CommandCompletions::eNoCompletion, { NULL, false }, "The name of a function or symbol." }, 11129c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton { eArgTypeGDBFormat, "gdb-format", CommandCompletions::eNoCompletion, { GDBFormatHelpTextCallback, true }, NULL }, 11139ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeIndex, "index", CommandCompletions::eNoCompletion, { NULL, false }, "An index into a list." }, 111461ff3a37c7141c672f30b32f3d94cafa2d326e3eSean Callanan { eArgTypeLanguage, "language", CommandCompletions::eNoCompletion, { LanguageTypeHelpTextCallback, true }, NULL }, 11159ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeLineNum, "linenum", CommandCompletions::eNoCompletion, { NULL, false }, "Line number in a source file." }, 11169ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeLogCategory, "log-category", CommandCompletions::eNoCompletion, { NULL, false }, "The name of a category within a log channel, e.g. all (try \"log list\" to see a list of all channels and their categories." }, 11179ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeLogChannel, "log-channel", CommandCompletions::eNoCompletion, { NULL, false }, "The name of a log channel, e.g. process.gdb-remote (try \"log list\" to see a list of all channels and their categories)." }, 11189ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeMethod, "method", CommandCompletions::eNoCompletion, { NULL, false }, "A C++ method name." }, 11199ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeName, "name", CommandCompletions::eNoCompletion, { NULL, false }, "Help text goes here." }, 11209ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeNewPathPrefix, "new-path-prefix", CommandCompletions::eNoCompletion, { NULL, false }, "Help text goes here." }, 11219ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeNumLines, "num-lines", CommandCompletions::eNoCompletion, { NULL, false }, "The number of lines to use." }, 11229ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeNumberPerLine, "number-per-line", CommandCompletions::eNoCompletion, { NULL, false }, "The number of items per line to display." }, 11239ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeOffset, "offset", CommandCompletions::eNoCompletion, { NULL, false }, "Help text goes here." }, 11249ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeOldPathPrefix, "old-path-prefix", CommandCompletions::eNoCompletion, { NULL, false }, "Help text goes here." }, 11259ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeOneLiner, "one-line-command", CommandCompletions::eNoCompletion, { NULL, false }, "A command that is entered as a single line of text." }, 11269ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypePid, "pid", CommandCompletions::eNoCompletion, { NULL, false }, "The process ID number." }, 11279ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypePlugin, "plugin", CommandCompletions::eNoCompletion, { NULL, false }, "Help text goes here." }, 11289ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeProcessName, "process-name", CommandCompletions::eNoCompletion, { NULL, false }, "The name of the process." }, 1129915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata { eArgTypePythonClass, "python-class", CommandCompletions::eNoCompletion, { NULL, false }, "The name of a Python class." }, 1130915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata { eArgTypePythonFunction, "python-function", CommandCompletions::eNoCompletion, { NULL, false }, "The name of a Python function." }, 1131915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata { eArgTypePythonScript, "python-script", CommandCompletions::eNoCompletion, { NULL, false }, "Source code written in Python." }, 11329ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeQueueName, "queue-name", CommandCompletions::eNoCompletion, { NULL, false }, "The name of the thread queue." }, 1133811708c938da75d9c7448a65490ee8dc3e5433f7Jim Ingham { eArgTypeRegisterName, "register-name", CommandCompletions::eNoCompletion, { RegisterNameHelpTextCallback, true }, NULL }, 11349ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeRegularExpression, "regular-expression", CommandCompletions::eNoCompletion, { NULL, false }, "A regular expression." }, 11359ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeRunArgs, "run-args", CommandCompletions::eNoCompletion, { NULL, false }, "Arguments to be passed to the target program when it starts executing." }, 11369ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeRunMode, "run-mode", CommandCompletions::eNoCompletion, { NULL, false }, "Help text goes here." }, 11376010acef0cee54e044d4e7e472ef3d99e13c5045Enrico Granata { eArgTypeScriptedCommandSynchronicity, "script-cmd-synchronicity", CommandCompletions::eNoCompletion, { NULL, false }, "The synchronicity to use to run scripted commands with regard to LLDB event system." }, 11389ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeScriptLang, "script-language", CommandCompletions::eNoCompletion, { NULL, false }, "The scripting language to be used for script-based commands. Currently only Python is valid." }, 11399ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeSearchWord, "search-word", CommandCompletions::eNoCompletion, { NULL, false }, "The word for which you wish to search for information about." }, 11409ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeSelector, "selector", CommandCompletions::eNoCompletion, { NULL, false }, "An Objective-C selector name." }, 11419ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeSettingIndex, "setting-index", CommandCompletions::eNoCompletion, { NULL, false }, "An index into a settings variable that is an array (try 'settings list' to see all the possible settings variables and their types)." }, 11429ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeSettingKey, "setting-key", CommandCompletions::eNoCompletion, { NULL, false }, "A key into a settings variables that is a dictionary (try 'settings list' to see all the possible settings variables and their types)." }, 11439ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeSettingPrefix, "setting-prefix", CommandCompletions::eNoCompletion, { NULL, false }, "The name of a settable internal debugger variable up to a dot ('.'), e.g. 'target.process.'" }, 11449ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeSettingVariableName, "setting-variable-name", CommandCompletions::eNoCompletion, { NULL, false }, "The name of a settable internal debugger variable. Type 'settings list' to see a complete list of such variables." }, 11459ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeShlibName, "shlib-name", CommandCompletions::eNoCompletion, { NULL, false }, "The name of a shared library." }, 11469ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeSourceFile, "source-file", CommandCompletions::eSourceFileCompletion, { NULL, false }, "The name of a source file.." }, 11479ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeSortOrder, "sort-order", CommandCompletions::eNoCompletion, { NULL, false }, "Specify a sort order when dumping lists." }, 11489ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeStartAddress, "start-address", CommandCompletions::eNoCompletion, { NULL, false }, "Help text goes here." }, 11499ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeSummaryString, "summary-string", CommandCompletions::eNoCompletion, { SummaryStringHelpTextCallback, true }, NULL }, 11509ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeSymbol, "symbol", CommandCompletions::eSymbolCompletion, { NULL, false }, "Any symbol name (function name, variable, argument, etc.)" }, 11519ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeThreadID, "thread-id", CommandCompletions::eNoCompletion, { NULL, false }, "Thread ID number." }, 11529ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeThreadIndex, "thread-index", CommandCompletions::eNoCompletion, { NULL, false }, "Index into the process' list of threads." }, 11539ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeThreadName, "thread-name", CommandCompletions::eNoCompletion, { NULL, false }, "The thread's name." }, 1154309c89decd7a62212ed45cb902112fe280ec9c0cJohnny Chen { eArgTypeUnsignedInteger, "unsigned-integer", CommandCompletions::eNoCompletion, { NULL, false }, "An unsigned integer." }, 11559ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeUnixSignal, "unix-signal", CommandCompletions::eNoCompletion, { NULL, false }, "A valid Unix signal name or number (e.g. SIGKILL, KILL or 9)." }, 11569ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeVarName, "variable-name", CommandCompletions::eNoCompletion, { NULL, false }, "The name of a variable in your program." }, 11579ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeValue, "value", CommandCompletions::eNoCompletion, { NULL, false }, "A value could be anything, depending on where and how it is used." }, 11589ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeWidth, "width", CommandCompletions::eNoCompletion, { NULL, false }, "Help text goes here." }, 11599ae9fd3992be47dd17d3b78526cf42ddfd5b51afEnrico Granata { eArgTypeNone, "none", CommandCompletions::eNoCompletion, { NULL, false }, "No help available for this." }, 116058dba3ce82715249c068abb7bf99f0d43dfbe8f9Johnny Chen { eArgTypePlatform, "platform-name", CommandCompletions::ePlatformPluginCompletion, { NULL, false }, "The name of an installed platform plug-in . Type 'platform list' to see a complete list of installed platforms." }, 1161cacedfb1c5db4da1cbbcf6326486ced8174f9b64Johnny Chen { eArgTypeWatchpointID, "watchpt-id", CommandCompletions::eNoCompletion, { NULL, false }, "Watchpoint IDs are positive integers." }, 1162cacedfb1c5db4da1cbbcf6326486ced8174f9b64Johnny Chen { eArgTypeWatchpointIDRange, "watchpt-id-list", CommandCompletions::eNoCompletion, { NULL, false }, "For example, '1-3' or '1 to 3'." }, 116334bbf85e60949752de9c8272a70d59383e523cc5Johnny Chen { eArgTypeWatchType, "watch-type", CommandCompletions::eNoCompletion, { NULL, false }, "Specify the type for a watchpoint." } 1164fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice}; 1165fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 1166fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Ticeconst CommandObject::ArgumentTableEntry* 1167fb355113cef81a6fa56b468bec7798a24d027b6dCaroline TiceCommandObject::GetArgumentTable () 1168fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice{ 1169aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton // If this assertion fires, then the table above is out of date with the CommandArgumentType enumeration 1170aa378b1f53f8b557ceab403e31e6c9ef9a20b77dGreg Clayton assert ((sizeof (CommandObject::g_arguments_data) / sizeof (CommandObject::ArgumentTableEntry)) == eArgTypeLastArg); 1171fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice return CommandObject::g_arguments_data; 1172fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice} 1173fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 1174fb355113cef81a6fa56b468bec7798a24d027b6dCaroline Tice 1175