1cb8977d726be451df9978a74088435667fa37da2Greg Clayton//===-- PlatformRemoteGDBServer.h ----------------------------------------*- C++ -*-===//
2cb8977d726be451df9978a74088435667fa37da2Greg Clayton//
3cb8977d726be451df9978a74088435667fa37da2Greg Clayton//                     The LLVM Compiler Infrastructure
4cb8977d726be451df9978a74088435667fa37da2Greg Clayton//
5cb8977d726be451df9978a74088435667fa37da2Greg Clayton// This file is distributed under the University of Illinois Open Source
6cb8977d726be451df9978a74088435667fa37da2Greg Clayton// License. See LICENSE.TXT for details.
7cb8977d726be451df9978a74088435667fa37da2Greg Clayton//
8cb8977d726be451df9978a74088435667fa37da2Greg Clayton//===----------------------------------------------------------------------===//
9cb8977d726be451df9978a74088435667fa37da2Greg Clayton
10cb8977d726be451df9978a74088435667fa37da2Greg Clayton#ifndef liblldb_PlatformRemoteGDBServer_h_
11cb8977d726be451df9978a74088435667fa37da2Greg Clayton#define liblldb_PlatformRemoteGDBServer_h_
12cb8977d726be451df9978a74088435667fa37da2Greg Clayton
13cb8977d726be451df9978a74088435667fa37da2Greg Clayton// C Includes
14cb8977d726be451df9978a74088435667fa37da2Greg Clayton// C++ Includes
15cb8977d726be451df9978a74088435667fa37da2Greg Clayton#include <string>
16cb8977d726be451df9978a74088435667fa37da2Greg Clayton
17cb8977d726be451df9978a74088435667fa37da2Greg Clayton// Other libraries and framework includes
18cb8977d726be451df9978a74088435667fa37da2Greg Clayton// Project includes
19cb8977d726be451df9978a74088435667fa37da2Greg Clayton#include "lldb/Target/Platform.h"
20cb8977d726be451df9978a74088435667fa37da2Greg Clayton#include "../../Process/gdb-remote/GDBRemoteCommunicationClient.h"
21cb8977d726be451df9978a74088435667fa37da2Greg Clayton
2224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Claytonclass PlatformRemoteGDBServer : public lldb_private::Platform
2324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton{
2424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Claytonpublic:
25cb8977d726be451df9978a74088435667fa37da2Greg Clayton
2624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    static void
2724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    Initialize ();
2824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
2924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    static void
3024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    Terminate ();
3124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
3224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    static lldb_private::Platform*
33b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton    CreateInstance (bool force, const lldb_private::ArchSpec *arch);
3424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
350e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    static lldb_private::ConstString
360e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    GetPluginNameStatic();
3724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
3824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    static const char *
3924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    GetDescriptionStatic();
4024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
4124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
4224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    PlatformRemoteGDBServer ();
4324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
4424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    virtual
4524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    ~PlatformRemoteGDBServer();
4624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
4724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    //------------------------------------------------------------
4824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    // lldb_private::PluginInterface functions
4924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    //------------------------------------------------------------
500e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    virtual lldb_private::ConstString
5124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    GetPluginName()
5224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    {
530e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton        return GetPluginNameStatic();
5424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    }
5524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
5624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    virtual uint32_t
5724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    GetPluginVersion()
5824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    {
5924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton        return 1;
6024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    }
6124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
62cb8977d726be451df9978a74088435667fa37da2Greg Clayton
6324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    //------------------------------------------------------------
6424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    // lldb_private::Platform functions
6524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    //------------------------------------------------------------
6624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    virtual lldb_private::Error
6724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    ResolveExecutable (const lldb_private::FileSpec &exe_file,
6824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton                       const lldb_private::ArchSpec &arch,
699ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton                       lldb::ModuleSP &module_sp,
709ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton                       const lldb_private::FileSpecList *module_search_paths_ptr);
71cb8977d726be451df9978a74088435667fa37da2Greg Clayton
7224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    virtual const char *
7324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    GetDescription ();
74cb8977d726be451df9978a74088435667fa37da2Greg Clayton
7524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    virtual lldb_private::Error
7624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    GetFile (const lldb_private::FileSpec &platform_file,
7724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton             const lldb_private::UUID *uuid_ptr,
7824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton             lldb_private::FileSpec &local_file);
79cb8977d726be451df9978a74088435667fa37da2Greg Clayton
8024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    virtual bool
81b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    GetProcessInfo (lldb::pid_t pid,
82b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                    lldb_private::ProcessInstanceInfo &proc_info);
83cb8977d726be451df9978a74088435667fa37da2Greg Clayton
8424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    virtual uint32_t
85b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    FindProcesses (const lldb_private::ProcessInstanceInfoMatch &match_info,
86b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                   lldb_private::ProcessInstanceInfoList &process_infos);
87b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton
88b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    virtual lldb_private::Error
89b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    LaunchProcess (lldb_private::ProcessLaunchInfo &launch_info);
90b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton
91b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    virtual lldb::ProcessSP
92527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton    Attach (lldb_private::ProcessAttachInfo &attach_info,
93b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton            lldb_private::Debugger &debugger,
94b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton            lldb_private::Target *target,       // Can be NULL, if NULL create a new target, else use existing one
95b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton            lldb_private::Listener &listener,
96b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton            lldb_private::Error &error);
9724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
9824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    virtual bool
9924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    GetSupportedArchitectureAtIndex (uint32_t idx, lldb_private::ArchSpec &arch);
10024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
10124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    virtual size_t
10224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    GetSoftwareBreakpointTrapOpcode (lldb_private::Target &target,
10324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton                                     lldb_private::BreakpointSite *bp_site);
10424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
10524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    virtual bool
10624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    GetRemoteOSVersion ();
10724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
10824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    virtual bool
10924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    GetRemoteOSBuildString (std::string &s);
11024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
11124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    virtual bool
11224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    GetRemoteOSKernelDescription (std::string &s);
11324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
11424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    // Remote Platform subclasses need to override this function
11524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    virtual lldb_private::ArchSpec
11624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    GetRemoteSystemArchitecture ();
11724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
11824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    // Remote subclasses should override this and return a valid instance
11924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    // name if connected.
12024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    virtual const char *
12124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    GetHostname ();
12224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
12324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    virtual const char *
12424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    GetUserName (uint32_t uid);
12524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
12624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    virtual const char *
12724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    GetGroupName (uint32_t gid);
12824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
12924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    virtual bool
13024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    IsConnected () const;
13124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
13224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    virtual lldb_private::Error
13324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    ConnectRemote (lldb_private::Args& args);
13424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
13524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    virtual lldb_private::Error
13624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    DisconnectRemote ();
13724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
13824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Claytonprotected:
13924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    GDBRemoteCommunicationClient m_gdb_client;
14024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    std::string m_platform_description; // After we connect we can get a more complete description of what we are connected to
14124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
14224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Claytonprivate:
14324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    DISALLOW_COPY_AND_ASSIGN (PlatformRemoteGDBServer);
144cb8977d726be451df9978a74088435667fa37da2Greg Clayton
14524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton};
146cb8977d726be451df9978a74088435667fa37da2Greg Clayton
147cb8977d726be451df9978a74088435667fa37da2Greg Clayton#endif  // liblldb_PlatformRemoteGDBServer_h_
148