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