CommandObjectTarget.cpp revision 43b014aa33e20e61790e16ed69a2c57aae2fbc6e
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
37238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton    CommandObjectTargetImageSearchPathsAdd (CommandInterpreter &interpreter) :
38238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton        CommandObject (interpreter,
39238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton                       "target image-search-paths add",
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                       "Add new image search paths substitution pairs to the current target.",
4143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice                       NULL)
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
4343b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        CommandArgumentEntry arg;
4443b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        CommandArgumentData old_prefix_arg;
4543b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        CommandArgumentData new_prefix_arg;
4643b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice
4743b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        // Define the first variant of this arg pair.
4843b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        old_prefix_arg.arg_type = eArgTypeOldPathPrefix;
4943b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        old_prefix_arg.arg_repetition = eArgRepeatPairPlus;
5043b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice
5143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        // Define the first variant of this arg pair.
5243b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        new_prefix_arg.arg_type = eArgTypeNewPathPrefix;
5343b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        new_prefix_arg.arg_repetition = eArgRepeatPairPlus;
5443b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice
5543b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        // There are two required arguments that must always occur together, i.e. an argument "pair".  Because they
5643b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        // must always occur together, they are treated as two variants of one argument rather than two independent
5743b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        // arguments.  Push them both into the first argument position for m_arguments...
5843b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice
5943b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        arg.push_back (old_prefix_arg);
6043b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        arg.push_back (new_prefix_arg);
6143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice
6243b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        m_arguments.push_back (arg);
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~CommandObjectTargetImageSearchPathsAdd ()
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
70238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton    Execute (Args& command,
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner             CommandReturnObject &result)
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
73238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton        Target *target = m_interpreter.GetDebugger().GetSelectedTarget().get();
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        if (target)
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            uint32_t argc = command.GetArgumentCount();
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            if (argc & 1)
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            {
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                result.AppendError ("add requires an even number of arguments");
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                result.SetStatus (eReturnStatusFailed);
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            }
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            else
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            {
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                for (uint32_t i=0; i<argc; i+=2)
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                {
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    const char *from = command.GetArgumentAtIndex(i);
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    const char *to = command.GetArgumentAtIndex(i+1);
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    if (from[0] && to[0])
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    {
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        bool last_pair = ((argc - i) == 2);
9263094e0bb161580564954dee512955c1c79d3476Greg Clayton                        target->GetImageSearchPathList().Append (ConstString(from),
9363094e0bb161580564954dee512955c1c79d3476Greg Clayton                                                                 ConstString(to),
9463094e0bb161580564954dee512955c1c79d3476Greg Clayton                                                                 last_pair); // Notify if this is the last pair
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    }
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    else
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    {
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        if (from[0])
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                            result.AppendError ("<path-prefix> can't be empty");
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        else
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                            result.AppendError ("<new-path-prefix> can't be empty");
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        result.SetStatus (eReturnStatusFailed);
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    }
10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                }
10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            }
10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        else
10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            result.AppendError ("invalid target");
11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            result.SetStatus (eReturnStatusFailed);
11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return result.Succeeded();
11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass CommandObjectTargetImageSearchPathsClear : public CommandObject
11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
120238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton    CommandObjectTargetImageSearchPathsClear (CommandInterpreter &interpreter) :
121238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton        CommandObject (interpreter,
122238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton                       "target image-search-paths clear",
123abb507ae79e20ab2dd8365049921df73a24c95a5Caroline Tice                       "Clear all current image search path substitution pairs from the current target.",
12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                       "target image-search-paths clear")
12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~CommandObjectTargetImageSearchPathsClear ()
12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
133238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton    Execute (Args& command,
13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner             CommandReturnObject &result)
13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
136238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton        Target *target = m_interpreter.GetDebugger().GetSelectedTarget().get();
13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        if (target)
13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            bool notify = true;
14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            target->GetImageSearchPathList().Clear(notify);
14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        else
14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            result.AppendError ("invalid target");
14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            result.SetStatus (eReturnStatusFailed);
14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return result.Succeeded();
14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass CommandObjectTargetImageSearchPathsInsert : public CommandObject
15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
155238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton    CommandObjectTargetImageSearchPathsInsert (CommandInterpreter &interpreter) :
156238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton        CommandObject (interpreter,
157238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton                       "target image-search-paths insert",
158abb507ae79e20ab2dd8365049921df73a24c95a5Caroline Tice                       "Insert a new image search path substitution pair into the current target at the specified index.",
15943b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice                       NULL)
16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
16143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        CommandArgumentEntry arg1;
16243b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        CommandArgumentEntry arg2;
16343b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        CommandArgumentData index_arg;
16443b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        CommandArgumentData old_prefix_arg;
16543b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        CommandArgumentData new_prefix_arg;
16643b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice
16743b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        // Define the first and only variant of this arg.
16843b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        index_arg.arg_type = eArgTypeIndex;
16943b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        index_arg.arg_repetition = eArgRepeatPlain;
17043b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice
17143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        // Put the one and only variant into the first arg for m_arguments:
17243b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        arg1.push_back (index_arg);
17343b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice
17443b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        // Define the first variant of this arg pair.
17543b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        old_prefix_arg.arg_type = eArgTypeOldPathPrefix;
17643b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        old_prefix_arg.arg_repetition = eArgRepeatPairPlus;
17743b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice
17843b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        // Define the first variant of this arg pair.
17943b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        new_prefix_arg.arg_type = eArgTypeNewPathPrefix;
18043b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        new_prefix_arg.arg_repetition = eArgRepeatPairPlus;
18143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice
18243b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        // There are two required arguments that must always occur together, i.e. an argument "pair".  Because they
18343b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        // must always occur together, they are treated as two variants of one argument rather than two independent
18443b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        // arguments.  Push them both into the same argument position for m_arguments...
18543b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice
18643b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        arg2.push_back (old_prefix_arg);
18743b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        arg2.push_back (new_prefix_arg);
18843b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice
18943b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        // Add arguments to m_arguments.
19043b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        m_arguments.push_back (arg1);
19143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        m_arguments.push_back (arg2);
19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~CommandObjectTargetImageSearchPathsInsert ()
19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
199238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton    Execute (Args& command,
20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner             CommandReturnObject &result)
20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
202238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton        Target *target = m_interpreter.GetDebugger().GetSelectedTarget().get();
20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        if (target)
20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            uint32_t argc = command.GetArgumentCount();
20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            // check for at least 3 arguments and an odd nubmer of parameters
20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            if (argc >= 3 && argc & 1)
20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            {
20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                bool success = false;
21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                uint32_t insert_idx = Args::StringToUInt32(command.GetArgumentAtIndex(0), UINT32_MAX, 0, &success);
21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                if (!success)
21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                {
21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    result.AppendErrorWithFormat("<index> parameter is not an integer: '%s'.\n", command.GetArgumentAtIndex(0));
21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    result.SetStatus (eReturnStatusFailed);
21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    return result.Succeeded();
21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                }
21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                // shift off the index
22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                command.Shift();
22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                argc = command.GetArgumentCount();
22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                for (uint32_t i=0; i<argc; i+=2, ++insert_idx)
22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                {
22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    const char *from = command.GetArgumentAtIndex(i);
22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    const char *to = command.GetArgumentAtIndex(i+1);
22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    if (from[0] && to[0])
23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    {
23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        bool last_pair = ((argc - i) == 2);
23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        target->GetImageSearchPathList().Insert (ConstString(from),
23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                                                 ConstString(to),
23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                                                 insert_idx,
23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                                                 last_pair);
23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    }
23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    else
23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    {
23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        if (from[0])
24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                            result.AppendError ("<path-prefix> can't be empty");
24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        else
24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                            result.AppendError ("<new-path-prefix> can't be empty");
24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        result.SetStatus (eReturnStatusFailed);
24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        return false;
24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    }
24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                }
24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            }
24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            else
24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            {
25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                result.AppendError ("insert requires at least three arguments");
25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                result.SetStatus (eReturnStatusFailed);
25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                return result.Succeeded();
25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            }
25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        else
25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            result.AppendError ("invalid target");
25924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            result.SetStatus (eReturnStatusFailed);
26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
26124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return result.Succeeded();
26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass CommandObjectTargetImageSearchPathsList : public CommandObject
26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
269238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton    CommandObjectTargetImageSearchPathsList (CommandInterpreter &interpreter) :
270238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton        CommandObject (interpreter,
271238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton                       "target image-search-paths list",
272abb507ae79e20ab2dd8365049921df73a24c95a5Caroline Tice                       "List all current image search path substitution pairs in the current target.",
27324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                       "target image-search-paths list")
27424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~CommandObjectTargetImageSearchPathsList ()
27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
282238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton    Execute (Args& command,
28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner             CommandReturnObject &result)
28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
285238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton        Target *target = m_interpreter.GetDebugger().GetSelectedTarget().get();
28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        if (target)
28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
28824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            if (command.GetArgumentCount() != 0)
28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            {
29024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                result.AppendError ("list takes no arguments");
29124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                result.SetStatus (eReturnStatusFailed);
29224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                return result.Succeeded();
29324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            }
29424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
29524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            target->GetImageSearchPathList().Dump(&result.GetOutputStream());
29624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
29724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        else
29824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
29924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            result.AppendError ("invalid target");
30024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            result.SetStatus (eReturnStatusFailed);
30124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
30224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return result.Succeeded();
30324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass CommandObjectTargetImageSearchPathsQuery : public CommandObject
30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
30824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
30924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
310238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton    CommandObjectTargetImageSearchPathsQuery (CommandInterpreter &interpreter) :
311238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton    CommandObject (interpreter,
312238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton                   "target image-search-paths query",
313abb507ae79e20ab2dd8365049921df73a24c95a5Caroline Tice                   "Transform a path using the first applicable image search path.",
31443b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice                   NULL)
31524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
31643b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        CommandArgumentEntry arg;
31743b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        CommandArgumentData path_arg;
31843b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice
31943b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        // Define the first (and only) variant of this arg.
32043b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        path_arg.arg_type = eArgTypePath;
32143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        path_arg.arg_repetition = eArgRepeatPlain;
32243b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice
32343b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        // There is only one variant this argument could be; put it into the argument entry.
32443b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        arg.push_back (path_arg);
32543b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice
32643b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        // Push the data for the first argument into the m_arguments vector.
32743b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice        m_arguments.push_back (arg);
32824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~CommandObjectTargetImageSearchPathsQuery ()
33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
33224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
33324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
33424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
335238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton    Execute (Args& command,
33624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner             CommandReturnObject &result)
33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
338238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton        Target *target = m_interpreter.GetDebugger().GetSelectedTarget().get();
33924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        if (target)
34024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
34124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            if (command.GetArgumentCount() != 1)
34224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            {
34324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                result.AppendError ("query requires one argument");
34424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                result.SetStatus (eReturnStatusFailed);
34524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                return result.Succeeded();
34624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            }
34724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
34824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            ConstString orig(command.GetArgumentAtIndex(0));
34924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            ConstString transformed;
35024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            if (target->GetImageSearchPathList().RemapPath(orig, transformed))
35124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                result.GetOutputStream().Printf("%s\n", transformed.GetCString());
35224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            else
35324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                result.GetOutputStream().Printf("%s\n", orig.GetCString());
35424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
35524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        else
35624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
35724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            result.AppendError ("invalid target");
35824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            result.SetStatus (eReturnStatusFailed);
35924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
36024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return result.Succeeded();
36124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
36224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
36324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
36424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// TODO: implement the target select later when we start doing multiple targets
36524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//#pragma mark CommandObjectTargetSelect
36624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
36724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner////-------------------------------------------------------------------------
36824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//// CommandObjectTargetSelect
36924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner////-------------------------------------------------------------------------
37024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
37124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//class CommandObjectTargetSelect : public CommandObject
37224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//{
37324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//public:
37424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
37524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//    CommandObjectTargetSelect () :
376238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton//    CommandObject (interpreter,
377238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton//                   frame select",
37824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                   "Select the current frame by index in the current thread.",
37924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                   "frame select <frame-index>")
38024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//    {
38124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//    }
38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
38324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//    ~CommandObjectTargetSelect ()
38424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//    {
38524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//    }
38624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
38724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//    bool
38824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//    Execute (Args& command,
38963094e0bb161580564954dee512955c1c79d3476Greg Clayton//             Debugger *context,
390238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton//             CommandInterpreter &m_interpreter,
39124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//             CommandReturnObject &result)
39224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//    {
39324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//        ExecutionContext exe_ctx (context->GetExecutionContext());
39424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//        if (exe_ctx.thread)
39524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//        {
39624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//            if (command.GetArgumentCount() == 1)
39724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//            {
39824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                const char *frame_idx_cstr = command.GetArgumentAtIndex(0);
39924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
40024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                const uint32_t num_frames = exe_ctx.thread->GetStackFrameCount();
40124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                const uint32_t frame_idx = Args::StringToUInt32 (frame_idx_cstr, UINT32_MAX, 0);
40224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                if (frame_idx < num_frames)
40324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                {
404c833295baeec641086f536e78050388af36784f8Jim Ingham//                    exe_ctx.thread->SetSelectedFrameByIndex (frame_idx);
405c833295baeec641086f536e78050388af36784f8Jim Ingham//                    exe_ctx.frame = exe_ctx.thread->GetSelectedFrame ().get();
40624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
40724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                    if (exe_ctx.frame)
40824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                    {
40924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                        if (DisplayFrameForExecutionContext (exe_ctx.thread,
41024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                                                             exe_ctx.frame,
411238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton//                                                             m_interpreter,
41224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                                                             result.GetOutputStream(),
41324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                                                             true,
41424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                                                             true,
41524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                                                             3,
41624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                                                             3))
41724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                        {
41824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                            result.SetStatus (eReturnStatusSuccessFinishResult);
41924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                            return result.Succeeded();
42024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                        }
42124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                    }
42224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                }
42324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                if (frame_idx == UINT32_MAX)
42424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                    result.AppendErrorWithFormat ("Invalid frame index: %s.\n", frame_idx_cstr);
42524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                else
42624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                    result.AppendErrorWithFormat ("Frame index (%u) out of range.\n", frame_idx);
42724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//            }
42824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//            else
42924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//            {
43024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                result.AppendError ("invalid arguments");
43124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                result.AppendErrorWithFormat ("Usage: %s\n", m_cmd_syntax.c_str());
43224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//            }
43324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//        }
43424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//        else
43524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//        {
43624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//            result.AppendError ("no current thread");
43724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//        }
43824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//        result.SetStatus (eReturnStatusFailed);
43924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//        return false;
44024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//    }
44124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//};
44224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
44324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
44424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#pragma mark CommandObjectMultiwordTarget
44524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
44624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//-------------------------------------------------------------------------
44724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CommandObjectMultiwordImageSearchPaths
44824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//-------------------------------------------------------------------------
44924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
45024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass CommandObjectMultiwordImageSearchPaths : public CommandObjectMultiword
45124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
45224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
45324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
45463094e0bb161580564954dee512955c1c79d3476Greg Clayton    CommandObjectMultiwordImageSearchPaths (CommandInterpreter &interpreter) :
455238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton        CommandObjectMultiword (interpreter,
456238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton                                "target image-search-paths",
45724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                "A set of commands for operating on debugger target image search paths.",
45824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                "target image-search-paths <subcommand> [<subcommand-options>]")
45924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
460238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton        LoadSubCommand ("add",     CommandObjectSP (new CommandObjectTargetImageSearchPathsAdd (interpreter)));
461238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton        LoadSubCommand ("clear",   CommandObjectSP (new CommandObjectTargetImageSearchPathsClear (interpreter)));
462238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton        LoadSubCommand ("insert",  CommandObjectSP (new CommandObjectTargetImageSearchPathsInsert (interpreter)));
463238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton        LoadSubCommand ("list",    CommandObjectSP (new CommandObjectTargetImageSearchPathsList (interpreter)));
464238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton        LoadSubCommand ("query",   CommandObjectSP (new CommandObjectTargetImageSearchPathsQuery (interpreter)));
46524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
46624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
46724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~CommandObjectMultiwordImageSearchPaths()
46824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
46924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
47024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
47124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
47224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
47324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#pragma mark CommandObjectMultiwordTarget
47424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
47524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//-------------------------------------------------------------------------
47624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// CommandObjectMultiwordTarget
47724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//-------------------------------------------------------------------------
47824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
47963094e0bb161580564954dee512955c1c79d3476Greg ClaytonCommandObjectMultiwordTarget::CommandObjectMultiwordTarget (CommandInterpreter &interpreter) :
480238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton    CommandObjectMultiword (interpreter,
481238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton                            "target",
48224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                            "A set of commands for operating on debugger targets.",
48324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                            "target <subcommand> [<subcommand-options>]")
48424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
485238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton    LoadSubCommand ("image-search-paths", CommandObjectSP (new CommandObjectMultiwordImageSearchPaths (interpreter)));
48624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
48724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
48824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCommandObjectMultiwordTarget::~CommandObjectMultiwordTarget ()
48924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
49024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
49124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
492