CommandObjectTarget.cpp revision c833295baeec641086f536e78050388af36784f8
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- CommandObjectTarget.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 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "CommandObjectTarget.h" 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <errno.h> 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <sys/errno.h> 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 1884cdc15005983e5244d665fa779e33c2b6fac95fJim Ingham#include "lldb/Interpreter/Args.h" 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Debugger.h" 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Timer.h" 2163094e0bb161580564954dee512955c1c79d3476Greg Clayton#include "lldb/Core/Debugger.h" 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Interpreter/CommandInterpreter.h" 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Interpreter/CommandReturnObject.h" 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Process.h" 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/StackFrame.h" 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Thread.h" 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb; 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private; 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#pragma mark CommandObjectTargetImageSearchPaths 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass CommandObjectTargetImageSearchPathsAdd : public CommandObject 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandObjectTargetImageSearchPathsAdd () : 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandObject ("target image-search-paths add", 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner "Add new image search paths substitution pairs to the current target.", 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner "target image-search-paths add <path-prefix> <new-path-prefix> [<path-prefix> <new-path-prefix>] ...") 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~CommandObjectTargetImageSearchPathsAdd () 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 4963094e0bb161580564954dee512955c1c79d3476Greg Clayton Execute (CommandInterpreter &interpreter, 5063094e0bb161580564954dee512955c1c79d3476Greg Clayton Args& command, 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandReturnObject &result) 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 53c833295baeec641086f536e78050388af36784f8Jim Ingham Target *target = interpreter.GetDebugger().GetSelectedTarget().get(); 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (target) 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t argc = command.GetArgumentCount(); 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (argc & 1) 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.AppendError ("add requires an even number of arguments"); 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus (eReturnStatusFailed); 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner for (uint32_t i=0; i<argc; i+=2) 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *from = command.GetArgumentAtIndex(i); 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *to = command.GetArgumentAtIndex(i+1); 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (from[0] && to[0]) 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool last_pair = ((argc - i) == 2); 7263094e0bb161580564954dee512955c1c79d3476Greg Clayton target->GetImageSearchPathList().Append (ConstString(from), 7363094e0bb161580564954dee512955c1c79d3476Greg Clayton ConstString(to), 7463094e0bb161580564954dee512955c1c79d3476Greg Clayton last_pair); // Notify if this is the last pair 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (from[0]) 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.AppendError ("<path-prefix> can't be empty"); 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.AppendError ("<new-path-prefix> can't be empty"); 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus (eReturnStatusFailed); 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.AppendError ("invalid target"); 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus (eReturnStatusFailed); 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result.Succeeded(); 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass CommandObjectTargetImageSearchPathsClear : public CommandObject 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandObjectTargetImageSearchPathsClear () : 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandObject ("target image-search-paths clear", 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner "Clears all current image search paths substitution pairs from the current target.", 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner "target image-search-paths clear") 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~CommandObjectTargetImageSearchPathsClear () 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 11263094e0bb161580564954dee512955c1c79d3476Greg Clayton Execute (CommandInterpreter &interpreter, 11363094e0bb161580564954dee512955c1c79d3476Greg Clayton Args& command, 11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandReturnObject &result) 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 116c833295baeec641086f536e78050388af36784f8Jim Ingham Target *target = interpreter.GetDebugger().GetSelectedTarget().get(); 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (target) 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool notify = true; 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner target->GetImageSearchPathList().Clear(notify); 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.AppendError ("invalid target"); 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus (eReturnStatusFailed); 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result.Succeeded(); 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass CommandObjectTargetImageSearchPathsInsert : public CommandObject 13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandObjectTargetImageSearchPathsInsert () : 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandObject ("target image-search-paths insert", 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner "Inserts a new image search paths substitution pair to the current target at the specified index.", 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner "target image-search-paths insert <index> <path-prefix> <new-path-prefix> [<path-prefix> <new-path-prefix>] ...") 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~CommandObjectTargetImageSearchPathsInsert () 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 14763094e0bb161580564954dee512955c1c79d3476Greg Clayton Execute (CommandInterpreter &interpreter, 14863094e0bb161580564954dee512955c1c79d3476Greg Clayton Args& command, 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandReturnObject &result) 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 151c833295baeec641086f536e78050388af36784f8Jim Ingham Target *target = interpreter.GetDebugger().GetSelectedTarget().get(); 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (target) 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t argc = command.GetArgumentCount(); 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // check for at least 3 arguments and an odd nubmer of parameters 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (argc >= 3 && argc & 1) 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool success = false; 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t insert_idx = Args::StringToUInt32(command.GetArgumentAtIndex(0), UINT32_MAX, 0, &success); 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (!success) 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.AppendErrorWithFormat("<index> parameter is not an integer: '%s'.\n", command.GetArgumentAtIndex(0)); 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus (eReturnStatusFailed); 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result.Succeeded(); 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // shift off the index 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner command.Shift(); 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner argc = command.GetArgumentCount(); 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner for (uint32_t i=0; i<argc; i+=2, ++insert_idx) 17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *from = command.GetArgumentAtIndex(i); 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *to = command.GetArgumentAtIndex(i+1); 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (from[0] && to[0]) 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool last_pair = ((argc - i) == 2); 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner target->GetImageSearchPathList().Insert (ConstString(from), 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ConstString(to), 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner insert_idx, 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner last_pair); 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (from[0]) 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.AppendError ("<path-prefix> can't be empty"); 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.AppendError ("<new-path-prefix> can't be empty"); 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus (eReturnStatusFailed); 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.AppendError ("insert requires at least three arguments"); 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus (eReturnStatusFailed); 20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result.Succeeded(); 20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.AppendError ("invalid target"); 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus (eReturnStatusFailed); 20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result.Succeeded(); 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass CommandObjectTargetImageSearchPathsList : public CommandObject 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandObjectTargetImageSearchPathsList () : 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandObject ("target image-search-paths list", 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner "Lists all current image search paths substitution pairs in the current target.", 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner "target image-search-paths list") 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~CommandObjectTargetImageSearchPathsList () 22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 23063094e0bb161580564954dee512955c1c79d3476Greg Clayton Execute (CommandInterpreter &interpreter, 23163094e0bb161580564954dee512955c1c79d3476Greg Clayton Args& command, 23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandReturnObject &result) 23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 234c833295baeec641086f536e78050388af36784f8Jim Ingham Target *target = interpreter.GetDebugger().GetSelectedTarget().get(); 23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (target) 23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (command.GetArgumentCount() != 0) 23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.AppendError ("list takes no arguments"); 24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus (eReturnStatusFailed); 24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result.Succeeded(); 24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner target->GetImageSearchPathList().Dump(&result.GetOutputStream()); 24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.AppendError ("invalid target"); 24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus (eReturnStatusFailed); 25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result.Succeeded(); 25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass CommandObjectTargetImageSearchPathsQuery : public CommandObject 25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 25924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandObjectTargetImageSearchPathsQuery () : 26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandObject ("target image-search-paths query", 26124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner "Transforms a path using the first applicable image search path.", 26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner "target image-search-paths query <path>") 26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~CommandObjectTargetImageSearchPathsQuery () 26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 27163094e0bb161580564954dee512955c1c79d3476Greg Clayton Execute (CommandInterpreter &interpreter, 27263094e0bb161580564954dee512955c1c79d3476Greg Clayton Args& command, 27324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandReturnObject &result) 27424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 275c833295baeec641086f536e78050388af36784f8Jim Ingham Target *target = interpreter.GetDebugger().GetSelectedTarget().get(); 27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (target) 27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (command.GetArgumentCount() != 1) 27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.AppendError ("query requires one argument"); 28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus (eReturnStatusFailed); 28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result.Succeeded(); 28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ConstString orig(command.GetArgumentAtIndex(0)); 28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ConstString transformed; 28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (target->GetImageSearchPathList().RemapPath(orig, transformed)) 28824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.GetOutputStream().Printf("%s\n", transformed.GetCString()); 28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 29024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.GetOutputStream().Printf("%s\n", orig.GetCString()); 29124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 29224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 29324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 29424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.AppendError ("invalid target"); 29524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus (eReturnStatusFailed); 29624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 29724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return result.Succeeded(); 29824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 29924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 30024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 30124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// TODO: implement the target select later when we start doing multiple targets 30224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//#pragma mark CommandObjectTargetSelect 30324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner////------------------------------------------------------------------------- 30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//// CommandObjectTargetSelect 30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner////------------------------------------------------------------------------- 30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 30824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//class CommandObjectTargetSelect : public CommandObject 30924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//{ 31024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//public: 31124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 31224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CommandObjectTargetSelect () : 31324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CommandObject ("frame select", 31424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// "Select the current frame by index in the current thread.", 31524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// "frame select <frame-index>") 31624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// { 31724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// } 31824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 31924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// ~CommandObjectTargetSelect () 32024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// { 32124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// } 32224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 32324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// bool 32424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Execute (Args& command, 32563094e0bb161580564954dee512955c1c79d3476Greg Clayton// Debugger *context, 32663094e0bb161580564954dee512955c1c79d3476Greg Clayton// CommandInterpreter &interpreter, 32724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CommandReturnObject &result) 32824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// { 32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// ExecutionContext exe_ctx (context->GetExecutionContext()); 33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// if (exe_ctx.thread) 33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// { 33224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// if (command.GetArgumentCount() == 1) 33324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// { 33424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// const char *frame_idx_cstr = command.GetArgumentAtIndex(0); 33524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 33624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// const uint32_t num_frames = exe_ctx.thread->GetStackFrameCount(); 33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// const uint32_t frame_idx = Args::StringToUInt32 (frame_idx_cstr, UINT32_MAX, 0); 33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// if (frame_idx < num_frames) 33924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// { 340c833295baeec641086f536e78050388af36784f8Jim Ingham// exe_ctx.thread->SetSelectedFrameByIndex (frame_idx); 341c833295baeec641086f536e78050388af36784f8Jim Ingham// exe_ctx.frame = exe_ctx.thread->GetSelectedFrame ().get(); 34224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 34324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// if (exe_ctx.frame) 34424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// { 34524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// if (DisplayFrameForExecutionContext (exe_ctx.thread, 34624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// exe_ctx.frame, 34724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// interpreter, 34824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// result.GetOutputStream(), 34924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// true, 35024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// true, 35124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 3, 35224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 3)) 35324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// { 35424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// result.SetStatus (eReturnStatusSuccessFinishResult); 35524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// return result.Succeeded(); 35624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// } 35724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// } 35824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// } 35924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// if (frame_idx == UINT32_MAX) 36024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// result.AppendErrorWithFormat ("Invalid frame index: %s.\n", frame_idx_cstr); 36124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// else 36224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// result.AppendErrorWithFormat ("Frame index (%u) out of range.\n", frame_idx); 36324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// } 36424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// else 36524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// { 36624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// result.AppendError ("invalid arguments"); 36724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// result.AppendErrorWithFormat ("Usage: %s\n", m_cmd_syntax.c_str()); 36824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// } 36924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// } 37024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// else 37124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// { 37224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// result.AppendError ("no current thread"); 37324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// } 37424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// result.SetStatus (eReturnStatusFailed); 37524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// return false; 37624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// } 37724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//}; 37824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 37924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 38024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#pragma mark CommandObjectMultiwordTarget 38124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//------------------------------------------------------------------------- 38324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CommandObjectMultiwordImageSearchPaths 38424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//------------------------------------------------------------------------- 38524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 38624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass CommandObjectMultiwordImageSearchPaths : public CommandObjectMultiword 38724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 38824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 38924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 39063094e0bb161580564954dee512955c1c79d3476Greg Clayton CommandObjectMultiwordImageSearchPaths (CommandInterpreter &interpreter) : 39124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandObjectMultiword ("target image-search-paths", 39224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner "A set of commands for operating on debugger target image search paths.", 39324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner "target image-search-paths <subcommand> [<subcommand-options>]") 39424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 39563094e0bb161580564954dee512955c1c79d3476Greg Clayton LoadSubCommand (interpreter, "add", CommandObjectSP (new CommandObjectTargetImageSearchPathsAdd ())); 39663094e0bb161580564954dee512955c1c79d3476Greg Clayton LoadSubCommand (interpreter, "clear", CommandObjectSP (new CommandObjectTargetImageSearchPathsClear ())); 39763094e0bb161580564954dee512955c1c79d3476Greg Clayton LoadSubCommand (interpreter, "insert", CommandObjectSP (new CommandObjectTargetImageSearchPathsInsert ())); 39863094e0bb161580564954dee512955c1c79d3476Greg Clayton LoadSubCommand (interpreter, "list", CommandObjectSP (new CommandObjectTargetImageSearchPathsList ())); 39963094e0bb161580564954dee512955c1c79d3476Greg Clayton LoadSubCommand (interpreter, "query", CommandObjectSP (new CommandObjectTargetImageSearchPathsQuery ())); 40024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 40124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 40224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~CommandObjectMultiwordImageSearchPaths() 40324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 40424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 40524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 40624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 40724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 40824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#pragma mark CommandObjectMultiwordTarget 40924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 41024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//------------------------------------------------------------------------- 41124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CommandObjectMultiwordTarget 41224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//------------------------------------------------------------------------- 41324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 41463094e0bb161580564954dee512955c1c79d3476Greg ClaytonCommandObjectMultiwordTarget::CommandObjectMultiwordTarget (CommandInterpreter &interpreter) : 41524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandObjectMultiword ("target", 41624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner "A set of commands for operating on debugger targets.", 41724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner "target <subcommand> [<subcommand-options>]") 41824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 41963094e0bb161580564954dee512955c1c79d3476Greg Clayton LoadSubCommand (interpreter, "image-search-paths", CommandObjectSP (new CommandObjectMultiwordImageSearchPaths (interpreter))); 42024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 42124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 42224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObjectMultiwordTarget::~CommandObjectMultiwordTarget () 42324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 42424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 42524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 426